Merge branch 'joost' into plugins-scale
This commit is contained in:
commit
d739e8f5bd
24466 changed files with 405611 additions and 707715 deletions
17
plugins/core-plugins/CHANGELOG.md
Normal file
17
plugins/core-plugins/CHANGELOG.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Change log for: @freesewing/core-plugins
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
|
||||
This is the **initial release**, and the start of this change log.
|
||||
|
||||
> Prior to version 2, FreeSewing was not a JavaScript project.
|
||||
> As such, that history is out of scope for this change log.
|
||||
|
172
plugins/core-plugins/README.md
Normal file
172
plugins/core-plugins/README.md
Normal file
|
@ -0,0 +1,172 @@
|
|||

|
||||
<p align='center'><a
|
||||
href="https://www.npmjs.com/package/@freesewing/core-plugins"
|
||||
title="@freesewing/core-plugins on NPM"
|
||||
><img src="https://img.shields.io/npm/v/@freesewing/core-plugins.svg"
|
||||
alt="@freesewing/core-plugins on NPM"/>
|
||||
</a><a
|
||||
href="https://opensource.org/licenses/MIT"
|
||||
title="License: MIT"
|
||||
><img src="https://img.shields.io/npm/l/@freesewing/core-plugins.svg?label=License"
|
||||
alt="License: MIT"/>
|
||||
</a><a
|
||||
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
|
||||
title="Code quality on DeepScan"
|
||||
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
|
||||
alt="Code quality on DeepScan"/>
|
||||
</a><a
|
||||
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Acore-plugins"
|
||||
title="Open issues tagged pkg:core-plugins"
|
||||
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:core-plugins.svg?label=Issues"
|
||||
alt="Open issues tagged pkg:core-plugins"/>
|
||||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a><a
|
||||
href="https://chat.freesewing.org"
|
||||
title="Chat with us on Discord"
|
||||
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
|
||||
alt="Chat with us on Discord"/>
|
||||
</a><a
|
||||
href="https://freesewing.org/patrons/join"
|
||||
title="Become a FreeSewing Patron"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
|
||||
alt="Become a FreeSewing Patron"/>
|
||||
</a><a
|
||||
href="https://instagram.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a></p>
|
||||
|
||||
# @freesewing/core-plugins
|
||||
|
||||
An umbrella package of essential plugins that are bundled with FreeSewing's core library
|
||||
|
||||
|
||||
# Plugins
|
||||
|
||||
1) [plugin-cutonfold](https://github.com/freesewing/plugin-cutonfold) : Add cut-on-fold indicators to your patterns
|
||||
2) [plugin-dimension](https://github.com/freesewing/plugin-dimension) : Add dimensions to your (paperless) patterns
|
||||
3) [plugin-grainline](https://github.com/freesewing/plugin-grainline) : Add grainline indicators to your patterns
|
||||
4) [plugin-logo](https://github.com/freesewing/plugin-logo) : Add a scalebox to your patterns
|
||||
5) [plugin-scalebox](https://github.com/freesewing/plugin-scalebox) : Add pretty titles to your pattern parts
|
||||
6) [plugin-title](https://github.com/freesewing/plugin-title) : Add pretty titles to your pattern parts
|
||||
7) [plugin-round](https://github.com/freesewing/plugin-title) : Rounds corners
|
||||
8) [plugin-sprinkle](https://github.com/freesewing/plugin-sprinkle) : Add multiple snippets to your pattern
|
||||
|
||||
Note that these are all **build-time plugins**. In other words, plugins used by developers/pattern designers,
|
||||
rather than run-time plugins that are used when generating patterns.
|
||||
|
||||
Without exception, all freesewing patterns use all these plugins, so it made sense to bundle them.
|
||||
|
||||
## Usage
|
||||
|
||||
To load this plugin, add it to your instantiated pattern.
|
||||
|
||||
On node.js:
|
||||
|
||||
```js
|
||||
import freesewing from '@freesewing/core'
|
||||
import plugins from '@freesewing/plugin-bundle'
|
||||
|
||||
let pattern = new freesewing.Pattern().with(plugins);
|
||||
```
|
||||
|
||||
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/core-plugins
|
||||
|
||||
If you're not entirely sure what to do or how to start, type this command:
|
||||
|
||||
```
|
||||
npm run tips
|
||||
```
|
||||
|
||||
> If you don't want to set up a dev environment, you can run it in your browser:
|
||||
>
|
||||
> [](https://gitpod.io/#https://github.com/freesewing/freesewing)
|
||||
>
|
||||
> We recommend that you fork our repository and then
|
||||
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
|
||||
> to start up a browser-based dev environment of your own.
|
||||
|
||||
## About FreeSewing 💀
|
||||
|
||||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
If you have NodeJS installed, you can try it right now by running:
|
||||
|
||||
```bash
|
||||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details.
|
||||
|
||||
## Where to get help 🤯
|
||||
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
|
@ -24,9 +24,8 @@ const options = {
|
|||
|
||||
// Let esbuild generate different formats
|
||||
let result
|
||||
(async () => {
|
||||
result = await esbuild.build(options)
|
||||
.catch(() => process.exit(1))
|
||||
;(async () => {
|
||||
result = await esbuild.build(options).catch(() => process.exit(1))
|
||||
|
||||
if (process.env.VERBOSE) {
|
||||
const info = await esbuild.analyzeMetafile(result.metafile)
|
||||
|
@ -36,12 +35,11 @@ let result
|
|||
// Also build a version that has all dependencies bundled
|
||||
// This makes it easy to run tests
|
||||
await esbuild
|
||||
.build({
|
||||
...options,
|
||||
outfile: 'tests/dist/index.mjs',
|
||||
format: 'esm',
|
||||
external: [],
|
||||
})
|
||||
.catch(() => process.exit(1))
|
||||
|
||||
.build({
|
||||
...options,
|
||||
outfile: 'tests/dist/index.mjs',
|
||||
format: 'esm',
|
||||
external: [],
|
||||
})
|
||||
.catch(() => process.exit(1))
|
||||
})()
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-bundle'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const name = '@freesewing/core-plugins'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 241 KiB |
75
plugins/core-plugins/package.json
Normal file
75
plugins/core-plugins/package.json
Normal file
|
@ -0,0 +1,75 @@
|
|||
{
|
||||
"name": "@freesewing/core-plugins",
|
||||
"version": "3.0.0",
|
||||
"description": "An umbrella package of essential plugins that are bundled with FreeSewing's core library",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
"repository": "github:freesewing/freesewing",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/freesewing/freesewing/issues"
|
||||
},
|
||||
"funding": {
|
||||
"type": "individual",
|
||||
"url": "https://freesewing.org/patrons/join"
|
||||
},
|
||||
"keywords": [
|
||||
"freesewing",
|
||||
"plugin",
|
||||
"sewing pattern",
|
||||
"sewing",
|
||||
"design",
|
||||
"parametric design",
|
||||
"made to measure",
|
||||
"diy",
|
||||
"fashion"
|
||||
],
|
||||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
"test": "npx mocha tests/*.test.mjs",
|
||||
"vbuild": "VERBOSE=1 node build.mjs",
|
||||
"lab": "cd ../../sites/lab && yarn start",
|
||||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.10",
|
||||
"@freesewing/plugin-annotations": "3.0.0",
|
||||
"@freesewing/plugin-mirror": "3.0.0",
|
||||
"@freesewing/plugin-round": "3.0.0",
|
||||
"@freesewing/plugin-sprinkle": "3.0.0"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
"README.md"
|
||||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
import { annotationsPlugin } from '../../plugin-annotations/src/index.mjs'
|
||||
|
||||
import { measurementsPlugin } from '../../plugin-measurements/src/index.mjs'
|
||||
import { mirrorPlugin } from '../../plugin-mirror/src/index.mjs'
|
||||
import { roundPlugin } from '../../plugin-round/src/index.mjs'
|
||||
import { sprinklePlugin } from '../../plugin-sprinkle/src/index.mjs'
|
||||
import { binpackPlugin } from '../../plugin-bin-pack/src/index.mjs'
|
||||
import { name, version } from '../data.mjs'
|
||||
|
||||
const bundledPlugins = [
|
||||
|
@ -12,6 +12,7 @@ const bundledPlugins = [
|
|||
mirrorPlugin,
|
||||
roundPlugin,
|
||||
sprinklePlugin,
|
||||
binpackPlugin,
|
||||
]
|
||||
|
||||
const hooks = {}
|
||||
|
@ -46,11 +47,10 @@ for (const plugin of bundledPlugins) {
|
|||
export const plugin = {
|
||||
name,
|
||||
version,
|
||||
store,
|
||||
hooks,
|
||||
macros,
|
||||
store,
|
||||
}
|
||||
|
||||
// More specifically named exports
|
||||
export const bundlePlugin = plugin
|
||||
export const pluginBundle = plugin
|
||||
// Specific named export
|
||||
export const corePlugins = plugin
|
|
@ -1,6 +1,14 @@
|
|||
# Change log for: @freesewing/plugin-annotations
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
|
||||
This is the **initial release**, and the start of this change log.
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin that provides pattern annotations
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-annotations
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-annotations'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
21
plugins/plugin-annotations/i18n/de.json
Normal file
21
plugins/plugin-annotations/i18n/de.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"canvas": "canvas",
|
||||
"cut": "Cut",
|
||||
"cutOnFold": "Cut on fold",
|
||||
"cutOnFoldAndGrainline": "Cut on fold / Grainline",
|
||||
"fabric": "main fabric",
|
||||
"facing": "facing",
|
||||
"from": "from",
|
||||
"fusible": "fusible interfacing",
|
||||
"interfacing": "interfacing",
|
||||
"lining": "lining",
|
||||
"mirrored": "mirorred",
|
||||
"noName": "No name",
|
||||
"noVersion": "No version",
|
||||
"onBias": "on the bias",
|
||||
"onFold": "on the fold",
|
||||
"onFoldAndBias": "on the fold, and on bias",
|
||||
"sewTogether": "Sew together",
|
||||
"theBlackOutideOfThisBoxShouldMeasure": "The (black) outside of this box should measure",
|
||||
"theWhiteInsideOfThisBoxShouldMeasure": "The (white) inside of this box should measure"
|
||||
}
|
26
plugins/plugin-annotations/i18n/en.json
Normal file
26
plugins/plugin-annotations/i18n/en.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"canvas": "canvas",
|
||||
"cut": "Cut",
|
||||
"cutOnFold": "Cut on fold",
|
||||
"cutOnFoldAndGrainline": "Cut on fold / Grainline",
|
||||
"fabric": "main fabric",
|
||||
"altFabric1": "alternative fabric",
|
||||
"altFabric2": "alternative fabric #2",
|
||||
"altFabric3": "alternative fabric #3",
|
||||
"altFabric4": "alternative fabric #4",
|
||||
"facing": "facing",
|
||||
"from": "from",
|
||||
"fusible": "fusible interfacing",
|
||||
"interfacing": "interfacing",
|
||||
"lining": "lining",
|
||||
"mirrored": "mirorred",
|
||||
"noName": "No name",
|
||||
"noVersion": "No version",
|
||||
"onBias": "on the bias",
|
||||
"onFold": "on the fold",
|
||||
"onFoldAndBias": "on the fold, and on bias",
|
||||
"sewTogether": "Sew together",
|
||||
"supportFreeSewingBecomeAPatron": "Support FreeSewing, become a patron",
|
||||
"theBlackOutsideOfThisBoxShouldMeasure": "The (black) outside of this box should measure",
|
||||
"theWhiteInsideOfThisBoxShouldMeasure": "The (white) inside of this box should measure"
|
||||
}
|
21
plugins/plugin-annotations/i18n/es.json
Normal file
21
plugins/plugin-annotations/i18n/es.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"canvas": "canvas",
|
||||
"cut": "Cut",
|
||||
"cutOnFold": "Cut on fold",
|
||||
"cutOnFoldAndGrainline": "Cut on fold / Grainline",
|
||||
"fabric": "main fabric",
|
||||
"facing": "facing",
|
||||
"from": "from",
|
||||
"fusible": "fusible interfacing",
|
||||
"interfacing": "interfacing",
|
||||
"lining": "lining",
|
||||
"mirrored": "mirorred",
|
||||
"noName": "No name",
|
||||
"noVersion": "No version",
|
||||
"onBias": "on the bias",
|
||||
"onFold": "on the fold",
|
||||
"onFoldAndBias": "on the fold, and on bias",
|
||||
"sewTogether": "Sew together",
|
||||
"theBlackOutideOfThisBoxShouldMeasure": "The (black) outside of this box should measure",
|
||||
"theWhiteInsideOfThisBoxShouldMeasure": "The (white) inside of this box should measure"
|
||||
}
|
21
plugins/plugin-annotations/i18n/fr.json
Normal file
21
plugins/plugin-annotations/i18n/fr.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"canvas": "canvas",
|
||||
"cut": "Cut",
|
||||
"cutOnFold": "Cut on fold",
|
||||
"cutOnFoldAndGrainline": "Cut on fold / Grainline",
|
||||
"fabric": "main fabric",
|
||||
"facing": "facing",
|
||||
"from": "from",
|
||||
"fusible": "fusible interfacing",
|
||||
"interfacing": "interfacing",
|
||||
"lining": "lining",
|
||||
"mirrored": "mirorred",
|
||||
"noName": "No name",
|
||||
"noVersion": "No version",
|
||||
"onBias": "on the bias",
|
||||
"onFold": "on the fold",
|
||||
"onFoldAndBias": "on the fold, and on bias",
|
||||
"sewTogether": "Sew together",
|
||||
"theBlackOutideOfThisBoxShouldMeasure": "The (black) outside of this box should measure",
|
||||
"theWhiteInsideOfThisBoxShouldMeasure": "The (white) inside of this box should measure"
|
||||
}
|
8
plugins/plugin-annotations/i18n/index.mjs
Normal file
8
plugins/plugin-annotations/i18n/index.mjs
Normal file
|
@ -0,0 +1,8 @@
|
|||
import en from './en.json' assert { type: 'json' }
|
||||
import de from './de.json' assert { type: 'json' }
|
||||
import es from './es.json' assert { type: 'json' }
|
||||
import fr from './fr.json' assert { type: 'json' }
|
||||
import nl from './nl.json' assert { type: 'json' }
|
||||
import uk from './uk.json' assert { type: 'json' }
|
||||
|
||||
export const i18n = { en, de, es, fr, nl, uk }
|
21
plugins/plugin-annotations/i18n/nl.json
Normal file
21
plugins/plugin-annotations/i18n/nl.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"canvas": "canvas",
|
||||
"cut": "Cut",
|
||||
"cutOnFold": "Cut on fold",
|
||||
"cutOnFoldAndGrainline": "Cut on fold / Grainline",
|
||||
"fabric": "main fabric",
|
||||
"facing": "facing",
|
||||
"from": "from",
|
||||
"fusible": "fusible interfacing",
|
||||
"interfacing": "interfacing",
|
||||
"lining": "lining",
|
||||
"mirrored": "mirorred",
|
||||
"noName": "No name",
|
||||
"noVersion": "No version",
|
||||
"onBias": "on the bias",
|
||||
"onFold": "on the fold",
|
||||
"onFoldAndBias": "on the fold, and on bias",
|
||||
"sewTogether": "Sew together",
|
||||
"theBlackOutideOfThisBoxShouldMeasure": "The (black) outside of this box should measure",
|
||||
"theWhiteInsideOfThisBoxShouldMeasure": "The (white) inside of this box should measure"
|
||||
}
|
21
plugins/plugin-annotations/i18n/uk.json
Normal file
21
plugins/plugin-annotations/i18n/uk.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"canvas": "canvas",
|
||||
"cut": "Cut",
|
||||
"cutOnFold": "Cut on fold",
|
||||
"cutOnFoldAndGrainline": "Cut on fold / Grainline",
|
||||
"fabric": "main fabric",
|
||||
"facing": "facing",
|
||||
"from": "from",
|
||||
"fusible": "fusible interfacing",
|
||||
"interfacing": "interfacing",
|
||||
"lining": "lining",
|
||||
"mirrored": "mirorred",
|
||||
"noName": "No name",
|
||||
"noVersion": "No version",
|
||||
"onBias": "on the bias",
|
||||
"onFold": "on the fold",
|
||||
"onFoldAndBias": "on the fold, and on bias",
|
||||
"sewTogether": "Sew together",
|
||||
"theBlackOutideOfThisBoxShouldMeasure": "The (black) outside of this box should measure",
|
||||
"theWhiteInsideOfThisBoxShouldMeasure": "The (white) inside of this box should measure"
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-annotations",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin that provides pattern annotations",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
|
@ -27,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -40,18 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step1": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step1": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -59,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,23 +1,66 @@
|
|||
// Export macros
|
||||
export const bannerMacros = {
|
||||
banner: function (so) {
|
||||
// Mix defaults with settings object
|
||||
so = {
|
||||
text: '',
|
||||
dy: -1,
|
||||
spaces: 12,
|
||||
repeat: 10,
|
||||
className: '',
|
||||
...so,
|
||||
}
|
||||
so.path.attr('data-text-dy', so.dy).attr('data-text-class', `${so.className} center`)
|
||||
const spacer = ' '.repeat(so.spaces)
|
||||
import { getIds } from './utils.mjs'
|
||||
|
||||
for (let i = 0; i < so.repeat; i++) {
|
||||
so.path.attr('data-text', spacer)
|
||||
so.path.attr('data-text', so.text)
|
||||
}
|
||||
|
||||
so.path.attr('data-text', spacer)
|
||||
},
|
||||
/*
|
||||
* Defaults for the bannner macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
classes: 'center',
|
||||
dy: -1,
|
||||
force: false,
|
||||
id: 'banner',
|
||||
repeat: 10,
|
||||
spaces: 12,
|
||||
}
|
||||
|
||||
/*
|
||||
* The rmbanner macro
|
||||
*/
|
||||
const rmbanner = function (id = macroDefaults.id, { paths, store, part }) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', 'banner', 'ids', id, 'paths'], {})
|
||||
))
|
||||
delete paths[pid]
|
||||
}
|
||||
|
||||
const banner = function (config, { part, paths, store, complete }) {
|
||||
/*
|
||||
* Don't add a banne when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = { ...macroDefaults, ...config }
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const ids = getIds(['banner'], mc.id, 'banner')
|
||||
|
||||
/*
|
||||
* Prepare the path to hold the banner text
|
||||
*/
|
||||
paths[ids.banner] = mc.path
|
||||
.clone()
|
||||
.setClass('hidden')
|
||||
.attr('data-text-dy', mc.dy)
|
||||
.attr('data-text-class', mc.classes)
|
||||
|
||||
/*
|
||||
* Construct the text string piece by piece so it gets translated
|
||||
*/
|
||||
const spacer = ' '.repeat(mc.spaces)
|
||||
for (let i = 0; i < mc.repeat; i++) paths[ids.banner].addText(mc.text).addText(spacer)
|
||||
paths[ids.banner].addText(mc.text)
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmbanner
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'banner', 'ids', mc.id, 'paths'], ids)
|
||||
|
||||
return store.getMacroIds(config.id, 'banner')
|
||||
}
|
||||
|
||||
// Export macros
|
||||
export const bannerMacros = { banner, rmbanner }
|
||||
|
|
|
@ -1,37 +1,107 @@
|
|||
// Export macros
|
||||
export const bannerboxMacros = {
|
||||
bannerbox: function (so, { Point, paths, Path, getId, macro }) {
|
||||
// Spread so settings into defaults
|
||||
so = {
|
||||
topLeft: new Point(0, 0),
|
||||
bottomRight: new Point(100, 100),
|
||||
text: '',
|
||||
margin: 15,
|
||||
textClassName: 'text-xs fill-note',
|
||||
boxClassName: 'stroke-xs stroke-note lashed',
|
||||
dy: 4,
|
||||
spaces: 12,
|
||||
repeat: 10,
|
||||
...so,
|
||||
}
|
||||
const offset = Math.sqrt(2 * Math.pow(so.margin, 2))
|
||||
import { getIds } from './utils.mjs'
|
||||
|
||||
const id = getId()
|
||||
paths[id] = new Path()
|
||||
.move(so.topLeft.shift(135, offset))
|
||||
.line(new Point(so.bottomRight.x, so.topLeft.y).shift(45, offset))
|
||||
.line(so.bottomRight.shift(315, offset))
|
||||
.line(new Point(so.topLeft.x, so.bottomRight.y).shift(225, offset))
|
||||
.line(so.topLeft.shift(135, offset))
|
||||
.close()
|
||||
.addClass(so.boxClassName)
|
||||
|
||||
macro('banner', {
|
||||
path: paths[id],
|
||||
text: so.text,
|
||||
className: so.textClassName,
|
||||
repeat: 99,
|
||||
dy: 4,
|
||||
})
|
||||
/*
|
||||
* Defaults for the bannerbox macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
classes: {
|
||||
text: 'text-xs fill-note',
|
||||
box: 'stroke-xs stroke-note lashed',
|
||||
},
|
||||
dy: 4,
|
||||
id: 'bannerbox',
|
||||
margin: 15,
|
||||
repeat: 99,
|
||||
spaces: 12,
|
||||
text: '',
|
||||
}
|
||||
|
||||
/*
|
||||
* Removing all this is easy as all IDs are available in the store
|
||||
* and all we need to remove are paths.
|
||||
*/
|
||||
const rmbannerbox = function (id = macroDefaults.id, { paths, store, part, macro }) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', 'bannerbox', 'ids', id, 'paths'], {})
|
||||
))
|
||||
delete paths[pid]
|
||||
macro('rmbanner', id)
|
||||
}
|
||||
|
||||
/*
|
||||
* The bannerbox macro
|
||||
*/
|
||||
const bannerbox = function (config, { Point, paths, Path, part, macro, log, store, complete }) {
|
||||
/*
|
||||
* Don't add a title when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Make sure mc.topLeft and mc.bottomRight are Point instances
|
||||
*/
|
||||
if (!mc.topLeft || typeof mc.topLeft.attr !== 'function') {
|
||||
log.warn(`Bannerbox macro called without a valid topLeft point. Using (0,0) for topLeft.`)
|
||||
mc.topLeft = new Point(0, 0)
|
||||
}
|
||||
if (!mc.bottomRight || typeof mc.bottomRight.attr !== 'function') {
|
||||
log.warn(
|
||||
`Bannerbox macro called without a valid bottomRight point. Using (6660,666) for bottomRight.`
|
||||
)
|
||||
mc.bottomRight = new Point(666, 666)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const ids = getIds(['box'], mc.id, 'bannerbox')
|
||||
|
||||
/*
|
||||
* Calculate the offset from the bounding box
|
||||
*/
|
||||
const offset = Math.sqrt(2 * Math.pow(mc.margin, 2))
|
||||
|
||||
/*
|
||||
* Bannerbox: box
|
||||
*/
|
||||
paths[ids.box] = new Path()
|
||||
.move(mc.topLeft.shift(135, offset))
|
||||
.line(new Point(mc.bottomRight.x, mc.topLeft.y).shift(45, offset))
|
||||
.line(mc.bottomRight.shift(315, offset))
|
||||
.line(new Point(mc.topLeft.x, mc.bottomRight.y).shift(225, offset))
|
||||
.line(mc.topLeft.shift(135, offset))
|
||||
.close()
|
||||
.addClass(mc.classes.box)
|
||||
|
||||
/*
|
||||
* Call the banner macro on the box
|
||||
*/
|
||||
macro('banner', {
|
||||
id: mc.id,
|
||||
path: paths[ids.box],
|
||||
text: mc.text,
|
||||
className: mc.classes.text,
|
||||
repeat: mc.repeat,
|
||||
spaces: mc.spaces,
|
||||
dy: mc.dy,
|
||||
})
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmtitle
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'bannerbox', 'ids', mc.id, 'paths'], ids)
|
||||
|
||||
return store.getMacroIds(mc.id, 'bannerbox')
|
||||
}
|
||||
|
||||
export const bannerboxMacros = { bannerbox, rmbannerbox }
|
||||
|
|
|
@ -1,3 +1,25 @@
|
|||
import { getIds } from './utils.mjs'
|
||||
|
||||
/*
|
||||
* Defaults for the bartack macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
anchor: false,
|
||||
angle: 0,
|
||||
bartackAlong: false,
|
||||
bartackFractionAlong: false,
|
||||
classes: 'stroke-sm stroke-mark',
|
||||
density: 3,
|
||||
end: 1,
|
||||
from: false,
|
||||
id: 'bartack',
|
||||
length: 15,
|
||||
path: false,
|
||||
start: 0,
|
||||
to: false,
|
||||
width: 3,
|
||||
}
|
||||
|
||||
// Method that draws the actual bartack
|
||||
const drawBartack = (pointList, { Path }) => {
|
||||
let path = new Path().move(pointList.path1[0])
|
||||
|
@ -10,9 +32,9 @@ const drawBartack = (pointList, { Path }) => {
|
|||
}
|
||||
|
||||
// Helper method to generate the points to draw on later
|
||||
const getPoints = (path, so) => {
|
||||
let path1 = path.offset(so.width / 2)
|
||||
let path2 = path.offset(so.width / -2)
|
||||
const getPoints = (path, mc) => {
|
||||
let path1 = path.offset(mc.width / 2)
|
||||
let path2 = path.offset(mc.width / -2)
|
||||
let len = path1.length()
|
||||
let len2 = path2.length()
|
||||
|
||||
|
@ -28,7 +50,7 @@ const getPoints = (path, so) => {
|
|||
path1: [path1.start()],
|
||||
path2: [path2.start()],
|
||||
}
|
||||
let steps = Math.ceil((len / so.width) * so.density)
|
||||
let steps = Math.ceil((len / mc.width) * mc.density)
|
||||
for (let i = 1; i < steps; i++) {
|
||||
points.path1.push(path1.shiftFractionAlong((1 / steps) * i))
|
||||
points.path2.push(path2.shiftFractionAlong((1 / steps) * i))
|
||||
|
@ -37,90 +59,140 @@ const getPoints = (path, so) => {
|
|||
return points
|
||||
}
|
||||
|
||||
const bartackPath = (path, so, props) => (path ? drawBartack(getPoints(path, so), props) : null)
|
||||
const bartackPath = (path, mc, props) => (path ? drawBartack(getPoints(path, mc), props) : null)
|
||||
|
||||
function createBartack(so, props) {
|
||||
const defaults = {
|
||||
width: 3,
|
||||
length: 15,
|
||||
density: 3,
|
||||
angle: 0,
|
||||
prefix: '',
|
||||
suffix: '',
|
||||
anchor: false,
|
||||
path: false,
|
||||
from: false,
|
||||
to: false,
|
||||
start: 0,
|
||||
end: 1,
|
||||
bartackAlong: false,
|
||||
bartackFractionAlong: false,
|
||||
}
|
||||
so = { ...defaults, ...so }
|
||||
/*
|
||||
* This method creates the actual bartack
|
||||
*/
|
||||
function createBartack(config, props) {
|
||||
/*
|
||||
* Don't add a bartack when complete is false, unless force is true
|
||||
*/
|
||||
if (!props.complete && !config.force) return
|
||||
|
||||
const { Path, paths, scale } = props
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = { ...macroDefaults, ...config }
|
||||
|
||||
so.width *= scale
|
||||
/*
|
||||
* Destructure what we need from props
|
||||
*/
|
||||
const { Path, paths } = props
|
||||
|
||||
// Handle negative angle
|
||||
if (so.angle < 0) so.angle = 360 + (so.angle % -360)
|
||||
/*
|
||||
* Handle negative angle
|
||||
*/
|
||||
if (mc.angle < 0) mc.angle = 360 + (mc.angle % -360)
|
||||
|
||||
/*
|
||||
* Construct the guide path
|
||||
*/
|
||||
let guide = false
|
||||
|
||||
if (so.anchor)
|
||||
let name = 'bartack'
|
||||
if (mc.anchor)
|
||||
// Anchor + angle + length
|
||||
guide = new Path().move(so.anchor).line(so.anchor.shift(so.angle, so.length))
|
||||
else if (so.from && so.to)
|
||||
guide = new Path().move(mc.anchor).line(mc.anchor.shift(mc.angle, mc.length))
|
||||
else if (mc.from && mc.to)
|
||||
// From to
|
||||
guide = new Path().move(so.from).line(so.to)
|
||||
else if (so.path) {
|
||||
guide = new Path().move(mc.from).line(mc.to)
|
||||
else if (mc.path) {
|
||||
// Along path
|
||||
let start = false
|
||||
let end = false
|
||||
if (so.bartackAlong) guide = so.path.clone()
|
||||
else if (so.bartackFractionAlong) {
|
||||
if (so.start === so.end) return null
|
||||
if (so.start > so.end) {
|
||||
const newEnd = so.start
|
||||
so.start = so.end
|
||||
so.end = newEnd
|
||||
name = 'bartackalong'
|
||||
if (mc.bartackAlong) guide = mc.path.clone()
|
||||
else if (mc.bartackFractionAlong) {
|
||||
name = 'bartackfractionalong'
|
||||
if (mc.start === mc.end) return null
|
||||
if (mc.start > mc.end) {
|
||||
const newEnd = mc.start
|
||||
mc.start = mc.end
|
||||
mc.end = newEnd
|
||||
}
|
||||
if (so.start > 0) start = so.path.shiftFractionAlong(so.start)
|
||||
if (so.end < 1) end = so.path.shiftFractionAlong(so.end)
|
||||
if (start && end) guide = so.path.split(start).pop().split(end).shift()
|
||||
else if (start) guide = so.path.split(start).pop()
|
||||
else if (end) guide = so.path.split(end).shift()
|
||||
else guide = so.path.clone()
|
||||
if (mc.start > 0) start = mc.path.shiftFractionAlong(mc.start)
|
||||
if (mc.end < 1) end = mc.path.shiftFractionAlong(mc.end)
|
||||
if (start && end) guide = mc.path.split(start).pop().split(end).shift()
|
||||
else if (start) guide = mc.path.split(start).pop()
|
||||
else if (end) guide = mc.path.split(end).shift()
|
||||
else guide = mc.path.clone()
|
||||
}
|
||||
}
|
||||
|
||||
paths[`${so.prefix}bartack${so.suffix}`] = bartackPath(guide, so, props).attr(
|
||||
'class',
|
||||
'stroke-sm stroke-mark'
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const ids = getIds(['stitches'], mc.id, name)
|
||||
paths[ids.stitches] = bartackPath(guide, mc, props).attr('class', mc.classes)
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rm[name]
|
||||
*/
|
||||
props.store.set(['parts', props.part.name, 'macros', name, 'ids', mc.id, 'paths'], ids)
|
||||
|
||||
return props.store.getMacroIds(mc.id, name)
|
||||
}
|
||||
|
||||
/*
|
||||
* The method that will remove all macros
|
||||
*/
|
||||
const removeBartack = function (name = 'bartack', id = macroDefaults.id, { paths, store, part }) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', name, 'ids', id, 'paths'], {})
|
||||
))
|
||||
delete paths[pid]
|
||||
}
|
||||
|
||||
/*
|
||||
* The rmbartackalong and rmbartackfractionalong macros just call rmbartack with the correct name
|
||||
*/
|
||||
const rmbartack = (id, props) => removeBartack('bartack', id, props)
|
||||
const rmbartackAlong = (id, props) => removeBartack('bartackalong', id, props)
|
||||
const rmbartackFractionAlong = (id, props) => removeBartack('bartackfractionalong', id, props)
|
||||
|
||||
/*
|
||||
* The bartack macro
|
||||
*/
|
||||
const bartack = (config, props) => createBartack(config, props)
|
||||
|
||||
/*
|
||||
* The bartackAlong macro
|
||||
*/
|
||||
const bartackAlong = (config, props) =>
|
||||
createBartack(
|
||||
{
|
||||
...config,
|
||||
bartackFractionAlong: false,
|
||||
bartackAlong: true,
|
||||
anchor: false,
|
||||
from: false,
|
||||
to: false,
|
||||
},
|
||||
props
|
||||
)
|
||||
|
||||
return true
|
||||
}
|
||||
/*
|
||||
* The bartackFractionAlong macro
|
||||
*/
|
||||
const bartackFractionAlong = (config, props) =>
|
||||
createBartack(
|
||||
{
|
||||
...config,
|
||||
bartackFractionAlong: true,
|
||||
bartackAlong: false,
|
||||
anchor: false,
|
||||
from: false,
|
||||
to: false,
|
||||
},
|
||||
props
|
||||
)
|
||||
|
||||
// Export macros
|
||||
export const bartackMacros = {
|
||||
bartack: function (so, props) {
|
||||
return createBartack(so, props)
|
||||
},
|
||||
bartackAlong: function (so, props) {
|
||||
so.bartackFractionAlong = false
|
||||
so.bartackAlong = true
|
||||
so.anchor = false
|
||||
so.from = false
|
||||
so.to = false
|
||||
return createBartack(so, props)
|
||||
},
|
||||
bartackFractionAlong: function (so, props) {
|
||||
so.bartackFractionAlong = true
|
||||
so.bartackAlong = false
|
||||
so.anchor = false
|
||||
so.from = false
|
||||
so.to = false
|
||||
return createBartack(so, props)
|
||||
},
|
||||
bartack,
|
||||
bartackAlong,
|
||||
bartackFractionAlong,
|
||||
rmbartack,
|
||||
rmbartackAlong,
|
||||
rmbartackFractionAlong,
|
||||
}
|
||||
|
|
|
@ -8,11 +8,11 @@ transform="scale(${scale})">
|
|||
<circle
|
||||
cx="0" cy="0" r="3.4"
|
||||
class="mark"
|
||||
/>
|
||||
<circle cx="-1" cy="-1" r="0.5" class="no-stroke fill-mark"/>
|
||||
<circle cx="1" cy="-1" r="0.5" class="no-stroke fill-mark" />
|
||||
<circle cx="1" cy="1" r="0.5" class="no-stroke fill-mark" />
|
||||
<circle cx="-1" cy="1" r="0.5" class="no-stroke fill-mark" />
|
||||
></circle>
|
||||
<circle cx="-1" cy="-1" r="0.5" class="no-stroke fill-mark"></circle>
|
||||
<circle cx="1" cy="-1" r="0.5" class="no-stroke fill-mark"></circle>
|
||||
<circle cx="1" cy="1" r="0.5" class="no-stroke fill-mark"></circle>
|
||||
<circle cx="-1" cy="1" r="0.5" class="no-stroke fill-mark"></circle>
|
||||
</g>`,
|
||||
},
|
||||
{
|
||||
|
@ -23,7 +23,7 @@ transform="scale(${scale})">
|
|||
<path
|
||||
class="mark"
|
||||
d="M -1,-5 L 1,-5 L 1,5 L -1,5 z"
|
||||
/>
|
||||
></path>
|
||||
</g>`,
|
||||
},
|
||||
{
|
||||
|
@ -34,7 +34,7 @@ transform="scale(${scale})">
|
|||
<path
|
||||
class="mark"
|
||||
d="M -1,-10 L 1,-10 L 1,0 L -1,0 z"
|
||||
/>
|
||||
></path>
|
||||
</g>`,
|
||||
},
|
||||
{
|
||||
|
@ -45,7 +45,7 @@ transform="scale(${scale})">
|
|||
<path
|
||||
class="mark"
|
||||
d="M -1,0 L 1,0 L 1,10 L -1,10 z"
|
||||
/>
|
||||
></path>
|
||||
</g>`,
|
||||
},
|
||||
{
|
||||
|
@ -53,8 +53,8 @@ transform="scale(${scale})">
|
|||
def: (scale) => `
|
||||
<radialGradient id="snap-stud-grad" cx="50%" cy="50%" r="50%" fx="50%" fy="50%"
|
||||
transform="scale(${scale})">
|
||||
<stop offset="30%" style="stop-color:rgb(235,235,235); stop-opacity:1"/>
|
||||
<stop offset="80%" style="stop-color:rgb(100,100,100);stop-opacity:1" />
|
||||
<stop offset="30%" style="stop-color:rgb(235,235,235); stop-opacity:1"></stop>
|
||||
<stop offset="80%" style="stop-color:rgb(100,100,100);stop-opacity:1"></stop>
|
||||
</radialGradient>`,
|
||||
},
|
||||
{
|
||||
|
@ -64,14 +64,14 @@ transform="scale(${scale})">
|
|||
transform="scale(${scale})">
|
||||
<circle id="snap-stud-circle-edge" cx="0" cy="0" r="3.4"
|
||||
style="stroke:#666;fill:#dddddd;stroke-width:0.3;"
|
||||
/>
|
||||
></circle>
|
||||
<circle id="snap-stud-circle-middle" cx="0" cy="0" r="1.8"
|
||||
style="stroke:none;fill:url(#snap-stud-grad);"
|
||||
/>
|
||||
></circle>
|
||||
<path
|
||||
id="snap-stud-lines" style="fill:none;stroke:#666; stroke-width:0.2;"
|
||||
d="M -2,0 L -3,0 M 2,0 L 3,0 M 0,2 L 0,3 M 0,-2 L 0,-3 M 1.5,1.5 L 2.1,2.1 M -1.5,1.5 L -2.1,2.1 M -1.5,-1.5 L -2.1,-2.1 M 1.5,-1.5 L 2.1,-2.1"
|
||||
/>
|
||||
></path>
|
||||
</g>`,
|
||||
},
|
||||
{
|
||||
|
@ -81,14 +81,22 @@ transform="scale(${scale})">
|
|||
transform="scale(${scale})">
|
||||
<circle id="snap-socket-circle-edge" cx="0" cy="0" r="3.4"
|
||||
style="stroke:#666;fill:#bbbbbb;stroke-width:0.3;"
|
||||
/>
|
||||
></circle>
|
||||
<circle id="snap-socket-circle-middle" cx="0" cy="0" r="2"
|
||||
style="stroke:#666;fill:#dddddd; stroke-width:0.4;"
|
||||
/>
|
||||
></circle>
|
||||
<path
|
||||
style="fill:none;stroke:#666; stroke-width:0.5;"
|
||||
d="M -1.7,-1 L -1.7,1 M 1.7,-1 L 1.7,1" id="snap-socket-lines"
|
||||
/>
|
||||
></path>
|
||||
</g>`,
|
||||
},
|
||||
{
|
||||
name: 'eyelet',
|
||||
def: `
|
||||
<g id="eyelet">
|
||||
<circle id="eyelet-circle" cx="0" cy="0" r="3.4" class="no-full stroke-mark mark" stroke-width="1" fill="none" stroke="currentColor">
|
||||
</circle>
|
||||
</g>`,
|
||||
},
|
||||
]
|
||||
|
|
|
@ -1,53 +1,127 @@
|
|||
// Export macros
|
||||
export const crossboxMacros = {
|
||||
crossbox: function (so, { points, Point, paths, Path, getId }) {
|
||||
const id = getId()
|
||||
const shiftFraction = 0.1
|
||||
points[id + '_boxTopLeft'] = so.from.copy()
|
||||
points[id + '_boxBottomRight'] = so.to.copy()
|
||||
points[id + '_boxTopRight'] = new Point(so.to.x, so.from.y)
|
||||
points[id + '_boxBottomLeft'] = new Point(so.from.x, so.to.y)
|
||||
import { getIds } from './utils.mjs'
|
||||
|
||||
points[id + '_topCrossTL'] = points[id + '_boxTopLeft'].shiftFractionTowards(
|
||||
points[id + '_boxBottomRight'],
|
||||
shiftFraction
|
||||
)
|
||||
points[id + '_topCrossTR'] = points[id + '_boxTopRight'].shiftFractionTowards(
|
||||
points[id + '_boxBottomLeft'],
|
||||
shiftFraction
|
||||
)
|
||||
points[id + '_topCrossBL'] = points[id + '_boxBottomLeft'].shiftFractionTowards(
|
||||
points[id + '_boxTopRight'],
|
||||
shiftFraction
|
||||
)
|
||||
points[id + '_topCrossBR'] = points[id + '_boxBottomRight'].shiftFractionTowards(
|
||||
points[id + '_boxTopLeft'],
|
||||
shiftFraction
|
||||
)
|
||||
|
||||
paths[id + 'crossBox'] = new Path()
|
||||
.move(points[id + '_boxTopLeft'])
|
||||
.line(points[id + '_boxTopRight'])
|
||||
.line(points[id + '_boxBottomRight'])
|
||||
.line(points[id + '_boxBottomLeft'])
|
||||
.line(points[id + '_boxTopLeft'])
|
||||
.close()
|
||||
.attr('class', 'lining dotted stroke-sm')
|
||||
paths[id + '_topCross'] = new Path()
|
||||
.move(points[id + '_topCrossTL'])
|
||||
.line(points[id + '_topCrossBR'])
|
||||
.line(points[id + '_topCrossTR'])
|
||||
.line(points[id + '_topCrossBL'])
|
||||
.line(points[id + '_topCrossTL'])
|
||||
.line(points[id + '_topCrossTR'])
|
||||
.move(points[id + '_topCrossBR'])
|
||||
.line(points[id + '_topCrossBL'])
|
||||
.attr('class', 'lining dotted stroke-sm')
|
||||
if (typeof so.text === 'string') {
|
||||
points[id + 'textAnchor'] = points[id + '_boxTopLeft']
|
||||
.shiftFractionTowards(points[id + '_boxBottomRight'], 0.5)
|
||||
.attr('data-text', so.text)
|
||||
.attr('data-text-class', 'center')
|
||||
}
|
||||
/*
|
||||
* Defaults for the title macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
classes: {
|
||||
box: 'lining dotted stroke-sm',
|
||||
cross: 'lining dotted stroke-sm',
|
||||
text: 'center fill-lining',
|
||||
},
|
||||
id: 'crossbox',
|
||||
offset: 0.1,
|
||||
text: '',
|
||||
}
|
||||
|
||||
/*
|
||||
* The rmcrossbox macro
|
||||
*/
|
||||
const rmcrossbox = function (id = macroDefaults.id, { paths, points, store, part }) {
|
||||
const both = store.get(['parts', part.name, 'macros', 'title', 'ids', id], {
|
||||
paths: {},
|
||||
points: {},
|
||||
})
|
||||
for (const pid of Object.values(both.points)) delete points[pid]
|
||||
for (const pid of Object.values(both.paths)) delete paths[pid]
|
||||
}
|
||||
|
||||
/*
|
||||
* The crossbox macro
|
||||
*/
|
||||
const crossbox = function (config, { points, Point, paths, Path, complete, store, log, part }) {
|
||||
/*
|
||||
* Don't add a title when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Make sure mc.topLeft and mc.bottomRight are Point instances
|
||||
*/
|
||||
if (!mc.topLeft || typeof mc.topLeft.attr !== 'function') {
|
||||
log.warn(`Crossbox macro called without a valid topLeft point. Using (0,0) for topLeft.`)
|
||||
mc.topLeft = new Point(0, 0)
|
||||
}
|
||||
if (!mc.bottomRight || typeof mc.bottomRight.attr !== 'function') {
|
||||
log.warn(
|
||||
`Crossbox macro called without a valid bottomRight point. Using (666,666) for bottomRight.`
|
||||
)
|
||||
mc.bottomRight = new Point(666, 666)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const flatIds = getIds(['box', 'cross', 'text'], mc.id, 'crossbox')
|
||||
const ids = {
|
||||
paths: {
|
||||
box: flatIds.box,
|
||||
cross: flatIds.cross,
|
||||
},
|
||||
points: { text: flatIds.text },
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the cross offset as [offset]% of the shortest side of the box
|
||||
*/
|
||||
const offset =
|
||||
Math.abs(mc.topLeft.dx(mc.bottomRight)) > Math.abs(mc.topLeft.dy(mc.bottomRight))
|
||||
? Math.abs(mc.topLeft.dx(mc.bottomRight)) * mc.offset
|
||||
: Math.abs(mc.topLeft.dy(mc.bottomRight)) * mc.offset
|
||||
|
||||
/*
|
||||
* Draw the box
|
||||
*/
|
||||
paths[ids.paths.box] = new Path()
|
||||
.move(mc.topLeft)
|
||||
.line(new Point(mc.topLeft.x, mc.bottomRight.y))
|
||||
.line(mc.bottomRight)
|
||||
.line(new Point(mc.bottomRight.x, mc.topLeft.y))
|
||||
.line(mc.topLeft)
|
||||
.close()
|
||||
.attr('class', mc.classes.box)
|
||||
|
||||
/*
|
||||
* Draw the cross
|
||||
*/
|
||||
paths[ids.paths.cross] = new Path()
|
||||
.move(mc.topLeft.shift(315, offset))
|
||||
.line(new Point(mc.bottomRight.x, mc.topLeft.y).shift(225, offset))
|
||||
.line(mc.bottomRight.shift(135, offset))
|
||||
.line(new Point(mc.topLeft.x, mc.bottomRight.y).shift(45, offset))
|
||||
.line(mc.topLeft.shift(315, offset))
|
||||
.line(mc.bottomRight.shift(135, offset))
|
||||
.move(new Point(mc.bottomRight.x, mc.topLeft.y).shift(225, offset))
|
||||
.line(new Point(mc.topLeft.x, mc.bottomRight.y).shift(45, offset))
|
||||
.attr('class', mc.classes.box)
|
||||
|
||||
/*
|
||||
* If there is text, add it
|
||||
*/
|
||||
if (mc.text)
|
||||
points[ids.points.text] = mc.topLeft
|
||||
.shiftFractionTowards(mc.bottomRight, 0.5)
|
||||
.addText(mc.text, mc.classes.text)
|
||||
else delete ids.points.text
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmtitle
|
||||
* Just make sure to keep points and paths apart
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'title', 'ids', mc.id], ids)
|
||||
|
||||
return store.getMacroIds(mc.id, 'crossbox')
|
||||
}
|
||||
|
||||
// Export macros
|
||||
export const crossboxMacros = { crossbox, rmcrossbox }
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
export const cutlistStores = [
|
||||
['cutlist.addCut', addCut],
|
||||
['cutlist.setCut', setCut],
|
||||
['cutlist.removeCut', removeCut],
|
||||
['cutlist.setGrain', setGrain],
|
||||
['cutlist.setCutOnFold', setCutOnFold],
|
||||
|
@ -24,40 +25,51 @@ export const cutlistHooks = {
|
|||
* @param {Store} store the Store
|
||||
* @param {Object} so a set of cutting instructions for a material
|
||||
* @param {number} so.cut = 2 the number of pieces to cut from the specified fabric
|
||||
* @param {string} so.material = fabric the name of the material to cut from
|
||||
* @param {string} so.from = fabric the name of the material to cut from
|
||||
* @param {boolean} so.identical = false should even numbers of pieces be cut in the same direction or mirrored
|
||||
* @param {boolean} so.bias = false should the pieces in these cutting instructions be cut on the bias
|
||||
* @param {boolean} so.ignoreOnFold should these cutting instructions ignore any cutOnFold information set by the part
|
||||
* @param {boolean} so.onBias = false should the pieces in these cutting instructions be cut on the bias
|
||||
* @param {boolean} so.onFold = false should these cutting instructions ignore any cutOnFold information set by the part
|
||||
*/
|
||||
function addCut(store, so = {}) {
|
||||
const { cut = 2, material = 'fabric', identical = false, bias = false, ignoreOnFold = false } = so
|
||||
if (Array.isArray(so)) {
|
||||
for (const cut of so) addCut(store, cut)
|
||||
return store
|
||||
}
|
||||
const { cut = 2, from = 'fabric', identical = false, onBias = false, onFold = false } = so
|
||||
|
||||
const partName = store.get('activePart')
|
||||
if (cut === false) {
|
||||
if (material === false) store.unset(['cutlist', partName, 'materials'])
|
||||
else store.unset(['cutlist', partName, 'materials', material])
|
||||
if (from === false) store.unset(['cutlist', partName, 'materials'])
|
||||
else store.unset(['cutlist', partName, 'materials', from])
|
||||
return store
|
||||
}
|
||||
if (!(Number.isInteger(cut) && cut > -1)) {
|
||||
store.log.error(`Tried to set cut to a value that is not a positive integer`)
|
||||
return store
|
||||
}
|
||||
if (typeof material !== 'string') {
|
||||
store.log.warning(`Tried to set material to a value that is not a string`)
|
||||
if (typeof from !== 'string') {
|
||||
store.log.warn(`Tried to set material to a value that is not a string`)
|
||||
return store
|
||||
}
|
||||
const path = ['cutlist', partName, 'materials', material]
|
||||
const path = ['cutlist', partName, 'materials', from]
|
||||
const existing = store.get(path, [])
|
||||
store.set(path, existing.concat({ cut, identical, bias, ignoreOnFold }))
|
||||
store.set(path, existing.concat({ cut, identical, onBias, onFold }))
|
||||
|
||||
return store
|
||||
}
|
||||
|
||||
/** Method to remove the cut info */
|
||||
function removeCut(store, material = false) {
|
||||
return addCut(store, { cut: false, material })
|
||||
function removeCut(store, from = false) {
|
||||
return addCut(store, { cut: false, from })
|
||||
}
|
||||
|
||||
/** Method to add the grain info */
|
||||
/** Method to set (remove + add) the cut info */
|
||||
function setCut(store, so) {
|
||||
removeCut(store)
|
||||
return addCut(store, so)
|
||||
}
|
||||
|
||||
/** Method to add the grain info (called by grainline and cutonfold macros) */
|
||||
function setGrain(store, grain = false) {
|
||||
const partName = store.get('activePart')
|
||||
const path = ['cutlist', partName, 'grain']
|
||||
|
@ -69,7 +81,7 @@ function setGrain(store, grain = false) {
|
|||
return store.set(path, grain)
|
||||
}
|
||||
|
||||
/** Method to add the cutOnFold info */
|
||||
/** Method to add the cutOnFold info (called by cutonfold macro) */
|
||||
function setCutOnFold(store, p1, p2) {
|
||||
const partName = store.get('activePart')
|
||||
const path = ['cutlist', partName, 'cutOnFold']
|
||||
|
|
|
@ -1,3 +1,20 @@
|
|||
import { getIds } from './utils.mjs'
|
||||
|
||||
/*
|
||||
* Defaults for the cutonfold macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
classes: {
|
||||
line: 'note',
|
||||
text: 'center fill-note',
|
||||
},
|
||||
id: 'cutonfold',
|
||||
grainline: false,
|
||||
margin: 0.05,
|
||||
offset: 15,
|
||||
reverse: false,
|
||||
}
|
||||
|
||||
// Export defs
|
||||
export const cutonfoldDefs = [
|
||||
{
|
||||
|
@ -16,50 +33,83 @@ export const cutonfoldDefs = [
|
|||
},
|
||||
]
|
||||
|
||||
// Export macros
|
||||
export const cutonfoldMacros = {
|
||||
cutonfold: function (so, { points, paths, Path, complete, store, scale }) {
|
||||
if (so === false) {
|
||||
delete points.cutonfoldFrom
|
||||
delete points.cutonfoldTo
|
||||
delete points.cutonfoldVia1
|
||||
delete points.cutonfoldVia2
|
||||
delete paths.cutonfoldCutonfold
|
||||
|
||||
store.cutlist.setCutOnFold(false) // Restore default
|
||||
return true
|
||||
}
|
||||
so = {
|
||||
offset: 15,
|
||||
margin: 5,
|
||||
prefix: 'cutonfold',
|
||||
...so,
|
||||
}
|
||||
|
||||
// store in cutlist
|
||||
store.cutlist.setCutOnFold(so.from, so.to)
|
||||
if (so.grainline) store.cutlist.setGrain(so.from.angle(so.to))
|
||||
|
||||
if (complete) {
|
||||
points[so.prefix + 'From'] = so.from.shiftFractionTowards(so.to, so.margin / 100)
|
||||
points[so.prefix + 'To'] = so.to.shiftFractionTowards(so.from, so.margin / 100)
|
||||
points[so.prefix + 'Via1'] = points[so.prefix + 'From']
|
||||
.shiftTowards(so.from, so.offset * scale)
|
||||
.rotate(-90, points[so.prefix + 'From'])
|
||||
points[so.prefix + 'Via2'] = points[so.prefix + 'To']
|
||||
.shiftTowards(so.to, so.offset * scale)
|
||||
.rotate(90, points[so.prefix + 'To'])
|
||||
const text = so.grainline ? 'cutOnFoldAndGrainline' : 'cutOnFold'
|
||||
paths[so.prefix + 'Cutonfold'] = new Path()
|
||||
.move(points[so.prefix + 'From'])
|
||||
.line(points[so.prefix + 'Via1'])
|
||||
.line(points[so.prefix + 'Via2'])
|
||||
.line(points[so.prefix + 'To'])
|
||||
.attr('class', 'note')
|
||||
.attr('marker-start', 'url(#cutonfoldFrom)')
|
||||
.attr('marker-end', 'url(#cutonfoldTo)')
|
||||
.attr('data-text', text)
|
||||
.attr('data-text-class', 'center fill-note')
|
||||
}
|
||||
},
|
||||
/*
|
||||
* The rmcutonfold macro
|
||||
*/
|
||||
const rmcutonfold = function (id = macroDefaults.id, { paths, store, part }) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', 'cutonfold', 'ids', id, 'paths'], {})
|
||||
))
|
||||
delete paths[pid]
|
||||
}
|
||||
|
||||
/*
|
||||
* The cutonfold macro
|
||||
*/
|
||||
const cutonfold = function (config, { paths, Path, complete, store, scale, log, Point, part }) {
|
||||
/*
|
||||
* Don't add a cutonfold indicator when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
text: config.grainline
|
||||
? 'plugin-annotations:cutOnFoldAndGrainline'
|
||||
: 'plugin-annotations:cutOnFold',
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Make sure mc.from and mc.to are Point instances
|
||||
*/
|
||||
if (!mc.from || typeof mc.from.attr !== 'function') {
|
||||
log.warn(`Cutonfold macro called without a valid from point. Using (0,0) for from.`)
|
||||
mc.from = new Point(0, 0)
|
||||
}
|
||||
if (!mc.to || typeof mc.to.attr !== 'function') {
|
||||
log.warn(`Cutonfold macro called without a valid to point. Using (6660,666) for to.`)
|
||||
mc.to = new Point(666, 666)
|
||||
}
|
||||
|
||||
/*
|
||||
* Store cutonfold and optional grainline angle for use in cutlist
|
||||
*/
|
||||
store.cutlist.setCutOnFold(mc.from, mc.to)
|
||||
if (mc.grainline) store.cutlist.setGrain(mc.from.angle(mc.to))
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const ids = getIds(['line'], mc.id, 'cutonfold')
|
||||
|
||||
/*
|
||||
* Draw the path
|
||||
*/
|
||||
const from = mc.from.shiftFractionTowards(mc.to, mc.margin)
|
||||
const to = mc.to.shiftFractionTowards(mc.from, mc.margin)
|
||||
const via1 = from.shiftTowards(mc.from, mc.offset * scale).rotate(-90, from)
|
||||
const via2 = to.shiftTowards(mc.to, mc.offset * scale).rotate(90, to)
|
||||
paths[ids.line] = new Path().move(from).line(via1).line(via2).line(to)
|
||||
if (mc.reverse) paths[ids.line] = paths[ids.line].reverse()
|
||||
paths[ids.line] = paths[ids.line]
|
||||
.attr('class', mc.classes.line)
|
||||
.attr('marker-start', 'url(#cutonfoldFrom)')
|
||||
.attr('marker-end', 'url(#cutonfoldTo)')
|
||||
.addText(mc.text, mc.classes.text)
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmcutonfold
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'cutonfold', 'ids', mc.id, 'paths'], ids)
|
||||
|
||||
return store.getMacroIds(mc.id, 'cutonfold')
|
||||
}
|
||||
|
||||
// Export macros
|
||||
export const cutonfoldMacros = { cutonfold, rmcutonfold }
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import { getIds } from './utils.mjs'
|
||||
|
||||
// Export defs
|
||||
export const dimensionsDefs = [
|
||||
{
|
||||
|
@ -16,8 +18,73 @@ export const dimensionsDefs = [
|
|||
},
|
||||
]
|
||||
|
||||
const prefix = '__paperless'
|
||||
/*
|
||||
* Defaults for these macros
|
||||
*/
|
||||
const macroDefaults = {
|
||||
text: false,
|
||||
noStartMarker: false,
|
||||
noEndMarker: false,
|
||||
classes: {
|
||||
line: 'mark',
|
||||
leaders: 'mark dotted',
|
||||
text: 'fill-mark center',
|
||||
},
|
||||
}
|
||||
|
||||
/*
|
||||
* Higher-level methods to draw leaders for various types
|
||||
*/
|
||||
const leaders = {
|
||||
hd: function hleader(so, type, props, id) {
|
||||
let point
|
||||
if (typeof so.y === 'undefined' || so[type].y === so.y) point = so[type]
|
||||
else {
|
||||
point = new props.Point(so[type].x, so.y)
|
||||
drawLeader(props, so[type], point, id)
|
||||
}
|
||||
|
||||
return point
|
||||
},
|
||||
vd: function vleader(so, type, props, id) {
|
||||
let point
|
||||
if (typeof so.x === 'undefined' || so[type].x === so.x) point = so[type]
|
||||
else {
|
||||
point = new props.Point(so.x, so[type].y)
|
||||
drawLeader(props, so[type], point, id)
|
||||
}
|
||||
|
||||
return point
|
||||
},
|
||||
ld: function lleader(so, type, props, id) {
|
||||
let point, rot, other
|
||||
if (type === 'from') {
|
||||
rot = 1
|
||||
other = 'to'
|
||||
} else {
|
||||
rot = -1
|
||||
other = 'from'
|
||||
}
|
||||
if (typeof so.d === 'undefined') point = so[type]
|
||||
else {
|
||||
point = so[type].shiftTowards(so[other], so.d).rotate(90 * rot, so[type])
|
||||
drawLeader(props, so[type], point, id)
|
||||
}
|
||||
|
||||
return point
|
||||
},
|
||||
}
|
||||
|
||||
/*
|
||||
* Low-level method to draw a leader
|
||||
*/
|
||||
function drawLeader({ paths, Path }, from, to, id) {
|
||||
paths[id] = new Path().move(from).line(to).attr('class', 'mark dotted')
|
||||
}
|
||||
|
||||
/*
|
||||
* Low-level method to draw a dimension
|
||||
*/
|
||||
function drawDimension(from, to, so, { Path, units }) {
|
||||
const dimension = new Path()
|
||||
.move(from)
|
||||
|
@ -25,136 +92,113 @@ function drawDimension(from, to, so, { Path, units }) {
|
|||
.attr('class', 'mark')
|
||||
.attr('data-text', so.text || units(from.dist(to)))
|
||||
.attr('data-text-class', 'fill-mark center')
|
||||
.attr('data-macro-id', so.id)
|
||||
if (!so.noStartMarker) dimension.attributes.set('marker-start', 'url(#dimensionFrom)')
|
||||
if (!so.noEndMarker) dimension.attributes.set('marker-end', 'url(#dimensionTo)')
|
||||
|
||||
return dimension
|
||||
}
|
||||
|
||||
function drawLeader({ paths, Path }, from, to, id) {
|
||||
paths[id] = new Path().move(from).line(to).attr('class', 'mark dotted')
|
||||
}
|
||||
/*
|
||||
* This method handles all dimension macros
|
||||
*/
|
||||
const addDimension = (config, props, type) => {
|
||||
/*
|
||||
* Don't add a dimention when paperless is false, unless force is true
|
||||
*/
|
||||
if (!props.paperless && !config.force) return
|
||||
|
||||
function hleader(so, type, props, id) {
|
||||
const { Point } = props
|
||||
let point
|
||||
if (typeof so.y === 'undefined' || so[type].y === so.y) {
|
||||
point = so[type]
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults[type],
|
||||
id: type,
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const ids = getIds(['line', 'from', 'to'], mc.id, type)
|
||||
|
||||
/*
|
||||
* Draw the dimension
|
||||
*/
|
||||
if (type === 'pd') {
|
||||
if (typeof mc.d === 'undefined') mc.d = 10 * props.scale
|
||||
props.paths[ids.line] = mc.path
|
||||
.offset(mc.d)
|
||||
.attr('class', mc.classes.line)
|
||||
.addText(mc.text || props.units(mc.path.length()), mc.classes.text)
|
||||
if (!mc.noStartMarker)
|
||||
props.paths[ids.line].attributes.set('marker-start', 'url(#dimensionFrom)')
|
||||
if (!mc.noEndMarker) props.paths[ids.line].attributes.set('marker-end', 'url(#dimensionTo)')
|
||||
drawLeader(props, mc.path.start(), props.paths[ids.line].start(), ids.from)
|
||||
drawLeader(props, mc.path.end(), props.paths[ids.line].end(), ids.to)
|
||||
} else {
|
||||
point = new Point(so[type].x, so.y)
|
||||
drawLeader(props, so[type], point, id)
|
||||
props.paths[ids.line] = drawDimension(
|
||||
leaders[type](mc, 'from', props, ids.from),
|
||||
leaders[type](mc, 'to', props, ids.to),
|
||||
mc,
|
||||
props
|
||||
)
|
||||
}
|
||||
|
||||
return point
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rm variants
|
||||
*/
|
||||
props.store.set(['parts', props.part.name, 'macros', type, 'ids', mc.id, 'paths'], ids)
|
||||
|
||||
return props.store.getMacroIds(mc.id, type)
|
||||
}
|
||||
|
||||
function vleader(so, type, props, id) {
|
||||
const { Point } = props
|
||||
let point
|
||||
if (typeof so.x === 'undefined' || so[type].x === so.x) {
|
||||
point = so[type]
|
||||
} else {
|
||||
point = new Point(so.x, so[type].y)
|
||||
drawLeader(props, so[type], point, id)
|
||||
}
|
||||
|
||||
return point
|
||||
/*
|
||||
* This method handles the 'remove' part for all macros
|
||||
*/
|
||||
const removeDimension = function (id = macroDefaults.id, { paths, store, part }, type) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', type, 'ids', id, 'paths'], {})
|
||||
))
|
||||
delete paths[pid]
|
||||
}
|
||||
|
||||
function lleader(so, type, props, id) {
|
||||
let point, rot, other
|
||||
if (type === 'from') {
|
||||
rot = 1
|
||||
other = 'to'
|
||||
} else {
|
||||
rot = -1
|
||||
other = 'from'
|
||||
/*
|
||||
* This method removes all dimensions of a given type
|
||||
*/
|
||||
const removeDimensionType = function ({ paths, store, part }, type) {
|
||||
for (const ids of Object.values(store.get(['parts', part.name, 'macros', type, 'ids'], {}))) {
|
||||
for (const pid of Object.values(ids.paths)) delete paths[pid]
|
||||
}
|
||||
if (typeof so.d === 'undefined') {
|
||||
point = so[type]
|
||||
} else {
|
||||
point = so[type].shiftTowards(so[other], so.d).rotate(90 * rot, so[type])
|
||||
drawLeader(props, so[type], point, id)
|
||||
}
|
||||
|
||||
return point
|
||||
}
|
||||
|
||||
// Export macros
|
||||
/*
|
||||
* This method removes all dimensions
|
||||
*/
|
||||
const removeAllDimensions = function ({ macro }) {
|
||||
macro('rmahd')
|
||||
macro('rmald')
|
||||
macro('rmavd')
|
||||
macro('rmapd')
|
||||
}
|
||||
|
||||
/*
|
||||
* Export macros
|
||||
*/
|
||||
export const dimensionsMacros = {
|
||||
// horizontal
|
||||
hd: function (so, props) {
|
||||
const { getId, paths } = props
|
||||
const id = so.id || getId(prefix)
|
||||
paths[id] = drawDimension(
|
||||
hleader(so, 'from', props, id + '_ls'),
|
||||
hleader(so, 'to', props, id + '_le'),
|
||||
so,
|
||||
props
|
||||
)
|
||||
},
|
||||
// vertical
|
||||
vd: function (so, props) {
|
||||
const { getId, paths } = props
|
||||
const id = so.id || getId(prefix)
|
||||
paths[id] = drawDimension(
|
||||
vleader(so, 'from', props, id + '_ls'),
|
||||
vleader(so, 'to', props, id + '_le'),
|
||||
so,
|
||||
props
|
||||
)
|
||||
},
|
||||
// linear
|
||||
ld: function (so, props) {
|
||||
const { getId, paths } = props
|
||||
const id = so.id || getId(prefix)
|
||||
paths[id] = drawDimension(
|
||||
lleader(so, 'from', props, id + '_ls'),
|
||||
lleader(so, 'to', props, id + '_le'),
|
||||
so,
|
||||
props
|
||||
)
|
||||
},
|
||||
// path
|
||||
pd: function (so, props) {
|
||||
const { getId, paths, scale, units } = props
|
||||
const id = so.id || getId(prefix)
|
||||
if (typeof so.d === 'undefined') so.d = 10 * scale
|
||||
const dimension = so.path
|
||||
.offset(so.d)
|
||||
.attr('class', 'mark')
|
||||
.attr('data-text', so.text || units(so.path.length()))
|
||||
.attr('data-text-class', 'fill-mark center')
|
||||
if (!so.noStartMarker) dimension.attributes.set('marker-start', 'url(#dimensionFrom)')
|
||||
if (!so.noEndMarker) dimension.attributes.set('marker-end', 'url(#dimensionTo)')
|
||||
paths[id] = dimension
|
||||
drawLeader(props, so.path.start(), dimension.start(), id + '_ls')
|
||||
drawLeader(props, so.path.end(), dimension.end(), id + '_le')
|
||||
},
|
||||
// Remove dimension
|
||||
rmd: function (so, props) {
|
||||
const { paths } = props
|
||||
if (paths[so.id]) delete this.paths[so.id]
|
||||
if (paths[`${so.id}_ls`]) delete paths[`${so.id}_ls`]
|
||||
if (paths[`${so.id}_le`]) delete paths[`${so.id}_le`]
|
||||
if (Array.isArray(so.ids)) {
|
||||
for (const id of so.ids) {
|
||||
if (paths[id]) delete paths[id]
|
||||
if (paths[`${id}_ls`]) delete paths[`${id}_ls`]
|
||||
if (paths[`${id}_le`]) delete paths[`${id}_le`]
|
||||
}
|
||||
}
|
||||
},
|
||||
// Remove all dimensions (with standard prefix)
|
||||
rmad: function (params, props) {
|
||||
const toRemove = {
|
||||
points: props.point,
|
||||
paths: props.paths,
|
||||
}
|
||||
for (let type in toRemove) {
|
||||
for (let id in props[type]) {
|
||||
if (id.slice(0, prefix.length) === prefix) delete props[type][id]
|
||||
}
|
||||
}
|
||||
},
|
||||
hd: (config, props) => addDimension(config, props, 'hd'),
|
||||
ld: (config, props) => addDimension(config, props, 'ld'),
|
||||
vd: (config, props) => addDimension(config, props, 'vd'),
|
||||
pd: (config, props) => addDimension(config, props, 'pd'),
|
||||
rmhd: (id, props) => removeDimension(id, props, 'hd'),
|
||||
rmld: (id, props) => removeDimension(id, props, 'ld'),
|
||||
rmvd: (id, props) => removeDimension(id, props, 'vd'),
|
||||
rmpd: (id, props) => removeDimension(id, props, 'pd'),
|
||||
rmahd: (config, props) => removeDimensionType(props, 'hd'),
|
||||
rmald: (config, props) => removeDimensionType(props, 'ld'),
|
||||
rmavd: (config, props) => removeDimensionType(props, 'vd'),
|
||||
rmapd: (config, props) => removeDimensionType(props, 'pd'),
|
||||
rmad: (config, props) => removeAllDimensions(props),
|
||||
}
|
||||
|
|
94
plugins/plugin-annotations/src/flag.mjs
Normal file
94
plugins/plugin-annotations/src/flag.mjs
Normal file
|
@ -0,0 +1,94 @@
|
|||
const storeRoot = ['plugins', 'plugin-annotations', 'flags']
|
||||
|
||||
// This is also the order in which they will be displayed
|
||||
export const flagTypes = ['error', 'warn', 'note', 'info', 'tip', 'fixme']
|
||||
|
||||
export const flagStores = [
|
||||
['flag.info', (store, data) => flag('info', store, data)],
|
||||
['flag.tip', (store, data) => flag('tip', store, data)],
|
||||
['flag.note', (store, data) => flag('note', store, data)],
|
||||
['flag.warn', (store, data) => flag('warn', store, data)],
|
||||
['flag.fixme', (store, data) => flag('fixme', store, data)],
|
||||
['flag.error', (store, data) => flag('error', store, data)],
|
||||
['flag.preset', (store, preset) => flag('preset', store, preset)],
|
||||
['unflag.info', (store, id) => unflag('info', store, id)],
|
||||
['unflag.tip', (store, id) => unflag('tip', store, id)],
|
||||
['unflag.note', (store, id) => unflag('note', store, id)],
|
||||
['unflag.warn', (store, id) => unflag('warn', store, id)],
|
||||
['unflag.fixme', (store, id) => unflag('fixme', store, id)],
|
||||
['unflag.error', (store, id) => unflag('error', store, id)],
|
||||
['unflag.preset', (store, preset) => unflag('preset', store, preset)],
|
||||
]
|
||||
|
||||
/*
|
||||
* Method that adds a flag to the store
|
||||
*
|
||||
* @param {type} string - The type of flag
|
||||
* @param {store} object - The pattern store
|
||||
* @param {data} object - The flag data
|
||||
*/
|
||||
function flag(type, store, data) {
|
||||
// Load presets
|
||||
if (type === 'preset' && presets[data]) {
|
||||
data = presets[data]
|
||||
type = data.type
|
||||
}
|
||||
if (data.msg) {
|
||||
data.title = data.msg + '.t'
|
||||
data.desc = data.msg + '.d'
|
||||
delete data.msg
|
||||
}
|
||||
|
||||
if (!data.id && !data.title) {
|
||||
store.log.warn(`store.flag.${type} called without an id or title property`)
|
||||
console.log(data)
|
||||
return
|
||||
}
|
||||
|
||||
store.set([...storeRoot, type, data.id ? data.id : data.title], data)
|
||||
}
|
||||
|
||||
/*
|
||||
* Method that removes a flag from the store
|
||||
*
|
||||
* @param {type} string - The type of flag
|
||||
* @param {store} object - The pattern store
|
||||
* @param {id} string - The flag id to remove
|
||||
*/
|
||||
function unflag(type, store, id) {
|
||||
if (type === 'preset' && presets[id]) {
|
||||
type = presets[id].type
|
||||
id = presets[id].id || presets[id].title
|
||||
}
|
||||
store.unset([...storeRoot, type, id])
|
||||
}
|
||||
|
||||
/*
|
||||
* Available flag presets
|
||||
*/
|
||||
const presets = {
|
||||
expandIsOff: {
|
||||
type: 'tip',
|
||||
title: 'flag:expandIsOff.t',
|
||||
desc: 'flag:expandIsOff.d',
|
||||
suggest: {
|
||||
text: 'flag:enable',
|
||||
icon: 'expand',
|
||||
update: {
|
||||
settings: ['expand', 1],
|
||||
},
|
||||
},
|
||||
},
|
||||
expandIsOn: {
|
||||
type: 'tip',
|
||||
title: 'flag:expandIsOn.t',
|
||||
desc: 'flag:expandIsOn.d',
|
||||
suggest: {
|
||||
text: 'flag:disable',
|
||||
icon: 'expand',
|
||||
update: {
|
||||
settings: ['expand', null],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
|
@ -1,3 +1,18 @@
|
|||
import { getIds } from './utils.mjs'
|
||||
|
||||
/*
|
||||
* Defaults for the grainline macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
classes: {
|
||||
line: 'note',
|
||||
text: 'center fill-note',
|
||||
},
|
||||
id: 'grainline',
|
||||
margin: 0.05,
|
||||
text: 'plugin-annotations:grainline',
|
||||
}
|
||||
|
||||
// Export defs
|
||||
export const grainlineDefs = [
|
||||
{
|
||||
|
@ -16,37 +31,77 @@ export const grainlineDefs = [
|
|||
},
|
||||
]
|
||||
|
||||
const dflts = { text: 'grainline' }
|
||||
/*
|
||||
* The rmgrainline macro
|
||||
*/
|
||||
const rmgrainline = function (id = macroDefaults.id, { paths, store, part }) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', 'grainline', 'ids', id, 'paths'], {})
|
||||
))
|
||||
delete paths[pid]
|
||||
}
|
||||
|
||||
/*
|
||||
* The grainline macro
|
||||
*/
|
||||
const grainline = function (config = {}, { paths, Path, Point, complete, store, log, part }) {
|
||||
/*
|
||||
* Don't add a cutonfold indicator when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Make sure mc.from and mc.to are Point instances
|
||||
*/
|
||||
if (!mc.from || typeof mc.from.attr !== 'function') {
|
||||
log.warn(`Grainline macro called without a valid from point. Using (0,0) for from.`)
|
||||
mc.from = new Point(0, 0)
|
||||
}
|
||||
if (!mc.to || typeof mc.to.attr !== 'function') {
|
||||
log.warn(`Grainline macro called without a valid to point. Using (666,666) for to.`)
|
||||
mc.to = new Point(666, 666)
|
||||
}
|
||||
|
||||
/*
|
||||
* Store angle for use in cutlist
|
||||
*/
|
||||
store.cutlist.setGrain(mc.from.angle(mc.to))
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const ids = getIds(['line'], mc.id, 'grainline')
|
||||
|
||||
/*
|
||||
* Draw the path
|
||||
*/
|
||||
const from = mc.from.shiftFractionTowards(mc.to, 0.05)
|
||||
const to = mc.to.shiftFractionTowards(mc.from, 0.05)
|
||||
paths[ids.line] = new Path()
|
||||
.move(from)
|
||||
.line(to)
|
||||
.attr('class', mc.classes.line)
|
||||
.attr('marker-start', 'url(#grainlineFrom)')
|
||||
.attr('marker-end', 'url(#grainlineTo)')
|
||||
.addText(mc.text, mc.classes.text)
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmgrainline
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'grainline', 'ids', mc.id, 'paths'], ids)
|
||||
|
||||
return store.getMacroIds(mc.id, 'grainline')
|
||||
}
|
||||
|
||||
// Export macros
|
||||
export const grainlineMacros = {
|
||||
grainline: function (so = {}, { points, paths, Path, complete, store }) {
|
||||
if (so === false) {
|
||||
delete points.grainlineFrom
|
||||
delete points.grainlineTo
|
||||
delete paths.grainline
|
||||
if (store.cutlist?.setGrain) store.cutlist.setGrain(90) // Restoring default
|
||||
return true
|
||||
}
|
||||
so = {
|
||||
...dflts,
|
||||
...so,
|
||||
}
|
||||
|
||||
// store in cutlist
|
||||
store.cutlist.setGrain(so.from.angle(so.to))
|
||||
|
||||
if (complete) {
|
||||
points.grainlineFrom = so.from.shiftFractionTowards(so.to, 0.05)
|
||||
points.grainlineTo = so.to.shiftFractionTowards(so.from, 0.05)
|
||||
paths.grainline = new Path()
|
||||
.move(points.grainlineFrom)
|
||||
.line(points.grainlineTo)
|
||||
.attr('class', 'note')
|
||||
.attr('marker-start', 'url(#grainlineFrom)')
|
||||
.attr('marker-end', 'url(#grainlineTo)')
|
||||
.attr('data-text', so.text)
|
||||
.attr('data-text-class', 'center fill-note')
|
||||
}
|
||||
},
|
||||
}
|
||||
export const grainlineMacros = { grainline, rmgrainline }
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
import { name, version } from '../data.mjs'
|
||||
// i18n
|
||||
import { i18n as i18nAnnotations } from '../i18n/index.mjs'
|
||||
// Defs only
|
||||
import { buttonsDefs } from './buttons.mjs'
|
||||
import { logoDefs } from './logo.mjs'
|
||||
|
@ -17,6 +19,9 @@ import { dimensionsMacros, dimensionsDefs } from './dimensions.mjs'
|
|||
import { grainlineMacros, grainlineDefs } from './grainline.mjs'
|
||||
import { pleatMacros, pleatDefs } from './pleat.mjs'
|
||||
import { sewtogetherMacros, sewtogetherDefs } from './sewtogether.mjs'
|
||||
// Only stores
|
||||
import { flagStores } from './flag.mjs'
|
||||
import { utilsStores } from './utils.mjs'
|
||||
|
||||
export const plugin = {
|
||||
name,
|
||||
|
@ -57,8 +62,9 @@ export const plugin = {
|
|||
...sewtogetherMacros,
|
||||
...titleMacros,
|
||||
},
|
||||
store: [...cutlistStores],
|
||||
store: [...cutlistStores, ...flagStores, ...utilsStores],
|
||||
}
|
||||
|
||||
export const annotationsPlugin = plugin
|
||||
export const pluginAnnotations = plugin
|
||||
export const i18n = i18nAnnotations
|
||||
|
|
|
@ -4,16 +4,16 @@ export const notchesDefs = [
|
|||
name: 'notch',
|
||||
def: (scale) => `
|
||||
<g id="notch" transform="scale(${scale})">
|
||||
<circle cy="0" cx="0" r="1.4" class="fill-note" />
|
||||
<circle cy="0" cx="0" r="2.8" class="note" />
|
||||
<circle cy="0" cx="0" r="1.4" class="fill-note"></circle>
|
||||
<circle cy="0" cx="0" r="2.8" class="note"></circle>
|
||||
</g>`,
|
||||
},
|
||||
{
|
||||
name: 'bnotch',
|
||||
def: (scale) => `
|
||||
<g id="bnotch" transform="scale(${scale})">
|
||||
<path d="M -1.1 -1.1 L 1.1 1.1 M 1.1 -1.1 L -1.1 1.1" class="note" />
|
||||
<circle cy="0" cx="0" r="2.8" class="note" />
|
||||
<path d="M -1.1 -1.1 L 1.1 1.1 M 1.1 -1.1 L -1.1 1.1" class="note"></path>
|
||||
<circle cy="0" cx="0" r="2.8" class="note"></circle>
|
||||
</g>`,
|
||||
},
|
||||
]
|
||||
|
|
|
@ -1,68 +1,118 @@
|
|||
import { getIds } from './utils.mjs'
|
||||
|
||||
/*
|
||||
* Defaults for the pleat macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
classes: {
|
||||
arrow: 'note',
|
||||
from: 'note',
|
||||
to: 'note dashed',
|
||||
},
|
||||
id: 'pleat',
|
||||
margin: 35,
|
||||
reverse: false,
|
||||
}
|
||||
|
||||
// Export defs
|
||||
export const pleatDefs = [
|
||||
{
|
||||
name: 'pleatTo',
|
||||
name: 'pleat',
|
||||
def: (scale) => `
|
||||
<marker orient="auto" refY="0" refX="0" id="pleatTo" style="overflow:visible;" markerWidth="12" markerHeight="8">
|
||||
<path class="note fill-note" d="M 0,0 L -12,-4 C -10,-2 -12,2 -12,4 z" transform="scale(${scale})"/>
|
||||
<marker id="pleatTo" markerWidth="10" markerHeight="6" orient="auto" refY="3" refX="10">
|
||||
<path d="M 10,3 L 0,0 C 2,2 2,4 0,6 z" class="fill-note note" transform="scale(${scale})" />
|
||||
</marker>
|
||||
`,
|
||||
},
|
||||
]
|
||||
|
||||
// Export macros
|
||||
export const pleatMacros = {
|
||||
pleat: function (so, { points, paths, Path, complete, scale }) {
|
||||
if (so === false) {
|
||||
delete points.pleatFrom
|
||||
delete points.pleatFromIn
|
||||
delete points.pleatTo
|
||||
delete points.pleatToIn
|
||||
delete paths.pleatTo
|
||||
delete paths.pleatFrom
|
||||
delete paths.pleatArrow
|
||||
return true
|
||||
}
|
||||
so = {
|
||||
margin: 35,
|
||||
prefix: 'pleat',
|
||||
reverse: false,
|
||||
...so,
|
||||
}
|
||||
if (complete) {
|
||||
points[so.prefix + 'From'] = so.from.copy()
|
||||
points[so.prefix + 'To'] = so.to.copy()
|
||||
points[so.prefix + 'FromIn'] = points[so.prefix + 'From'].shift(
|
||||
so.from.shiftTowards(so.to, 0.1).angle(so.from) + 270,
|
||||
so.margin * scale
|
||||
)
|
||||
points[so.prefix + 'ToIn'] = points[so.prefix + 'To'].shift(
|
||||
so.from.shiftTowards(so.to, 0.1).angle(so.to) + 90,
|
||||
so.margin * scale
|
||||
)
|
||||
paths[so.prefix + 'PleatFrom'] = new Path()
|
||||
.move(points[so.prefix + 'From'])
|
||||
.line(points[so.prefix + 'FromIn'])
|
||||
.attr('class', 'note' + (so.reverse ? ' dashed' : ''))
|
||||
paths[so.prefix + 'PleatTo'] = new Path()
|
||||
.move(points[so.prefix + 'To'])
|
||||
.line(points[so.prefix + 'ToIn'])
|
||||
.attr('class', 'note' + (so.reverse ? '' : ' dashed'))
|
||||
paths[so.prefix + 'PleatArrow'] = new Path()
|
||||
.move(
|
||||
points[so.prefix + (so.reverse ? 'To' : 'From')].shiftFractionTowards(
|
||||
points[so.prefix + (so.reverse ? 'ToIn' : 'FromIn')],
|
||||
0.25
|
||||
)
|
||||
)
|
||||
.line(
|
||||
points[so.prefix + (so.reverse ? 'From' : 'To')].shiftFractionTowards(
|
||||
points[so.prefix + (so.reverse ? 'FromIn' : 'ToIn')],
|
||||
0.25
|
||||
)
|
||||
)
|
||||
.attr('class', 'note')
|
||||
.attr('marker-end', 'url(#pleatTo)')
|
||||
}
|
||||
},
|
||||
/*
|
||||
* The rmpleat macro
|
||||
*/
|
||||
const rmpleat = function (id = macroDefaults.id, { paths, store, part }) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', 'pleat', 'ids', id, 'paths'], {})
|
||||
))
|
||||
delete paths[pid]
|
||||
}
|
||||
|
||||
/*
|
||||
* The pleat macro
|
||||
*/
|
||||
const pleat = function (config, { paths, Path, log, Point, complete, scale, store, part }) {
|
||||
/*
|
||||
* Don't add a pleat when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Make sure mc.from and mc.to are Point instances
|
||||
*/
|
||||
if (!mc.from || typeof mc.from.attr !== 'function') {
|
||||
log.warn(`Pleat macro called without a valid from point. Using (0,0) for from.`)
|
||||
mc.from = new Point(0, 0)
|
||||
}
|
||||
if (!mc.to || typeof mc.to.attr !== 'function') {
|
||||
log.warn(`Pleat macro called without a valid to point. Using (666,666) for to.`)
|
||||
mc.to = new Point(666, 666)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
* Initialize the verticle cadence
|
||||
*/
|
||||
const ids = getIds(['from', 'to', 'arrow'], mc.id, 'pleat')
|
||||
|
||||
const toIn = mc.to.shift(mc.from.shiftTowards(mc.to, 0.1).angle(mc.to) + 90, mc.margin * scale)
|
||||
const fromIn = mc.from.shift(
|
||||
mc.from.shiftTowards(mc.to, 0.1).angle(mc.from) + 270,
|
||||
mc.margin * scale
|
||||
)
|
||||
/*
|
||||
* Pleat line from
|
||||
*/
|
||||
paths[ids.from] = new Path()
|
||||
.move(mc.from)
|
||||
.line(fromIn)
|
||||
.attr('class', mc.reverse ? mc.classes.to : mc.classes.from)
|
||||
|
||||
/*
|
||||
* Pleat line to
|
||||
*/
|
||||
paths[ids.to] = new Path()
|
||||
.move(mc.to)
|
||||
.line(toIn)
|
||||
.attr('class', mc.reverse ? mc.classes.from : mc.classes.to)
|
||||
|
||||
/*
|
||||
* Pleat line arrow
|
||||
*/
|
||||
paths[ids.arrow] = mc.reverse
|
||||
? new Path()
|
||||
.move(mc.to.shiftFractionTowards(toIn, 0.25))
|
||||
.line(mc.from.shiftFractionTowards(toIn, 0.25))
|
||||
: new Path()
|
||||
.move(mc.from.shiftFractionTowards(fromIn, 0.25))
|
||||
.line(mc.to.shiftFractionTowards(fromIn, 0.25))
|
||||
paths[ids.arrow].attr('class', mc.classes.arrow).attr('marker-end', 'url(#pleatTo)')
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmpleat
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'pleat', 'ids', mc.id, 'paths'], ids)
|
||||
|
||||
return store.getMacroIds(mc.id, 'pleat')
|
||||
}
|
||||
|
||||
// Export macros
|
||||
export const pleatMacros = { pleat, rmpleat }
|
||||
|
|
|
@ -1,34 +1,31 @@
|
|||
// Export macros
|
||||
export const scaleboxMacros = {
|
||||
scalebox: function (so, { store, points, paths, scale, Point, Path }) {
|
||||
// Passing `false` will remove the scalebox
|
||||
if (so === false) {
|
||||
for (let id of [
|
||||
'__scaleboxMetricTopLeft',
|
||||
'__scaleboxMetricTopRight',
|
||||
'__scaleboxMetricBottomRight',
|
||||
'__scaleboxMetricBottomLeft',
|
||||
'__scaleboxImperialTopLeft',
|
||||
'__scaleboxImperialTopRight',
|
||||
'__scaleboxImperialBottomRight',
|
||||
'__scaleboxImperialBottomLeft',
|
||||
'__scaleboxLead',
|
||||
'__scaleboxTitle',
|
||||
'__scaleboxText',
|
||||
'__scaleboxLink',
|
||||
'__scaleboxMetric',
|
||||
'__scaleboxImperial',
|
||||
])
|
||||
delete points[id]
|
||||
for (let id of ['__scaleboxMetric', '__scaleboxImperial']) delete paths[id]
|
||||
return true
|
||||
}
|
||||
import { getIds } from './utils.mjs'
|
||||
|
||||
// Convert scale to a value between 0 and 9, inclusive.
|
||||
const scaleIndex = Math.round(10 * Math.max(0.1, Math.min(1, scale))) - 1
|
||||
/*
|
||||
* Defaults for the title macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
classes: {
|
||||
lead: 'text-xs bold',
|
||||
title: 'text bold',
|
||||
text: 'text-xs',
|
||||
link: 'text-sm fill-note bold',
|
||||
metric: 'text-xs center',
|
||||
imperial: 'text-xs center',
|
||||
imperialBox: 'scalebox imperial fill-current',
|
||||
metricBox: 'scalebox metric fill-bg',
|
||||
},
|
||||
lead: 'FreeSewing',
|
||||
link: 'FreeSewing.org/patrons/join',
|
||||
text: 'plugin-annotations:supportFreeSewingBecomeAPatron',
|
||||
title: false,
|
||||
}
|
||||
|
||||
// Metric width and height in mm and display width and height for each scale index.
|
||||
const metricSizes = [
|
||||
/*
|
||||
* Various sizes for scaleboxes per units
|
||||
*/
|
||||
const sizes = {
|
||||
scalebox: {
|
||||
metric: [
|
||||
[10, 5, '1cm', '0.5cm'],
|
||||
[20, 10, '2cm', '1cm'],
|
||||
[30, 15, '3cm', '1.5cm'],
|
||||
|
@ -39,15 +36,8 @@ export const scaleboxMacros = {
|
|||
[80, 40, '8cm', '4cm'],
|
||||
[90, 45, '9cm', '4.5cm'],
|
||||
[100, 50, '10cm', '5cm'],
|
||||
]
|
||||
|
||||
const metricWidth = metricSizes[scaleIndex][0]
|
||||
const metricHeight = metricSizes[scaleIndex][1]
|
||||
const metricDisplayWidth = metricSizes[scaleIndex][2]
|
||||
const metricDisplayHeight = metricSizes[scaleIndex][3]
|
||||
|
||||
// Imperial width and height in mm and display width and heigth for each scale index.
|
||||
const imperialSizes = [
|
||||
],
|
||||
imperial: [
|
||||
[25.4 * 0.5, 25.4 * 0.25, '½″', '¼″'],
|
||||
[25.4 * 0.875, 25.4 * 0.5, '⅞″', '½″'],
|
||||
[25.4 * 1.25, 25.4 * 0.625, '1 ¼″', '⅝″'],
|
||||
|
@ -58,227 +48,358 @@ export const scaleboxMacros = {
|
|||
[25.4 * 3.25, 25.4 * 1.625, '3 ¼″', '1 ⅝″'],
|
||||
[25.4 * 3.625, 25.4 * 1.875, '3 ⅝″', '1 ⅞″'],
|
||||
[25.4 * 4, 25.4 * 2, '4″', '2″'],
|
||||
]
|
||||
|
||||
const imperialWidth = imperialSizes[scaleIndex][0]
|
||||
const imperialHeight = imperialSizes[scaleIndex][1]
|
||||
const imperialDisplayWidth = imperialSizes[scaleIndex][2]
|
||||
const imperialDisplayHeight = imperialSizes[scaleIndex][3]
|
||||
|
||||
// Box points
|
||||
points.__scaleboxMetricTopLeft = new Point(
|
||||
so.at.x - metricWidth / 2,
|
||||
so.at.y - metricHeight / 2
|
||||
)
|
||||
points.__scaleboxMetricTopRight = new Point(
|
||||
so.at.x + metricWidth / 2,
|
||||
so.at.y - metricHeight / 2
|
||||
)
|
||||
points.__scaleboxMetricBottomLeft = new Point(
|
||||
so.at.x - metricWidth / 2,
|
||||
so.at.y + metricHeight / 2
|
||||
)
|
||||
points.__scaleboxMetricBottomRight = new Point(
|
||||
so.at.x + metricWidth / 2,
|
||||
so.at.y + metricHeight / 2
|
||||
)
|
||||
points.__scaleboxImperialTopLeft = new Point(
|
||||
so.at.x - imperialWidth / 2,
|
||||
so.at.y - imperialHeight / 2
|
||||
)
|
||||
points.__scaleboxImperialTopRight = new Point(
|
||||
so.at.x + imperialWidth / 2,
|
||||
so.at.y - imperialHeight / 2
|
||||
)
|
||||
points.__scaleboxImperialBottomLeft = new Point(
|
||||
so.at.x - imperialWidth / 2,
|
||||
so.at.y + imperialHeight / 2
|
||||
)
|
||||
points.__scaleboxImperialBottomRight = new Point(
|
||||
so.at.x + imperialWidth / 2,
|
||||
so.at.y + imperialHeight / 2
|
||||
)
|
||||
// Text anchor points
|
||||
points.__scaleboxLead = points.__scaleboxImperialTopLeft
|
||||
.shift(-90, 7 * scale)
|
||||
.shift(0, 2 * scale)
|
||||
points.__scaleboxTitle = points.__scaleboxLead.shift(-90, 10 * scale)
|
||||
points.__scaleboxText = points.__scaleboxTitle.shift(-90, 12 * scale)
|
||||
points.__scaleboxLink = points.__scaleboxText.shift(-90, 5 * scale)
|
||||
points.__scaleboxMetric = new Point(so.at.x, so.at.y + 20 * scale)
|
||||
points.__scaleboxImperial = new Point(so.at.x, so.at.y + 24 * scale)
|
||||
// Rotation
|
||||
if (so.rotate) {
|
||||
so.rotate = Number(so.rotate)
|
||||
let toRotate = [
|
||||
'__scaleboxMetricTopLeft',
|
||||
'__scaleboxMetricTopRight',
|
||||
'__scaleboxMetricBottomLeft',
|
||||
'__scaleboxMetricBottomRight',
|
||||
'__scaleboxImperialTopLeft',
|
||||
'__scaleboxImperialTopRight',
|
||||
'__scaleboxImperialBottomLeft',
|
||||
'__scaleboxImperialBottomRight',
|
||||
'__scaleboxLead',
|
||||
'__scaleboxTitle',
|
||||
'__scaleboxText',
|
||||
'__scaleboxLink',
|
||||
'__scaleboxMetric',
|
||||
'__scaleboxImperial',
|
||||
]
|
||||
for (let pid of toRotate) points[pid] = points[pid].rotate(so.rotate, so.at)
|
||||
for (let pid of toRotate.slice(8)) {
|
||||
points[pid].attributes.set(
|
||||
'data-text-transform',
|
||||
`rotate(${so.rotate * -1}, ${points[pid].x}, ${points[pid].y})`
|
||||
)
|
||||
}
|
||||
}
|
||||
// Paths
|
||||
paths.__scaleboxImperial = new Path()
|
||||
.attr('class', 'scalebox imperial fill-current')
|
||||
.move(points.__scaleboxImperialTopLeft)
|
||||
.line(points.__scaleboxImperialBottomLeft)
|
||||
.line(points.__scaleboxImperialBottomRight)
|
||||
.line(points.__scaleboxImperialTopRight)
|
||||
.close()
|
||||
paths.__scaleboxMetric = new Path()
|
||||
.attr('class', 'scalebox metric fill-bg')
|
||||
.move(points.__scaleboxMetricTopLeft)
|
||||
.line(points.__scaleboxMetricBottomLeft)
|
||||
.line(points.__scaleboxMetricBottomRight)
|
||||
.line(points.__scaleboxMetricTopRight)
|
||||
.close()
|
||||
// Lead
|
||||
points.__scaleboxLead
|
||||
.attr('data-text', so.lead || 'FreeSewing')
|
||||
.attr('data-text-class', 'text-sm')
|
||||
// Title
|
||||
if (so.title) points.__scaleboxTitle.attributes.set('data-text', so.title)
|
||||
else {
|
||||
let name = store.data?.name || 'No Name'
|
||||
if (name.indexOf('@freesewing/') !== -1) name = name.replace('@freesewing/', '')
|
||||
points.__scaleboxTitle = points.__scaleboxTitle
|
||||
.attr('data-text', name)
|
||||
.attr('data-text', 'v' + (store.data?.version || 'No Version'))
|
||||
}
|
||||
points.__scaleboxTitle.attributes.add('data-text-class', 'text-lg')
|
||||
// Text
|
||||
if (typeof so.text === 'string') {
|
||||
points.__scaleboxText.attr('data-text', so.text)
|
||||
} else {
|
||||
points.__scaleboxText.attr('data-text', 'supportFreesewingBecomeAPatron')
|
||||
points.__scaleboxLink = points.__scaleboxLink
|
||||
.attr('data-text', 'freesewing.org/patrons/join')
|
||||
.attr('data-text-class', 'text-sm fill-note')
|
||||
}
|
||||
points.__scaleboxText.attr('data-text-class', 'text-xs').attr('data-text-lineheight', 4)
|
||||
// Instructions
|
||||
points.__scaleboxMetric = points.__scaleboxMetric
|
||||
.attr('data-text', 'theWhiteInsideOfThisBoxShouldMeasure')
|
||||
.attr('data-text', `${metricDisplayWidth}`)
|
||||
.attr('data-text', 'x')
|
||||
.attr('data-text', `${metricDisplayHeight}`)
|
||||
.attr('data-text-class', 'text-xs center')
|
||||
points.__scaleboxImperial = points.__scaleboxImperial
|
||||
.attr('data-text', 'theBlackOutsideOfThisBoxShouldMeasure')
|
||||
.attr('data-text', `${imperialDisplayWidth}`)
|
||||
.attr('data-text', 'x')
|
||||
.attr('data-text', `${imperialDisplayHeight}`)
|
||||
.attr('data-text-class', 'text-xs center ')
|
||||
},
|
||||
miniscale(so, { points, paths, scale, Point, Path }) {
|
||||
// Passing `false` will remove the miniscale
|
||||
if (so === false) {
|
||||
for (const id of [
|
||||
'__miniscaleMetricTopLeft',
|
||||
'__miniscaleMetricTopRight',
|
||||
'__miniscaleMetricBottomRight',
|
||||
'__miniscaleMetricBottomLeft',
|
||||
'__miniscaleImperialTopLeft',
|
||||
'__miniscaleImperialTopRight',
|
||||
'__miniscaleImperialBottomRight',
|
||||
'__miniscaleImperialBottomLeft',
|
||||
'__miniscaleMetric',
|
||||
'__miniscaleImperial',
|
||||
])
|
||||
delete points[id]
|
||||
for (const id of ['__miniscaleMetric', '__miniscaleImperial']) delete paths[id]
|
||||
return true
|
||||
}
|
||||
|
||||
// Convert scale to a value between 0 and 5, inclusive.
|
||||
const scaleIndex = Math.ceil(6 * Math.max(0.1, Math.min(1, scale))) - 1
|
||||
|
||||
// Metric size in mm / display value and imperial size in mm / display value for each scale index.
|
||||
const sizes = [
|
||||
[10, '1cm', 25.4 * 0.375, '⅜″'],
|
||||
[13, '1.3cm', 25.4 * 0.5, '½″'],
|
||||
[16, '1.6cm', 25.4 * 0.625, '⅝″'],
|
||||
[19, '1.9cm', 25.4 * 0.75, '¾″'],
|
||||
[22, '2.2cm', 25.4 * 0.875, '⅞″'],
|
||||
[25, '2.5cm', 25.4 * 1, '1″'],
|
||||
]
|
||||
const m = sizes[scaleIndex][0] / 2
|
||||
const i = sizes[scaleIndex][2] / 2
|
||||
const metricDisplaySize = sizes[scaleIndex][1]
|
||||
const imperialDisplaySize = sizes[scaleIndex][3]
|
||||
// Box points
|
||||
points.__miniscaleMetricTopLeft = new Point(so.at.x - m, so.at.y - m)
|
||||
points.__miniscaleMetricTopRight = new Point(so.at.x + m, so.at.y - m)
|
||||
points.__miniscaleMetricBottomLeft = new Point(so.at.x - m, so.at.y + m)
|
||||
points.__miniscaleMetricBottomRight = new Point(so.at.x + m, so.at.y + m)
|
||||
points.__miniscaleImperialTopLeft = new Point(so.at.x - i, so.at.y - i)
|
||||
points.__miniscaleImperialTopRight = new Point(so.at.x + i, so.at.y - i)
|
||||
points.__miniscaleImperialBottomLeft = new Point(so.at.x - i, so.at.y + i)
|
||||
points.__miniscaleImperialBottomRight = new Point(so.at.x + i, so.at.y + i)
|
||||
// Text anchor points
|
||||
points.__miniscaleMetric = new Point(so.at.x, so.at.y - 2 * scale)
|
||||
points.__miniscaleImperial = new Point(so.at.x, so.at.y + 8 * scale)
|
||||
// Rotation
|
||||
if (so.rotate) {
|
||||
so.rotate = Number(so.rotate)
|
||||
let toRotate = [
|
||||
'__miniscaleMetricTopLeft',
|
||||
'__miniscaleMetricTopRight',
|
||||
'__miniscaleMetricBottomLeft',
|
||||
'__miniscaleMetricBottomRight',
|
||||
'__miniscaleImperialTopLeft',
|
||||
'__miniscaleImperialTopRight',
|
||||
'__miniscaleImperialBottomLeft',
|
||||
'__miniscaleImperialBottomRight',
|
||||
'__miniscaleMetric',
|
||||
'__miniscaleImperial',
|
||||
]
|
||||
for (const pid of toRotate) points[pid] = points[pid].rotate(so.rotate, so.at)
|
||||
for (const pid of toRotate.slice(8)) {
|
||||
points[pid].attributes.set(
|
||||
'data-text-transform',
|
||||
`rotate(${so.rotate * -1}, ${points[pid].x}, ${points[pid].y})`
|
||||
)
|
||||
}
|
||||
}
|
||||
// Paths
|
||||
paths.__miniscaleImperial = new Path()
|
||||
.attr('class', 'scalebox imperial fill-current')
|
||||
.move(points.__miniscaleImperialTopLeft)
|
||||
.line(points.__miniscaleImperialBottomLeft)
|
||||
.line(points.__miniscaleImperialBottomRight)
|
||||
.line(points.__miniscaleImperialTopRight)
|
||||
.close()
|
||||
paths.__miniscaleMetric = new Path()
|
||||
.attr('class', 'scalebox metric fill-bg')
|
||||
.move(points.__miniscaleMetricTopLeft)
|
||||
.line(points.__miniscaleMetricBottomLeft)
|
||||
.line(points.__miniscaleMetricBottomRight)
|
||||
.line(points.__miniscaleMetricTopRight)
|
||||
.close()
|
||||
// Text
|
||||
points.__miniscaleMetric = points.__miniscaleMetric
|
||||
.attr('data-text', `${metricDisplaySize} x ${metricDisplaySize}`)
|
||||
.attr('data-text-class', 'text-xs center')
|
||||
points.__miniscaleImperial = points.__miniscaleImperial
|
||||
.attr('data-text', `${imperialDisplaySize} x ${imperialDisplaySize}`)
|
||||
.attr('data-text-class', 'text-xs center ')
|
||||
],
|
||||
},
|
||||
miniscale: [
|
||||
[10, '1cm', 25.4 * 0.375, '⅜″'],
|
||||
[13, '1.3cm', 25.4 * 0.5, '½″'],
|
||||
[16, '1.6cm', 25.4 * 0.625, '⅝″'],
|
||||
[19, '1.9cm', 25.4 * 0.75, '¾″'],
|
||||
[22, '2.2cm', 25.4 * 0.875, '⅞″'],
|
||||
[25, '2.5cm', 25.4 * 1, '1″'],
|
||||
],
|
||||
}
|
||||
|
||||
/*
|
||||
* This removes a given macro type
|
||||
*/
|
||||
const removeScaleAnnotation = function (id = false, { paths, points, store, part }, type) {
|
||||
if (!id) id = type
|
||||
const both = store.get(['parts', part.name, 'macros', type, 'ids', id], { paths: {}, points: {} })
|
||||
for (const pid of Object.values(both.points)) delete points[pid]
|
||||
for (const pid of Object.values(both.paths)) delete paths[pid]
|
||||
}
|
||||
|
||||
/*
|
||||
* The scalebox macro
|
||||
*/
|
||||
const scalebox = function (
|
||||
config,
|
||||
{ store, points, paths, scale, Point, Path, complete, log, part }
|
||||
) {
|
||||
/*
|
||||
* Don't add a title when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
id: 'scalebox',
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Figure out what size to use
|
||||
* We convert scale to a value between 0 and 9, inclusive.
|
||||
* Then pick the right size from the sizes[units] array.
|
||||
* Array holds width, height, displayWidth, displayHeight
|
||||
*/
|
||||
const scaleIndex = Math.round(10 * Math.max(0.1, Math.min(1, scale))) - 1
|
||||
const [mw, mh, mdw, mdh] = sizes.scalebox.metric[scaleIndex]
|
||||
const [iw, ih, idw, idh] = sizes.scalebox.imperial[scaleIndex]
|
||||
|
||||
/*
|
||||
* Make sure mc.at is a Point instance
|
||||
*/
|
||||
if (!mc.at || typeof mc.at.attr !== 'function') {
|
||||
log.warn(`Scalebox macro called without a valid at point. Using (0,0) for at.`)
|
||||
mc.at = new Point(0, 0)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const ids = getIds(
|
||||
[
|
||||
'metric',
|
||||
'imperial',
|
||||
'textLead',
|
||||
'textMetric',
|
||||
'textImperial',
|
||||
'textTitle',
|
||||
'textText',
|
||||
'textLink',
|
||||
],
|
||||
mc.id,
|
||||
'scalebox'
|
||||
)
|
||||
|
||||
/*
|
||||
* Box points (no need to add these to the part)
|
||||
*/
|
||||
const box = {
|
||||
mtl: new Point(mc.at.x - mw / 2, mc.at.y - mh / 2),
|
||||
mtr: new Point(mc.at.x + mw / 2, mc.at.y - mh / 2),
|
||||
mbl: new Point(mc.at.x - mw / 2, mc.at.y + mh / 2),
|
||||
mbr: new Point(mc.at.x + mw / 2, mc.at.y + mh / 2),
|
||||
itl: new Point(mc.at.x - iw / 2, mc.at.y - ih / 2),
|
||||
itr: new Point(mc.at.x + iw / 2, mc.at.y - ih / 2),
|
||||
ibl: new Point(mc.at.x - iw / 2, mc.at.y + ih / 2),
|
||||
ibr: new Point(mc.at.x + iw / 2, mc.at.y + ih / 2),
|
||||
}
|
||||
|
||||
/*
|
||||
* Text points
|
||||
*/
|
||||
const text = {
|
||||
lead: new Point(mc.at.x - 45 * scale, mc.at.y - 15 * scale),
|
||||
metric: new Point(mc.at.x, mc.at.y + 20 * scale),
|
||||
imperial: new Point(mc.at.x, mc.at.y + 24 * scale),
|
||||
}
|
||||
text.title = text.lead.shift(-90, 10 * scale)
|
||||
text.text = text.title.shift(-90, 12 * scale)
|
||||
text.link = text.text.shift(-90, 5 * scale)
|
||||
|
||||
/*
|
||||
* Handle rotation if needed
|
||||
*/
|
||||
if (mc.rotate) {
|
||||
mc.rotate = Number(mc.rotate)
|
||||
for (const pid in box) box[pid] = box[pid].rotate(mc.rotate, mc.at)
|
||||
for (const pid in text) {
|
||||
text[pid] = text[pid].rotate(mc.rotate, mc.at)
|
||||
text[pid].attr(
|
||||
'data-text-transform',
|
||||
`rotate(${mc.rotate * -1}, ${text[pid].x}, ${text[pid].y})`,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Draw the imperial box
|
||||
*/
|
||||
paths[ids.imperial] = new Path()
|
||||
.addClass(mc.classes.imperialBox)
|
||||
.move(box.itl)
|
||||
.line(box.ibl)
|
||||
.line(box.ibr)
|
||||
.line(box.itr)
|
||||
.line(box.itl)
|
||||
.close()
|
||||
|
||||
/*
|
||||
* Draw the metric box
|
||||
*/
|
||||
paths[ids.metric] = new Path()
|
||||
.addClass(mc.classes.metricBox)
|
||||
.move(box.mtl)
|
||||
.line(box.mbl)
|
||||
.line(box.mbr)
|
||||
.line(box.mtr)
|
||||
.line(box.mtl)
|
||||
.close()
|
||||
|
||||
/*
|
||||
* Add lead text to the part points
|
||||
*/
|
||||
points[ids.textLead] = text.lead.addText(mc.lead, mc.classes.lead)
|
||||
|
||||
/*
|
||||
* Figure out what title to use, and add the title text to the part points
|
||||
*/
|
||||
let title = mc.title
|
||||
if (!title) {
|
||||
title = store.data?.name || 'plugin-annotations:noName'
|
||||
if (title.indexOf('@freesewing/') !== -1) title = title.replace('@freesewing/', '')
|
||||
}
|
||||
points[ids.textTitle] = text.title
|
||||
.addText(title, mc.classes.title)
|
||||
.attr('data-text', 'v' + (store.data?.version || 'No Version'))
|
||||
|
||||
/*
|
||||
* Add text text to the part points
|
||||
*/
|
||||
points[ids.textText] = text.text.addText(mc.text, mc.classes.text)
|
||||
|
||||
/*
|
||||
* Add link text to the part points
|
||||
*/
|
||||
points[ids.textLink] = text.link.addText(mc.link, mc.classes.link).attr('data-text-lineheight', 4)
|
||||
|
||||
/*
|
||||
* Add metric instructions text to the part points
|
||||
*/
|
||||
points[ids.textMetric] = text.metric
|
||||
.attr('data-text', 'plugin-annotations:theWhiteInsideOfThisBoxShouldMeasure')
|
||||
.attr('data-text', mdw)
|
||||
.attr('data-text', 'x')
|
||||
.attr('data-text', mdh)
|
||||
.attr('data-text-class', mc.classes.metric)
|
||||
|
||||
/*
|
||||
* Add imperial instructions text to the part points
|
||||
*/
|
||||
points[ids.textImperial] = text.imperial
|
||||
.attr('data-text', 'plugin-annotations:theBlackOutsideOfThisBoxShouldMeasure')
|
||||
.attr('data-text', idw)
|
||||
.attr('data-text', 'x')
|
||||
.attr('data-text', idh)
|
||||
.attr('data-text-class', mc.classes.imperial)
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmscaleboc
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'scalebox', 'ids', mc.id], {
|
||||
points: {
|
||||
textLead: ids.textLead,
|
||||
textMetric: ids.textMetric,
|
||||
textImperial: ids.textImperial,
|
||||
textTitle: ids.textTitle,
|
||||
textText: ids.textText,
|
||||
textLink: ids.textLink,
|
||||
},
|
||||
paths: {
|
||||
metric: ids.metric,
|
||||
imperial: ids.imperial,
|
||||
},
|
||||
})
|
||||
|
||||
return store.getMacroIds(mc.id, 'scalebox')
|
||||
}
|
||||
|
||||
/*
|
||||
* The miniscale macro
|
||||
*/
|
||||
const miniscale = function (
|
||||
config,
|
||||
{ points, paths, scale, Point, Path, part, complete, log, store }
|
||||
) {
|
||||
/*
|
||||
* Don't add a title when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
id: 'miniscale',
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Figure out what size to use
|
||||
* We convert scale to a value between 0 and 5, inclusive.
|
||||
* Then pick the right size from the sizes.miniscale array.
|
||||
* Array holds metricSize, metricDisplaySize, imperialSize, imperialDisplaySize
|
||||
*/
|
||||
const scaleIndex = Math.ceil(6 * Math.max(0.1, Math.min(1, scale))) - 1
|
||||
const [ms, mds, is, imds] = sizes.miniscale[scaleIndex]
|
||||
|
||||
/*
|
||||
* Make sure mc.at is a Point instance
|
||||
*/
|
||||
if (!mc.at || typeof mc.at.attr !== 'function') {
|
||||
log.warn(`Scalebox macro called without a valid at point. Using (0,0) for at.`)
|
||||
mc.at = new Point(0, 0)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
*/
|
||||
const ids = getIds(['metric', 'imperial', 'textMetric', 'textImperial'], mc.id, 'miniscale')
|
||||
|
||||
/*
|
||||
* Box points (no need to add these to the part)
|
||||
*/
|
||||
const box = {
|
||||
mtl: new Point(mc.at.x - ms / 2, mc.at.y - ms / 2),
|
||||
mtr: new Point(mc.at.x + ms / 2, mc.at.y - ms / 2),
|
||||
mbl: new Point(mc.at.x - ms / 2, mc.at.y + ms / 2),
|
||||
mbr: new Point(mc.at.x + ms / 2, mc.at.y + ms / 2),
|
||||
itl: new Point(mc.at.x - is / 2, mc.at.y - is / 2),
|
||||
itr: new Point(mc.at.x + is / 2, mc.at.y - is / 2),
|
||||
ibl: new Point(mc.at.x - is / 2, mc.at.y + is / 2),
|
||||
ibr: new Point(mc.at.x + is / 2, mc.at.y + is / 2),
|
||||
}
|
||||
|
||||
/*
|
||||
* Text points
|
||||
*/
|
||||
const text = {
|
||||
metric: new Point(mc.at.x, mc.at.y - 2 * scale),
|
||||
imperial: new Point(mc.at.x, mc.at.y + 8 * scale),
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle rotation if needed
|
||||
*/
|
||||
if (mc.rotate) {
|
||||
mc.rotate = Number(mc.rotate)
|
||||
for (const pid in box) box[pid] = box[pid].rotate(mc.rotate, mc.at)
|
||||
for (const pid in text) {
|
||||
text[pid] = text[pid]
|
||||
.rotate(mc.rotate, mc.at)
|
||||
.attr(
|
||||
'data-text-transform',
|
||||
`rotate(${mc.rotate * -1}, ${text[pid].x}, ${text[pid].y})`,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Draw the imperial box
|
||||
*/
|
||||
paths[ids.imperial] = new Path()
|
||||
.attr('class', 'scalebox imperial fill-current')
|
||||
.move(box.itl)
|
||||
.line(box.ibl)
|
||||
.line(box.ibr)
|
||||
.line(box.itr)
|
||||
.line(box.itl)
|
||||
.close()
|
||||
|
||||
/*
|
||||
* Draw the metric box
|
||||
*/
|
||||
paths[ids.metric] = new Path()
|
||||
.attr('class', 'scalebox metric fill-bg')
|
||||
.move(box.mtl)
|
||||
.line(box.mbl)
|
||||
.line(box.mbr)
|
||||
.line(box.mtr)
|
||||
.line(box.mtl)
|
||||
.close()
|
||||
|
||||
/*
|
||||
* Add metric text to the part points
|
||||
*/
|
||||
points[ids.textMetric] = text.metric.addText(`${mds} x ${mds}`, mc.classes.metric)
|
||||
|
||||
/*
|
||||
* Add imperial text to the part points
|
||||
*/
|
||||
points[ids.textImperial] = text.imperial.addText(`${imds} x ${imds}`, mc.classes.imperial)
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmscaleboc
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'miniscale', 'ids', mc.id], {
|
||||
points: {
|
||||
textMetric: ids.textMetric,
|
||||
textImperial: ids.textImperial,
|
||||
},
|
||||
paths: {
|
||||
metric: ids.metric,
|
||||
imperial: ids.imperial,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// Export macros
|
||||
export const scaleboxMacros = {
|
||||
scalebox,
|
||||
miniscale,
|
||||
rmscalebox: (id, props) => removeScaleAnnotation(id, props, 'scalebox'),
|
||||
rmminiscale: (id, props) => removeScaleAnnotation(id, props, 'miniscale'),
|
||||
}
|
||||
|
|
|
@ -1,93 +1,133 @@
|
|||
import { getIds } from './utils.mjs'
|
||||
|
||||
/*
|
||||
* Defaults for the sewtogether macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
classes: {
|
||||
curve: 'dotted note stroke-sm',
|
||||
hinge: 'note dotted stroke-sm',
|
||||
text: 'center fill-note text-xs',
|
||||
},
|
||||
id: 'sewtogether',
|
||||
force: false,
|
||||
text: 'plugin-annotations:sewTogether',
|
||||
}
|
||||
|
||||
// Export defs
|
||||
export const sewtogetherDefs = [
|
||||
{
|
||||
name: 'sewTogetherStart',
|
||||
def: (scale) => `
|
||||
<marker id="sewTogetherStart" markerWidth="8" markerHeight="8" style="overflow:visible;" orient="auto" refX="0" refY="0">
|
||||
<path class="note stroke-sm" d="M 8,4 L 0,0 8,-4" transform="scale(${scale})"/>
|
||||
<marker id="sewTogetherStart" markerWidth="10" markerHeight="6" orient="auto" refX="1" refY="2">
|
||||
<path d="M 0,2 L 6,0 C 5,1 5,3 6,4 z" class="fill-note note" transform="scale(${scale})" />
|
||||
</marker>`,
|
||||
},
|
||||
{
|
||||
name: 'sewTogetherEnd',
|
||||
def: (scale) => `
|
||||
<marker id="sewTogetherEnd" markerWidth="8" markerHeight="8" style="overflow:visible;" orient="auto" refX="0" refY="0">
|
||||
<path class="note stroke-sm" d="M -8,-4 L 0,0 -8,4" transform="scale(${scale})"/>
|
||||
<marker id="sewTogetherEnd" markerWidth="10" markerHeight="6" orient="auto" refX="6" refY="2">
|
||||
<path d="M 6,2 L 0,0 C 1,1 1,3 0,4 z" class="fill-note note" transform="scale(${scale})" />
|
||||
</marker>`,
|
||||
},
|
||||
{
|
||||
name: 'sewTogetherCross',
|
||||
def: (scale) => `
|
||||
<marker id="sewTogetherCross" markerWidth="8" markerHeight="8" style="overflow:visible;" orient="auto" refX="0" refY="0">
|
||||
<path d="M -4,-4 L 4,4 M 4,-4 L -4,4" class="note stroke-sm" transform="scale(${scale})"/>
|
||||
<marker id="sewTogetherCross" markerWidth="5" markerHeight="5" orient="auto" refX="2.5" refY="2.5">
|
||||
<path d="M 0,0 L 5,5 M 5,0 L 0,5" class="note" transform="scale(${scale})" />
|
||||
</marker>`,
|
||||
},
|
||||
]
|
||||
|
||||
// Export macros
|
||||
export const sewtogetherMacros = {
|
||||
sewTogether: function (so, { points, paths, Path, complete, sa }) {
|
||||
if (so === false) {
|
||||
delete points.sewtogetherFrom
|
||||
delete points.sewtogetherFromCp
|
||||
delete points.sewtogetherMiddle
|
||||
delete points.sewtogetherTo
|
||||
delete points.sewtogetherHinge
|
||||
delete points.sewtogetherToCp
|
||||
delete paths.sewtogetherSewTogetherHinge
|
||||
delete paths.sewtogetherSewTogether
|
||||
return true
|
||||
}
|
||||
so = {
|
||||
prefix: 'sewtogether',
|
||||
...so,
|
||||
}
|
||||
if (complete) {
|
||||
if (null == so.middle) {
|
||||
so.middle = so.from.shiftFractionTowards(so.to, 0.5)
|
||||
}
|
||||
points[so.prefix + 'From'] = so.from.copy()
|
||||
points[so.prefix + 'Middle'] = so.middle.copy()
|
||||
points[so.prefix + 'To'] = so.to.copy()
|
||||
|
||||
points[so.prefix + 'FromCp'] = points[so.prefix + 'From'].shift(
|
||||
points[so.prefix + 'From'].angle(points[so.prefix + 'Middle']) + 90,
|
||||
points[so.prefix + 'From'].dist(points[so.prefix + 'Middle']) / 1.5
|
||||
)
|
||||
points[so.prefix + 'ToCp'] = points[so.prefix + 'To'].shift(
|
||||
points[so.prefix + 'To'].angle(points[so.prefix + 'Middle']) - 90,
|
||||
points[so.prefix + 'To'].dist(points[so.prefix + 'Middle']) / 1.5
|
||||
)
|
||||
|
||||
if (so.hinge) {
|
||||
points[so.prefix + 'Hinge'] = points[so.prefix + 'Middle'].shift(
|
||||
points[so.prefix + 'Middle'].angle(points[so.prefix + 'To']) +
|
||||
Math.abs(
|
||||
points[so.prefix + 'Middle'].angle(points[so.prefix + 'From']) -
|
||||
points[so.prefix + 'Middle'].angle(points[so.prefix + 'To'])
|
||||
) /
|
||||
2 +
|
||||
(sa ? 180 : 0),
|
||||
sa
|
||||
? sa
|
||||
: Math.min(
|
||||
points[so.prefix + 'From'].dist(points[so.prefix + 'Middle']),
|
||||
points[so.prefix + 'From'].dist(points[so.prefix + 'Middle'])
|
||||
) / 4
|
||||
)
|
||||
paths[so.prefix + 'SewTogetherHinge'] = new Path()
|
||||
.move(points[so.prefix + 'Middle'])
|
||||
.line(points[so.prefix + 'Hinge'])
|
||||
.attr('marker-start', 'url(#sewTogetherCross)')
|
||||
.attr('class', 'dotted note stroke-sm')
|
||||
}
|
||||
paths[so.prefix + 'SewTogether'] = new Path()
|
||||
.move(points[so.prefix + 'From'])
|
||||
.curve(points[so.prefix + 'FromCp'], points[so.prefix + 'ToCp'], points[so.prefix + 'To'])
|
||||
.attr('class', 'dotted note stroke-sm')
|
||||
.attr('marker-start', 'url(#sewTogetherStart)')
|
||||
.attr('marker-end', 'url(#sewTogetherEnd)')
|
||||
.attr('data-text', 'sewTogether')
|
||||
.attr('data-text-class', 'center fill-note text-xs')
|
||||
}
|
||||
},
|
||||
/*
|
||||
* The rmsewtogether macro
|
||||
*/
|
||||
const rmsewtogether = function (id = macroDefaults.id, { paths, store, part }) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', 'sewtogether', 'ids', id, 'paths'], {})
|
||||
))
|
||||
delete paths[pid]
|
||||
}
|
||||
|
||||
/*
|
||||
* The sewtogether macro
|
||||
*/
|
||||
const sewtogether = function (config, { paths, Path, log, Point, complete, sa, store, part }) {
|
||||
/*
|
||||
* Don't add a title when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Make sure mc.from and mc.to are Point instances
|
||||
*/
|
||||
if (!mc.from || typeof mc.from.attr !== 'function') {
|
||||
log.warn(`Sewtogether macro called without a valid from point. Using (0,0) for from.`)
|
||||
mc.from = new Point(0, 0)
|
||||
}
|
||||
if (!mc.to || typeof mc.to.attr !== 'function') {
|
||||
log.warn(`Sewtogether macro called without a valid to point. Using (666,666) for to.`)
|
||||
mc.to = new Point(666, 666)
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure we have a middle point
|
||||
*/
|
||||
if (!mc.middle) mc.middle = mc.from.shiftFractionTowards(mc.to, 0.5)
|
||||
|
||||
/*
|
||||
* Get the list of IDs
|
||||
* Initialize the verticle cadence
|
||||
*/
|
||||
const ids = getIds(['curve', 'hinge'], mc.id, 'sewtogether')
|
||||
|
||||
/*
|
||||
* Draw the curve
|
||||
*/
|
||||
const fromCp = mc.from.shift(mc.from.angle(mc.middle) + 90, mc.from.dist(mc.middle) / 1.5)
|
||||
const toCp = mc.to.shift(mc.to.angle(mc.middle) - 90, mc.to.dist(mc.middle) / 1.5)
|
||||
paths[ids.curve] = new Path()
|
||||
.move(mc.from)
|
||||
.curve(fromCp, toCp, mc.to)
|
||||
.attr('class', mc.classes.curve)
|
||||
.attr('marker-start', 'url(#sewTogetherStart)')
|
||||
.attr('marker-end', 'url(#sewTogetherEnd)')
|
||||
.addText(mc.text, mc.classes.text)
|
||||
|
||||
/*
|
||||
* Draw the hinge, if needed
|
||||
*/
|
||||
if (mc.hinge) {
|
||||
const hinge = mc.middle.shift(
|
||||
mc.middle.angle(mc.to) +
|
||||
Math.abs(mc.middle.angle(mc.from) - mc.middle.angle(mc.to)) / 2 +
|
||||
(sa ? 180 : 0),
|
||||
sa ? sa : mc.from.dist(mc.middle) / 4
|
||||
)
|
||||
paths[ids.hinge] = new Path()
|
||||
.move(mc.middle)
|
||||
.line(hinge)
|
||||
.attr('marker-start', 'url(#sewTogetherCross)')
|
||||
.attr('class', mc.classes.hinge)
|
||||
} else delete ids.hinge
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmsewtogether
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'sewtogether', 'ids', mc.id, 'paths'], ids)
|
||||
|
||||
return store.getMacroIds(mc.id, 'sewtogether')
|
||||
}
|
||||
|
||||
// Export macros
|
||||
export const sewtogetherMacros = { sewtogether, rmsewtogether }
|
||||
|
|
|
@ -1,108 +1,241 @@
|
|||
const titleMacro = function (so, { points, scale, locale, store, part }) {
|
||||
const prefix = so.prefix || ''
|
||||
let overwrite = !so.append
|
||||
import { getIds } from './utils.mjs'
|
||||
|
||||
// Passing `false` will remove the title
|
||||
if (so === false || overwrite) {
|
||||
for (const id of [
|
||||
`_${prefix}_titleNr`,
|
||||
`_${prefix}_titleName`,
|
||||
`_${prefix}_titlePattern`,
|
||||
`_${prefix}_titleFor`,
|
||||
`_${prefix}_exportDate`,
|
||||
])
|
||||
delete points[id]
|
||||
/*
|
||||
* Defaults for the title macro
|
||||
*/
|
||||
const macroDefaults = {
|
||||
align: 'left',
|
||||
append: false,
|
||||
cutlist: true,
|
||||
dy: 8,
|
||||
id: 'title',
|
||||
force: false,
|
||||
nr: 1,
|
||||
rotation: 0,
|
||||
scale: 1,
|
||||
title: 'plugin-annotations:noName',
|
||||
classes: {
|
||||
cutlist: 'text-md fill-current',
|
||||
date: 'text-sm fill-current',
|
||||
for: 'fill-current font-bold',
|
||||
name: 'fill-note',
|
||||
nr: 'text-4xl fill-note font-bold',
|
||||
title: 'text-lg fill-current font-bold',
|
||||
},
|
||||
}
|
||||
|
||||
if (so === false) return true
|
||||
/*
|
||||
* Removing all this is easy as all IDs are available in the store
|
||||
* and all we need to remove are points.
|
||||
*/
|
||||
const removeTitleMacro = function (id = macroDefaults.id, { points, store, part }) {
|
||||
for (const pid of Object.values(
|
||||
store.get(['parts', part.name, 'macros', 'title', 'ids', id, 'points'], {})
|
||||
))
|
||||
delete points[pid]
|
||||
}
|
||||
|
||||
/*
|
||||
* The title macro
|
||||
*/
|
||||
const addTitleMacro = function (
|
||||
config,
|
||||
{ Point, points, scale, locale, store, part, log, complete }
|
||||
) {
|
||||
/*
|
||||
* Don't add a title when complete is false, unless force is true
|
||||
*/
|
||||
if (!complete && !config.force) return
|
||||
|
||||
/*
|
||||
* Merge macro defaults with user-provided config to create the macro config (mc)
|
||||
*/
|
||||
const mc = {
|
||||
...macroDefaults,
|
||||
...config,
|
||||
classes: macroDefaults.classes,
|
||||
}
|
||||
if (config.classes) mc.classes = { ...mc.classes, ...config.classes }
|
||||
|
||||
/*
|
||||
* Take global scale setting into account
|
||||
*/
|
||||
mc.scale = mc.scale * scale
|
||||
|
||||
/*
|
||||
* Make sure mc.at is a Point so we can anchor the title
|
||||
*/
|
||||
if (!mc.at || typeof mc.at.attr !== 'function') {
|
||||
log.warn(`Title macro called without a valid anchor point. Anchoring title at (0,0).`)
|
||||
mc.at = new Point(0, 0)
|
||||
}
|
||||
|
||||
const transform = function (anchor) {
|
||||
const cx = anchor.x - so.scale * anchor.x
|
||||
const cy = anchor.y - so.scale * anchor.y
|
||||
|
||||
return `matrix(${so.scale}, 0, 0, ${so.scale}, ${cx}, ${cy}) rotate(${so.rotation} ${anchor.x} ${anchor.y})`
|
||||
}
|
||||
let shift = 8
|
||||
const nextPoint = (text, textClass, shiftAmt = shift) => {
|
||||
const newPoint = so.at.shift(-90 - so.rotation, shiftAmt * so.scale).addText(text, textClass)
|
||||
newPoint.attr('data-text-transform', transform(newPoint))
|
||||
return newPoint
|
||||
}
|
||||
const defaults = {
|
||||
scale: 1,
|
||||
rotation: 0,
|
||||
cutlist: true,
|
||||
/*
|
||||
* Make sure mc.align is a valid alignment
|
||||
*/
|
||||
if (!['left', 'right', 'center'].includes(mc.align)) {
|
||||
log.warn(`Title macro called with invalid alignement (${mc.align}). Left-aligning title.`)
|
||||
mc.align = 'left'
|
||||
}
|
||||
|
||||
so = { ...defaults, ...so }
|
||||
so.scale = so.scale * scale
|
||||
/*
|
||||
* Calculate the transform only once
|
||||
*/
|
||||
const transform =
|
||||
'matrix(' +
|
||||
`${mc.scale}, 0, 0, ${mc.scale}, ` +
|
||||
`${mc.at.x - mc.scale * mc.at.x}, ` +
|
||||
`${mc.at.y - mc.scale * mc.at.y}` +
|
||||
`) rotate(${mc.rotation} ${mc.at.x} ${mc.at.y})`
|
||||
|
||||
points[`_${prefix}_titleNr`] = so.at
|
||||
.clone()
|
||||
.attr('data-text', so.nr, overwrite)
|
||||
.attr('data-text-class', 'text-4xl fill-note font-bold')
|
||||
.attr('data-text-transform', transform(so.at))
|
||||
/*
|
||||
* Get the list of IDs
|
||||
* Initialize the verticle cadence
|
||||
*/
|
||||
const ids = getIds(['cutlist', 'date', 'for', 'name', 'nr', 'title'], mc.id, 'title')
|
||||
|
||||
if (so.title) {
|
||||
points[`_${prefix}_titleName`] = nextPoint(so.title, 'text-lg fill-current font-bold')
|
||||
shift += 8
|
||||
}
|
||||
let shift = mc.dy
|
||||
|
||||
// Cut List instructions
|
||||
const partCutlist = store.get(['cutlist', part.name])
|
||||
// if there's a cutlist and it should be included
|
||||
if (so.cutlist && partCutlist?.materials) {
|
||||
// get the default cutonfold
|
||||
const cutonfold = partCutlist.cutOnFold
|
||||
// each material
|
||||
for (const material in partCutlist.materials) {
|
||||
// each set of instructions
|
||||
partCutlist.materials[material].forEach(({ cut, identical, bias, ignoreOnFold }, c) => {
|
||||
// make a new point for this set of instructions
|
||||
const cutPoint = nextPoint('plugin:cut', 'text-md fill-current').addText(cut)
|
||||
/*
|
||||
* Title: nr
|
||||
*/
|
||||
if (typeof mc.nr !== 'undefined') {
|
||||
points[ids.nr] = mc.at
|
||||
.clone()
|
||||
.attr('data-text', mc.nr, mc.append ? false : true)
|
||||
.attr('data-text-class', `${mc.classes.nr} ${mc.align}`)
|
||||
.attr('data-text-transform', transform)
|
||||
.attr('data-render-always', 1) // Render even when outside the part bounding box
|
||||
store.set(['partNumbers', part.name], mc.nr)
|
||||
} else delete ids.nr
|
||||
|
||||
// if they're not identical, add that to the point's text
|
||||
if (!identical && cut > 1) cutPoint.addText('plugin:mirrored')
|
||||
/*
|
||||
* Title: title
|
||||
*/
|
||||
if (mc.title) {
|
||||
points[ids.title] = mc.at
|
||||
.clone()
|
||||
.shift(-90, shift)
|
||||
.attr('data-text', mc.title, mc.append ? false : true)
|
||||
.attr('data-text-class', `${mc.classes.title} ${mc.align}`)
|
||||
.attr('data-text-transform', transform)
|
||||
.attr('data-render-always', 1) // Render even when outside the part bounding box
|
||||
shift += mc.dy
|
||||
store.set(['partTitles', part.name], mc.title)
|
||||
} else delete ids.title
|
||||
|
||||
// if they should be cut on the fold add that, with bias or without
|
||||
if (cutonfold && !ignoreOnFold)
|
||||
cutPoint.addText(bias ? 'plugin:onFoldAndBias' : 'plugin:onFoldLower')
|
||||
// otherwise if they should be on the bias, say so
|
||||
else if (bias) cutPoint.addText('plugin:onBias')
|
||||
/*
|
||||
* Title: cutlist
|
||||
*/
|
||||
if (mc.cutlist) {
|
||||
/*
|
||||
* Get cutlist instructions from the store, only proceed if the list is available
|
||||
*/
|
||||
const partCutlist = store.get(['cutlist', part.name], null)
|
||||
if (partCutlist?.materials) {
|
||||
/*
|
||||
* Iterate over materials
|
||||
*/
|
||||
for (const [material, instructions] of Object.entries(partCutlist.materials)) {
|
||||
instructions.forEach(({ cut, identical, onBias, onFold }, c) => {
|
||||
/*
|
||||
* Create point
|
||||
*/
|
||||
const id = `${ids.cutlist}_${material}_${c}`
|
||||
ids[`cutlist_${material}_${c}`] = id
|
||||
points[id] = mc.at
|
||||
.clone()
|
||||
.shift(-90, shift)
|
||||
.attr('data-text', 'plugin-annotations:cut')
|
||||
.attr('data-text-class', `${mc.classes.cutlist} ${mc.align}`)
|
||||
.attr('data-text-transform', transform)
|
||||
.attr('data-render-always', 1) // Render even when outside the part bounding box
|
||||
.addText(cut)
|
||||
shift += mc.dy
|
||||
|
||||
// add 'from' the material
|
||||
cutPoint.addText('plugin:from').addText('plugin:' + material)
|
||||
/*
|
||||
* Add instructions if parts are mirrored
|
||||
*/
|
||||
if (!identical && cut > 1) points[id].addText('plugin-annotations:mirrored')
|
||||
|
||||
// save and shift
|
||||
points[`_${prefix}_titleCut_${material}_${c}`] = cutPoint
|
||||
shift += 8
|
||||
})
|
||||
/*
|
||||
* Add instructions if parts are cut on fold
|
||||
*/
|
||||
if (onFold)
|
||||
points[id].addText(
|
||||
onBias ? 'plugin-annotations:onFoldAndBias' : 'plugin-annotations:onFold'
|
||||
)
|
||||
/*
|
||||
* Add instructions if parts on on bias
|
||||
*/ else if (onBias) points[id].addText('plugin-annotations:onBias')
|
||||
|
||||
/*
|
||||
* Add 'from' (material) text
|
||||
*/
|
||||
points[id].addText('plugin-annotations:from').addText('plugin-annotations:' + material)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
} else delete ids.cutlist
|
||||
|
||||
let name = store.data?.name || 'No Name'
|
||||
name = name.replace('@freesewing/', '')
|
||||
name += ' v' + (store.data?.version || 'No Version')
|
||||
points[`_${prefix}_titlePattern`] = nextPoint(name, 'fill-note')
|
||||
/*
|
||||
* Title: Design name
|
||||
*/
|
||||
points[ids.name] = mc.at
|
||||
.clone()
|
||||
.shift(-90, shift)
|
||||
.attr(
|
||||
'data-text',
|
||||
`${(store.data?.name || 'plugin-annotations:noName').replace('@freesewing/', '')} v${
|
||||
store.data?.version || 'plugin-annotations:noVersion'
|
||||
}`
|
||||
)
|
||||
.attr('data-text-class', `${mc.classes.name} ${mc.align}`)
|
||||
.attr('data-text-transform', transform)
|
||||
.attr('data-render-always', 1) // Render even when outside the part bounding box
|
||||
shift += mc.dy
|
||||
|
||||
/*
|
||||
* Title: For (measurements set)
|
||||
*/
|
||||
if (store.data.for) {
|
||||
shift += 8
|
||||
points[`_${prefix}_titleFor`] = nextPoint(`( ${store.data.for} )`, 'fill-current font-bold')
|
||||
}
|
||||
shift += 6
|
||||
const now = new Date()
|
||||
let hours = now.getHours()
|
||||
let mins = now.getMinutes()
|
||||
if (hours < 10) hours = `0${hours}`
|
||||
if (mins < 10) mins = `0${mins}`
|
||||
const exportDate = now.toLocaleDateString(locale || 'en', {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
})
|
||||
points[`_${prefix}_exportDate`] = nextPoint(`${exportDate}@ ${hours}:${mins}`, 'text-sm')
|
||||
points[ids.for] = mc.at
|
||||
.shift(-90, shift)
|
||||
.attr('data-text', `(${store.data.for})`)
|
||||
.attr('data-text-class', `${mc.classes.for} ${mc.align}`)
|
||||
.attr('data-text-transform', transform)
|
||||
.attr('data-render-always', 1) // Render even when outside the part bounding box
|
||||
shift += mc.dy
|
||||
} else delete ids.for
|
||||
|
||||
/*
|
||||
* Title: Date
|
||||
*/
|
||||
points[ids.date] = mc.at
|
||||
.shift(-90, shift)
|
||||
.attr(
|
||||
'data-text',
|
||||
new Date().toLocaleString(locale || 'en', {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
})
|
||||
)
|
||||
.attr('data-text-class', `${mc.classes.date} ${mc.align}`)
|
||||
.attr('data-text-transform', transform)
|
||||
.attr('data-render-always', 1) // Render even when outside the part bounding box
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmtitle
|
||||
*/
|
||||
store.set(['parts', part.name, 'macros', 'title', 'ids', mc.id, 'points'], ids)
|
||||
|
||||
return store.getMacroIds(mc.id, 'title')
|
||||
}
|
||||
|
||||
// Export macros
|
||||
export const titleMacros = { title: titleMacro }
|
||||
export const titleMacros = {
|
||||
title: addTitleMacro,
|
||||
rmtitle: removeTitleMacro,
|
||||
}
|
||||
|
|
27
plugins/plugin-annotations/src/utils.mjs
Normal file
27
plugins/plugin-annotations/src/utils.mjs
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* Helper method to get the various IDs for a macro
|
||||
*/
|
||||
export const getIds = (keys, id, macroName) => {
|
||||
const ids = {}
|
||||
for (const key of keys) ids[key] = `__macro_${macroName}_${id}_${key}`
|
||||
|
||||
return ids
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper method to get an existing macro id
|
||||
*/
|
||||
const getIdsFromStore = (store, id, macroName, partName = false) => {
|
||||
if (!partName) partName = store.activePart
|
||||
const data = store.get(['parts', partName, 'macros', macroName, 'ids', id])
|
||||
|
||||
return data ? data : false
|
||||
}
|
||||
|
||||
/*
|
||||
* Add these to the store
|
||||
*/
|
||||
export const utilsStores = [
|
||||
['createMacroIds', (store, keys, id, macroName) => getIds(keys, id, macroName)],
|
||||
['getMacroIds', getIdsFromStore],
|
||||
]
|
|
@ -22,12 +22,15 @@ describe('Banner Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.example
|
||||
// Note that this macro does not add text to the path, but clones
|
||||
// the path and adds text to the clone which is then hidden
|
||||
const c = pattern.parts[0].test.paths.__macro_banner_banner_banner
|
||||
expect(c.attributes.get('data-text')).to.equal(
|
||||
'             foo              foo              foo              foo              foo              foo              foo              foo              foo              foo             '
|
||||
'foo              foo              foo              foo              foo              foo              foo              foo              foo              foo              foo'
|
||||
)
|
||||
expect(c.attributes.get('data-text-class').trim()).to.equal('center')
|
||||
expect(c.attributes.get('data-text-dy')).to.equal('-1')
|
||||
|
@ -52,11 +55,12 @@ describe('Banner Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.example2
|
||||
expect(c.attributes.get('data-text')).to.equal('   foo    foo   ')
|
||||
const c = pattern.parts[0].test.paths.__macro_banner_banner_banner
|
||||
expect(c.attributes.get('data-text')).to.equal('foo    foo    foo')
|
||||
})
|
||||
|
||||
it('Number of repetitions should be configurable', () => {
|
||||
|
@ -78,12 +82,13 @@ describe('Banner Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.example3
|
||||
const c = pattern.parts[0].test.paths.__macro_banner_banner_banner
|
||||
expect(c.attributes.get('data-text')).to.equal(
|
||||
'  foo   foo   foo   foo  '
|
||||
'foo   foo   foo   foo   foo'
|
||||
)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -18,11 +18,11 @@ describe('Bartack plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
|
||||
const c = pattern.parts[0].test.paths.bartack
|
||||
const c = pattern.parts[0].test.paths.__macro_bartack_bartack_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[0].to.x).to.equal(10)
|
||||
|
@ -53,10 +53,11 @@ describe('Bartack plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.bartack
|
||||
const c = pattern.parts[0].test.paths.__macro_bartackalong_bartack_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[0].to.x).to.equal(8.5)
|
||||
|
@ -89,10 +90,11 @@ describe('Bartack plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.bartack
|
||||
const c = pattern.parts[0].test.paths.__macro_bartackalong_bartack_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(round(c.ops[0].to.x)).to.equal(8.5)
|
||||
|
@ -125,10 +127,11 @@ describe('Bartack plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.bartack
|
||||
const c = pattern.parts[0].test.paths.__macro_bartackfractionalong_bartack_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(round(c.ops[0].to.x)).to.equal(8.5)
|
||||
|
@ -159,10 +162,11 @@ describe('Bartack plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.bartack
|
||||
const c = pattern.parts[0].test.paths.__macro_bartack_bartack_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[0].to.x).to.equal(10)
|
||||
|
@ -193,10 +197,11 @@ describe('Bartack plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.bartack
|
||||
const c = pattern.parts[0].test.paths.__macro_bartack_bartack_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[0].to.x).to.equal(10)
|
||||
|
@ -227,10 +232,11 @@ describe('Bartack plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.bartack
|
||||
const c = pattern.parts[0].test.paths.__macro_bartack_bartack_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(round(c.ops[0].to.x)).to.equal(11.06)
|
||||
|
@ -254,17 +260,18 @@ describe('Bartack plugin Tests', () => {
|
|||
points.from = new Point(10, 20)
|
||||
macro('bartack', {
|
||||
anchor: points.from,
|
||||
suffix: 'foo',
|
||||
id: 'foo',
|
||||
})
|
||||
|
||||
part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.bartackfoo
|
||||
const c = pattern.parts[0].test.paths.__macro_bartack_foo_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
})
|
||||
|
||||
|
@ -275,17 +282,18 @@ describe('Bartack plugin Tests', () => {
|
|||
points.from = new Point(10, 20)
|
||||
macro('bartack', {
|
||||
anchor: points.from,
|
||||
prefix: 'foo',
|
||||
id: 'foo',
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const design = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const design = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new design()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.foobartack
|
||||
const c = pattern.parts[0].test.paths.__macro_bartack_foo_stitches
|
||||
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
||||
})
|
||||
})
|
||||
|
|
|
@ -26,7 +26,7 @@ describe('Buttons Plugin Test', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const svg = new Pattern().draft().render()
|
||||
expect(svg).to.contain('<use x="10" y="20" xlink:href="#button"')
|
||||
})
|
||||
|
@ -42,7 +42,7 @@ describe('Buttons Plugin Test', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const svg = new Pattern().draft().render()
|
||||
expect(svg).to.contain('<use x="10" y="20" xlink:href="#buttonhole"')
|
||||
})
|
||||
|
@ -58,7 +58,7 @@ describe('Buttons Plugin Test', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const svg = new Pattern().draft().render()
|
||||
expect(svg).to.contain('<use x="10" y="20" xlink:href="#buttonhole-start"')
|
||||
})
|
||||
|
@ -74,7 +74,7 @@ describe('Buttons Plugin Test', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const svg = new Pattern().draft().render()
|
||||
expect(svg).to.contain('<use x="10" y="20" xlink:href="#buttonhole-end"')
|
||||
})
|
||||
|
@ -90,7 +90,7 @@ describe('Buttons Plugin Test', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const svg = new Pattern().draft().render()
|
||||
expect(svg).to.contain('<use x="10" y="20" xlink:href="#snap-stud"')
|
||||
})
|
||||
|
@ -106,7 +106,7 @@ describe('Buttons Plugin Test', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const svg = new Pattern().draft().render()
|
||||
expect(svg).to.contain('<use x="10" y="20" xlink:href="#snap-socket"')
|
||||
})
|
||||
|
|
|
@ -12,35 +12,37 @@ describe('Crossbox Plugin Tests', () => {
|
|||
points.from = new Point(10, 10)
|
||||
points.to = new Point(30, 30)
|
||||
macro('crossbox', {
|
||||
from: points.from,
|
||||
to: points.to,
|
||||
topLeft: points.from,
|
||||
bottomRight: points.to,
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
var c = pattern.parts[0].test.paths['1crossBox']
|
||||
let c = pattern.parts[0].test.paths.__macro_crossbox_crossbox_box
|
||||
expect(c.attributes.get('class')).to.equal('lining dotted stroke-sm')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
expect(c.ops[2].type).to.equal('line')
|
||||
expect(c.ops[3].type).to.equal('line')
|
||||
expect(c.ops[4].type).to.equal('line')
|
||||
expect(c.ops[5].type).to.equal('close')
|
||||
expect(round(c.ops[0].to.x)).to.equal(10)
|
||||
expect(round(c.ops[0].to.y)).to.equal(10)
|
||||
expect(round(c.ops[1].to.x)).to.equal(30)
|
||||
expect(round(c.ops[1].to.y)).to.equal(10)
|
||||
expect(round(c.ops[1].to.x)).to.equal(10)
|
||||
expect(round(c.ops[1].to.y)).to.equal(30)
|
||||
expect(round(c.ops[2].to.x)).to.equal(30)
|
||||
expect(round(c.ops[2].to.y)).to.equal(30)
|
||||
expect(round(c.ops[3].to.x)).to.equal(10)
|
||||
expect(round(c.ops[3].to.y)).to.equal(30)
|
||||
expect(round(c.ops[3].to.x)).to.equal(30)
|
||||
expect(round(c.ops[3].to.y)).to.equal(10)
|
||||
expect(round(c.ops[4].to.x)).to.equal(10)
|
||||
expect(round(c.ops[4].to.y)).to.equal(10)
|
||||
c = pattern.parts[0].test.paths['1_topCross']
|
||||
c = pattern.parts[0].test.paths.__macro_crossbox_crossbox_cross
|
||||
expect(c.attributes.get('class')).to.equal('lining dotted stroke-sm')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -50,22 +52,22 @@ describe('Crossbox Plugin Tests', () => {
|
|||
expect(c.ops[5].type).to.equal('line')
|
||||
expect(c.ops[6].type).to.equal('move')
|
||||
expect(c.ops[7].type).to.equal('line')
|
||||
expect(round(c.ops[0].to.x)).to.equal(12)
|
||||
expect(round(c.ops[0].to.y)).to.equal(12)
|
||||
expect(round(c.ops[1].to.x)).to.equal(28)
|
||||
expect(round(c.ops[1].to.y)).to.equal(28)
|
||||
expect(round(c.ops[2].to.x)).to.equal(28)
|
||||
expect(round(c.ops[2].to.y)).to.equal(12)
|
||||
expect(round(c.ops[3].to.x)).to.equal(12)
|
||||
expect(round(c.ops[3].to.y)).to.equal(28)
|
||||
expect(round(c.ops[4].to.x)).to.equal(12)
|
||||
expect(round(c.ops[4].to.y)).to.equal(12)
|
||||
expect(round(c.ops[5].to.x)).to.equal(28)
|
||||
expect(round(c.ops[5].to.y)).to.equal(12)
|
||||
expect(round(c.ops[6].to.x)).to.equal(28)
|
||||
expect(round(c.ops[6].to.y)).to.equal(28)
|
||||
expect(round(c.ops[7].to.x)).to.equal(12)
|
||||
expect(round(c.ops[7].to.y)).to.equal(28)
|
||||
expect(round(c.ops[0].to.x)).to.equal(11.41)
|
||||
expect(round(c.ops[0].to.y)).to.equal(11.41)
|
||||
expect(round(c.ops[1].to.x)).to.equal(28.59)
|
||||
expect(round(c.ops[1].to.y)).to.equal(11.41)
|
||||
expect(round(c.ops[2].to.x)).to.equal(28.59)
|
||||
expect(round(c.ops[2].to.y)).to.equal(28.59)
|
||||
expect(round(c.ops[3].to.x)).to.equal(11.41)
|
||||
expect(round(c.ops[3].to.y)).to.equal(28.59)
|
||||
expect(round(c.ops[4].to.x)).to.equal(11.41)
|
||||
expect(round(c.ops[4].to.y)).to.equal(11.41)
|
||||
expect(round(c.ops[5].to.x)).to.equal(28.59)
|
||||
expect(round(c.ops[5].to.y)).to.equal(28.59)
|
||||
expect(round(c.ops[6].to.x)).to.equal(28.59)
|
||||
expect(round(c.ops[6].to.y)).to.equal(11.41)
|
||||
expect(round(c.ops[7].to.x)).to.equal(11.41)
|
||||
expect(round(c.ops[7].to.y)).to.equal(28.59)
|
||||
})
|
||||
|
||||
it('Should run the crossbox macro with text', () => {
|
||||
|
@ -84,10 +86,12 @@ describe('Crossbox Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.points['1textAnchor']
|
||||
expect(c.attributes.get('data-text')).to.equal('test')
|
||||
expect(
|
||||
pattern.parts[0].test.points.__macro_crossbox_crossbox_text.attributes.get('data-text')
|
||||
).to.equal('test')
|
||||
})
|
||||
})
|
||||
|
|
|
@ -16,7 +16,7 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(methods.addCut).to.be.a('function')
|
||||
|
@ -36,15 +36,15 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.materials.fabric).to.have.lengthOf(1)
|
||||
expect(pattern.setStores[0].cutlist.example_part.materials.fabric[0]).to.deep.equal({
|
||||
cut: 2,
|
||||
identical: false,
|
||||
bias: false,
|
||||
ignoreOnFold: false,
|
||||
onBias: false,
|
||||
onFold: false,
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -52,21 +52,21 @@ describe('Cutlist Plugin Tests', () => {
|
|||
const part = {
|
||||
name: 'example_part',
|
||||
draft: ({ store, part }) => {
|
||||
store.cutlist.addCut({ cut: 3, material: 'lining', identical: true })
|
||||
store.cutlist.addCut({ cut: 3, from: 'lining', identical: true })
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.materials.lining).to.have.lengthOf(1)
|
||||
expect(pattern.setStores[0].cutlist.example_part.materials.lining[0]).to.deep.equal({
|
||||
cut: 3,
|
||||
identical: true,
|
||||
bias: false,
|
||||
ignoreOnFold: false,
|
||||
onBias: false,
|
||||
onFold: false,
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -82,7 +82,7 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.materials.lining).to.be.undefined
|
||||
|
@ -100,7 +100,7 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.materials.lining).to.be.undefined
|
||||
|
@ -119,7 +119,7 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.materials).to.be.undefined
|
||||
|
@ -135,7 +135,7 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.grain).to.equal(45)
|
||||
|
@ -152,7 +152,7 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.grain).to.be.undefined
|
||||
|
@ -172,7 +172,7 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.cutOnFold[0].x).to.equal(2)
|
||||
|
@ -196,7 +196,7 @@ describe('Cutlist Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
expect(pattern.setStores[0].cutlist.example_part.cutOnFold).to.be.undefined
|
||||
|
|
|
@ -20,14 +20,15 @@ describe('Cutonfold Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.cutonfoldCutonfold
|
||||
const c = pattern.parts[0].test.paths.__macro_cutonfold_cutonfold_line
|
||||
expect(c.attributes.get('class')).to.equal('note')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#cutonfoldFrom)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#cutonfoldTo)')
|
||||
expect(c.attributes.get('data-text')).to.equal('cutOnFold')
|
||||
expect(c.attributes.get('data-text')).to.equal('plugin-annotations:cutOnFold')
|
||||
expect(c.attributes.get('data-text-class')).to.equal('center fill-note')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -59,11 +60,13 @@ describe('Cutonfold Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.cutonfoldCutonfold
|
||||
expect(c.attributes.get('data-text')).to.equal('cutOnFoldAndGrainline')
|
||||
expect(
|
||||
pattern.parts[0].test.paths.__macro_cutonfold_cutonfold_line.attributes.get('data-text')
|
||||
).to.equal('plugin-annotations:cutOnFoldAndGrainline')
|
||||
})
|
||||
|
||||
it('Should run the cutonfold macro with configurable offset', () => {
|
||||
|
@ -82,14 +85,15 @@ describe('Cutonfold Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
let c = pattern.parts[0].test.paths.cutonfoldCutonfold
|
||||
let c = pattern.parts[0].test.paths.__macro_cutonfold_cutonfold_line
|
||||
expect(c.attributes.get('class')).to.equal('note')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#cutonfoldFrom)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#cutonfoldTo)')
|
||||
expect(c.attributes.get('data-text')).to.equal('cutOnFold')
|
||||
expect(c.attributes.get('data-text')).to.equal('plugin-annotations:cutOnFold')
|
||||
expect(c.attributes.get('data-text-class')).to.equal('center fill-note')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -114,21 +118,22 @@ describe('Cutonfold Plugin Tests', () => {
|
|||
macro('cutonfold', {
|
||||
from: points.from,
|
||||
to: points.to,
|
||||
margin: 20,
|
||||
margin: 0.2,
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
let c = pattern.parts[0].test.paths.cutonfoldCutonfold
|
||||
let c = pattern.parts[0].test.paths.__macro_cutonfold_cutonfold_line
|
||||
expect(c.attributes.get('class')).to.equal('note')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#cutonfoldFrom)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#cutonfoldTo)')
|
||||
expect(c.attributes.get('data-text')).to.equal('cutOnFold')
|
||||
expect(c.attributes.get('data-text')).to.equal('plugin-annotations:cutOnFold')
|
||||
expect(c.attributes.get('data-text-class')).to.equal('center fill-note')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
|
|
@ -15,18 +15,20 @@ describe('Dimension Plugin Tests', () => {
|
|||
from: points.from,
|
||||
to: points.to,
|
||||
y: 35,
|
||||
force: true,
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
|
||||
it('should draw a line and add text to indicate its length', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1']
|
||||
const c = pattern.parts[0].test.paths.__macro_hd_hd_line
|
||||
expect(c.attributes.get('class')).to.equal('mark')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#dimensionFrom)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#dimensionTo)')
|
||||
|
@ -41,7 +43,7 @@ describe('Dimension Plugin Tests', () => {
|
|||
})
|
||||
|
||||
it('should draw the start marker', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1_ls']
|
||||
const c = pattern.parts[0].test.paths.__macro_hd_hd_from
|
||||
expect(c.attributes.get('class')).to.equal('mark dotted')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -52,7 +54,7 @@ describe('Dimension Plugin Tests', () => {
|
|||
})
|
||||
|
||||
it('should draw the end marker', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1_le']
|
||||
const c = pattern.parts[0].test.paths.__macro_hd_hd_to
|
||||
expect(c.attributes.get('class')).to.equal('mark dotted')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -73,18 +75,20 @@ describe('Dimension Plugin Tests', () => {
|
|||
from: points.from,
|
||||
to: points.to,
|
||||
x: 25,
|
||||
force: true,
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
|
||||
it('Should draw a line and add text to indicate its length', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1']
|
||||
const c = pattern.parts[0].test.paths.__macro_vd_vd_line
|
||||
expect(c.attributes.get('class')).to.equal('mark')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#dimensionFrom)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#dimensionTo)')
|
||||
|
@ -99,7 +103,7 @@ describe('Dimension Plugin Tests', () => {
|
|||
})
|
||||
|
||||
it('Should draw the start marker', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1_ls']
|
||||
const c = pattern.parts[0].test.paths.__macro_vd_vd_from
|
||||
expect(c.attributes.get('class')).to.equal('mark dotted')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -110,7 +114,7 @@ describe('Dimension Plugin Tests', () => {
|
|||
})
|
||||
|
||||
it('Should draw the end marker', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1_le']
|
||||
const c = pattern.parts[0].test.paths.__macro_vd_vd_to
|
||||
expect(c.attributes.get('class')).to.equal('mark dotted')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -131,18 +135,20 @@ describe('Dimension Plugin Tests', () => {
|
|||
from: points.from,
|
||||
to: points.to,
|
||||
d: 15,
|
||||
force: true,
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
|
||||
it('Should draw a line and add text to indicate its length', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1']
|
||||
const c = pattern.parts[0].test.paths.__macro_ld_ld_line
|
||||
expect(c.attributes.get('class')).to.equal('mark')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#dimensionFrom)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#dimensionTo)')
|
||||
|
@ -157,7 +163,7 @@ describe('Dimension Plugin Tests', () => {
|
|||
})
|
||||
|
||||
it('Should draw the start marker', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1_ls']
|
||||
const c = pattern.parts[0].test.paths.__macro_ld_ld_from
|
||||
expect(c.attributes.get('class')).to.equal('mark dotted')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -168,7 +174,7 @@ describe('Dimension Plugin Tests', () => {
|
|||
})
|
||||
|
||||
it('Should draw the end marker', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1_le']
|
||||
const c = pattern.parts[0].test.paths.__macro_ld_ld_to
|
||||
expect(c.attributes.get('class')).to.equal('mark dotted')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -190,18 +196,20 @@ describe('Dimension Plugin Tests', () => {
|
|||
macro('pd', {
|
||||
path: new Path().move(points.from).curve(points.cp1, points.cp2, points.to),
|
||||
d: 15,
|
||||
force: true,
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
|
||||
it('Should draw a line and add text to indicate the length', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1']
|
||||
const c = pattern.parts[0].test.paths.__macro_pd_pd_line
|
||||
expect(c.attributes.get('class')).to.equal('mark')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#dimensionFrom)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#dimensionTo)')
|
||||
|
@ -216,7 +224,7 @@ describe('Dimension Plugin Tests', () => {
|
|||
})
|
||||
|
||||
it('Should draw the start marker', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1_ls']
|
||||
const c = pattern.parts[0].test.paths.__macro_pd_pd_from
|
||||
expect(c.attributes.get('class')).to.equal('mark dotted')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -227,7 +235,7 @@ describe('Dimension Plugin Tests', () => {
|
|||
})
|
||||
|
||||
it('Should draw the end marker', () => {
|
||||
const c = pattern.parts[0].test.paths['__paperless1_le']
|
||||
const c = pattern.parts[0].test.paths.__macro_pd_pd_to
|
||||
expect(c.attributes.get('class')).to.equal('mark dotted')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
|
|
@ -20,14 +20,15 @@ describe('Grainline Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Pattern()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.grainline
|
||||
const c = pattern.parts[0].test.paths.__macro_grainline_grainline_line
|
||||
expect(c.attributes.get('class')).to.equal('note')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#grainlineFrom)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#grainlineTo)')
|
||||
expect(c.attributes.get('data-text')).to.equal('grainline')
|
||||
expect(c.attributes.get('data-text')).to.equal('plugin-annotations:grainline')
|
||||
expect(c.attributes.get('data-text-class')).to.equal('center fill-note')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
|
|
@ -6,7 +6,7 @@ const expect = chai.expect
|
|||
|
||||
describe('Logo Plugin Tests', () => {
|
||||
it('Should import style and defs', () => {
|
||||
const Pattern = new Design()
|
||||
const Pattern = new Design({ noCorePlugins: true })
|
||||
const pattern = new Pattern().use(annotationsPlugin)
|
||||
pattern.draft().render()
|
||||
expect(pattern.svg.defs.get('logo')).to.not.equal(false)
|
||||
|
|
|
@ -11,7 +11,7 @@ const part = {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Pattern()
|
||||
pattern.draft().render()
|
||||
|
||||
|
@ -32,7 +32,7 @@ describe('Notches Plugin Test', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Pattern()
|
||||
pattern.draft().render()
|
||||
const c = pattern.svg
|
||||
|
|
|
@ -20,10 +20,11 @@ describe('Pleat Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
var c = pattern.parts[0].test.paths.pleatPleatFrom
|
||||
let c = pattern.parts[0].test.paths.__macro_pleat_pleat_from
|
||||
expect(c.attributes.get('class')).to.equal('note')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -31,7 +32,7 @@ describe('Pleat Plugin Tests', () => {
|
|||
expect(round(c.ops[0].to.y)).to.equal(20)
|
||||
expect(round(c.ops[1].to.x)).to.equal(45)
|
||||
expect(round(c.ops[1].to.y)).to.equal(20)
|
||||
c = pattern.parts[0].test.paths.pleatPleatTo
|
||||
c = pattern.parts[0].test.paths.__macro_pleat_pleat_to
|
||||
expect(c.attributes.get('class')).to.equal('note dashed')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -39,7 +40,7 @@ describe('Pleat Plugin Tests', () => {
|
|||
expect(round(c.ops[0].to.y)).to.equal(220)
|
||||
expect(round(c.ops[1].to.x)).to.equal(45)
|
||||
expect(round(c.ops[1].to.y)).to.equal(220)
|
||||
c = pattern.parts[0].test.paths.pleatPleatArrow
|
||||
c = pattern.parts[0].test.paths.__macro_pleat_pleat_arrow
|
||||
expect(c.attributes.get('class')).to.equal('note')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#pleatTo)')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
|
@ -47,7 +48,7 @@ describe('Pleat Plugin Tests', () => {
|
|||
expect(round(c.ops[0].to.x)).to.equal(18.75)
|
||||
expect(round(c.ops[0].to.y)).to.equal(20)
|
||||
expect(round(c.ops[1].to.x)).to.equal(18.75)
|
||||
expect(round(c.ops[1].to.y)).to.equal(220)
|
||||
expect(round(c.ops[1].to.y)).to.equal(170)
|
||||
})
|
||||
|
||||
it('Should run the pleat/reverse macro', () => {
|
||||
|
@ -66,17 +67,18 @@ describe('Pleat Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
var c = pattern.parts[0].test.paths.pleatPleatFrom
|
||||
let c = pattern.parts[0].test.paths.__macro_pleat_pleat_from
|
||||
expect(c.attributes.get('class')).to.equal('note dashed')
|
||||
c = pattern.parts[0].test.paths.pleatPleatTo
|
||||
c = pattern.parts[0].test.paths.__macro_pleat_pleat_to
|
||||
expect(c.attributes.get('class')).to.equal('note')
|
||||
c = pattern.parts[0].test.paths.pleatPleatArrow
|
||||
c = pattern.parts[0].test.paths.__macro_pleat_pleat_arrow
|
||||
expect(round(c.ops[0].to.x)).to.equal(18.75)
|
||||
expect(round(c.ops[0].to.y)).to.equal(220)
|
||||
expect(round(c.ops[1].to.x)).to.equal(18.75)
|
||||
expect(round(c.ops[1].to.y)).to.equal(20)
|
||||
expect(round(c.ops[1].to.y)).to.equal(70)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -18,44 +18,30 @@ describe('Scalebox Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Pattern()
|
||||
pattern.draft()
|
||||
let p = pattern.parts[0].test.points
|
||||
expect(p.__scaleboxMetricTopLeft.x).to.equal(50)
|
||||
expect(p.__scaleboxMetricTopLeft.y).to.equal(175)
|
||||
expect(p.__scaleboxMetricTopRight.x).to.equal(150)
|
||||
expect(p.__scaleboxMetricTopRight.y).to.equal(175)
|
||||
expect(p.__scaleboxMetricBottomLeft.x).to.equal(50)
|
||||
expect(p.__scaleboxMetricBottomLeft.y).to.equal(225)
|
||||
expect(p.__scaleboxMetricBottomRight.x).to.equal(150)
|
||||
expect(p.__scaleboxMetricBottomRight.y).to.equal(225)
|
||||
expect(p.__scaleboxImperialTopLeft.x).to.equal(49.2)
|
||||
expect(p.__scaleboxImperialTopLeft.y).to.equal(174.6)
|
||||
expect(p.__scaleboxImperialTopRight.x).to.equal(150.8)
|
||||
expect(p.__scaleboxImperialTopRight.y).to.equal(174.6)
|
||||
expect(p.__scaleboxImperialBottomLeft.x).to.equal(49.2)
|
||||
expect(p.__scaleboxImperialBottomLeft.y).to.equal(225.4)
|
||||
expect(p.__scaleboxImperialBottomRight.x).to.equal(150.8)
|
||||
expect(p.__scaleboxImperialBottomRight.y).to.equal(225.4)
|
||||
expect(p.__scaleboxLead.x).to.equal(51.2)
|
||||
expect(p.__scaleboxLead.y).to.equal(181.6)
|
||||
expect(p.__scaleboxTitle.x).to.equal(51.2)
|
||||
expect(p.__scaleboxTitle.y).to.equal(191.6)
|
||||
expect(p.__scaleboxText.x).to.equal(51.2)
|
||||
expect(p.__scaleboxText.y).to.equal(203.6)
|
||||
expect(p.__scaleboxLink.x).to.equal(51.2)
|
||||
expect(p.__scaleboxLink.y).to.equal(208.6)
|
||||
expect(p.__scaleboxMetric.x).to.equal(100)
|
||||
expect(p.__scaleboxMetric.y).to.equal(220)
|
||||
expect(p.__scaleboxImperial.x).to.equal(100)
|
||||
expect(p.__scaleboxImperial.y).to.equal(224)
|
||||
p = pattern.parts[0].test.paths.__scaleboxMetric
|
||||
expect(p.__macro_scalebox_scalebox_textLead.x).to.equal(55)
|
||||
expect(p.__macro_scalebox_scalebox_textLead.y).to.equal(185)
|
||||
expect(p.__macro_scalebox_scalebox_textTitle.x).to.equal(55)
|
||||
expect(p.__macro_scalebox_scalebox_textTitle.y).to.equal(195)
|
||||
expect(p.__macro_scalebox_scalebox_textText.x).to.equal(55)
|
||||
expect(p.__macro_scalebox_scalebox_textText.y).to.equal(207)
|
||||
expect(p.__macro_scalebox_scalebox_textLink.x).to.equal(55)
|
||||
expect(p.__macro_scalebox_scalebox_textLink.y).to.equal(212)
|
||||
expect(p.__macro_scalebox_scalebox_textMetric.x).to.equal(100)
|
||||
expect(p.__macro_scalebox_scalebox_textMetric.y).to.equal(220)
|
||||
expect(p.__macro_scalebox_scalebox_textImperial.x).to.equal(100)
|
||||
expect(p.__macro_scalebox_scalebox_textImperial.y).to.equal(224)
|
||||
p = pattern.parts[0].test.paths.__macro_scalebox_scalebox_metric
|
||||
expect(p.ops[0].type).to.equal('move')
|
||||
expect(p.ops[1].type).to.equal('line')
|
||||
expect(p.ops[2].type).to.equal('line')
|
||||
expect(p.ops[3].type).to.equal('line')
|
||||
expect(p.ops[4].type).to.equal('close')
|
||||
expect(p.ops[4].type).to.equal('line')
|
||||
expect(p.ops[5].type).to.equal('close')
|
||||
expect(p.ops[0].to.x).to.equal(50)
|
||||
expect(p.ops[0].to.y).to.equal(175)
|
||||
expect(p.ops[1].to.x).to.equal(50)
|
||||
|
@ -64,12 +50,13 @@ describe('Scalebox Plugin Tests', () => {
|
|||
expect(p.ops[2].to.y).to.equal(225)
|
||||
expect(p.ops[3].to.x).to.equal(150)
|
||||
expect(p.ops[3].to.y).to.equal(175)
|
||||
p = pattern.parts[0].test.paths.__scaleboxImperial
|
||||
p = pattern.parts[0].test.paths.__macro_scalebox_scalebox_imperial
|
||||
expect(p.ops[0].type).to.equal('move')
|
||||
expect(p.ops[1].type).to.equal('line')
|
||||
expect(p.ops[2].type).to.equal('line')
|
||||
expect(p.ops[3].type).to.equal('line')
|
||||
expect(p.ops[4].type).to.equal('close')
|
||||
expect(p.ops[4].type).to.equal('line')
|
||||
expect(p.ops[5].type).to.equal('close')
|
||||
expect(p.ops[0].to.x).to.equal(49.2)
|
||||
expect(p.ops[0].to.y).to.equal(174.6)
|
||||
expect(p.ops[1].to.x).to.equal(49.2)
|
||||
|
@ -92,38 +79,23 @@ describe('Scalebox Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Pattern = new Design({ parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({ parts: [part], noCorePlugins: true })
|
||||
const pattern = new Pattern()
|
||||
pattern.draft()
|
||||
const p = pattern.parts[0].test.points
|
||||
expect(round(p.__scaleboxMetricTopLeft.x)).to.equal(75)
|
||||
expect(round(p.__scaleboxMetricTopLeft.y)).to.equal(250)
|
||||
expect(round(p.__scaleboxMetricTopRight.x)).to.equal(75)
|
||||
expect(round(p.__scaleboxMetricTopRight.y)).to.equal(150)
|
||||
expect(round(p.__scaleboxMetricBottomLeft.x)).to.equal(125)
|
||||
expect(round(p.__scaleboxMetricBottomLeft.y)).to.equal(250)
|
||||
expect(round(p.__scaleboxMetricBottomRight.x)).to.equal(125)
|
||||
expect(round(p.__scaleboxMetricBottomRight.y)).to.equal(150)
|
||||
expect(round(p.__scaleboxImperialTopLeft.x)).to.equal(74.6)
|
||||
expect(round(p.__scaleboxImperialTopLeft.y)).to.equal(250.8)
|
||||
expect(round(p.__scaleboxImperialTopRight.x)).to.equal(74.6)
|
||||
expect(round(p.__scaleboxImperialTopRight.y)).to.equal(149.2)
|
||||
expect(round(p.__scaleboxImperialBottomLeft.x)).to.equal(125.4)
|
||||
expect(round(p.__scaleboxImperialBottomLeft.y)).to.equal(250.8)
|
||||
expect(round(p.__scaleboxImperialBottomRight.x)).to.equal(125.4)
|
||||
expect(round(p.__scaleboxImperialBottomRight.y)).to.equal(149.2)
|
||||
expect(round(p.__scaleboxLead.x)).to.equal(81.6)
|
||||
expect(round(p.__scaleboxLead.y)).to.equal(248.8)
|
||||
expect(round(p.__scaleboxTitle.x)).to.equal(91.6)
|
||||
expect(round(p.__scaleboxTitle.y)).to.equal(248.8)
|
||||
expect(round(p.__scaleboxText.x)).to.equal(103.6)
|
||||
expect(round(p.__scaleboxText.y)).to.equal(248.8)
|
||||
expect(round(p.__scaleboxLink.x)).to.equal(108.6)
|
||||
expect(round(p.__scaleboxLink.y)).to.equal(248.8)
|
||||
expect(round(p.__scaleboxMetric.x)).to.equal(120)
|
||||
expect(round(p.__scaleboxMetric.y)).to.equal(200)
|
||||
expect(round(p.__scaleboxImperial.x)).to.equal(124)
|
||||
expect(round(p.__scaleboxImperial.y)).to.equal(200)
|
||||
expect(round(p.__macro_scalebox_scalebox_textLead.x)).to.equal(85)
|
||||
expect(round(p.__macro_scalebox_scalebox_textLead.y)).to.equal(245)
|
||||
expect(round(p.__macro_scalebox_scalebox_textTitle.x)).to.equal(95)
|
||||
expect(round(p.__macro_scalebox_scalebox_textTitle.y)).to.equal(245)
|
||||
expect(round(p.__macro_scalebox_scalebox_textText.x)).to.equal(107)
|
||||
expect(round(p.__macro_scalebox_scalebox_textText.y)).to.equal(245)
|
||||
expect(round(p.__macro_scalebox_scalebox_textLink.x)).to.equal(112)
|
||||
expect(round(p.__macro_scalebox_scalebox_textLink.y)).to.equal(245)
|
||||
expect(round(p.__macro_scalebox_scalebox_textMetric.x)).to.equal(120)
|
||||
expect(round(p.__macro_scalebox_scalebox_textMetric.y)).to.equal(200)
|
||||
expect(round(p.__macro_scalebox_scalebox_textImperial.x)).to.equal(124)
|
||||
expect(round(p.__macro_scalebox_scalebox_textImperial.y)).to.equal(200)
|
||||
})
|
||||
|
||||
it('Should run the scalebox macro with default text', () => {
|
||||
|
@ -139,22 +111,23 @@ describe('Scalebox Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
parts: [part],
|
||||
data: { name: 'test', version: '1.2.3' },
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern()
|
||||
pattern.draft()
|
||||
let p = pattern.parts[0].test.points.__scaleboxLead.attributes
|
||||
let p = pattern.parts[0].test.points.__macro_scalebox_scalebox_textLead.attributes
|
||||
expect(p.get('data-text')).to.equal('FreeSewing')
|
||||
expect(p.get('data-text-class')).to.equal('text-sm')
|
||||
p = pattern.parts[0].test.points.__scaleboxTitle.attributes
|
||||
expect(p.get('data-text-class')).to.equal('text-xs bold')
|
||||
p = pattern.parts[0].test.points.__macro_scalebox_scalebox_textTitle.attributes
|
||||
expect(p.get('data-text')).to.equal('test v1.2.3')
|
||||
expect(p.get('data-text-class')).to.equal('text-lg')
|
||||
p = pattern.parts[0].test.points.__scaleboxText.attributes
|
||||
expect(p.get('data-text-class')).to.equal('text bold')
|
||||
p = pattern.parts[0].test.points.__macro_scalebox_scalebox_textText.attributes
|
||||
expect(p.get('data-text-class')).to.equal('text-xs')
|
||||
expect(p.get('data-text-lineheight')).to.equal('4')
|
||||
expect(p.list['data-text'][0]).to.equal('supportFreesewingBecomeAPatron')
|
||||
expect(p.list['data-text'][0]).to.equal('plugin-annotations:supportFreeSewingBecomeAPatron')
|
||||
})
|
||||
|
||||
it('Should run the scalebox macro with custom text', () => {
|
||||
|
@ -173,22 +146,23 @@ describe('Scalebox Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
parts: [part],
|
||||
data: { name: 'test', version: '1.2.3' },
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern()
|
||||
pattern.draft()
|
||||
let p = pattern.parts[0].test.points.__scaleboxLead.attributes
|
||||
let p = pattern.parts[0].test.points.__macro_scalebox_scalebox_textLead.attributes
|
||||
expect(p.get('data-text')).to.equal('theLead')
|
||||
expect(p.get('data-text-class')).to.equal('text-sm')
|
||||
p = pattern.parts[0].test.points.__scaleboxTitle.attributes
|
||||
expect(p.get('data-text')).to.equal('theTitle')
|
||||
expect(p.get('data-text-class')).to.equal('text-lg')
|
||||
p = pattern.parts[0].test.points.__scaleboxText.attributes
|
||||
expect(p.get('data-text-class')).to.equal('text-xs bold')
|
||||
p = pattern.parts[0].test.points.__macro_scalebox_scalebox_textTitle.attributes
|
||||
expect(p.get('data-text')).to.equal('theTitle v1.2.3')
|
||||
expect(p.get('data-text-class')).to.equal('text bold')
|
||||
p = pattern.parts[0].test.points.__macro_scalebox_scalebox_textText.attributes
|
||||
expect(p.get('data-text')).to.equal('theText')
|
||||
expect(p.get('data-text-class')).to.equal('text-xs')
|
||||
expect(p.get('data-text-lineheight')).to.equal('4')
|
||||
})
|
||||
|
||||
it('Should apply scale to the scalebox macro', () => {
|
||||
|
@ -207,36 +181,34 @@ describe('Scalebox Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
parts: [part],
|
||||
plugins: [annotationsPlugin],
|
||||
data: { name: 'test', version: '1.2.3' },
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern({ scale: 0.5 })
|
||||
pattern.draft()
|
||||
let p = pattern.parts[0].test.points
|
||||
expect(p.__scaleboxMetricTopLeft.x).to.equal(75)
|
||||
expect(p.__scaleboxMetricTopLeft.y).to.equal(187.5)
|
||||
expect(p.__scaleboxMetricTopRight.x).to.equal(125)
|
||||
expect(p.__scaleboxMetricTopRight.y).to.equal(187.5)
|
||||
expect(p.__scaleboxMetricBottomLeft.x).to.equal(75)
|
||||
expect(p.__scaleboxMetricBottomLeft.y).to.equal(212.5)
|
||||
expect(p.__scaleboxMetricBottomRight.x).to.equal(125)
|
||||
expect(p.__scaleboxMetricBottomRight.y).to.equal(212.5)
|
||||
expect(p.__scaleboxImperialTopLeft.x).to.equal(74.6)
|
||||
expect(p.__scaleboxImperialTopLeft.y).to.equal(187.3)
|
||||
expect(p.__scaleboxImperialTopRight.x).to.equal(125.4)
|
||||
expect(p.__scaleboxImperialTopRight.y).to.equal(187.3)
|
||||
expect(p.__scaleboxImperialBottomLeft.x).to.equal(74.6)
|
||||
expect(p.__scaleboxImperialBottomLeft.y).to.equal(212.7)
|
||||
expect(p.__scaleboxImperialBottomRight.x).to.equal(125.4)
|
||||
expect(p.__scaleboxImperialBottomRight.y).to.equal(212.7)
|
||||
expect(p.__scaleboxMetric.attributes.get('data-text')).to.equal(
|
||||
'theWhiteInsideOfThisBoxShouldMeasure 5cm x 2.5cm'
|
||||
)
|
||||
expect(p.__scaleboxImperial.attributes.get('data-text')).to.equal(
|
||||
'theBlackOutsideOfThisBoxShouldMeasure 2″ x 1″'
|
||||
)
|
||||
let p = pattern.parts[0].test.paths.__macro_scalebox_scalebox_metric
|
||||
expect(p.ops[0].to.x).to.equal(75)
|
||||
expect(p.ops[0].to.y).to.equal(187.5)
|
||||
expect(p.ops[1].to.x).to.equal(75)
|
||||
expect(p.ops[1].to.y).to.equal(212.5)
|
||||
expect(p.ops[2].to.x).to.equal(125)
|
||||
expect(p.ops[2].to.y).to.equal(212.5)
|
||||
expect(p.ops[3].to.x).to.equal(125)
|
||||
expect(p.ops[3].to.y).to.equal(187.5)
|
||||
expect(p.ops[4].to.x).to.equal(75)
|
||||
expect(p.ops[4].to.y).to.equal(187.5)
|
||||
expect(
|
||||
pattern.parts[0].test.points.__macro_scalebox_scalebox_textMetric.attributes.get('data-text')
|
||||
).to.equal('plugin-annotations:theWhiteInsideOfThisBoxShouldMeasure 5cm x 2.5cm')
|
||||
expect(
|
||||
pattern.parts[0].test.points.__macro_scalebox_scalebox_textImperial.attributes.get(
|
||||
'data-text'
|
||||
)
|
||||
).to.equal('plugin-annotations:theBlackOutsideOfThisBoxShouldMeasure 2″ x 1″')
|
||||
})
|
||||
|
||||
it('Should apply scale to the miniscale macro', () => {
|
||||
|
@ -252,31 +224,32 @@ describe('Scalebox Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
parts: [part],
|
||||
plugins: [annotationsPlugin],
|
||||
data: { name: 'test', version: '1.2.3' },
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern({ scale: 0.5 })
|
||||
pattern.draft()
|
||||
let p = pattern.parts[0].test.points
|
||||
expect(p.__miniscaleMetricTopLeft.x).to.equal(92)
|
||||
expect(p.__miniscaleMetricTopLeft.y).to.equal(192)
|
||||
expect(p.__miniscaleMetricTopRight.x).to.equal(108)
|
||||
expect(p.__miniscaleMetricTopRight.y).to.equal(192)
|
||||
expect(p.__miniscaleMetricBottomLeft.x).to.equal(92)
|
||||
expect(p.__miniscaleMetricBottomLeft.y).to.equal(208)
|
||||
expect(p.__miniscaleMetricBottomRight.x).to.equal(108)
|
||||
expect(p.__miniscaleMetricBottomRight.y).to.equal(208)
|
||||
expect(p.__miniscaleImperialTopLeft.x).to.equal(92.0625)
|
||||
expect(p.__miniscaleImperialTopLeft.y).to.equal(192.0625)
|
||||
expect(p.__miniscaleImperialTopRight.x).to.equal(107.9375)
|
||||
expect(p.__miniscaleImperialTopRight.y).to.equal(192.0625)
|
||||
expect(p.__miniscaleImperialBottomLeft.x).to.equal(92.0625)
|
||||
expect(p.__miniscaleImperialBottomLeft.y).to.equal(207.9375)
|
||||
expect(p.__miniscaleImperialBottomRight.x).to.equal(107.9375)
|
||||
expect(p.__miniscaleImperialBottomRight.y).to.equal(207.9375)
|
||||
expect(p.__miniscaleMetric.attributes.get('data-text')).to.equal('1.6cm x 1.6cm')
|
||||
expect(p.__miniscaleImperial.attributes.get('data-text')).to.equal('⅝″ x ⅝″')
|
||||
let p = pattern.parts[0].test.paths.__macro_miniscale_miniscale_metric
|
||||
expect(p.ops[0].to.x).to.equal(92)
|
||||
expect(p.ops[0].to.y).to.equal(192)
|
||||
expect(p.ops[1].to.x).to.equal(92)
|
||||
expect(p.ops[1].to.y).to.equal(208)
|
||||
expect(p.ops[2].to.x).to.equal(108)
|
||||
expect(p.ops[2].to.y).to.equal(208)
|
||||
expect(p.ops[3].to.x).to.equal(108)
|
||||
expect(p.ops[3].to.y).to.equal(192)
|
||||
expect(p.ops[4].to.x).to.equal(92)
|
||||
expect(p.ops[4].to.y).to.equal(192)
|
||||
p = pattern.parts[0].test.points
|
||||
expect(p.__macro_miniscale_miniscale_textMetric.attributes.get('data-text')).to.equal(
|
||||
'1.6cm x 1.6cm'
|
||||
)
|
||||
expect(p.__macro_miniscale_miniscale_textImperial.attributes.get('data-text')).to.equal(
|
||||
'⅝″ x ⅝″'
|
||||
)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -20,14 +20,15 @@ describe('Sewtogether Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
const c = pattern.parts[0].test.paths.sewtogetherSewTogether
|
||||
const c = pattern.parts[0].test.paths.__macro_sewtogether_sewtogether_curve
|
||||
expect(c.attributes.get('class')).to.equal('dotted note stroke-sm')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#sewTogetherStart)')
|
||||
expect(c.attributes.get('marker-end')).to.equal('url(#sewTogetherEnd)')
|
||||
expect(c.attributes.get('data-text')).to.equal('sewTogether')
|
||||
expect(c.attributes.get('data-text')).to.equal('plugin-annotations:sewTogether')
|
||||
expect(c.attributes.get('data-text-class')).to.equal('center fill-note text-xs')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('curve')
|
||||
|
@ -58,11 +59,12 @@ describe('Sewtogether Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test()
|
||||
pattern.draft()
|
||||
var c = pattern.parts[0].test.paths.sewtogetherSewTogetherHinge
|
||||
expect(c.attributes.get('class')).to.equal('dotted note stroke-sm')
|
||||
let c = pattern.parts[0].test.paths.__macro_sewtogether_sewtogether_hinge
|
||||
expect(c.attributes.get('class')).to.equal('note dotted stroke-sm')
|
||||
expect(c.attributes.get('marker-start')).to.equal('url(#sewTogetherCross)')
|
||||
expect(c.ops[0].type).to.equal('move')
|
||||
expect(c.ops[1].type).to.equal('line')
|
||||
|
@ -89,10 +91,11 @@ describe('Sewtogether Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part] })
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
||||
const pattern = new Test({ sa: 10 })
|
||||
pattern.draft()
|
||||
var c = pattern.parts[0].test.paths.sewtogetherSewTogetherHinge
|
||||
let c = pattern.parts[0].test.paths.__macro_sewtogether_sewtogether_hinge
|
||||
expect(round(c.ops[1].to.x)).to.equal(0)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -20,29 +20,33 @@ describe('Title Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
data: { name: 'testPattern', version: 99 },
|
||||
parts: [part],
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern()
|
||||
pattern.draft().render()
|
||||
let p = pattern.parts[0].test.points.__titleNr
|
||||
let p = pattern.parts[0].test.points.__macro_title_title_nr
|
||||
expect(p.x).to.equal(-12)
|
||||
expect(p.y).to.equal(-34)
|
||||
expect(p.attributes.get('data-text')).to.equal('3')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-4xl fill-note font-bold')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-4xl fill-note font-bold left')
|
||||
expect(p.attributes.get('data-text-x')).to.equal('-12')
|
||||
expect(p.attributes.get('data-text-y')).to.equal('-34')
|
||||
p = pattern.parts[0].test.points.__titleName
|
||||
p = pattern.parts[0].test.points.__macro_title_title_title
|
||||
expect(p.attributes.get('data-text')).to.equal('unitTest')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-lg fill-current font-bold')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-lg fill-current font-bold left')
|
||||
expect(p.attributes.get('data-text-x')).to.equal('-12')
|
||||
expect(p.attributes.get('data-text-y')).to.equal('-26')
|
||||
p = pattern.parts[0].test.points.__titlePattern
|
||||
p = pattern.parts[0].test.points.__macro_title_title_name
|
||||
expect(p.attributes.get('data-text')).to.equal('testPattern v99')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('fill-note')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('fill-note left')
|
||||
expect(p.attributes.get('data-text-x')).to.equal('-12')
|
||||
expect(p.attributes.get('data-text-y')).to.equal('-18')
|
||||
p = pattern.parts[0].test.points.__macro_title_title_date
|
||||
expect(p.attributes.get('data-text')).to.include(', 202')
|
||||
})
|
||||
|
||||
it('Should run the title macro with append flag', () => {
|
||||
|
@ -61,22 +65,24 @@ describe('Title Plugin Tests', () => {
|
|||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
data: { name: 'testPattern', version: 99 },
|
||||
parts: [part],
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern()
|
||||
pattern.draft().render()
|
||||
let p = pattern.parts[0].test.points.__titleNr
|
||||
let p = pattern.parts[0].test.points.__macro_title_title_nr
|
||||
expect(p.x).to.equal(-12)
|
||||
expect(p.y).to.equal(-34)
|
||||
expect(p.attributes.get('data-text')).to.equal('# 3')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-4xl fill-note font-bold')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-4xl fill-note font-bold left')
|
||||
expect(p.attributes.get('data-text-x')).to.equal('-12')
|
||||
expect(p.attributes.get('data-text-y')).to.equal('-34')
|
||||
})
|
||||
|
||||
it('Should run the title macro with point prefix', () => {
|
||||
it('Should run the title macro with a custom ID', () => {
|
||||
const part = {
|
||||
name: 'test',
|
||||
draft: ({ points, Point, macro, part }) => {
|
||||
|
@ -85,35 +91,122 @@ describe('Title Plugin Tests', () => {
|
|||
at: points.anchor,
|
||||
nr: 3,
|
||||
title: 'unitTest',
|
||||
prefix: 'foo',
|
||||
id: 'foo',
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
data: { name: 'testPattern', version: 99 },
|
||||
parts: [part],
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern()
|
||||
pattern.draft().render()
|
||||
let p = pattern.parts[0].test.points._foo_titleNr
|
||||
let p = pattern.parts[0].test.points.__macro_title_foo_nr
|
||||
expect(p.x).to.equal(-12)
|
||||
expect(p.y).to.equal(-34)
|
||||
expect(p.attributes.get('data-text')).to.equal('3')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-4xl fill-note font-bold')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-4xl fill-note font-bold left')
|
||||
expect(p.attributes.get('data-text-x')).to.equal('-12')
|
||||
expect(p.attributes.get('data-text-y')).to.equal('-34')
|
||||
p = pattern.parts[0].test.points._foo_titleName
|
||||
p = pattern.parts[0].test.points.__macro_title_foo_title
|
||||
expect(p.attributes.get('data-text')).to.equal('unitTest')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-lg fill-current font-bold')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('text-lg fill-current font-bold left')
|
||||
expect(p.attributes.get('data-text-x')).to.equal('-12')
|
||||
expect(p.attributes.get('data-text-y')).to.equal('-26')
|
||||
p = pattern.parts[0].test.points._foo_titlePattern
|
||||
p = pattern.parts[0].test.points.__macro_title_foo_name
|
||||
expect(p.attributes.get('data-text')).to.equal('testPattern v99')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('fill-note')
|
||||
expect(p.attributes.get('data-text-class')).to.equal('fill-note left')
|
||||
expect(p.attributes.get('data-text-x')).to.equal('-12')
|
||||
expect(p.attributes.get('data-text-y')).to.equal('-18')
|
||||
})
|
||||
|
||||
it('Should run the title macro with custom alignment', () => {
|
||||
const part = {
|
||||
name: 'test',
|
||||
draft: ({ points, Point, macro, part }) => {
|
||||
points.anchor = new Point(-12, -34).attr('data-text', '#')
|
||||
macro('title', {
|
||||
at: points.anchor,
|
||||
nr: 3,
|
||||
title: 'unitTest',
|
||||
align: 'left',
|
||||
id: 'left',
|
||||
})
|
||||
macro('title', {
|
||||
at: points.anchor,
|
||||
nr: 3,
|
||||
title: 'unitTest',
|
||||
align: 'right',
|
||||
id: 'right',
|
||||
})
|
||||
macro('title', {
|
||||
at: points.anchor,
|
||||
nr: 3,
|
||||
title: 'unitTest',
|
||||
align: 'center',
|
||||
id: 'center',
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
data: { name: 'testPattern', version: 99 },
|
||||
parts: [part],
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern()
|
||||
pattern.draft().render()
|
||||
for (const align of ['left', 'center', 'right']) {
|
||||
let p = pattern.parts[0].test.points[`__macro_title_${align}_nr`]
|
||||
expect(p.attributes.get('data-text-class')).to.equal(`text-4xl fill-note font-bold ${align}`)
|
||||
p = pattern.parts[0].test.points[`__macro_title_${align}_name`]
|
||||
expect(p.attributes.get('data-text-class')).to.equal(`fill-note ${align}`)
|
||||
p = pattern.parts[0].test.points[`__macro_title_${align}_title`]
|
||||
expect(p.attributes.get('data-text-class')).to.equal(
|
||||
`text-lg fill-current font-bold ${align}`
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
it('Should run the title macro with an invalid align prefix', () => {
|
||||
const part = {
|
||||
name: 'test',
|
||||
draft: ({ points, Point, macro, part }) => {
|
||||
points.anchor = new Point(-12, -34).attr('data-text', '#')
|
||||
macro('title', {
|
||||
at: points.anchor,
|
||||
nr: 3,
|
||||
title: 'unitTest',
|
||||
align: 'invalidprefix',
|
||||
})
|
||||
|
||||
return part
|
||||
},
|
||||
plugins: [annotationsPlugin],
|
||||
}
|
||||
// Note that we're not loading core plugins but the local plugin
|
||||
const Pattern = new Design({
|
||||
data: { name: 'testPattern', version: 99 },
|
||||
parts: [part],
|
||||
noCorePlugins: true,
|
||||
})
|
||||
const pattern = new Pattern()
|
||||
pattern.draft().render()
|
||||
let p = pattern.parts[0].test.points
|
||||
expect(p.__macro_title_title_nr.attributes.get('data-text-class')).to.equal(
|
||||
'text-4xl fill-note font-bold left'
|
||||
)
|
||||
expect(p.__macro_title_title_title.attributes.get('data-text-class')).to.equal(
|
||||
'text-lg fill-current font-bold left'
|
||||
)
|
||||
expect(p.__macro_title_title_name.attributes.get('data-text-class')).to.equal('fill-note left')
|
||||
})
|
||||
})
|
||||
|
|
17
plugins/plugin-bin-pack/CHANGELOG.md
Normal file
17
plugins/plugin-bin-pack/CHANGELOG.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Change log for: @freesewing/plugin-bin-pack
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
|
||||
This is the **initial release**, and the start of this change log.
|
||||
|
||||
> Prior to version 2, FreeSewing was not a JavaScript project.
|
||||
> As such, that history is out of scope for this change log.
|
||||
|
143
plugins/plugin-bin-pack/README.md
Normal file
143
plugins/plugin-bin-pack/README.md
Normal file
|
@ -0,0 +1,143 @@
|
|||

|
||||
<p align='center'><a
|
||||
href="https://www.npmjs.com/package/@freesewing/plugin-bin-pack"
|
||||
title="@freesewing/plugin-bin-pack on NPM"
|
||||
><img src="https://img.shields.io/npm/v/@freesewing/plugin-bin-pack.svg"
|
||||
alt="@freesewing/plugin-bin-pack on NPM"/>
|
||||
</a><a
|
||||
href="https://opensource.org/licenses/MIT"
|
||||
title="License: MIT"
|
||||
><img src="https://img.shields.io/npm/l/@freesewing/plugin-bin-pack.svg?label=License"
|
||||
alt="License: MIT"/>
|
||||
</a><a
|
||||
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
|
||||
title="Code quality on DeepScan"
|
||||
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
|
||||
alt="Code quality on DeepScan"/>
|
||||
</a><a
|
||||
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-bin-pack"
|
||||
title="Open issues tagged pkg:plugin-bin-pack"
|
||||
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:plugin-bin-pack.svg?label=Issues"
|
||||
alt="Open issues tagged pkg:plugin-bin-pack"/>
|
||||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a><a
|
||||
href="https://chat.freesewing.org"
|
||||
title="Chat with us on Discord"
|
||||
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
|
||||
alt="Chat with us on Discord"/>
|
||||
</a><a
|
||||
href="https://freesewing.org/patrons/join"
|
||||
title="Become a FreeSewing Patron"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
|
||||
alt="Become a FreeSewing Patron"/>
|
||||
</a><a
|
||||
href="https://instagram.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a></p>
|
||||
|
||||
# @freesewing/plugin-bin-pack
|
||||
|
||||
A FreeSewing plugin that adds a bin-pack algorithm to the core library
|
||||
|
||||
|
||||
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-bin-pack
|
||||
|
||||
If you're not entirely sure what to do or how to start, type this command:
|
||||
|
||||
```
|
||||
npm run tips
|
||||
```
|
||||
|
||||
> If you don't want to set up a dev environment, you can run it in your browser:
|
||||
>
|
||||
> [](https://gitpod.io/#https://github.com/freesewing/freesewing)
|
||||
>
|
||||
> We recommend that you fork our repository and then
|
||||
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
|
||||
> to start up a browser-based dev environment of your own.
|
||||
|
||||
## About FreeSewing 💀
|
||||
|
||||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
If you have NodeJS installed, you can try it right now by running:
|
||||
|
||||
```bash
|
||||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details.
|
||||
|
||||
## Where to get help 🤯
|
||||
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
35
plugins/plugin-bin-pack/build.mjs
Normal file
35
plugins/plugin-bin-pack/build.mjs
Normal file
|
@ -0,0 +1,35 @@
|
|||
/* This script will build the package with esbuild */
|
||||
import esbuild from 'esbuild'
|
||||
import pkg from './package.json' assert { type: 'json' }
|
||||
|
||||
// Create banner based on package info
|
||||
const banner = `/**
|
||||
* ${pkg.name} | v${pkg.version}
|
||||
* ${pkg.description}
|
||||
* (c) ${new Date().getFullYear()} ${pkg.author}
|
||||
* @license ${pkg.license}
|
||||
*/`
|
||||
|
||||
// Shared esbuild options
|
||||
const options = {
|
||||
banner: { js: banner },
|
||||
bundle: true,
|
||||
entryPoints: ['src/index.mjs'],
|
||||
format: 'esm',
|
||||
outfile: 'dist/index.mjs',
|
||||
external: ['@freesewing'],
|
||||
metafile: process.env.VERBOSE ? true : false,
|
||||
minify: process.env.NO_MINIFY ? false : true,
|
||||
sourcemap: true,
|
||||
}
|
||||
|
||||
// Let esbuild generate the build
|
||||
const build = async () => {
|
||||
const result = await esbuild.build(options).catch(() => process.exit(1))
|
||||
|
||||
if (process.env.VERBOSE) {
|
||||
const info = await esbuild.analyzeMetafile(result.metafile)
|
||||
console.log(info)
|
||||
}
|
||||
}
|
||||
build()
|
4
plugins/plugin-bin-pack/data.mjs
Normal file
4
plugins/plugin-bin-pack/data.mjs
Normal file
|
@ -0,0 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-bin-pack'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-bundle",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"description": "An umbrella package of 8 essential FreeSewing build-time plugins",
|
||||
"name": "@freesewing/plugin-bin-pack",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin that adds a bin-pack algorithm to the core library",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
"repository": "github:freesewing/freesewing",
|
||||
|
@ -15,7 +15,6 @@
|
|||
},
|
||||
"keywords": [
|
||||
"freesewing",
|
||||
"bundle",
|
||||
"plugin",
|
||||
"sewing pattern",
|
||||
"sewing",
|
||||
|
@ -28,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -41,22 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step2": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step2": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7",
|
||||
"@freesewing/plugin-annotations": "3.0.0-alpha.9",
|
||||
"@freesewing/plugin-mirror": "3.0.0-alpha.9",
|
||||
"@freesewing/plugin-round": "3.0.0-alpha.9",
|
||||
"@freesewing/plugin-sprinkle": "3.0.0-alpha.9"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -64,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
239
plugins/plugin-bin-pack/src/growing-packer.mjs
Normal file
239
plugins/plugin-bin-pack/src/growing-packer.mjs
Normal file
|
@ -0,0 +1,239 @@
|
|||
/******************************************************************************
|
||||
|
||||
This is a binary tree based bin packing algorithm that is more complex than
|
||||
the simple Packer (packer.js). Instead of starting off with a fixed width and
|
||||
height, it starts with the width and height of the first block passed and then
|
||||
grows as necessary to accomodate each subsequent block.
|
||||
|
||||
The default behavior as it grows is that it attempts
|
||||
to maintain a roughly square ratio by making 'smart' choices about whether to
|
||||
grow right or down.
|
||||
|
||||
If either a maxWidth or a maxHeight is set, it will try not to grow beyond that
|
||||
limit, and choose instead to grow in the other direction. If the first block is
|
||||
larger than the given limit, however, that block's dimension will replace the
|
||||
limit.
|
||||
|
||||
When growing, the algorithm can only grow to the right OR down. Therefore, if
|
||||
the new block is BOTH wider and taller than the current target then it will be
|
||||
rejected. This makes it very important to initialize with a sensible starting
|
||||
width and height. If you are providing sorted input (largest first) then this
|
||||
will not be an issue.
|
||||
|
||||
A potential way to solve this limitation would be to allow growth in BOTH
|
||||
directions at once, but this requires maintaining a more complex tree
|
||||
with 3 children (down, right and center) and that complexity can be avoided
|
||||
by simply chosing a sensible starting block.
|
||||
|
||||
Best results occur when the input blocks are sorted by height, or even better
|
||||
when sorted by max(width,height).
|
||||
|
||||
Construction:
|
||||
------------
|
||||
{
|
||||
maxWidth = Infinity: set a max width to constrain the growth in that direction
|
||||
maxHeight = Infinity: set a max height to constrain the growth in that direction
|
||||
strictMax = false: require wider-than-max blocks to start at left boundary
|
||||
PREVIOUS INTENDED TODO strictMax = false: reject blocks that are larger than the max
|
||||
}
|
||||
|
||||
Inputs:
|
||||
------
|
||||
|
||||
blocks: array of any objects that have .w and .h attributes
|
||||
|
||||
|
||||
Outputs:
|
||||
-------
|
||||
|
||||
marks each block that fits with a .fit attribute pointing to a
|
||||
node with .x and .y coordinates
|
||||
|
||||
Example:
|
||||
-------
|
||||
|
||||
let blocks = [
|
||||
{ w: 100, h: 100 },
|
||||
{ w: 100, h: 100 },
|
||||
{ w: 80, h: 80 },
|
||||
{ w: 80, h: 80 },
|
||||
etc
|
||||
etc
|
||||
];
|
||||
|
||||
let packer = new GrowingPacker();
|
||||
packer.fit(blocks);
|
||||
|
||||
for(let n = 0 ; n < blocks.length ; n++) {
|
||||
let block = blocks[n]
|
||||
if (block.fit) {
|
||||
Draw(block.fit.x, block.fit.y, block.w, block.h)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
const GrowingPacker = function ({ maxWidth = Infinity, maxHeight = Infinity, strictMax = false }) {
|
||||
this.maxWidth = maxWidth
|
||||
this.maxHeight = maxHeight
|
||||
this.strictMax = strictMax
|
||||
this.ensureSquare = maxWidth === Infinity && maxHeight === Infinity
|
||||
}
|
||||
|
||||
GrowingPacker.prototype = {
|
||||
fit: function (blocks) {
|
||||
let len = blocks.length
|
||||
if (len === 0) {
|
||||
return
|
||||
}
|
||||
|
||||
let n, node, block, fit
|
||||
// Require wider-than-max blocks to start at the left boundary, so
|
||||
// they encroach past the right boundary minimally.
|
||||
let width =
|
||||
this.strictMax && this.maxWidth < Infinity
|
||||
? Math.max(blocks[0].width, this.maxWidth)
|
||||
: blocks[0].width
|
||||
|
||||
let height = this.strictMax && this.maxHeight < Infinity ? this.maxHeight : blocks[0].height
|
||||
this.root = { x: 0, y: 0, width, height }
|
||||
for (n = 0; n < len; n++) {
|
||||
block = blocks[n]
|
||||
if ((node = this.findNode(this.root, block.width, block.height))) {
|
||||
fit = this.splitNode(node, block.width, block.height)
|
||||
block.x = fit.x
|
||||
block.y = fit.y
|
||||
} else {
|
||||
fit = this.growNode(block.width, block.height)
|
||||
block.x = fit.x
|
||||
block.y = fit.y
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
findNode: function (root, width, height) {
|
||||
if (root.used)
|
||||
return this.findNode(root.right, width, height) || this.findNode(root.down, width, height)
|
||||
else if (width <= root.width && height <= root.height) return root
|
||||
else return null
|
||||
},
|
||||
|
||||
splitNode: function (node, width, height) {
|
||||
node.used = true
|
||||
const downY = node.y + height
|
||||
node.down = {
|
||||
x: node.x,
|
||||
y: downY,
|
||||
width: node.width,
|
||||
height: Math.min(node.height - height, this.maxHeight - downY),
|
||||
}
|
||||
|
||||
const rightX = node.x + width
|
||||
node.right = {
|
||||
x: rightX,
|
||||
y: node.y,
|
||||
width: Math.min(node.width - width, this.maxWidth - rightX),
|
||||
height: height,
|
||||
}
|
||||
return node
|
||||
},
|
||||
|
||||
growNode: function (width, height) {
|
||||
let canGrowDown = width <= this.root.width
|
||||
let canGrowRight = height <= this.root.height
|
||||
|
||||
const proposedNewWidth = this.root.width + width
|
||||
let shouldGrowRight =
|
||||
canGrowRight && (this.ensureSquare ? this.root.height : this.maxWidth) >= proposedNewWidth // attempt to keep square-ish by growing right when height is much greater than width
|
||||
const proposedNewHeight = this.root.height + height
|
||||
let shouldGrowDown =
|
||||
canGrowDown && (this.ensureSquare ? this.root.width : this.maxHeight) >= proposedNewHeight // attempt to keep square-ish by growing down when width is much greater than height
|
||||
|
||||
if (shouldGrowRight) return this.growRight(width, height)
|
||||
else if (shouldGrowDown) return this.growDown(width, height)
|
||||
else if (canGrowRight) return this.growRight(width, height)
|
||||
else if (canGrowDown) return this.growDown(width, height)
|
||||
else return null // need to ensure sensible root starting size to avoid this happening
|
||||
},
|
||||
|
||||
growRight: function (width, height) {
|
||||
this.root = {
|
||||
used: true,
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: this.root.width + width,
|
||||
height: this.root.height,
|
||||
down: this.root,
|
||||
right: { x: this.root.width, y: 0, width: width, height: this.root.height },
|
||||
}
|
||||
let node
|
||||
if ((node = this.findNode(this.root, width, height))) return this.splitNode(node, width, height)
|
||||
else return null
|
||||
},
|
||||
|
||||
growDown: function (width, height) {
|
||||
this.root = {
|
||||
used: true,
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: this.root.width,
|
||||
height: this.root.height + height,
|
||||
down: { x: 0, y: this.root.height, width: this.root.width, height: height },
|
||||
right: this.root,
|
||||
}
|
||||
let node
|
||||
if ((node = this.findNode(this.root, width, height))) return this.splitNode(node, width, height)
|
||||
else return null
|
||||
},
|
||||
}
|
||||
|
||||
const defaultOptions = { inPlace: true }
|
||||
|
||||
export const pack = (store, items, pattern) => {
|
||||
const options = {
|
||||
...defaultOptions,
|
||||
...pattern.pattern.settings[0],
|
||||
}
|
||||
const packer = new GrowingPacker(options)
|
||||
const inPlace = options.inPlace || false
|
||||
|
||||
// Clone the items.
|
||||
let newItems = items.map(function (item) {
|
||||
return inPlace ? item : { width: item.width, height: item.height, item: item }
|
||||
})
|
||||
|
||||
// We need to know whether the widest item exceeds the maximum width.
|
||||
// The optimal sorting strategy changes depending on this.
|
||||
const widestWidth = newItems.sort(function (a, b) {
|
||||
return b.width - a.width
|
||||
})[0].width
|
||||
const widerThanMax = options.maxWidth && widestWidth > options.maxWidth
|
||||
|
||||
newItems = newItems.sort(function (a, b) {
|
||||
if (options.maxWidth && !options.maxHeight && widerThanMax) return b.width - a.width
|
||||
if (options.maxWidth && !options.maxHeight) return b.height - a.height
|
||||
if (options.maxHeight) return b.height - a.height
|
||||
// TODO: check that each actually HAS a width and a height.
|
||||
// Sort based on the size (area) of each block.
|
||||
return b.width * b.height - a.width * a.height
|
||||
})
|
||||
|
||||
packer.fit(newItems)
|
||||
|
||||
const w = newItems.reduce(function (curr, item) {
|
||||
return Math.max(curr, item.x + item.width)
|
||||
}, 0)
|
||||
const h = newItems.reduce(function (curr, item) {
|
||||
return Math.max(curr, item.y + item.height)
|
||||
}, 0)
|
||||
|
||||
const ret = {
|
||||
width: w,
|
||||
height: h,
|
||||
}
|
||||
|
||||
if (!inPlace) ret.items = newItems
|
||||
|
||||
return ret
|
||||
}
|
13
plugins/plugin-bin-pack/src/index.mjs
Normal file
13
plugins/plugin-bin-pack/src/index.mjs
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { name, version } from '../data.mjs'
|
||||
import { pack } from './growing-packer.mjs'
|
||||
|
||||
export const plugin = {
|
||||
name,
|
||||
version,
|
||||
store: [['pack', pack]],
|
||||
}
|
||||
|
||||
// More specifically named exports
|
||||
export const packPlugin = plugin
|
||||
export const binPackPlugin = plugin
|
||||
export const binpackPlugin = plugin
|
6
plugins/plugin-bin-pack/tests/shared.test.mjs
Normal file
6
plugins/plugin-bin-pack/tests/shared.test.mjs
Normal file
|
@ -0,0 +1,6 @@
|
|||
// This file is auto-generated | Any changes you make will be overwritten.
|
||||
import { plugin } from '../src/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin)
|
|
@ -1,9 +0,0 @@
|
|||
language: node_js
|
||||
node_js:
|
||||
- "node"
|
||||
install:
|
||||
- npm install
|
||||
- npm run build
|
||||
script:
|
||||
- npm run test
|
||||
- npm run coverage
|
|
@ -1,41 +0,0 @@
|
|||
# Change log for: @freesewing/plugin-bundle
|
||||
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
||||
- Migrated from Rollup to Esbuild for all builds
|
||||
|
||||
## 2.20.0 (2022-01-24)
|
||||
|
||||
### Changed
|
||||
|
||||
- plugin-banner is now part of plugin-bundle
|
||||
- plugin-bartack is now part of plugin-bundle
|
||||
|
||||
## 2.19.6 (2021-12-29)
|
||||
|
||||
### Added
|
||||
|
||||
- Added (esm) unit tests
|
||||
|
||||
## 2.17.0 (2021-07-01)
|
||||
|
||||
### Changed
|
||||
|
||||
- Include plugin-buttons
|
||||
- Include plugin-mirror
|
||||
|
||||
## 2.0.0 (2019-08-25)
|
||||
|
||||
### Added
|
||||
|
||||
- Initial release
|
||||
|
||||
|
||||
This is the **initial release**, and the start of this change log.
|
||||
|
||||
> Prior to version 2, FreeSewing was not a JavaScript project.
|
||||
> As such, that history is out of scope for this change log.
|
||||
|
|
@ -1,330 +0,0 @@
|
|||

|
||||
<p align='center'><a
|
||||
href="https://www.npmjs.com/package/@freesewing/plugin-bundle"
|
||||
title="@freesewing/plugin-bundle on NPM"
|
||||
><img src="https://img.shields.io/npm/v/@freesewing/plugin-bundle.svg"
|
||||
alt="@freesewing/plugin-bundle on NPM"/>
|
||||
</a><a
|
||||
href="https://opensource.org/licenses/MIT"
|
||||
title="License: MIT"
|
||||
><img src="https://img.shields.io/npm/l/@freesewing/plugin-bundle.svg?label=License"
|
||||
alt="License: MIT"/>
|
||||
</a><a
|
||||
href="https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256"
|
||||
title="Code quality on DeepScan"
|
||||
><img src="https://deepscan.io/api/teams/2114/projects/2993/branches/23256/badge/grade.svg"
|
||||
alt="Code quality on DeepScan"/>
|
||||
</a><a
|
||||
href="https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-bundle"
|
||||
title="Open issues tagged pkg:plugin-bundle"
|
||||
><img src="https://img.shields.io/github/issues/freesewing/freesewing/pkg:plugin-bundle.svg?label=Issues"
|
||||
alt="Open issues tagged pkg:plugin-bundle"/>
|
||||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-blue.svg?logo=twitter&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a><a
|
||||
href="https://chat.freesewing.org"
|
||||
title="Chat with us on Discord"
|
||||
><img src="https://img.shields.io/discord/698854858052075530?label=Chat%20on%20Discord"
|
||||
alt="Chat with us on Discord"/>
|
||||
</a><a
|
||||
href="https://freesewing.org/patrons/join"
|
||||
title="Become a FreeSewing Patron"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Support%20us-blueviolet.svg?logo=cash-app&logoColor=white&logoWidth=15"
|
||||
alt="Become a FreeSewing Patron"/>
|
||||
</a><a
|
||||
href="https://instagram.com/freesewing_org"
|
||||
title="Follow @freesewing_org on Twitter"
|
||||
><img src="https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15"
|
||||
alt="Follow @freesewing_org on Twitter"/>
|
||||
</a></p>
|
||||
|
||||
# @freesewing/plugin-bundle
|
||||
|
||||
An umbrella package of 8 essential FreeSewing build-time plugins
|
||||
|
||||
|
||||
# Plugins
|
||||
|
||||
1) [plugin-cutonfold](https://github.com/freesewing/plugin-cutonfold) : Add cut-on-fold indicators to your patterns
|
||||
2) [plugin-dimension](https://github.com/freesewing/plugin-dimension) : Add dimensions to your (paperless) patterns
|
||||
3) [plugin-grainline](https://github.com/freesewing/plugin-grainline) : Add grainline indicators to your patterns
|
||||
4) [plugin-logo](https://github.com/freesewing/plugin-logo) : Add a scalebox to your patterns
|
||||
5) [plugin-scalebox](https://github.com/freesewing/plugin-scalebox) : Add pretty titles to your pattern parts
|
||||
6) [plugin-title](https://github.com/freesewing/plugin-title) : Add pretty titles to your pattern parts
|
||||
7) [plugin-round](https://github.com/freesewing/plugin-title) : Rounds corners
|
||||
8) [plugin-sprinkle](https://github.com/freesewing/plugin-sprinkle) : Add multiple snippets to your pattern
|
||||
|
||||
Note that these are all **build-time plugins**. In other words, plugins used by developers/pattern designers,
|
||||
rather than run-time plugins that are used when generating patterns.
|
||||
|
||||
Without exception, all freesewing patterns use all these plugins, so it made sense to bundle them.
|
||||
|
||||
## Usage
|
||||
|
||||
To load this plugin, add it to your instantiated pattern.
|
||||
|
||||
On node.js:
|
||||
|
||||
```js
|
||||
import freesewing from '@freesewing/core'
|
||||
import plugins from '@freesewing/plugin-bundle'
|
||||
|
||||
let pattern = new freesewing.Pattern().with(plugins);
|
||||
```
|
||||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
|
||||
This folder holds: @freesewing/plugin-bundle
|
||||
|
||||
If you're not entirely sure what to do or how to start, type this command:
|
||||
|
||||
```
|
||||
npm run tips
|
||||
```
|
||||
|
||||
> If you don't want to set up a dev environment, you can run it in your browser:
|
||||
>
|
||||
> [](https://gitpod.io/#https://github.com/freesewing/freesewing)
|
||||
>
|
||||
> We recommend that you fork our repository and then
|
||||
> put `gitpod.io/#<entire-url-of-your-fork` into a browser
|
||||
> to start up a browser-based dev environment of your own.
|
||||
|
||||
## About FreeSewing 💀
|
||||
|
||||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
If you have NodeJS installed, you can try it right now by running:
|
||||
|
||||
```bash
|
||||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
See [the license file](https://github.com/freesewing/freesewing/blob/develop/LICENSE) for details.
|
||||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
|
@ -1,6 +1,18 @@
|
|||
# Change log for: @freesewing/plugin-bust
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
### Removed
|
||||
|
||||
- This plugin no longer sets its version as an SVG attribute when rendering patterns
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin that helps with bust-adjusting menswear patterns
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-bust
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-bust'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-bust",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin that helps with bust-adjusting menswear patterns",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
|
@ -27,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -40,18 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step1": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step1": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -59,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
# Change log for: @freesewing/plugin-flip
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
### Removed
|
||||
|
||||
- This plugin no longer sets its version as an SVG attribute when rendering patterns
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin to flip parts horizontally
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-flip
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-flip'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-flip",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin to flip parts horizontally",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
|
@ -27,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -40,18 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step1": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step1": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -59,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
# Change log for: @freesewing/plugin-gore
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
### Removed
|
||||
|
||||
- This plugin no longer sets its version as an SVG attribute when rendering patterns
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin to generate gores for a semi-sphere or dome
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-gore
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-gore'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-gore",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin to generate gores for a semi-sphere or dome",
|
||||
"author": "AlfaLyr (https://github.com/alfalyr)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
|
@ -27,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -40,18 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step1": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step1": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -59,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ export const plugin = {
|
|||
.close()
|
||||
.attr('class', so.class ? so.class : '')
|
||||
|
||||
if (so?.hidden) paths[prefix + 'seam'].hide()
|
||||
if (so.hidden) paths[prefix + 'seam'].hide()
|
||||
else paths[prefix + 'seam'].unhide()
|
||||
},
|
||||
},
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
# Change log for: @freesewing/plugin-i18n
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
### Removed
|
||||
|
||||
- This plugin no longer sets its version as an SVG attribute when rendering patterns
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin for pattern translation
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-i18n
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-i18n'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-i18n",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin for pattern translation",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
|
@ -27,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -40,18 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step1": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step1": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -59,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,21 +4,21 @@ export const plugin = {
|
|||
name,
|
||||
version,
|
||||
hooks: {
|
||||
insertText: (locale, text, data) => {
|
||||
if (!data) {
|
||||
console.log(
|
||||
"No data was passed to the i18n plugin. This plugin won't do much without injecting data into it"
|
||||
)
|
||||
insertText: (locale, text, t, pattern) => {
|
||||
if (t instanceof Function) return t(text, locale)
|
||||
else if (typeof t[locale] === 'object') return t[locale][text] || text
|
||||
else {
|
||||
const msg =
|
||||
"No translation method or object was passed to the i18n plugin. This plugin won't do anything without that"
|
||||
if (pattern?.store?.log?.warn) {
|
||||
if (!pattern.store.get(['plugins', 'plugin-i18n', 'missingMethodWarning'])) {
|
||||
pattern.store.set(['plugins', 'plugin-i18n', 'missingMethodWarning'], true)
|
||||
pattern.store.log.warn(msg)
|
||||
}
|
||||
} else console.log(msg)
|
||||
|
||||
return text
|
||||
}
|
||||
if (data.t) {
|
||||
return data.t(text)
|
||||
} else {
|
||||
const prefix = data.prefix || ''
|
||||
return typeof data.strings[locale][prefix + text] === 'undefined'
|
||||
? text
|
||||
: data.strings[locale][prefix + text]
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -5,10 +5,8 @@ import { plugin } from '../src/index.mjs'
|
|||
const expect = chai.expect
|
||||
|
||||
const content = {
|
||||
strings: {
|
||||
en: {
|
||||
testString: 'This is a test string for the i18n plugin',
|
||||
},
|
||||
en: {
|
||||
testString: 'This is a test string for the i18n plugin',
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -31,6 +29,6 @@ describe('I18n Plugin Tests', () => {
|
|||
const Pattern = new Design({ parts: [part] })
|
||||
const pattern = new Pattern()
|
||||
const svg = pattern.draft().render()
|
||||
expect(svg).to.contain(content.strings.en.testString)
|
||||
expect(svg).to.contain(content.en.testString)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
# Change log for: @freesewing/plugin-measurements
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
### Removed
|
||||
|
||||
- This plugin no longer sets its version as an SVG attribute when rendering patterns
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin that adds additional measurements that can be calculated fro
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-measurements
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-measurements'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-measurements",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin that adds additional measurements that can be calculated from existing ones",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
|
@ -27,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -40,18 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step1": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step1": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -59,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
# Change log for: @freesewing/plugin-mirror
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
### Removed
|
||||
|
||||
- This plugin no longer sets its version as an SVG attribute when rendering patterns
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin to mirror points or paths
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-mirror
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-mirror'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-mirror",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin to mirror points or paths",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
|
@ -27,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -40,18 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step1": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step1": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -59,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ const mirrorGen = (start, end) => {
|
|||
const mirrorCount = Number(point.attributes.get('data-mirrored'))
|
||||
// some points returned by utils do not have logs
|
||||
if (mirrorCount > 0 && point.log)
|
||||
point.log.warning(
|
||||
point.log.warn(
|
||||
`Point ${point.name} was mirrored more than once (${
|
||||
mirrorCount + 1
|
||||
}) which can lead to hard to trace bugs`
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
# Change log for: @freesewing/plugin-round
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
### Removed
|
||||
|
||||
- This plugin no longer sets its version as an SVG attribute when rendering patterns
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin to round corners
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-round
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-round'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@freesewing/plugin-round",
|
||||
"version": "3.0.0-alpha.9",
|
||||
"version": "3.0.0",
|
||||
"description": "A FreeSewing plugin to round corners",
|
||||
"author": "Joost De Cock <joost@joost.at> (https://github.com/joostdecock)",
|
||||
"homepage": "https://freesewing.org/",
|
||||
|
@ -27,10 +27,14 @@
|
|||
"type": "module",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": "./dist/index.mjs"
|
||||
".": {
|
||||
"internal": "./src/index.mjs",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node build.mjs",
|
||||
"build:all": "yarn build",
|
||||
"clean": "rimraf dist",
|
||||
"mbuild": "NO_MINIFY=1 node build.mjs",
|
||||
"symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -",
|
||||
|
@ -40,18 +44,17 @@
|
|||
"tips": "node ../../scripts/help.mjs",
|
||||
"lint": "npx eslint 'src/**' 'tests/*.mjs'",
|
||||
"prettier": "npx prettier --write 'src/*.mjs' 'tests/*.mjs'",
|
||||
"testci": "npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"cibuild_step1": "node build.mjs",
|
||||
"testci": "NODE_OPTIONS=\"--conditions=internal\" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js",
|
||||
"wbuild": "node build.mjs",
|
||||
"wcibuild_step1": "node build.mjs"
|
||||
"wbuild:all": "yarn wbuild"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@freesewing/core": "3.0.0-alpha.9"
|
||||
"@freesewing/core": "3.0.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "10.2.0",
|
||||
"chai": "4.3.7"
|
||||
"chai": "4.3.10"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
|
@ -59,10 +62,10 @@
|
|||
],
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"tag": "next"
|
||||
"tag": "latest"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=8"
|
||||
"node": "18",
|
||||
"npm": "9"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,39 +1,56 @@
|
|||
import { name, version } from '../data.mjs'
|
||||
import { getIds } from './utils.mjs'
|
||||
|
||||
/*
|
||||
* These are the keys for macro IDs
|
||||
*/
|
||||
const pointKeys = ['start', 'cp1', 'cp2', 'end']
|
||||
const pathKeys = ['path']
|
||||
|
||||
export const plugin = {
|
||||
name,
|
||||
version,
|
||||
macros: {
|
||||
round: function (so) {
|
||||
round: function (mc, { points, paths, Point, Path, store, part }) {
|
||||
const C = 0.55191502449
|
||||
const { hide = true } = so
|
||||
// Find angle between points
|
||||
let from = so.from
|
||||
let to = so.to
|
||||
let via = so.via
|
||||
let radius = so.radius
|
||||
let prefix = so.prefix || 'round'
|
||||
let angle1 = from.angle(via)
|
||||
let angle2 = via.angle(to)
|
||||
if ((Math.round(angle1) - Math.round(angle2)) % 90 !== 0)
|
||||
console.log('Warning: The round macro only handles 90 degree angles correctly.')
|
||||
let fd = from.dist(via)
|
||||
let td = to.dist(via)
|
||||
if (radius > fd || radius > td || typeof radius === 'undefined') radius = fd > td ? td : fd
|
||||
this.points[prefix + 'Start'] = via.shiftTowards(from, radius)
|
||||
this.points[prefix + 'Cp1'] = via.shiftTowards(from, radius * (1 - C))
|
||||
this.points[prefix + 'Cp2'] = via.shiftTowards(to, radius * (1 - C))
|
||||
this.points[prefix + 'End'] = via.shiftTowards(to, radius)
|
||||
this.paths[prefix + 'Rounded'] = new this.Path()
|
||||
.move(this.points[prefix + 'Start'])
|
||||
.curve(
|
||||
this.points[prefix + 'Cp1'],
|
||||
this.points[prefix + 'Cp2'],
|
||||
this.points[prefix + 'End']
|
||||
)
|
||||
.attr('class', so.class ? so.class : '')
|
||||
if (hide) this.paths[prefix + 'Rounded'].hide()
|
||||
else this.paths[prefix + 'Rounded'].unhide()
|
||||
const {
|
||||
from = new Point(0, 0),
|
||||
to = new Point(666, 666),
|
||||
via = new Point(666, 0),
|
||||
id = 'round',
|
||||
classes = '',
|
||||
hide = true,
|
||||
} = mc
|
||||
let { radius = 66.6 } = mc
|
||||
const ids = getIds([...pointKeys, ...pathKeys], id, name)
|
||||
|
||||
const fd = from.dist(via)
|
||||
const td = to.dist(via)
|
||||
if (radius > fd || radius > td) radius = fd > td ? td : fd
|
||||
points[ids.start] = via.shiftTowards(from, radius)
|
||||
points[ids.cp1] = via.shiftTowards(from, radius * (1 - C))
|
||||
points[ids.cp2] = via.shiftTowards(to, radius * (1 - C))
|
||||
points[ids.end] = via.shiftTowards(to, radius)
|
||||
paths[ids.path] = new Path()
|
||||
.move(this.points[ids.start])
|
||||
.curve(points[ids.cp1], points[ids.cp2], points[ids.end])
|
||||
.addClass(classes)
|
||||
if (hide) paths[ids.path].hide()
|
||||
else paths[ids.path].unhide()
|
||||
|
||||
/*
|
||||
* Store all IDs in the store so we can remove this macro with rmtitle
|
||||
*/
|
||||
store.set(
|
||||
['parts', part.name, 'macros', 'round', 'ids', mc.id, 'points'],
|
||||
getIds(pointKeys, id, name)
|
||||
)
|
||||
store.set(
|
||||
['parts', part.name, 'macros', 'round', 'ids', mc.id, 'paths'],
|
||||
getIds(pathKeys, id, name)
|
||||
)
|
||||
|
||||
return store.getMacroIds(id, 'round')
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
9
plugins/plugin-round/src/utils.mjs
Normal file
9
plugins/plugin-round/src/utils.mjs
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Helper method to get the various IDs for a macro
|
||||
*/
|
||||
export const getIds = (keys, id, macroName) => {
|
||||
const ids = {}
|
||||
for (const key of keys) ids[key] = `__macro_${macroName}_${id}_${key}`
|
||||
|
||||
return ids
|
||||
}
|
|
@ -1,6 +1,18 @@
|
|||
# Change log for: @freesewing/plugin-sprinkle
|
||||
|
||||
|
||||
## 3.0.0 (2022-09-30)
|
||||
|
||||
### Changed
|
||||
|
||||
- All FreeSewing pacakges are now ESM only.
|
||||
- All FreeSewing pacakges now use named exports.
|
||||
- Dropped support for NodeJS 14. NodeJS 18 (LTS/hydrogen) or more recent is now required.
|
||||
|
||||
### Removed
|
||||
|
||||
- This plugin no longer sets its version as an SVG attribute when rendering patterns
|
||||
|
||||
## 2.21.0 (2022-06-27)
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</a><a
|
||||
href="#contributors-"
|
||||
title="All Contributors"
|
||||
><img src="https://img.shields.io/badge/all_contributors-107-pink.svg"
|
||||
><img src="https://img.shields.io/badge/all_contributors-111-pink.svg"
|
||||
alt="All Contributors"/>
|
||||
</a></p><p align='center'><a
|
||||
href="https://twitter.com/freesewing_org"
|
||||
|
@ -53,17 +53,9 @@ A FreeSewing plugin to bulk-add snippets to your pattern
|
|||
|
||||
|
||||
|
||||
> #### Note: Version 3 is a work in progress
|
||||
>
|
||||
> We are working on a new major version (v3) but it is not ready for prime-time.
|
||||
> For production use, please refer to our v2 packages (the `latest` on NPM)
|
||||
> or [the `v2` branch in our monorepo](https://github.com/freesewing/freesewing/tree/v2).
|
||||
>
|
||||
> We the `main` branch and `next` packages on NPM holds v3 code. But it's alpha for now.
|
||||
|
||||
## What am I looking at? 🤔
|
||||
|
||||
This repository is our *monorepo* holding all our NPM designs, plugins, other NPM packages, and (web)sites.
|
||||
This repository is the FreeSewing *monorepo* holding all FreeSewing's websites, documentation, designs, plugins, and other NPM packages.
|
||||
|
||||
This folder holds: @freesewing/plugin-sprinkle
|
||||
|
||||
|
@ -86,11 +78,11 @@ npm run tips
|
|||
Where the world of makers and developers collide, that's where you'll find FreeSewing.
|
||||
|
||||
If you're a maker, checkout [freesewing.org](https://freesewing.org/) where you can generate
|
||||
our sewing patterns adapted to your measurements.
|
||||
sewing patterns adapted to your measurements.
|
||||
|
||||
If you're a developer, our documentation is on [freesewing.dev](https://freesewing.dev/).
|
||||
Our [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But we also provide a range
|
||||
If you're a developer, the FreeSewing documentation lives at [freesewing.dev](https://freesewing.dev/).
|
||||
The FreeSewing [core library](https://freesewing.dev/reference/api/) is a *batteries-included* toolbox
|
||||
for parametric design of sewing patterns. But FreeSewing also provides a range
|
||||
of [plugins](https://freesewing.dev/reference/plugins/) that further extend the
|
||||
functionality of the platform.
|
||||
|
||||
|
@ -100,33 +92,43 @@ If you have NodeJS installed, you can try it right now by running:
|
|||
npx create-freesewing-pattern
|
||||
```
|
||||
|
||||
Or, consult our getting started guides
|
||||
for [Linux](https://freesewing.dev/tutorials/getting-started-linux/),
|
||||
[MacOS](https://freesewing.dev/tutorials/getting-started-mac/),
|
||||
or [Windows](https://freesewing.dev/tutorials/getting-started-windows/).
|
||||
Getting started guides are available for:
|
||||
- [Linux](https://freesewing.dev/tutorials/getting-started-linux/)
|
||||
- [MacOS](https://freesewing.dev/tutorials/getting-started-mac/)
|
||||
- [Windows](https://freesewing.dev/tutorials/getting-started-windows/)
|
||||
|
||||
We also have a [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) that
|
||||
walks you through your first parametric design,
|
||||
and [a friendly community](https://freesewing.org/community/where/) with
|
||||
people who can help you when you get stuck.
|
||||
The [pattern design tutorial](https://freesewing.dev/tutorials/pattern-design/) will
|
||||
show you how to create your first parametric design.
|
||||
|
||||
## Support FreeSewing: Become a patron 🥰
|
||||
|
||||
FreeSewing is an open source project run by a community,
|
||||
and financially supported by our patrons.
|
||||
FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons.
|
||||
|
||||
If you feel what we do is worthwhile, and you can spend a few coind without
|
||||
If you feel FreeSewing is worthwhile, and you can spend a few coind without
|
||||
hardship, then you should [join us and become a patron](https://freesewing.org/community/join).
|
||||
|
||||
## Links 👩💻
|
||||
|
||||
- 💻 Makers website: [freesewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [freesewing.dev](https://freesewing.dev)
|
||||
- 💬 Chat: On Discord via [discord.freesewing.org](https://discord.freesewing.org/)
|
||||
- ✅ Todo list/Kanban board: On Github via [todo.freesewing.org](https://todo.freesewing.org/)
|
||||
**Official channels**
|
||||
|
||||
- 💻 Makers website: [FreeSewing.org](https://freesewing.org)
|
||||
- 💻 Developers website: [FreeSewing.dev](https://freesewing.dev)
|
||||
- ✅ [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
[Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing)
|
||||
|
||||
**Social media**
|
||||
|
||||
- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
|
||||
- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
|
||||
|
||||
**Places the FreeSewing community hangs out**
|
||||
|
||||
- 💬 [Discord](https://discord.freesewing.org/)
|
||||
- 💬 [Facebook](https://www.facebook.com/groups/627769821272714/)
|
||||
- 💬 [Reddit](https://www.reddit.com/r/freesewing/)
|
||||
|
||||
## License: MIT 🤓
|
||||
|
||||
© [Joost De Cock](https://github.com/joostdecock).
|
||||
|
@ -134,168 +136,8 @@ See [the license file](https://github.com/freesewing/freesewing/blob/develop/LIC
|
|||
|
||||
## Where to get help 🤯
|
||||
|
||||
Our [chatrooms on Discord](https://chat.freesewing.org/) are the best place to ask questions,
|
||||
share your feedback, or just hang out.
|
||||
|
||||
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
|
||||
|
||||
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://adamrtomkins.github.io/"><img src="https://avatars.githubusercontent.com/u/5709603?v=4?s=100" width="100px;" alt="Adam Tomkins"/><br /><sub><b>Adam Tomkins</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AdamRTomkins" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://polymerisation-des-concepts.fr/"><img src="https://avatars.githubusercontent.com/u/365999?v=4?s=100" width="100px;" alt="Alexandre Ignjatovic"/><br /><sub><b>Alexandre Ignjatovic</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bankair" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlfaLyr"><img src="https://avatars.githubusercontent.com/u/39273729?v=4?s=100" width="100px;" alt="AlfaLyr"/><br /><sub><b>AlfaLyr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=AlfaLyr" title="Code">💻</a> <a href="#plugin-AlfaLyr" title="Plugin/utility libraries">🔌</a> <a href="#design-AlfaLyr" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://thelettereph.com"><img src="https://avatars.githubusercontent.com/u/357684?v=4?s=100" width="100px;" alt="Andrew James"/><br /><sub><b>Andrew James</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ephphatha" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/annekecaramin"><img src="https://avatars.githubusercontent.com/u/38046191?v=4?s=100" width="100px;" alt="Anneke"/><br /><sub><b>Anneke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=annekecaramin" title="Documentation">📖</a> <a href="#translation-annekecaramin" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anniekao"><img src="https://avatars.githubusercontent.com/u/1550506?v=4?s=100" width="100px;" alt="Annie Kao"/><br /><sub><b>Annie Kao</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anniekao" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Anternative"><img src="https://avatars.githubusercontent.com/u/81079850?v=4?s=100" width="100px;" alt="Anternative"/><br /><sub><b>Anternative</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Anternative" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Quiltmaster"><img src="https://avatars.githubusercontent.com/u/71795777?v=4?s=100" width="100px;" alt="Anthony"/><br /><sub><b>Anthony</b></sub></a><br /><a href="#question-Quiltmaster" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arigrayzel"><img src="https://avatars.githubusercontent.com/u/33040950?v=4?s=100" width="100px;" alt="Ari Grayzel-student"/><br /><sub><b>Ari Grayzel-student</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=arigrayzel" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bart-PXL"><img src="https://avatars.githubusercontent.com/u/45118788?v=4?s=100" width="100px;" alt="Bart"/><br /><sub><b>Bart</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Bart-PXL" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BenJamesBen"><img src="https://avatars.githubusercontent.com/u/109869956?v=4?s=100" width="100px;" alt="BenJamesBen"/><br /><sub><b>BenJamesBen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=BenJamesBen" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3ABenJamesBen" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/camerondubas"><img src="https://avatars.githubusercontent.com/u/6216460?v=4?s=100" width="100px;" alt="Cameron Dubas"/><br /><sub><b>Cameron Dubas</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=camerondubas" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cabi"><img src="https://avatars.githubusercontent.com/u/2596253?v=4?s=100" width="100px;" alt="Carsten Biebricher"/><br /><sub><b>Carsten Biebricher</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cabi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cathyzoller"><img src="https://avatars.githubusercontent.com/u/2120275?v=4?s=100" width="100px;" alt="Cathy Zoller"/><br /><sub><b>Cathy Zoller</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=cathyzoller" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Chantalbijoux"><img src="https://avatars.githubusercontent.com/u/39673694?v=4?s=100" width="100px;" alt="Chantal Lapointe"/><br /><sub><b>Chantal Lapointe</b></sub></a><br /><a href="#translation-Chantalbijoux" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dpiquet"><img src="https://avatars.githubusercontent.com/u/4688628?v=4?s=100" width="100px;" alt="Damien PIQUET"/><br /><sub><b>Damien PIQUET</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=dpiquet" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.darigovresearch.com/"><img src="https://avatars.githubusercontent.com/u/30328618?v=4?s=100" width="100px;" alt="Darigov Research"/><br /><sub><b>Darigov Research</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=darigovresearch" title="Documentation">📖</a> <a href="#ideas-darigovresearch" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/clegganator259"><img src="https://avatars.githubusercontent.com/u/3974250?v=4?s=100" width="100px;" alt="David Clegg"/><br /><sub><b>David Clegg</b></sub></a><br /><a href="#design-clegganator259" title="Design">🎨</a> <a href="https://github.com/freesewing/freesewing/commits?author=clegganator259" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ElenaFdR"><img src="https://avatars.githubusercontent.com/u/5113815?v=4?s=100" width="100px;" alt="Elena FdR"/><br /><sub><b>Elena FdR</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=ElenaFdR" title="Documentation">📖</a> <a href="#blog-ElenaFdR" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://emmanuelnyachoke.com/"><img src="https://avatars.githubusercontent.com/u/1908926?v=4?s=100" width="100px;" alt="Emmanuel Nyachoke"/><br /><sub><b>Emmanuel Nyachoke</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=enyachoke" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://enochriese.com"><img src="https://avatars.githubusercontent.com/u/5298929?v=4?s=100" width="100px;" alt="Enoch Riese"/><br /><sub><b>Enoch Riese</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eriese" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/EvEkSwed"><img src="https://avatars.githubusercontent.com/u/39723451?v=4?s=100" width="100px;" alt="EvEkSwed"/><br /><sub><b>EvEkSwed</b></sub></a><br /><a href="#translation-EvEkSwed" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Fantastik-Maman"><img src="https://avatars.githubusercontent.com/u/39785382?v=4?s=100" width="100px;" alt="Fantastik-Maman"/><br /><sub><b>Fantastik-Maman</b></sub></a><br /><a href="#translation-Fantastik-Maman" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.forresto.com/"><img src="https://avatars.githubusercontent.com/u/395307?v=4?s=100" width="100px;" alt="Forrest O."/><br /><sub><b>Forrest O.</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=forresto" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fmatray"><img src="https://avatars.githubusercontent.com/u/8267716?v=4?s=100" width="100px;" alt="Frédéric"/><br /><sub><b>Frédéric</b></sub></a><br /><a href="#translation-fmatray" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/glennfmatthews/"><img src="https://avatars.githubusercontent.com/u/5603551?v=4?s=100" width="100px;" alt="Glenn Matthews"/><br /><sub><b>Glenn Matthews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=glennmatthews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://greg.technology/"><img src="https://avatars.githubusercontent.com/u/1017304?v=4?s=100" width="100px;" alt="Greg Sadetsky"/><br /><sub><b>Greg Sadetsky</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=gregsadetsky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://kirby.zone"><img src="https://avatars.githubusercontent.com/u/75245963?v=4?s=100" width="100px;" alt="Igor Couto"/><br /><sub><b>Igor Couto</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Aiocouto" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=eltociear" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Irapeke"><img src="https://avatars.githubusercontent.com/u/39604334?v=4?s=100" width="100px;" alt="Irapeke"/><br /><sub><b>Irapeke</b></sub></a><br /><a href="#translation-Irapeke" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jsawo"><img src="https://avatars.githubusercontent.com/u/1294706?v=4?s=100" width="100px;" alt="Jacek Sawoszczuk"/><br /><sub><b>Jacek Sawoszczuk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jsawo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jgfichte"><img src="https://avatars.githubusercontent.com/u/1787162?v=4?s=100" width="100px;" alt="Jason Williams"/><br /><sub><b>Jason Williams</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jgfichte" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jejacks0n"><img src="https://avatars.githubusercontent.com/u/13765?v=4?s=100" width="100px;" alt="Jeremy Jackson"/><br /><sub><b>Jeremy Jackson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jejacks0n" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://jeroenhoek.nl"><img src="https://avatars.githubusercontent.com/u/683699?v=4?s=100" width="100px;" alt="Jeroen Hoek"/><br /><sub><b>Jeroen Hoek</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jdhoek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joeschofield0"><img src="https://avatars.githubusercontent.com/u/47668691?v=4?s=100" width="100px;" alt="Joe Schofield"/><br /><sub><b>Joe Schofield</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joeschofield0" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Joebidido"><img src="https://avatars.githubusercontent.com/u/39796210?v=4?s=100" width="100px;" alt="Joebidido"/><br /><sub><b>Joebidido</b></sub></a><br /><a href="#translation-Joebidido" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://joost.at/"><img src="https://avatars.githubusercontent.com/u/1708494?v=4?s=100" width="100px;" alt="Joost De Cock"/><br /><sub><b>Joost De Cock</b></sub></a><br /><a href="#maintenance-joostdecock" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/joshessman"><img src="https://avatars.githubusercontent.com/u/9941074?v=4?s=100" width="100px;" alt="Josh Essman"/><br /><sub><b>Josh Essman</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=joshessman" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.earth.li/~kake/"><img src="https://avatars.githubusercontent.com/u/1956810?v=4?s=100" width="100px;" alt="Kake"/><br /><sub><b>Kake</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=KakeLP" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/kapunahele"><img src="https://avatars.githubusercontent.com/u/4116963?v=4?s=100" width="100px;" alt="Kapunahele Wong"/><br /><sub><b>Kapunahele Wong</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kapunahelewong" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tangerineshark"><img src="https://avatars.githubusercontent.com/u/70777269?v=4?s=100" width="100px;" alt="Karen"/><br /><sub><b>Karen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=tangerineshark" title="Documentation">📖</a> <a href="#eventOrganizing-tangerineshark" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mcgnly"><img src="https://avatars.githubusercontent.com/u/5653631?v=4?s=100" width="100px;" alt="Katie McGinley"/><br /><sub><b>Katie McGinley</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=mcgnly" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.kieranklaassen.com/"><img src="https://avatars.githubusercontent.com/u/209089?v=4?s=100" width="100px;" alt="Kieran Klaassen"/><br /><sub><b>Kieran Klaassen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kieranklaassen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kittycatou"><img src="https://avatars.githubusercontent.com/u/48165583?v=4?s=100" width="100px;" alt="Kittycatou"/><br /><sub><b>Kittycatou</b></sub></a><br /><a href="#translation-Kittycatou" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.krishoward.org/"><img src="https://avatars.githubusercontent.com/u/5946286?v=4?s=100" width="100px;" alt="Kris"/><br /><sub><b>Kris</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=web-goddess" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kristinruben"><img src="https://avatars.githubusercontent.com/u/17237479?v=4?s=100" width="100px;" alt="Kristin Ruben"/><br /><sub><b>Kristin Ruben</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=kristinruben" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Loudepeuter"><img src="https://avatars.githubusercontent.com/u/38081954?v=4?s=100" width="100px;" alt="Loudepeuter"/><br /><sub><b>Loudepeuter</b></sub></a><br /><a href="#translation-Loudepeuter" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucibytes"><img src="https://avatars.githubusercontent.com/u/77203781?v=4?s=100" width="100px;" alt="Lucian"/><br /><sub><b>Lucian</b></sub></a><br /><a href="#eventOrganizing-lucibytes" title="Event Organizing">📋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luizfzs"><img src="https://avatars.githubusercontent.com/u/6039675?v=4?s=100" width="100px;" alt="Luiz Saggioro"/><br /><sub><b>Luiz Saggioro</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=luizfzs" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MA-TATAS"><img src="https://avatars.githubusercontent.com/u/125549564?v=4?s=100" width="100px;" alt="MA-TATAS"/><br /><sub><b>MA-TATAS</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=MA-TATAS" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manufakturedelweiss"><img src="https://avatars.githubusercontent.com/u/38063391?v=4?s=100" width="100px;" alt="Marcus"/><br /><sub><b>Marcus</b></sub></a><br /><a href="#translation-manufakturedelweiss" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/martintribo"><img src="https://avatars.githubusercontent.com/u/1613442?v=4?s=100" width="100px;" alt="Martin Tribo"/><br /><sub><b>Martin Tribo</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=martintribo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nadege"><img src="https://avatars.githubusercontent.com/u/3792171?v=4?s=100" width="100px;" alt="Nadege Michel"/><br /><sub><b>Nadege Michel</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Tests">⚠️</a> <a href="https://github.com/freesewing/freesewing/commits?author=nadege" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nataliasayang"><img src="https://avatars.githubusercontent.com/u/48160791?v=4?s=100" width="100px;" alt="Natalia"/><br /><sub><b>Natalia</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nataliasayang" title="Code">💻</a> <a href="#design-nataliasayang" title="Design">🎨</a> <a href="#blog-nataliasayang" title="Blogposts">📝</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://yergler.net/"><img src="https://avatars.githubusercontent.com/u/510875?v=4?s=100" width="100px;" alt="Nathan Yergler"/><br /><sub><b>Nathan Yergler</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nyergler" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nicholasdower"><img src="https://avatars.githubusercontent.com/u/9117775?v=4?s=100" width="100px;" alt="Nick Dower"/><br /><sub><b>Nick Dower</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=nicholasdower" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/issues?q=author%3Anicholasdower" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nchilada"><img src="https://avatars.githubusercontent.com/u/692925?v=4?s=100" width="100px;" alt="Nikhil Chelliah"/><br /><sub><b>Nikhil Chelliah</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=nchilada" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/OysteinHoiby"><img src="https://avatars.githubusercontent.com/u/49735055?v=4?s=100" width="100px;" alt="OysteinHoiby"/><br /><sub><b>OysteinHoiby</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=OysteinHoiby" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://pat.forringer.com/"><img src="https://avatars.githubusercontent.com/u/136456?v=4?s=100" width="100px;" alt="Patrick Forringer"/><br /><sub><b>Patrick Forringer</b></sub></a><br /><a href="#plugin-destos" title="Plugin/utility libraries">🔌</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://pd75.github.io/"><img src="https://avatars.githubusercontent.com/u/10294795?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=PD75" title="Documentation">📖</a> <a href="#blog-PD75" title="Blogposts">📝</a> <a href="#translation-PD75" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/phillipthelen"><img src="https://avatars.githubusercontent.com/u/298062?v=4?s=100" width="100px;" alt="Phillip Thelen"/><br /><sub><b>Phillip Thelen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=phillipthelen" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pixieish"><img src="https://avatars.githubusercontent.com/u/32991415?v=4?s=100" width="100px;" alt="Pixieish"/><br /><sub><b>Pixieish</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Pixieish" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.uza.be/persoon/prof-dr-sorcha-ni-dhubhghaill"><img src="https://avatars.githubusercontent.com/u/30624634?v=4?s=100" width="100px;" alt="Prof. dr. Sorcha Ní Dhubhghaill"/><br /><sub><b>Prof. dr. Sorcha Ní Dhubhghaill</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sorchanidhubhghaill" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QuentinFelix"><img src="https://avatars.githubusercontent.com/u/5288091?v=4?s=100" width="100px;" alt="Quentin FELIX"/><br /><sub><b>Quentin FELIX</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=QuentinFelix" title="Code">💻</a> <a href="#design-QuentinFelix" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RikHekker"><img src="https://avatars.githubusercontent.com/u/31843274?v=4?s=100" width="100px;" alt="Rik Hekker"/><br /><sub><b>Rik Hekker</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ARikHekker" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://resume.livingston-gray.com/faq.html"><img src="https://avatars.githubusercontent.com/u/6462?v=4?s=100" width="100px;" alt="Sam Livingston-Gray"/><br /><sub><b>Sam Livingston-Gray</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=geeksam" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sannek"><img src="https://avatars.githubusercontent.com/u/17491062?v=4?s=100" width="100px;" alt="Sanne"/><br /><sub><b>Sanne</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=sannek" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Tyrannogina"><img src="https://avatars.githubusercontent.com/u/19556565?v=4?s=100" width="100px;" alt="Sara Latorre"/><br /><sub><b>Sara Latorre</b></sub></a><br /><a href="#translation-Tyrannogina" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SeaZeeZee"><img src="https://avatars.githubusercontent.com/u/86711383?v=4?s=100" width="100px;" alt="SeaZeeZee"/><br /><sub><b>SeaZeeZee</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=SeaZeeZee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SimonbJohnson"><img src="https://avatars.githubusercontent.com/u/2110742?v=4?s=100" width="100px;" alt="SimonbJohnson"/><br /><sub><b>SimonbJohnson</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3ASimonbJohnson" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SirCharlotte"><img src="https://avatars.githubusercontent.com/u/63847870?v=4?s=100" width="100px;" alt="SirCharlotte"/><br /><sub><b>SirCharlotte</b></sub></a><br /><a href="#translation-SirCharlotte" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.instagram.com/celine_mge/"><img src="https://avatars.githubusercontent.com/u/57619777?v=4?s=100" width="100px;" alt="Slylele"/><br /><sub><b>Slylele</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=Slylele" title="Documentation">📖</a> <a href="#translation-Slylele" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Soazillon"><img src="https://avatars.githubusercontent.com/u/40845940?v=4?s=100" width="100px;" alt="Soazillon"/><br /><sub><b>Soazillon</b></sub></a><br /><a href="#translation-Soazillon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SoneaTheBest"><img src="https://avatars.githubusercontent.com/u/64635425?v=4?s=100" width="100px;" alt="SoneaTheBest"/><br /><sub><b>SoneaTheBest</b></sub></a><br /><a href="#translation-SoneaTheBest" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://metafly.info/"><img src="https://avatars.githubusercontent.com/u/961256?v=4?s=100" width="100px;" alt="Stefan Sydow"/><br /><sub><b>Stefan Sydow</b></sub></a><br /><a href="#translation-stsydow" title="Translation">🌍</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Documentation">📖</a> <a href="https://github.com/freesewing/freesewing/commits?author=stsydow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TriploidTree"><img src="https://avatars.githubusercontent.com/u/4170521?v=4?s=100" width="100px;" alt="Tríona"/><br /><sub><b>Tríona</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=TriploidTree" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/theUnmutual"><img src="https://avatars.githubusercontent.com/u/22374635?v=4?s=100" width="100px;" alt="Unmutual"/><br /><sub><b>Unmutual</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=theUnmutual" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woutervdub"><img src="https://avatars.githubusercontent.com/u/24414629?v=4?s=100" width="100px;" alt="Wouter van Wageningen"/><br /><sub><b>Wouter van Wageningen</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woutervdub" title="Code">💻</a> <a href="#design-woutervdub" title="Design">🎨</a> <a href="#tool-woutervdub" title="Tools">🔧</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amysews"><img src="https://avatars.githubusercontent.com/u/25280778?v=4?s=100" width="100px;" alt="amysews"/><br /><sub><b>amysews</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=amysews" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/anna-puk"><img src="https://avatars.githubusercontent.com/u/100537439?v=4?s=100" width="100px;" alt="anna-puk"/><br /><sub><b>anna-puk</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=anna-puk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beautifulsummermoon"><img src="https://avatars.githubusercontent.com/u/40396388?v=4?s=100" width="100px;" alt="beautifulsummermoon"/><br /><sub><b>beautifulsummermoon</b></sub></a><br /><a href="#translation-beautifulsummermoon" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/berce"><img src="https://avatars.githubusercontent.com/u/10439709?v=4?s=100" width="100px;" alt="berce"/><br /><sub><b>berce</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=berce" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/biou"><img src="https://avatars.githubusercontent.com/u/1340376?v=4?s=100" width="100px;" alt="biou"/><br /><sub><b>biou</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=biou" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bobgeorgethe3rd"><img src="https://avatars.githubusercontent.com/u/16866285?v=4?s=100" width="100px;" alt="bobgeorgethe3rd"/><br /><sub><b>bobgeorgethe3rd</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=bobgeorgethe3rd" title="Documentation">📖</a> <a href="#design-bobgeorgethe3rd" title="Design">🎨</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brmlyklr"><img src="https://avatars.githubusercontent.com/u/22308713?v=4?s=100" width="100px;" alt="brmlyklr"/><br /><sub><b>brmlyklr</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=brmlyklr" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://www.chrisbarrett.fr"><img src="https://avatars.githubusercontent.com/u/2373249?v=4?s=100" width="100px;" alt="chri5b"/><br /><sub><b>chri5b</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=chri5b" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dingcycle"><img src="https://avatars.githubusercontent.com/u/1681985?v=4?s=100" width="100px;" alt="dingcycle"/><br /><sub><b>dingcycle</b></sub></a><br /><a href="#translation-dingcycle" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/drowned-in-books"><img src="https://avatars.githubusercontent.com/u/100040772?v=4?s=100" width="100px;" alt="drowned-in-books"/><br /><sub><b>drowned-in-books</b></sub></a><br /><a href="#question-drowned-in-books" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/econo202"><img src="https://avatars.githubusercontent.com/u/34138153?v=4?s=100" width="100px;" alt="econo202"/><br /><sub><b>econo202</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=econo202" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ericamattos"><img src="https://avatars.githubusercontent.com/u/4341417?v=4?s=100" width="100px;" alt="ericamattos"/><br /><sub><b>ericamattos</b></sub></a><br /><a href="#translation-ericamattos" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fightingrabbit"><img src="https://avatars.githubusercontent.com/u/25751445?v=4?s=100" width="100px;" alt="fightingrabbit"/><br /><sub><b>fightingrabbit</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=fightingrabbit" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocSpencer77"><img src="https://avatars.githubusercontent.com/u/43393580?v=4?s=100" width="100px;" alt="gaylyndie"/><br /><sub><b>gaylyndie</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=DocSpencer77" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grimlokason"><img src="https://avatars.githubusercontent.com/u/5112238?v=4?s=100" width="100px;" alt="grimlokason"/><br /><sub><b>grimlokason</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=grimlokason" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://weblog.redisdead.net"><img src="https://avatars.githubusercontent.com/u/6494414?v=4?s=100" width="100px;" alt="hellgy"/><br /><sub><b>hellgy</b></sub></a><br /><a href="#design-hellgy" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jackseye"><img src="https://avatars.githubusercontent.com/u/27834526?v=4?s=100" width="100px;" alt="jackseye"/><br /><sub><b>jackseye</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=jackseye" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marckiesel"><img src="https://avatars.githubusercontent.com/u/39653780?v=4?s=100" width="100px;" alt="marckiesel"/><br /><sub><b>marckiesel</b></sub></a><br /><a href="#translation-marckiesel" title="Translation">🌍</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/marpants"><img src="https://avatars.githubusercontent.com/u/61366665?v=4?s=100" width="100px;" alt="marpants"/><br /><sub><b>marpants</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=marpants" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://tech.lgbt/@mergerg"><img src="https://avatars.githubusercontent.com/u/64447714?v=4?s=100" width="100px;" alt="mergerg"/><br /><sub><b>mergerg</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=raphaelsiz" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mesil"><img src="https://avatars.githubusercontent.com/u/14284175?v=4?s=100" width="100px;" alt="mesil"/><br /><sub><b>mesil</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/issues?q=author%3Amesil" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starfetch"><img src="https://avatars.githubusercontent.com/u/80041179?v=4?s=100" width="100px;" alt="starfetch"/><br /><sub><b>starfetch</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Code">💻</a> <a href="https://github.com/freesewing/freesewing/commits?author=starfetch" title="Documentation">📖</a> <a href="#translation-starfetch" title="Translation">🌍</a> <a href="#design-starfetch" title="Design">🎨</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timorl"><img src="https://avatars.githubusercontent.com/u/4363804?v=4?s=100" width="100px;" alt="timorl"/><br /><sub><b>timorl</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=timorl" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ttimearl"><img src="https://avatars.githubusercontent.com/u/77916590?v=4?s=100" width="100px;" alt="ttimearl"/><br /><sub><b>ttimearl</b></sub></a><br /><a href="#content-ttimearl" title="Content">🖋</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chrisgloom"><img src="https://avatars.githubusercontent.com/u/15905991?v=4?s=100" width="100px;" alt="tuesgloomsday"/><br /><sub><b>tuesgloomsday</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=chrisgloom" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/valadaptive"><img src="https://avatars.githubusercontent.com/u/79560998?v=4?s=100" width="100px;" alt="valadaptive"/><br /><sub><b>valadaptive</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=valadaptive" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/viocky"><img src="https://avatars.githubusercontent.com/u/39279173?v=4?s=100" width="100px;" alt="viocky"/><br /><sub><b>viocky</b></sub></a><br /><a href="#translation-viocky" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woolishboy"><img src="https://avatars.githubusercontent.com/u/57816321?v=4?s=100" width="100px;" alt="woolishboy"/><br /><sub><b>woolishboy</b></sub></a><br /><a href="https://github.com/freesewing/freesewing/commits?author=woolishboy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cloutiy"><img src="https://avatars.githubusercontent.com/u/8433147?v=4?s=100" width="100px;" alt="yc"/><br /><sub><b>yc</b></sub></a><br /><a href="#translation-cloutiy" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
For [Support](https://github.com/freesewing/freesewing/issues/new/choose),
|
||||
please use the [Issues](https://github.com/freesewing/freesewing/issues) &
|
||||
[Discussions](https://github.com/freesewing/freesewing/discussions) on
|
||||
[GitHub](https://github.com/freesewing/freesewing).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file is auto-generated | All changes you make will be overwritten.
|
||||
export const name = '@freesewing/plugin-sprinkle'
|
||||
export const version = '3.0.0-alpha.9'
|
||||
export const version = '3.0.0'
|
||||
export const data = { name, version }
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue