diff --git a/.eslintignore b/.eslintignore
index 9117bc46585..749ad3c82aa 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -6,6 +6,7 @@
*.svg
*.sh
*.md
+*.mdx
*.prisma
*.css
*.mustache
diff --git a/markdown/dev/contribute/en.md b/markdown/dev/contribute/en.md
deleted file mode 100644
index bf5f9560f42..00000000000
--- a/markdown/dev/contribute/en.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Contribute
----
-
-Looking to contribute to FreeSewing? That's wonderful.
-
-## Ways to contribute
-
-There are many ways to contribute, here's some examples:
-
-
-
-## Code of Conduct
-
-All FreeSewing contributors must respect and uphold our Code of Conduct:
-
-
-
diff --git a/markdown/dev/design/en.md b/markdown/dev/design/en.md
deleted file mode 100644
index be836439f0f..00000000000
--- a/markdown/dev/design/en.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-title: Design
----
-
-If you are looking to use FreeSewing to design parametric sewing patterns,
-below are the most relevant materials on this site for you:
-
-## Before you start
-
-Outlines the minimal prerequisites you should understand before you dive in, including:
-
--
-
-
-## Pattern design best practices
-
-In design as in code, there's often many different ways to accomplish the same
-result. We have a list of best practices that we recommend you follow. Even if
-in the end you make your own choices, we recommend you at least ready through
-them once. They include:
-
--
-
-
-## Design guide
-
-We've so far been talking about *patterns* but what you're really be creating is a *design*.
-What the difference is, and what goes into a design to generate a pattern is explained in our design guide:
-
--
-
-
-## Pattern design tutorial
-
-This is our pattern design tutorial. If you're new to designing patterns with
-FreeSewing, following the tutorial is the fastest way to get started:
-
--
-
-
-## Plugin guide
-
-FreeSewing can be extended with plugins. We provide a range of plugins that you can use.
-However, if you'd like to write your own plugins, you should also read the guide on how they work:
-
--
-
-
-## Common design challenges
-
-This is a list of common challenges in designing parametric sewing patterns, and tips on how to tackle them:
-
--
-
-
-## Common code challenges
-
-While designing patterns in code has a lot of benefits, there might be times
-where things that are intuitive on paper don't come naturally to you. This is
-a list of common code challenges and how to tackle them:
-
--
-
-
-## Core API
-
-This is the reference documentation for FreeSewing's core library.
-This is where you can look up every possible API call with examples:
-
--
-
-
-## Macros
-
-This is the reference documentation for macros provided by FreeSewing's own plugins:
-
--
-
-
-## Snippets
-
-This is the reference documentation for snippets provided by FreeSewing's own plugins:
-
--
-
-
-## Plugins
-
-This is the list of all plugins we provide:
-
--
-
-
-
-
-##### Missing something?
-
-If you are missing something or have questions not covered here, the `#pattern-design` channel
-on [discord.freesewing.org](https://discord.freesewing.org/) is the best place to ask questions.
-
-
diff --git a/markdown/dev/guides/best-practices/en.md b/markdown/dev/guides/best-practices/en.md
deleted file mode 100644
index fca2f03113b..00000000000
--- a/markdown/dev/guides/best-practices/en.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Pattern design best practices
----
-
-Here is a list of best practices when designing patterns:
-
-
diff --git a/markdown/dev/guides/best-practices/go-counter-clockwise/en.md b/markdown/dev/guides/best-practices/go-counter-clockwise/en.md
deleted file mode 100644
index f371758ad52..00000000000
--- a/markdown/dev/guides/best-practices/go-counter-clockwise/en.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Construct paths counter-clockwise
-order: 70
----
-
-Construct your paths _counter-clockwise_ (anti-clockwise). You have to pick a direction anyway, and going
-counter-clockwise is a bit of a convention.
-
-This applies both to naming points (specifically the control points of curves)
-and the order in which you define your points.
-
-Obviously, the order in which you add points to your code needs to take a backseat
-to the logic of your code. But typically what you're doing is constructing an outline
-of (a part of) a garment.
-
-So pick a point, and make your way around counter-clockwise.
-
-When naming control points for curves, re-use the name of the point they are attached to
-and add `Cp1` to the control point before and `Cp2` to the control point after the point if,
-once again, you follow your path counter-clockwise.
-
-For example:
-
-```js
-part.paths.seam = new Path()
- .move(points.hemCenter)
- .line(points.hemSide)
- .line(points.waistSide)
- .curve(points.waistSideCp2, points.armholeCp1, points.armhole)
-```
-
-
-
-##### This convention helps with `Path.offset()` too
-
-Constructing a path counter-clockwise will also ensure that the path offset goes outwards
-rather than inwards.
-
-
diff --git a/markdown/dev/guides/best-practices/respect-draft-settings/en.md b/markdown/dev/guides/best-practices/respect-draft-settings/en.md
deleted file mode 100644
index a21013d0b2c..00000000000
--- a/markdown/dev/guides/best-practices/respect-draft-settings/en.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: Respect draft settings
-order: 40
----
-
-Apart from the pattern options that you configure for your pattern,
-all FreeSewing patterns have a set of [draft settings](/reference/settings) that can be tweaked
-by the user.
-
-While many of these will automatically be handled by FreeSewing, there are some
-that you will need to take into account while developing your pattern. They are:
-
-## Complete
-
-The [`complete`](/reference/settings/complete) setting is a boolean that is either true or false.
-
-Its goal is to determine whether we should draft a _complete_ pattern which
-includes elements such as seam allowance lines, labels, and markings for
-buttons and notches,
-or if the pattern should include the part outlines only.
-
-It is your job when developing your pattern to ensure that the pattern
-checks the `complete` setting and includes or omits the appropriate elements
-based on the setting's value.
-
-## Paperless
-
-The [`paperless`](/reference/settings/paperless) setting is a boolean that is either true or false.
-
-A _paperless_ pattern is a pattern that has extra dimension markings so
-users can trace or transfer the pattern onto fabric or paper without having
-the need to print it.
-
-It is your job when developing your pattern to ensure that the pattern
-checks the `paperless` setting and includes or omits the dimensions
-based on the setting's value.
-
-## Seam allowance
-
-The [`sa`](/reference/settings/sa) setting is a number that controls the seam allowance width.
-
-Unless `sa` is zero, patterns are drafted with seam allowance lines included.
-
-It is your job when developing your pattern to ensure that the pattern
-checks the `sa` setting and includes or omits the seam allowance lines
-based on the setting's value.
-
-
-
-##### Use a multiple of `sa` for your hem allowance
-
-Resist the temptation to use an absolute value for any seam allowance,
-including at the hem.
-
-Instead, always use a multiple of the `sa` value.
-This will help to ensure that the seam allowances will scale to appropriate
-values when the pattern is scaled up or down to giant or doll sizes.
-
-
-
-## Example
-
-To respect the `complete`, `paperless`, and `sa` draft settings, structure your parts as such:
-
-```js
-export default function(part) {
- let { complete, sa, paperless } = part.shorthand()
- // Your paths and points here
-
- if (complete) {
- // Your snippets, text, helplines and so on here
-
- if (sa) {
- // Your seam allowance here
- }
-
- if (paperless) {
- // Your dimensions
- }
- }
-
- return part
-}
-```
diff --git a/markdown/dev/guides/best-practices/reuse-css-classes/en.md b/markdown/dev/guides/best-practices/reuse-css-classes/en.md
deleted file mode 100644
index 37666b869f5..00000000000
--- a/markdown/dev/guides/best-practices/reuse-css-classes/en.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Re-use CSS classes
-order: 30
----
-
-While you can style your pattern however you want, try to re-use the
-[CSS class names](/reference/css) that
-are in use in our default `@freesewing/plugin-theme` plugin.
-
-Doing so will ensure consistent styling for patterns.
diff --git a/markdown/dev/guides/best-practices/reuse-measurements/en.md b/markdown/dev/guides/best-practices/reuse-measurements/en.md
deleted file mode 100644
index ed2cc073bd9..00000000000
--- a/markdown/dev/guides/best-practices/reuse-measurements/en.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Re-use measurements
-order: 10
----
-
-When designing patterns, re-use the measurements that are already in use as much as possible.
-Nobody wins when every pattern requires its own set of measurements, or names
-certain measurements differently.
-
-
-
-###### See our measurements page for standard measurement names
-
-The [measurements reference page](/reference/measurements/)
-contains all our standard measurement names.
-
-
diff --git a/markdown/dev/guides/best-practices/reuse-options/en.md b/markdown/dev/guides/best-practices/reuse-options/en.md
deleted file mode 100644
index 9d818093072..00000000000
--- a/markdown/dev/guides/best-practices/reuse-options/en.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: Re-use options
-order: 20
----
-
-The same arguments for re-using measurements are also (somewhat) true for options.
-
-While your pattern may require some very specific
-options, there's probably a bunch that are similar to other patterns. Re-use those names.
-
-As in, `bicepsEase` exists. So don't go creating an `upperArmEase` option.
diff --git a/markdown/dev/guides/best-practices/use-percentages/en.md b/markdown/dev/guides/best-practices/use-percentages/en.md
deleted file mode 100644
index 211bd3cf5ec..00000000000
--- a/markdown/dev/guides/best-practices/use-percentages/en.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Use percentage options where possible
-order: 50
----
-
-When designing patterns, you should refrain from using absolute values.
-
-That 6 cm ease you add might be fine for all scenarios you tested.
-But, then somebody comes around who is twice your size or who is making clothes for a doll,
-and things will go off the rails.
-
-Don't be tempted to add absolute values to your patterns, as they don't scale.
-Instead, embrace percentages as options.
-By using values that are percentages of measurements, the values will scale
-and continue to work as the measurements scale up or down.
-
-
-
-##### Use the doll and giant tests
-
-To check how well your pattern scales, you can
-use the _doll_ and _giant_ tests by sampling the pattern for 3 measurements sets:
-
-1. A set of measurements from an average person (the person)
-2. A set of measurements 1/10th of an average person (the doll)
-3. A set of measurements 3 times that of an average person (the giant)
-
-A well-designed pattern will scale a factor 10 down or 3 up and still hold its shape.
-If your pattern makes assumptions about size, these tests will show that.
-
-FreeSewing's development environment provides these tests out of the box,
-so you can see their results at the click of a button.
-
-
diff --git a/markdown/dev/guides/best-practices/use-translation-keys/en.md b/markdown/dev/guides/best-practices/use-translation-keys/en.md
deleted file mode 100644
index c13dd7478b1..00000000000
--- a/markdown/dev/guides/best-practices/use-translation-keys/en.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Use translation keys, not text
-order: 60
----
-
-Don't insert literal text in your patterns. Instead, insert a key that can then be translated.
-
-For example, if you want to put "_Finish with bias tape_" on your pattern, don't be
-tempted to do this:
-
-```js
-path.seam.attr("data-text", "Finish with bias tape");
-```
-
-That (English) string is now hard-coded in your pattern. As FreeSewing supports
-translation out of the box, it would be a real shame not to make use of it.
-
-Instead, insert a key to identify the string:
-
-```js
-path.seam.attr("data-text", "finishWithBiasTape");
-```
-
-This way, different strings for different languages can be associated with
-the key, allowing translated text to be used.
-
-You can find and browse the translations and available translation keys for each design in the design's
-[i18n folder on GitHub][1].
-
-[1]: https://github.com/freesewing/freesewing/tree/develop/designs/aaron/i18n
diff --git a/markdown/dev/guides/code-of-conduct/en.md b/markdown/dev/guides/code-of-conduct/en.md
deleted file mode 100644
index ce800fa7314..00000000000
--- a/markdown/dev/guides/code-of-conduct/en.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Code of Conduct
----
-
-All FreeSewing contributors must respect and uphold our Code of Conduct:
-
-
-
-
-
-##### Attribution
-
-This Code of Conduct is an almost verbatim copy of the [Contributor Covenant][homepage], version 2.0,
-available at [http://contributor-covenant.org/version/2/0][version]
-
-[homepage]: http://contributor-covenant.org
-
-[version]: http://contributor-covenant.org/version/2/0/
-
-
diff --git a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/correction/en.md b/markdown/dev/guides/code-of-conduct/enforcement-guidelines/correction/en.md
deleted file mode 100644
index 82691a2983c..00000000000
--- a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/correction/en.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Correction
-order: 10
----
-
-##### Community Impact
-
-Use of inappropriate language or other behavior
-deemed unprofessional or unwelcome in the community.
-
-##### Consequence
-
-A private, written warning from community leaders,
-providing clarity around the nature of the violation and an
-explanation of why the behavior was inappropriate.
-
-A public apology may be requested.
diff --git a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/en.md b/markdown/dev/guides/code-of-conduct/enforcement-guidelines/en.md
deleted file mode 100644
index 1ac87e26ca0..00000000000
--- a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/en.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Enforcement Guidelines
-order: 60
----
-
-Community leaders will follow these Community Impact Guidelines
-in determining the consequences for any action they deem
-in violation of FreeSewing's Code of Conduct:
-
-
diff --git a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/permanent-ban/en.md b/markdown/dev/guides/code-of-conduct/enforcement-guidelines/permanent-ban/en.md
deleted file mode 100644
index 1c44452a7cd..00000000000
--- a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/permanent-ban/en.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Permanent ban
-order: 40
----
-
-##### Community Impact
-
-Demonstrating a pattern of violation of
-community standards, including sustained inappropriate behavior,
-harassment of an individual, or aggression toward or
-disparagement of classes of individuals.
-
-##### Consequence
-
-A permanent ban from any sort of public interaction within the community.
diff --git a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/temporary-ban/en.md b/markdown/dev/guides/code-of-conduct/enforcement-guidelines/temporary-ban/en.md
deleted file mode 100644
index 6ccccfdbf4b..00000000000
--- a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/temporary-ban/en.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Temporary ban
-order: 30
----
-
-##### Community Impact
-
-A serious violation of community standards,
-including sustained inappropriate behavior.
-
-##### Consequence
-
-A temporary ban from any sort of interaction or
-public communication with the community for a specified period
-of time.
-
-No public or private interaction with the people
-involved, including unsolicited interaction with those enforcing
-the Code of Conduct, is allowed during this period.
-
-Violating these terms may lead to a permanent ban.
diff --git a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/warning/en.md b/markdown/dev/guides/code-of-conduct/enforcement-guidelines/warning/en.md
deleted file mode 100644
index 082c5c06bce..00000000000
--- a/markdown/dev/guides/code-of-conduct/enforcement-guidelines/warning/en.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Warning
-order: 20
----
-
-##### Community Impact
-
-A violation through a single incident or series of actions.
-
-##### Consequence
-
-A warning with consequences for continued behavior.
-
-No interaction with the people involved, including unsolicited
-interaction with those enforcing the Code of Conduct, for a
-specified period of time. This includes avoiding interactions
-in community spaces as well as external channels like social
-media.
-
-Violating these terms may lead to a temporary or permanent ban.
diff --git a/markdown/dev/guides/code-of-conduct/enforcement-responsibilities/en.md b/markdown/dev/guides/code-of-conduct/enforcement-responsibilities/en.md
deleted file mode 100644
index eb795eb7b7b..00000000000
--- a/markdown/dev/guides/code-of-conduct/enforcement-responsibilities/en.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Enforcement responsibilities
-order: 30
----
-
-Community leaders are responsible for clarifying and enforcing our standards
-of acceptable behavior and will take appropriate and fair corrective action
-in response to any behavior that they deem inappropriate, threatening,
-offensive, or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, and will communicate reasons
-for moderation decisions when appropriate.
diff --git a/markdown/dev/guides/code-of-conduct/enforcement/en.md b/markdown/dev/guides/code-of-conduct/enforcement/en.md
deleted file mode 100644
index 87ac952879b..00000000000
--- a/markdown/dev/guides/code-of-conduct/enforcement/en.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Enforcement
-order: 50
----
-
-Instances of abusive, harassing, or otherwise unacceptable behavior
-may be reported to the community leaders responsible for enforcement:
-
-- Joost De Cock (joost@joost.at)
-- Sorcha Ní Dhubhghaill (nidhubhs@gmail.com)
-
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and
-security of the reporter of any incident.
diff --git a/markdown/dev/guides/code-of-conduct/our-pledge/en.md b/markdown/dev/guides/code-of-conduct/our-pledge/en.md
deleted file mode 100644
index f0492375fde..00000000000
--- a/markdown/dev/guides/code-of-conduct/our-pledge/en.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Our pledge
-order: 10
----
-
-We as members, contributors, and leaders of the FreeSewing community pledge
-to make participation in our community a harassment-free experience for everyone.
-
-Everyone, regardless of age, body size, visible or invisible disability,
-ethnicity, sex characteristics, gender identity and expression, level of experience,
-education, socio-economic status, nationality, personal appearance, race,
-religion, or sexual identity and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
diff --git a/markdown/dev/guides/code-of-conduct/our-standards/en.md b/markdown/dev/guides/code-of-conduct/our-standards/en.md
deleted file mode 100644
index ca7e3876e72..00000000000
--- a/markdown/dev/guides/code-of-conduct/our-standards/en.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Our standards
-order: 20
----
-
-Examples of behavior that contributes to a positive environment for our community include:
-
-- Demonstrating empathy and kindness toward other people
-- Being respectful of differing opinions, viewpoints, and experiences
-- Giving and gracefully accepting constructive feedback
-- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
-- Focusing on what is best not just for us as individuals, but for the overall community
-
-Examples of unacceptable behavior include:
-
-- The use of sexualized language or imagery, and sexual attention or advances of any kind
-- Trolling, insulting or derogatory comments, and personal or political attacks
-- Public or private harassment
-- Publishing others’ private information, such as a physical or email address, without their explicit permission
-- Other conduct which could reasonably be considered inappropriate in a professional setting
diff --git a/markdown/dev/guides/code-of-conduct/scope/en.md b/markdown/dev/guides/code-of-conduct/scope/en.md
deleted file mode 100644
index 9f7bbc0c8d1..00000000000
--- a/markdown/dev/guides/code-of-conduct/scope/en.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: Scope
-order: 40
----
-
-This Code of Conduct applies within all FreeSewing community spaces and also applies
-when an individual is officially representing the FreeSewing community in public spaces.
-
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed representative
-at an online or offline event.
diff --git a/markdown/dev/guides/content/en.md b/markdown/dev/guides/content/en.md
deleted file mode 100644
index 127c95c4340..00000000000
--- a/markdown/dev/guides/content/en.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: Content guides
----
diff --git a/markdown/dev/guides/content/mdx/en.md b/markdown/dev/guides/content/mdx/en.md
deleted file mode 100644
index 3a4dd133915..00000000000
--- a/markdown/dev/guides/content/mdx/en.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: MDX Guide
----
-
-Explain MDX content
diff --git a/markdown/dev/guides/content/sanity/en.md b/markdown/dev/guides/content/sanity/en.md
deleted file mode 100644
index 0816e8fd903..00000000000
--- a/markdown/dev/guides/content/sanity/en.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-title: Sanity Content Guide
----
-
-FreeSewing uses Sanity content needs to be edited/written by non-technical contributors,
-and for images uploaded by users, such as for their profile image and so on.
-
-
-
-You can manage FreeSewing's Sanity content at
-[cms.freesewing.org](https://cms.freesewing.org/)
-
-
-By *content that needs to be edited/written by non-technical contributors* we mean:
-
-- Newsletter posts
-- Blog posts in all languages
-- Showcase posts in all languages
-
-## Why we use Sanity
-
-The (historical) reason that we use a (headless) CMS for this lies with **the
-showcase posts**. Our documentation is still hosted in git as MDX, and
-historically this was also the case for our blog posts and showcase posts.
-
-However, while documentation is written by contributors who are familiar with
-how we work, and blog posts are typically written by Joost, showcase posts are
-often provided by users of the site for whom submitting a pull request is a
-steep learning curve.
-
-So for this reason, we started using an external CMS to host the showcase
-posts. And, since blog posts and showcase posts are so similar, we decided to
-use this platform for both. Later, we added newsletter content to this list
-because this too is sometimes provided by people not so familiar with the git
-workflow.
-
-Prior to version 3, we used a self-hosted version of
-[Strapi](https://strapi.io/) for this. And while that did what we needed,
-self-hosting adds workload to people and our backend systems, so it's not
-without its drawbacks. Then, with the release of Strapi v4, they dropped
-support for MongoDB, which was the database we are using, so we were stuck on
-v3 of Strapi.
-
-So for FreeSewing v3 we started looking for alternatives, and after trying
-various solutions Sanity came out as the best solution for our needs. It's a
-SaaS solution -- which is nice because it means we don't have to host anything
--- but the flip side of the coin is that as a communal open source project, we
-obviously cannot afford it.
-
-Fortunately for us, the same reasons that mean we don't have any money also
-mean that Sanity took pity on us, and they agreed to waive their fees and let
-us use their service free of charge. So, Sanity is now a FreeSewing sponsor,
-and since everything is in place already, we also use them to host user images
-because honestly it's a really nice service.
-
-## How to manage Sanity content
-
-As Sanity is a headless CMS, you essentially have to talk to the API to manage
-your content.
-
-Fear not though, we don't expect you to do that. The Sanity Studio is a
-web-based frontend that allows you to manage the content in a web environment,
-and we have an instance of it deployed at https://cms.freeseiwng.org/ that is
-pre-configured to manage FreeSewing's content.
-
-## For developers
-
-If you're looking to learn more about how to interact with the Sanity API,
-please refer to [the Sanity reference documentation](/reference/sites/sanity).
-
diff --git a/markdown/dev/guides/docs/docs.png b/markdown/dev/guides/docs/docs.png
deleted file mode 100644
index 5c32a3a98b4..00000000000
Binary files a/markdown/dev/guides/docs/docs.png and /dev/null differ
diff --git a/markdown/dev/guides/docs/docs.svg b/markdown/dev/guides/docs/docs.svg
deleted file mode 100644
index 91cd0e55f0d..00000000000
--- a/markdown/dev/guides/docs/docs.svg
+++ /dev/null
@@ -1,404 +0,0 @@
-
-
-
-
diff --git a/markdown/dev/guides/docs/en.md b/markdown/dev/guides/docs/en.md
deleted file mode 100644
index b305ea0f6db..00000000000
--- a/markdown/dev/guides/docs/en.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: How we structure our documentation
----
-
-Whether you're writing documentation for FreeSewing or merely trying
-to find what you are looking for, understanding how we structure our
-documentation can help you find your feet and figure out what goes where.
-
-## Types of documentation
-
-Our documentation is divided into four different types:
-
-- [**Tutorials**](/tutorials) are lessons that lead you through a series of steps to complete a project.
-- [**Guides**](/guides) tell a story to further your understanding of a specific topic.
-- [**Howtos**](/howtos) give you concrete steps to solve a common problem or challenge.
-- [**Reference**](/reference) holds technical descriptions of the underlying technology and how to make use of it.
-
-Each time you write documentation, you have to ask yourself: Is it a tutorial? Is it a Guide?
-Is it a Howto? Or, is it Reference documentation?
-
-If you find it hard to answer that question, the illustration below might help you figure out
-where your documentation should go based on what it's trying to accomplish:
-
-
-
-- Write a **Tutorial** is your aim is to help people learn the platform
-- Write a **Guide** if your aim is to further people's understanding of a topic by going a bit deeper
-- Write a **Howto** if your aim is to help people accomplish a task
-- Write **Reference** documentation to detail how things work under the hood
-- Refer people to **Discord** or **GitHub** for things that are not (yet) covered in our documentation
-
-
-
-##### Based on a talk by Daniele Procida
-
-This structure is loosely based
-on [this talk by Daniele Procida](https://www.youtube.com/watch?v=t4vKPhjcMZg) at
-PyCon AU 2017.
-
-
diff --git a/markdown/dev/guides/en.md b/markdown/dev/guides/en.md
deleted file mode 100644
index 46e3fd8b018..00000000000
--- a/markdown/dev/guides/en.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Guides
-order: zbb
----
-
-You can find a list of all FreeSewing guides below:
-
-## Main sections
-
-
-
-
-
-##### What makes a guide a guide?
-
-Guides tell a story to further your understanding of a specific topic.
-
-Guides and Howtos are on a spectrum with Howtos being terse _do-this-then-that_ recipes, whereas
-guides take more time to explain in-depth what is being done and why.
-
-For more details, refer to [How we structure our documentation](/guides/docs).
-
-
-
-## Full list
-
-
-
diff --git a/markdown/dev/guides/markdown/code-blocks/en.md b/markdown/dev/guides/markdown/code-blocks/en.md
deleted file mode 100644
index 1eac70964e8..00000000000
--- a/markdown/dev/guides/markdown/code-blocks/en.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: Code and code blocks
-order: 80
----
-
-Especially for our developer documentation, there's a lot of times we include source code
-in the documentation.
-You can make these look pretty by using a code block.
-
-The basic use is to wrap your code in three backtick characters on a line:
-
-````markdown
-```
-let me = 'you'
-```
-````
-
-Gives you:
-
-```text
-let me = 'you'
-```
-
-This is a generic code block. But we also support syntax highlighting.
-To do so, add the language specifier after the opening backticks:
-
-````markdown
-```js
-let me = 'you'
-```
-````
-
-To get:
-
-```js
-let me = 'you'
-```
-
-The following language codes are supported:
-
-- `js` for JavaScript code
-- `markdown` for Markdown
-- `html` for HTML
-- `svg` for SVG
-- `bash` for Bash or shell scripts
-- `mdx` for MDX
-- `jsx` for JSX
-- `json` for JSON
-
-
-
-Note that `mermaid` code blocks will be rendered as
-[Mermaid](https://mermaid.js.org/) diagrams. Refer to the docs on [custom
-tags](/guides/markdown/custom-components#mermaid) for an example.
-
-
diff --git a/markdown/dev/guides/markdown/custom-components/en.md b/markdown/dev/guides/markdown/custom-components/en.md
deleted file mode 100644
index 08b2884de49..00000000000
--- a/markdown/dev/guides/markdown/custom-components/en.md
+++ /dev/null
@@ -1,850 +0,0 @@
----
-title: Custom tags
-order: 90
----
-
-The way we render Markdown on our websites is through the use of
-[MDX](https://mdxjs.com/). This allows us to extend Markdown with our own
-tags. These tags are custom React components.
-
-Such custom components allow us to put things in Markdown content that would
-typically require a lot more complexity.
-
-Below is a list of custom tags that we support in our Markdown-based
-documentation, both for freesewing.dev as freesewing.org.
-
-## Summary and Availability
-
-This is a summary of the available custom tags and where each tag
-can be used.
-- **sde** tags can be used in the standalone development environment
-(provided by the [new-design](/reference/packages/new-design) package).
-- **dev** and **org** tags can be used on the
-freesewing.dev and freesewing.org sites, respectively.
-- For convenience, tags with similar functionality have been grouped together.
-
-### Text popouts
-
-These are markdown tags used to display text in a colored _popout_ box,
-to make the text stand out and to quickly convey what type of
-information is being presented.
-
-| Tag | sde | dev | org |
-| ------: | :---: | :---: | :---: |
-| [Comment](#comment) | X | X | X |
-| [Fixme](#fixme) | X | X | X |
-| [Link](#link) | X | X | X |
-| [Note](#note) | X | X | X |
-| [Related](#related) | X | X | X |
-| [Tip](#tip) | X | X | X |
-| [Tldr](#tldr) | X | X | X |
-| [Warning](#warning) | X | X | X |
-
-### Features and Formatting
-
-These tags provide special features or ways to format content.
-
-| Tag | sde | dev | org |
-| --------------------: | :---: | :---: | :---: |
-| [ControlTip](#controltip) | | X | X |
-| [DocsTitle](#docstitle) | | X | X |
-| [DocsLink](#docslink) | | X | X |
-| [Example](#example) | | X | X |
-| [Legend](#legend) | | | X* |
-| [MeasieImage](#measieimage) | | | X* |
-| [(Mermaid)](#mermaid) | | X | X |
-| [Method](#method) | | X | |
-| [StatusCode](#statuscode) | | X | |
-| [Tab](#tab) | | X | X |
-| [Tabs](#tabs) | | X | X |
-| [Youtube](#youtube) | | X | X |
-
-
-
-- **Legend** is available to use only on the
-[Pattern Notation Guide](https://freesewing.org/docs/about/notation) and
-[On the Fold](https://freesewing.org/docs/sewing/on-the-fold)
-documentation pages.
-
-- **MeasieImage** is available to use only on the immediate subpages in the
-[Measurements](https://freesewing.org/docs/measurements)
-section of the documentation.
-
-
-
-### Documentation Generators
-
-These tags generate documentation-related content related to designs
-and documentation files.
-This prevents the need to write and edit the documentation manually,
-making it easier to write and to maintain when changes occur.
-
-| Tag | sde | dev | org |
-| -----------------: | :---: | :---: | :---: |
-| [DesignInfo](#designinfo) | | | X* |
-| [DesignMeasurements](#designmeasurements) | | | X* |
-| [DesignOptions](#designoptions) | | | X* |
-| [ReadMore](#readmore) | X | X | X |
-
-
-
-- **DesignInfo** is available to use only on an individual design's
-main documentation page, for example
-[Aaron A-Shirt](https://freesewing.org/docs/designs/aaron).
-
-- **DesignMeasurements** is available to use only on an individual design's
-Required Measurements documentation page, for example
-[Aaron A-Shirt: Required Measurements](https://freesewing.org/docs/designs/aaron/measurements).
-
-- **DesignMeasurements** is available to use only on an individual design
-Design Options documentation page, for example
-[Aaron A-Shirt: Design Options](https://freesewing.org/docs/designs/aaron/options).
-
-
-
-***
-
-## Details
-
-All custom tags are listed alphabetically below.
-
-### Comment
-
-Use a **Comment** when you want to illustrate something that is a personal opinion
-or advice rather than the sort more neutral voice used throughout
-our documentation.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `by` | yes | | Name of the commenter |
-| `hideable` | | `false` | Allows popout to be hidden |
-
-
-
-MDX is essentially Markdown + (React) components
-
- It can be helpful to be able to hide long comments that might take up
- too much space on the page _(hideable)_
-
-
-
-```markdown
-MDX is essentially Markdown + (React) components
-
- It can be helpful to hide long comments that might take up too much
- space on the page _(hideable)_
-
-
-```
-
-
-
-### ControlTip
-
-The **ControlTip** tag provides a popout box containing pre-written,
-formatted text describing the
-[User Experience](https://freesewing.org/account/control)
-account setting and explaining what it does.
-
-
-
-
-
-
-```markdown
-
-```
-
-
-
-### DesignInfo
-
-**DesignInfo** generates a detailed web page for a given FreeSewing
-design with information including line drawings, example photos,
-required measurements, design options, and links to documentation.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `design` | yes | | Name of the design |
-| `docs` | | `false` | Generates content suitable for a documentation page |
-
-
-
-(Please see the
-[Aaron A-Shirt documentation](https://freesewing.org/docs/designs/aaron)
-page for an example of this tag.)
-
-
-```markdown
-
-```
-
-
-
-
-Because design documentation pages are the only place this tag can
-be used, you should always include the `docs` attribute when using
-this tag.
-(Omitting it will generate different content, less suited for
-documentation.)
-
-
-### DesignMeasurements
-
-**DesignMeasurements** generates a list of required and optional
-measurements for a given FreeSewing design.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `design` | yes | | Name of the design |
-
-
-
-(Please see
-[Aaron A-Shirt: Requirement Measurements](https://freesewing.org/docs/designs/aaron/measurements)
-for an example of this tag.)
-
-
-```markdown
-
-```
-
-
-
-### DesignOptions
-
-**DesignOptions** generates a list of design options and settings
-for a given FreeSewing design.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `design` | yes | | Name of the design |
-
-
-
-(Please see
-[Aaron A-Shirt: Design Options](https://freesewing.org/docs/designs/aaron/options)
-for an example of this tag.)
-
-
-```markdown
-
-```
-
-
-
-### DocsLink
-
-The **DocsLink** tag creates a formatted link from a given slug
-(a relative URL path).
-It also looks up the title of the linked web page and uses it as
-the link text.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `slug` | yes | | Relative path for the link |
-
-
-
-
-
-
-```markdown
-
-```
-
-
-
-### DocsTitle
-
-The **DocsTitle** tag looks up the title of a web page from a
-given slug (a relative URL path) and provides the title as formatted
-text.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `slug` | yes | | Relative path of the link |
-| `className` | | | CSS classes to style the text |
-| `format` | | defaultFormater | Formatter used to format the text |
-
-
-
-
-
-
-
-```markdown
-
-```
-
-
-
-
-### Example
-
-The **Example** tag allows you to embed a FreeSewing code example and have it rendered in the browser.
-Specifically, you should write a [draft method](/reference/api/part/draft) which will then be rendered.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `caption` | | | The caption to go under the example |
-| `tutorial` | | `false` | Set this to show the Code tab first, rather than the default Preview tab. Also, additional options are made available for use in pattern examples |
-| `previewFirst` | | `false` | Set this to always show the Preview tab first, regardless of the value of `tutorial` |
-| `withHead` | | `false` | Set this to include a head measurement (for tutorial pattern examples) |
-| `paperless` | | `false` | Set this to enable paperless mode |
-| `settings` | | | A YAML string of settings to take into account |
-
-
-
-
-```js
-({ Point, points, Path, paths, part }) => {
-
- points.from = new Point(10, 20)
- points.cp1 = new Point(40, 0)
- points.cp2 = new Point(60, 40)
- points.to = new Point(90, 20)
-
- paths.line = new Path()
- .move(points.from)
- .curve(points.cp1, points.cp2, points.to)
- .setText("Path.curve()", "text-sm center fill-note")
-
- return part
-}
-```
-
-
-
-````markdown
-
-```js
-({ Point, points, Path, paths, part }) => {
-
- points.from = new Point(10, 20)
- points.cp1 = new Point(40, 0)
- points.cp2 = new Point(60, 40)
- points.to = new Point(90, 20)
-
- paths.line = new Path()
- .move(points.from)
- .curve(points.cp1, points.cp2, points.to)
- .setText("Path.curve()", "text-sm center fill-note")
-
- return part
-}
-```
-
-````
-
-
-
-
-### Fixme
-
-Use **Fixme** to indicate something needs attention/work but you don't have time
-or can't fix it now.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `compact` | | `false` | Renders compact variant |
-| `hideable` | | `false` | Allows popout to be hidden |
-
-
-
-
-##### ToDo
-- Include link to roadmap
-- Fix style for text outside paragraphs
-
-Proofread documentation _(compact)_
-
- Proofread it a second time _(hideable)_
-
-
-
-```markdown
-
-##### ToDo
-- Include link to roadmap
-- Fix style for text outside paragraphs
-
-Proofread documentation _(compact)_
-
- Proofread it a second time _(hideable)_
-
-```
-
-
-
-### Legend
-
-The **Legend** tag is used to display parts from a pattern of the
-Legend design (a non-public design in the FreeSewing repository
-created to provide examples of pattern features).
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `part` | yes | | The Legend part to display |
-
-
-
-(Please see
-[On the fold](https://freesewing.org/docs/sewing/on-the-fold)
-for an example of this tag, used to display the _cut-on-fold_ indicator
-on that page.)
-
-
-```markdown
-
-```
-
-
-
-### Link
-
-Use **Link** for URLs.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `compact` | | `false` | Renders compact variant |
-| `hideable` | | `false` | Allows popout to be hidden |
-
-
-
-
-https://freesewing.org/
-
-https://freesewing.org/ _(compact)_
-https://freesewing.org/ _(hideable)_
-
-
-```markdown
-
-https://freesewing.org
-
-https://freesewing.org/ _(compact)_
-https://freesewing.org/ _(hideable)_
-```
-
-
-
-### MeasieImage
-
-**MeasieImage** will show images of a FreeSewing measurement.
-The name of the directory in which the tag is used is the
-measurement which will be shown.
-
-
-
-(Please see
-[Biceps circumference](https://freesewing.org/docs/measurements/biceps)
-for an example of this tag, used to display the image showing the
-biceps circumference measurement.
-
-
-```markdown
-
-```
-
-
-
-
-### (Mermaid)
-
-There is no actual "Mermaid" custom tag.
-However, by using a fenced [code block](/guides/markdown/code-blocks)
-and specifying the `mermaid` language, you can generate
-[Mermaid](https://mermaid.js.org/) diagrams. Like this:
-
-
-
-```mermaid
-graph LR;
- A--> B & C & D;
- B--> A & E;
- C--> A & E;
- D--> A & E;
- E--> B & C & D;
-```
-
-
-````markdown
-```mermaid
-graph LR;
- A--> B & C & D;
- B--> A & E;
- C--> A & E;
- D--> A & E;
- E--> B & C & D;
-```
-````
-
-
-
-### Method
-
-**Method** is used to format HTTP methods.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `get` | | `false` | Display the HTTP `GET` method |
-| `post` | | `false` | Display the HTTP `POST` method |
-| `put` | | `false` | Display the HTTP `PUT` method |
-| `delete` | | `false` | Display the HTTP `DELETE` method |
-
-
-
-
-
-
-
-
-```markdown
-
-
-```
-
-
-
-
-
-- It is required that you provide one of the `get`, `post`, `put`,
-or `delete` attributes when using **Method**.
-- If more than one of those attributes is provided, only the first
-one that gets processed will be used.
-
-
-
-### Note
-
-Use **Note** to add something that stands out to draw attention.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `compact` | | `false` | Renders compact variant |
-| `hideable` | | `false` | Allows popout to be hidden |
-
-
-
-
-##### Also available in black
-This style also comes in black, which we can all agree is the superior color
-
-And in pink _(compact)_
-Yet another note _(hideable)_
-
-
-```markdown
-
-##### Also available in black
-This style also comes in black, which we can all agree is the superior color
-
-And in pink _(compact)_
-Yet another note _(hideable)_
-```
-
-
-
-### ReadMore
-
-The **ReadMore** tag allows you to insert a list of child-pages.
-The list is automatically generated from the pages in the subdirectories
-of the documentation page's directory.
-This tag is typically used on overview pages, such as our [Markdown guide](/guides/markdown) page.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `asMenu` | | `false` | Start from the parent directory |
-| `depth` | | 99 | Maximum levels to recurse |
-| `recurse` | |`false` | Include all child-pages and sub-child-pages in the entire directory tree |
-| `root` | | `false` | Start from the root directory |
-
-
-
-
-
-
-```markdown
-
-```
-
-
-
-### Related
-
-Use **Related** to add something that is relevant to the current topic.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `compact` | | `false` | Renders compact variant |
-| `hideable` | | `false` | Allows popout to be hidden |
-
-
-
-
- This snippet is provided by [the annotations plugin](/reference/plugins/annotations)
-
-See [snippets](/reference/snippets) _(compact)_
-
- See [snippets](/reference/snippets) _(hideable)_
-
-
-
-```markdown
-
- This snippet is provided by [the annotations plugin](/reference/plugins/annotations)
-
-See [snippets](/reference/snippets) _(compact)_
-
- See [snippets](/reference/snippets) _(hideable)_
-
-```
-
-
-
-### StatusCode
-
-**StatusCode** is used to format HTTP response status codes.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `status` | yes | | The HTTP response status code to format |
-
-
-
-
-
-
-
-
-```markdown
-
-
-```
-
-
-
-
-### Tab
-
-**Tabs** and **Tab** tags are used to present content in a tabbed view.
-This is a view where only the active tab content is shown, with
-content in other tabs hidden.
-Selecting a different tab shows its contents while hiding
-the others.
-
-The **Tab** tag is used to add content for a tab.
-
-
-
-
-
- Content for tab one.
-
-
- This is tab two content.
-
-
-
-
-```markdown
-
-
- Content for tab one.
-
-
- Content for tab two.
-
-
-```
-
-
-
-
-
-- The content of **Tabs** is individual **Tab** tags.
-- The content of **Tab** is content for that tab.
-- There should be one **Tab** for every tab defined in the `tabs` attribute of **Tabs**.
-
-
-
-### Tabs
-
-**Tabs** and **Tab** tags are used to present content in a tabbed view.
-This is a view where only the active tab content is shown, with
-content in other tabs hidden.
-Selecting a different tab shows its contents while hiding
-the others.
-
-The **Tabs** tag is used to set up the tabbed view.
-It specifies how many tabs are in the view and what their names
-are.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `tabs` | yes | | Comma-separated list of tab names |
-
-
-
-
-
-
- Content for tab one.
-
-
- This is tab two content.
-
-
-
-
-```markdown
-
-
- Content for tab one.
-
-
- Content for tab two.
-
-
-```
-
-
-
-
-
-- The content of **Tabs** is individual **Tab** tags.
-- The content of **Tab** is content for that tab.
-- There should be one **Tab** for every tab defined in the `tabs` attribute of **Tabs**.
-
-
-
-
-### Tip
-
-Use **Tip** for, you know, tips.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `compact` | | `false` | Renders compact variant |
-| `hideable` | | `false` | Allows popout to be hidden |
-
-
-
-
- The notches on the shoulder and sleeve parts are used to help with
- alignment when attaching the sleeve.
-
-Align the notches so they match _(compact)_
-
- Yet another tip _(hideable)_
-
-
-
-```markdown
-
- The notches on the shoulder and sleeve parts are used to help with
- alignment when attaching the sleeve.
-
-Align the notches so they match _(compact)_
-
- Yet another tip _(hideable)_
-
-```
-
-
-
-### Tldr
-
-"TL;DR" stands for "Too long; didn't read", and the **Tldr** tag used
-to provide a short summary for readers who might not want to read
-the full text.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `compact` | | `false` | Renders compact variant |
-| `hideable` | | `false` | Allows popout to be hidden |
-
-
-
-
- This page lists all the custom tags you can use.
-
-This page lists custom tags _(compact)_
-
- Yet another TL;DR summary _(hideable)_
-
-
-
-```markdown
-
- This page lists all the custom tags you can use.
-
-This page lists custom tags _(compact)_
-
- Yet another TL;DR summary _(hideable)_
-
-```
-
-
-
-
-### Warning
-
-Use **Warning** when you want to warn the reader of potential danger or unintended side-effects.
-
-| Attribute | Required? | Default | Description |
-| ---------: | :-------: | ------- | ----------- |
-| `compact` | | `false` | Renders compact variant |
-| `hideable` | | `false` | Allows popout to be hidden |
-
-
-
-
- ##### Please make a backup
- Following these instructions will remove all your data
-
-Take it slow _(compact)_
-
- Yet another warning _(hideable)_
-
-
-
-```markdown
-
- ##### Please make a backup
- Following these instructions will remove all your data
-
-Take it slow _(compact)_
-
- Yet another warning _(hideable)_
-
-```
-
-
-
-### YouTube
-
-The **YouTube** tag will embed YouTube videos or YouTube playlists responsively.
-
-| Attribute | Required? | Default | Description |
-| ----:| :---: | ------- | ----------- |
-| `id` | yes | | ID of the YouTube video or playlist |
-| `playlist` | | `false` | Set this when embedding a playlist |
-
-
-
-#### Video
-
-#### Playlist
-
-
-
-```markdown
-### Video
-
-### Playlist
-
-```
-
-
diff --git a/markdown/dev/guides/markdown/en.md b/markdown/dev/guides/markdown/en.md
deleted file mode 100644
index 055bf5a9f9c..00000000000
--- a/markdown/dev/guides/markdown/en.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Markdown guide
-order: 900
----
-
-Markdown is a lightweight markup language with plain text formatting syntax.
-It is designed to be easily readable by humans and computers alike.
-
-Markdown is often used to format documentation, online comments,
-or anywhere where you want rich text while using a plain text editor.
-
-In this guide, we'll look at the following topics:
-
-
-
-This will be enough to get you started. If you'd like to learn more,
-visit [markdownguide.org](https://www.markdownguide.org/).
diff --git a/markdown/dev/guides/markdown/frequent-mistakes/en.md b/markdown/dev/guides/markdown/frequent-mistakes/en.md
deleted file mode 100644
index d14708d0abf..00000000000
--- a/markdown/dev/guides/markdown/frequent-mistakes/en.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-title: Avoiding frequent mistakes
-order: zzz
----
-
-Some things to keep in mind when working in Markdown are:
-
-## Use remark-jargon for glossary terms
-
-There is no need to add a _glossary_ section to documentation.
-We use a plugin called [rehype-jargon][rj] to explain terms.
-Information can be found at the link.
-
-[rj]: https://github.com/freesewing/freesewing/blob/develop/packages/rehype-jargon/README.md
-
-## Let lists be lists
-
-Please make sure to use Markdown proper, doing things such as hardcoding
-numbers for lists and using `·` for bulleted lists won't be rendered
-properly and will be styled differently.
-Using Markdown in the same way for everything ensures the site and
-documentation look clean and professional. You can use a Markdown editor
-like [StackEdit](https://stackedit.io/) to preview your text.
-
-
-GitHub itself also allows working in Markdown and will give you a handy preview!
-
-
-## Create links with meaningful link text
-
-When adding links please do not create them using a structure like:
-"Link [here][yt]". Instead use relevant terms for the link text.
-An example of meaningful link text is this link to a
-[famous 80s pop song video][yt].
-
-[yt]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
-
-## Make sure your links lead where you think they do
-
-### Linking within the same website
-
-When you are linking within freesewing.dev or freesewing.org you can use a relative link from
-the site root.
-Use:
-
-```text
-/guides/markdown/frequent-mistakes
-```
-
-instead of
-
-```text
-https://freesewing.dev/guides/markdown/frequent-mistakes
-```
-
-### Linking images
-
-Images can be put in the same folder you are working on with a link
-to the filename. For example:
-
-```markdown
-This is [a picture of a banana](banana.jpg)
-```
-
-## Avoid ambiguity when listing a number of steps
-
-If you're writing documentation that involves steps, please do not mix levels
-of steps. Steps written out in documentation are there to facilitate brainless
-execution. Don't be afraid to repeat yourself.
-
-If you use substeps we want those substeps to take away ambiguity rather
-than introduce it into your instructions. In the next example the substep
-introduces something that ought to be done before the previous steps.
-This creates confusion about when that step ought to be executed.
-
-An example of what not to do:
-
-```md
-1. cut collar
-2. cut collar stand
-3. sew collar stand to collar
- 1. sewing staystitch collar and collar stand
-4. sew collar stand to neckline
-```
-
-## Be mindful of white space and whitespace characters
-
-Markdown syntax for white space in text is a little unintuitive.
-
-- If you want a line break after a line but no white space between it and
-the next line, you need to add two space characters at the end of the
-first line.
-
-- If you want a paragraph break with white space between the two lines,
-you need to add at least one blank line after the first line.
-
-- If you don't have two space characters at the end of the first line or
-any blank lines between it and the second line, then no white space or
-line break will be generated.
-Instead, the two lines will be part of the same continuous paragraph in the
-resulting page even though they are on two separate lines in your document.
-
-It may be helpful to experiment and keep checking the preview or resulting
-page to see how things look. Not all the empty lines and white space in your
-document will render in the preview or result.
-
-## Using custom tag components
-
-When you're using custom tag components you want to leave an empty line before
-and after the tags.
-
-```markdown
-Lorem ipsum dolor sit amet,
-
-
-consectetur adipisci elit,
-
-
-sed eiusmod tempor incidunt ut labore et dolore magna aliqua.
-```
-
-If you're using any Markdown syntax within a custom component you want to also
-leave an empty line at the start and end of your component.
-
-```markdown
-Lorem ipsum dolor sit amet,
-
-
-
-*consectetur adipisci elit,*
-
-
-
-sed eiusmod tempor incidunt ut labore et dolore magna aliqua.
-```
-
-## Don't be shy to ask a friend
-
-Learning a new language can be intimidating, whether its JavaScript, Norse, or
-Markdown, but everyone in the Freesewing community is glad you're here and
-helping us make the site even more awesome.
-
-If you get lost or have a question about how to do something, feel free to come
-[ask on the Discord](https://discord.freesewing.org/).
-We've all had to learn Markdown at some point and would be
-delighted to pass knowledge on.
diff --git a/markdown/dev/guides/markdown/headings/en.md b/markdown/dev/guides/markdown/headings/en.md
deleted file mode 100644
index c908981af4f..00000000000
--- a/markdown/dev/guides/markdown/headings/en.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Headings
-order: 40
----
-
-Prefix your line with a number of `#` characters to determine the header level.
-
-```md
-### This is a H3 heading
-
-#### This is a H4 heading
-
-##### This is a H5 heading
-```
-
-### This is a H3 heading
-
-#### This is a H4 heading
-
-##### This is a H5 heading
-
-
-
-Keep in mind that you should never use an H1 element, for that will be the page title.
-
-
diff --git a/markdown/dev/guides/markdown/images/en.md b/markdown/dev/guides/markdown/images/en.md
deleted file mode 100644
index 2a09f062412..00000000000
--- a/markdown/dev/guides/markdown/images/en.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Images
-order: 70
----
-
-Images are like links, but you prefix them with an exclamation mark.
-
-The part between square brackets is the image alt text.
-
-Between the curly brackets you place the location of the image file
-followed by a space and the image title between quotes.
-
-```md
-
-```
-
-
-
-
-
-##### Images go in the same folder as your Markdown file
-
-The convention is to always place your images in the same folder as the
-text where you are including the image. That way, you just need to specify
-the image name, and not the path to its location.
-
-
diff --git a/markdown/dev/guides/markdown/images/image.jpg b/markdown/dev/guides/markdown/images/image.jpg
deleted file mode 100644
index ba6c01b7b0f..00000000000
Binary files a/markdown/dev/guides/markdown/images/image.jpg and /dev/null differ
diff --git a/markdown/dev/guides/markdown/italic-and-bold/en.md b/markdown/dev/guides/markdown/italic-and-bold/en.md
deleted file mode 100644
index 9bb71543191..00000000000
--- a/markdown/dev/guides/markdown/italic-and-bold/en.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Italics and bold
-order: 30
----
-
-```md
-You can make text *italic* or **bold**
-by wrapping it in 1 or 2 asterisk respectively.
-```
-
-You can make text _italic_ or **bold** by wrapping it in 1 or 2 asterisk respectively:
-
-```md
-Alternatively, you can also use underscores to mark _italic_ or __bold__.
-```
-
-Alternatively, you can also use underscores to mark _italic_ or **bold**.
diff --git a/markdown/dev/guides/markdown/jargon/en.md b/markdown/dev/guides/markdown/jargon/en.md
deleted file mode 100644
index 87722e31cbc..00000000000
--- a/markdown/dev/guides/markdown/jargon/en.md
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: Using jargon and terms
----
-
-Jargon or terms is anything that could throw off new users.
-Rather than create a glossary on every page, we use MDX to manage
-jargon/terms for us. This page shows you how to use it.
-
-Think of jargon as glossary terms
-
-## Defining terms
-
-To define a term, we need to establish a link between the term itself, and the documentation page that defines it.
-
-In the most common scenario, the term is the title of the page.
-For example, the title of this page is `Using jargon and terms`:
-
-```mdx
----
-title: Using jargon and terms
----
-```
-
-If we wanted to make it available as jargon, we only need to add the `jargon` frontmatter:
-
-```mdx
----
-title: Using jargon and terms
-jargon: true
----
-```
-
-## Multiple terms for the same page
-
-We can add additional terms that point to the same page by setting the `terms` in frontmatter to a comma-seperated list of terms.
-
-For example to make both `jargon` and `term` point to this page, we can do this:
-
-
-```mdx
----
-title: Using jargon and terms
-jargon: true
-terms: jargon, term
----
-```
-
-## Terminology per site
-
-The following pages show a list of all terminology per site:
-
-| Site | Terminology List |
-| ---- | ---------------- |
-| FreeSewing.dev | [/reference/terminology](/reference/terms) |
-| FreeSewing.org | [/docs/about/terminology](https://freesewing.org/docs/about/terms) |
-
-All of the terms listed in the pages above can be used in the markdown/mdx
-content of those websites.
-
-## Using jargon terms in MDX content
-
-To use jargon inside MDX content (like the markdown of our documentation, blog
-posts, and so on), it's sufficient to emphasize the term:
-
-```md
-We are migrating from _cjs_ to _esm_ modules
-```
-
-Which renders as:
-
-We are migrating from _cjs_ to _esm_ modules
-
-## Using jargon terms outside MDX content
-
-Outside MDX content -- more precisely, in React components -- you can achieve the same effect with the `Term` component:
-
-```mjs
-import { Term } from 'site/components/jargon.mjs'
-
-export const MyComponent = () => (
-
Look, it works here too: esm
-)
-```
-
diff --git a/markdown/dev/guides/markdown/line-breaks/en.md b/markdown/dev/guides/markdown/line-breaks/en.md
deleted file mode 100644
index ff0e13bac53..00000000000
--- a/markdown/dev/guides/markdown/line-breaks/en.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Line breaks
-order: 20
----
-
-If you want to force a line break but not a new paragraph,
-simply leave 2 spaces at the end of the line.
-
-```md
-Like
-this.
-```
-
-Like
-this.
diff --git a/markdown/dev/guides/markdown/links/en.md b/markdown/dev/guides/markdown/links/en.md
deleted file mode 100644
index 0d45b0096d9..00000000000
--- a/markdown/dev/guides/markdown/links/en.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Links
-order: 60
----
-
-Links combine square brackets for the link text with round brackets for the destination.
-
-```md
-[Like this](https://freesewing.org)
-```
-
-[Like this](https://freesewing.org)
-
-An alternative notation allows you to include the links as such:
-
-```md
-See [the reference documentation][1] on [freesewing.dev][2]
-
-[1]: https://freesewing.dev/reference
-[2]: https://freesewing.dev/reference
-```
-
-See [the reference documentation][1] on [freesewing.dev][2]
-
-[1]: https://freesewing.dev/reference
-
-[2]: https://freesewing.dev/reference
-
-You don't have to use numbers, but can also use named references.
-
-```md
-We moved the Markdown content to [our monorepo][monorepo]
-
-[monorepo]: https://github.com/freesewing/freesewing
-```
-
-We moved the Markdown content to [our monorepo][monorepo]
-
-[monorepo]: https://github.com/freesewing/freesewing
diff --git a/markdown/dev/guides/markdown/lists/en.md b/markdown/dev/guides/markdown/lists/en.md
deleted file mode 100644
index 96ad9e7b128..00000000000
--- a/markdown/dev/guides/markdown/lists/en.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Lists
-order: 50
----
-
-To make a list, just do as you would in plain text:
-
-```md
-- a bullet
-- list
- - a sublist
- - item
-```
-
-- a bullet
-- list
- - a sublist
- - item
-
-If you want an numbered list, just write numbers.
-They don't even have to be the correct numbers:
-
-```md
-
-1. Item 1
-2. Item 2
-2. Item 3
-```
-
-1. Item 1
-2. Item 2
-3. Item 3
diff --git a/markdown/dev/guides/markdown/tables/en.md b/markdown/dev/guides/markdown/tables/en.md
deleted file mode 100644
index 2bd2a8c51a6..00000000000
--- a/markdown/dev/guides/markdown/tables/en.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Tables
-order: 70
----
-
-If you need them, you can create tables too, using a structure as shown below:
-
-```md
-| Name | Description |
-| ---- | ----------- |
-| Compound | A substance composed of two or more elements. Chemically combined in definite proportions by weight |
-| Mixture | Two or more substances that are not chemically united, such as air |
-| Solution | A uniform mixture of varying proportions of a solvent and a solute |
-```
-
-| Name | Description |
-| ---- | ----------- |
-| Compound | A substance composed of two or more elements. Chemically combined in definite proportions by weight |
-| Mixture | Two or more substances that are not chemically united, such as air |
-| Solution | A uniform mixture of varying proportions of a solvent and a solute |
-
-You can change the alignment of the columns by using a colon (`:`) on the line below the column title:
-
-```md
-| Align-right | Align-center |
-| -----------:|:------------:|
-| Compound | A substance composed of two or more elements. Chemically combined in definite proportions by weight |
-| Mixture | Two or more substances that are not chemically united, such as air |
-| Solution | A uniform mixture of varying proportions of a solvent and a solute |
-```
-
-| Align-right | Align-center |
-| -----------:|:------------:|
-| Compound | A substance composed of two or more elements. Chemically combined in definite proportions by weight |
-| Mixture | Two or more substances that are not chemically united, such as air |
-| Solution | A uniform mixture of varying proportions of a solvent and a solute |
diff --git a/markdown/dev/guides/markdown/text-and-paragraphs/en.md b/markdown/dev/guides/markdown/text-and-paragraphs/en.md
deleted file mode 100644
index ffa00063d4d..00000000000
--- a/markdown/dev/guides/markdown/text-and-paragraphs/en.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Text and paragraphs
-order: 10
----
-
-For the most part, you can just write as you would in any other format.
-
-```md
-You can just start writing.
-
-An empty line starts a new paragraph.
-```
-
-You can just start writing.
-
-An empty line starts a new paragraph.
diff --git a/markdown/dev/guides/plugins/en.md b/markdown/dev/guides/plugins/en.md
deleted file mode 100644
index 637adad57b0..00000000000
--- a/markdown/dev/guides/plugins/en.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Plugin guide
----
-
-Plugins allow you to extend FreeSewing with new features and functionality.
-A FreeSewing plugin can extend FreeSewing in 3 different ways:
-
-- It can [provide macros](/guides/plugins/macros), which are a way to automate a number of steps into a
- single command.
-- It can [hook into the pattern](/guides/plugins/hooks), which allows you to manipulate the pattern or
- interact with it at various stages of it's lifecycle.
-- It can [provide store methods](/guides/plugins/store), which allows you to add new ways to handle data
- in the pattern, including providing a custom logger.
-
-We have [a list of plugins](/reference/plugins/) that we maintain, but
-if you can't find what you're looking for, you can write your own plugin.
-
-If you plan on doing that or if you would like to understand how plugins work,
-this guide is for you.
-
-We'll cover the following topics:
-
-
diff --git a/markdown/dev/guides/plugins/hooks/en.md b/markdown/dev/guides/plugins/hooks/en.md
deleted file mode 100644
index b6210588ce8..00000000000
--- a/markdown/dev/guides/plugins/hooks/en.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: Lifecycle hook methods
-order: 110
----
-
-FreeSewing plugins can provide hooks, which is a way to hook into the pattern's
-lifecycle.
-
-## Signature
-
-To provide one or more hooks, your plugin should have a `hooks` property that
-is an object where the keys are the lifecycle hook name and the value holds a
-method. When the lifecycle hook is triggered, your method will be called.
-
-```mjs
-const myPlugin = {
- name: 'example',
- version: '0.0.1',
- hooks: {
- hookName: function (obj, data = {}) {
- }
- }
-}
-```
-
-If you want to attach multiple methods to the same lifecycle hook, you can pass
-them as an array:
-
-```mjs
-const myPlugin = {
- name: 'example',
- version: '0.0.1',
- hooks: {
- hookName: [
- function one (obj, data = {}) { },
- function two (obj, data = {}) { }
- ]
- }
-}
-```
-
-## Arguments
-
-All lifecycle methods will receive two parameters:
-
-- An object relevant to the lifecycle hook. See the [hooks API reference](/reference/hooks/) for details.
-- Data passed when the hook was registered (optional)
-
-## Notes
-
-Refer to the [hooks API reference](/reference/hooks/) for a list of all
-available lifecycle hooks.
-
diff --git a/markdown/dev/guides/plugins/loading/en.md b/markdown/dev/guides/plugins/loading/en.md
deleted file mode 100644
index a6ab9089121..00000000000
--- a/markdown/dev/guides/plugins/loading/en.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Loading plugins
-order: 140
----
-
-Plugins can be loaded at build time and added to the design.
-Or, they can be added at run time and added to an instantiated pattern.
-
-To load a plugin at build time, it should be added to [the `plugins` key of the part configuration](/reference/api/part/config/plugins).
-
-To load a plugin at run time, it should be loaded with a call to [`Pattern.use()`](/reference/api/pattern/use).
-
-Please refer to the relevant documentation for more details.
diff --git a/markdown/dev/guides/plugins/macros/en.md b/markdown/dev/guides/plugins/macros/en.md
deleted file mode 100644
index f7578a275cb..00000000000
--- a/markdown/dev/guides/plugins/macros/en.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-title: Macro methods
-order: 120
----
-
-FreeSewing plugins can provide macros, which is a way to automate multiple
-steps into a single command.
-
-## Signature
-
-To provide one or more macros, your plugin should have a `macros` property that
-is an object where the keys are the macro name, and the value holds a method to
-run when the macro is executed.
-
-```mjs
-const myPlugin = {
- name: 'example',
- version: '0.0.1',
- macros: {
- example: function(so, { log }) {
- log.info('Running the example macro')
- }
- }
-}
-```
-
-## Arguments
-
-All macros receive two arguments:
-
-- `so`: A plain object holding configuration object passed to the macro
-- `props`: The same object as passed to the [`Part.draft()`](/reference/api/part/draft) method that you can destructure
-
-
-###### Macros take only 1 argument
-
-When writing a macro, keep in mind that all information that needs to be passed
-to a macro needs to be contained in a single argument.
-
-Typically, you use a single plain object to configure the macro.
-
-
-
-## Return value
-
-Macros do not need to return anything. If they do, it will be ignored.
diff --git a/markdown/dev/guides/plugins/store/en.md b/markdown/dev/guides/plugins/store/en.md
deleted file mode 100644
index 77100c2caf5..00000000000
--- a/markdown/dev/guides/plugins/store/en.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-title: Store methods
-order: 130
----
-
-FreeSewing plugins can provide store methods, which facilitate data handling
-within a pattern.
-
-## Signature
-
-To provide one or more store methods, your plugin should have a `store` property that
-is an array where each member is itself an array with two members:
-
-- The first member holds the key to attach the method to (in dot notation)
-- The second member holds the method to attach
-
-```mjs
-const myPlugin = {
- name: 'example',
- version: '0.0.1',
- store: [
- [
- 'log.panic',
- function(store, ...params) {
- store.setIfUnset('logs.panic', new Array())
- store.push(...params)
- }
- ]
- }
-}
-```
-
-## Arguments
-
-All store methods receive at least two arguments:
-
-- `store`: The store object itself
-- `...params`: All additional plugins that were passed to the store method
-
-## Overwriting store methods
-
-You are allowed to overwrite existing store methods.
-As it happens, this is how you should implement a custom logging solution,
-by overwriting the logging methods under the store's `log` key,
-
-However, the following store methods cannot be overwritten:
-
-- `extend()`
-- `get()`
-- `push()`
-- `set()`
-- `setIfUnset()`
-- `unset()`
-
-## Return value
-
-Store methods do not need to return anything. If they do, it will be ignored.
diff --git a/markdown/dev/guides/plugins/structure/en.md b/markdown/dev/guides/plugins/structure/en.md
deleted file mode 100644
index 66f54d8e29e..00000000000
--- a/markdown/dev/guides/plugins/structure/en.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Plugin structure
-order: 100
----
-
-A FreeSewing plugin is a plain object with the following structure:
-
-```mjs
-Object plugin = {
- String name,
- String version,
- Object hooks,
- Object macros,
- Array store,
-}
-```
-
-A plugin **must** have the `name` and `version` properties.
-The other properties are optional, and they map to the three different functionalities macros can provide:
-
-- [`hooks`](/guides/plugins/hooks): Holds an object with lifecycle hooks the plugin wants to hook into
-- [`macros`](/guides/plugins/macros): Holds and object with macros the plugin provides
-- [`store`](/guides/plugins/store): Holds and Array with store methods the plugin provides.
-
-Click on the links above for more details on the structure of these properties.
diff --git a/markdown/dev/guides/prerequisites/bezier-curves/en.md b/markdown/dev/guides/prerequisites/bezier-curves/en.md
deleted file mode 100644
index 97fa9120f76..00000000000
--- a/markdown/dev/guides/prerequisites/bezier-curves/en.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: Understanding Bézier curves
-order: 50
----
-
-While lines on computers are easy to store with a start and end point,
-curves require more information.
-In FreeSewing — as in SVG and countless of other computer applications —
-curves are stored as [Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve),
-named after French engineer [Pierre Bézier](https://en.wikipedia.org/wiki/Pierre_B%C3%A9zier) who
-popularized their use back in the 1960s.
-
-In FreeSewing, we use so-called cubic Bézier curves which have:
-
-- A start point
-- A first control point that’s linked to the start point
-- A second control point that’s linked to the end point
-- An end point
-
-
-```js
-({ Point, points, Path, paths, part }) => {
-
- points.from = new Point(10, 20)
- points.cp1 = new Point(40, 0)
- points.cp2 = new Point(60, 40)
- points.to = new Point(90, 20)
-
- paths.line = new Path()
- .move(points.from)
- .curve(points.cp1, points.cp2, points.to)
- .setText("Path.curve()", "text-sm center fill-note")
-
- return part
-}
-```
-
-
-Bézier curves and their _handles_ or _control points_ are surprisingly intuitive.
-The following illustration does a great job at explaining how they are constructed:
-
-
-
-You don't need to understand the mathematics behind Bézier Curves.
-As long as you intuitively _get_ how the control points influence the curve, you're good to go.
-
-
-
-###### More on Bézier curves
-
-Wikipedia has a good [introduction to Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve).
-For a deep-dive into the subject, check out [A Primer on Bézier Curves](https://pomax.github.io/bezierinfo/) by
-[Pomax](https://github.com/Pomax).
-
-
diff --git a/markdown/dev/guides/prerequisites/coordinate-system/en.md b/markdown/dev/guides/prerequisites/coordinate-system/en.md
deleted file mode 100644
index a62407ac207..00000000000
--- a/markdown/dev/guides/prerequisites/coordinate-system/en.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: The coordinate system
-order: 30
----
-
-The coordinate system in FreeSewing -- and in SVG -- follows the same rules as text on a page.
-You start at the top-left, and as you go to the right, the X-coordinate will increase.
-As you go down the Y-coordinate will increase.
-
-
-```mjs
-({ Point, points, paths, Path, part }) => {
- points.origin = new Point(10, 10)
- points.x = new Point(100, 10)
- points.y = new Point(10, 50)
- points.textX = new Point(85, 20).addText('X', 'text-lg')
- points.textY = new Point(12, 43).addText('Y', 'text-lg')
- paths.coords = new Path()
- .move(points.y)
- .line(points.origin)
- .line(points.x)
- .addClass('mark')
- .attr('marker-start', 'url(#dimensionFrom)')
- .attr('marker-end', 'url(#dimensionTo)')
-
- return part
-}
-```
-
-
-The image above illustrates both the X-axis and Y-axis.
-On the X-axis, `20` is further to the right than `10`.
-On the Y-axis, `50` is lower than `20`.
-
-
-
-The Y-axis is inverted in many drawing programs, with the origin
-`(0,0)` being the lower left corner, rather than the upper left corner.
-
-This is a common point of confusion so keep in mind that the Y-axis may
-not behave as you would have intuitively expected.
-
-
diff --git a/markdown/dev/guides/prerequisites/en.md b/markdown/dev/guides/prerequisites/en.md
deleted file mode 100644
index 79adbe514fb..00000000000
--- a/markdown/dev/guides/prerequisites/en.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Before you start
----
-
-Drawing lines and curves on paper is a skill most people have been practicing since kindergarten.
-In FreeSewing, we draw lines and curves with code, which is a bit more abstract
-but doesn't have to be complicated once you understand a few basic building blocks.
-
-Understanding the concepts that are involved in designing sewing patterns in code will pay dividends later.
-That is why we recommend you familiarize yourself with the following topics:
-
-
-
-
-
-##### There's no need to know everything
-
-FreeSewing sits at the intersection of the world of makers and developers.
-If your background is in development, you will need no explaining what SVG is but might not
-know much about designing sewing patterns.
-If on the other hand your background is in sewing or pattern design, you might wonder what
-the heck NodeJS is and why you should care.
-
-Few people straddle both worlds, so as you start using FreeSewing, chances are
-you'll learn a few new things along the way.
-
-And if you get stuck [our chatrooms on Discord](https://discord.freesewing.org/) are the best place to get help.
-
diff --git a/markdown/dev/guides/prerequisites/svg/en.md b/markdown/dev/guides/prerequisites/svg/en.md
deleted file mode 100644
index 7439442af48..00000000000
--- a/markdown/dev/guides/prerequisites/svg/en.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Scalable Vector Graphics
-order: 20
----
-
-Patterns are rendered as **SVG** — short
-for [Scalable Vector Graphics](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics) —
-an XML-based vector image format and an open standard.
-While you don’t need to be an SVG expert, a basic understanding of the format
-will greatly help you to understand FreeSewing.
-
-For example, the coordinate system and the way paths
-are structured are all related to the SVG drawing system, which is closely related
-to other 2D drawing technologies such as PostScript or PDF.
diff --git a/markdown/dev/guides/prerequisites/units/en.md b/markdown/dev/guides/prerequisites/units/en.md
deleted file mode 100644
index 2e14ba72a9e..00000000000
--- a/markdown/dev/guides/prerequisites/units/en.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Units in FreeSewing
-order: 40
----
-
-FreeSewing uses _millimeter (mm)_ for all its internal units.
-We do support both imperial and metrics units, which are displayed
-as _cm_ or _inch_, but under the hood everything is handled in millimeter.
-
-So as a pattern designer, you will work with mm.
-When you write `1`, that’s one millimeter. When you write `7.8`, that’s 7.8 mm.
-
-While you can use cm or inch on the FreeSewing website, that is merely a layer of
-abstraction on top of the internal units, which are always mm.
diff --git a/markdown/dev/guides/translation/en.md b/markdown/dev/guides/translation/en.md
deleted file mode 100644
index 69dd34361ff..00000000000
--- a/markdown/dev/guides/translation/en.md
+++ /dev/null
@@ -1,223 +0,0 @@
----
-title: Translation guide
----
-
-Supporting multiple languages is one of the best way to promote inclusion and
-accessibility. Thanks to the efforts of our community, FreeSewing is proudly
-multilingual.
-
-This translation guide covers everything you need to know to join the effort of
-translating FreeSewing into other languages.
-
-## Supported Languages
-
-FreeSewing is currently available in the following languages:
-
-| Code | Language | Website |
-| ----:|:-------------- |:------- |
-| `de` | **German** | https://freesewing.org/de |
-| `en` | **English** | https://freesewing.org/ |
-| `es` | **Spanish** | https://freesewing.org/es |
-| `fr` | **French** | https://freesewing.org/fr |
-| `nl` | **Dutch** | https://freesewing.org/nl |
-| `uk` | **Ukrainian** | https://freesewing.org/uk |
-
-
-English is the translation source language and the working language of the FreeSewing project
-
-
-## Become a FreeSewing translator
-
-To gain access as a FreeSewing translator, you will need an invite.
-You can request a translator invite with the link below.
-When you do, we will send you an email with all further instructions.
-
-
-
-###### [Request a FreeSewing translator invite](https://freesewing.org/translation/join)
-
-
-
-
-We also have [a dedicated __Translation__ channel on
-Discord](https://discord.freesewing.org) for any questions that may remain.
-
-
-## Adding a new language
-
-We would love to make FreeSewing available in more languages. If you are
-interested in starting a new translation effort, that is great.
-
-We ask that you familiarize yourself with this translation guide to understand
-what it takes to add a new language. Then if you can submit your request to setup
-a new language with the link below.
-
-
-
-###### [Suggest a new FreeSewing language](https://freesewing.org/translation/suggest-language)
-
-
-
-
-##### Get the band together
-
-We recommend finding some like-minded people who can help translating.
-
-While the core materials of FreeSewing can realistically be handled by one
-person, translating all of FreeSewing's documentation and content realistically
-is a job you should not undertake on your own.
-
-
-
-
-
-##### Do or do not. There is no try.
-
-There is a certain cost to adding a new language. It's not a cost in money,
-but rather in increased bandwidth, storage requirements, build times,
-repository size, test times, and so on.
-
-It's a cost we are __more than happy__ to pay for the benefit gaining another
-langauge. But it is also a cost that needs to be paid up front, at the start
-of the effort.
-
-So, without wanting to discourage anyone, I would really like to avoid a
-scenario where people enthusiastically start working on a new languages, only
-to lose interest days or weeks later and see the effort falter.
-
-With that out of the way, I hope to see many more languages being added in the
-future.
-
-
-
-## Translation status
-
-The status of the ongoing translation work is available at
-[FreeSewing.org/translation](https://freesewing.org/translation).
-
-It's a good place to check what languages need extra help, and which are
-leading the scoreboard.
-
-## Translation priorities
-
-To fully translate FreeSewing, the following types of content needs to be
-translated:
-
-### Top priority: UX Translations
-These are translations the directly impact
-the user experience (_UX_). They include the content used in design, the names
-of options, translations of menus, emails, and so on.
-
-This is a relatively small amount of text, and makes up less than 10% of the
-top & high priority content. It's an effort that a motivated translator can
-complete over the course of a weekend.
-
-
-The top-priority translations in Crowdin are everything under the `packages`
-and `sites` folder. Do this first.
-
-
-### High priority: Translation of Documentation
-This includes all the documentation on FreeSewing.org.
-
-This is a significant amount of text that makes up more than 90% of the top &
-high priority content. It's an effort you should probably not take on by
-yourself, but rather tackle with a team of translators.
-
-
-The high-priory translations in Crowdin is everything under the
-`markdown/org/docs` folder.
-
-
-### Low Priority: Content of blog and showcase posts, and newsletters
-This is _nice to have_ as people can use and navigate FreeSewing even when this
-content remains untranslated.
-
-
-The low-priory translations in Crowdin is everything under the
-`markdown/org/blog`, `markdown/org/showcase`, and `markdown/org/newsletter` folders.
-
-
-## Translation through Crowdin
-
-All of our translation work is handled through [Crowdin](https://crowdin.com/),
-an online platform to facilitate translation.
-
-
-
-You can reach the FreeSewing project on Crowdin directly via
-[translate.freesewing.org](https://translate.freesewing.org).
-
-
-Crowdin is configured to automatically detect all of the various translation
-files in our repository, upload them to the platform, and break them apart into
-bite-sized portions that you can translate in a collaborative way.
-Rather than work on one large block of text, various people can jump in and
-translate smaller snippets,
-
-Once translated, there is a proofreading step that will be handled by one of
-our proofreaders. This is often a formality, but it's an extra step to allow
-quality assurance and avoid any mistakes from slipping in. Much like the code
-review process when you submit a pull request on GitHub.
-
-Once your translation is approved, Crowdin will automatically submit a pull
-request on GitHub to update the translation files in our repository. And the
-next time our website or software packages get built, they will include the new
-translations.
-
-## Machine translation
-
-While everybody knows that translation is best when it's done by a human being,
-we also have to be realistic that the growing body of documentation and other
-FreeSewing content can be a daunting task to take on for translators, especially
-when you want to start a new language.
-
-Fortunately, machine translation has gotten rather good so we can get some help.
-Our Crowdin project is integrated with a [DeepL](https://www.deepl.com)
-subscription, and this can be a great help to translators.
-
-You can use the DeepL suggestions when translating, or there is also the possibility
-to machine-translate entire files or folders. For example, you may start a new
-language by machine-translating everything, and then focus on proofreading the
-top-priority content, and then move on to the high-priority content.
-
-## Syntax
-
-Most strings are just text, but sometimes you'll find a little markup sprinkled in.
-
-### HTML formatting
-
-When you encounter HTML tags, simply translate around them. For example:
-
-```yaml
-No, never.
-```
-
-looks like this in Spanish:
-
-```yaml
-No, nunca.
-```
-
-### Placeholders
-
-When you encounter a `{key}` between curly braces, leave it as-is.
-These will be filled in later with the correct value. For example:
-
-```yaml
-{field} saved
-```
-
-looks like this in Spanish
-
-```yaml
-{field} guardado
-```
-
-## Questions, Suggestions, Discussion
-
-If you have questions, suggestions, or would like to discuss
-translation-related matters, please join
-[discord.freesewing.org](https://discord.freesewing.org/) and head to the
-__Translation__ channel.
-
diff --git a/markdown/dev/howtos/ways-to-contribute/body-ambassador/en.md b/markdown/dev/howtos/ways-to-contribute/body-ambassador/en.md
deleted file mode 100644
index e0fd4dccd30..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/body-ambassador/en.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Body ambassador
----
-
-Maybe you’re unusually short or tall.
-Maybe you have a bit of a pot belly or very large breasts.
-Maybe you have a disability that requires fit adjustments.
-
-Whatever it is, if you represent a minority fitting issue you could
-represent this minority to make sure their needs are heard and understood.
-
-
-
-Join the `#pattern-design` channel on the Discord server and help us understand how we can design patterns that fit people with your body type.
-
-
diff --git a/markdown/dev/howtos/ways-to-contribute/community-building/en.md b/markdown/dev/howtos/ways-to-contribute/community-building/en.md
deleted file mode 100644
index 1331f00a489..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/community-building/en.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Community building
----
-
-The FreeSewing community resides [on Discord](https://discord.freesewing.org/).
-Just being there to answer questions and chat with other people is a valuable part of community building.
-
-We also can be found in plenty of other places where we'd love to have you join us:
-
-* [Instagram](https://instagram.com/freesewing_org)
-* [freesewing.social](https://freesewing.social/@freesewing) (our Mastodon instance)
-* [Facebook](https://www.facebook.com/groups/627769821272714/)
-* [Reddit](https://www.reddit.com/r/freesewing)
-
-Apart from being present in chat rooms and social media, you could also take on some responsibility on one or more platforms.
diff --git a/markdown/dev/howtos/ways-to-contribute/design-patterns/en.md b/markdown/dev/howtos/ways-to-contribute/design-patterns/en.md
deleted file mode 100644
index 9b4090d28e3..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/design-patterns/en.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Design sewing patterns
----
-
-Everybody wants us to add more patterns. But somebody has to design them.
-
-That somebody could be you.
-We can help you with the development side of things.
diff --git a/markdown/dev/howtos/ways-to-contribute/develop-patterns/en.md b/markdown/dev/howtos/ways-to-contribute/develop-patterns/en.md
deleted file mode 100644
index ad8bcdb8a6d..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/develop-patterns/en.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Develop sewing patterns
----
-
-You could program new designs for FreeSewing.
-If you're not afraid of JavaScript and are happy to team up with a designer,
-you could work on a new pattern together.
diff --git a/markdown/dev/howtos/ways-to-contribute/devops/en.md b/markdown/dev/howtos/ways-to-contribute/devops/en.md
deleted file mode 100644
index a7f30b19283..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/devops/en.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Devops
----
-
-We have use a lot of automation from GitHub actions to automated deployment on Vercel.
-We also have some Ansible playbooks to run maintenance tasks.
-
-There's also other technical tasks like database or server administration, certificate renewal, and so on.
-
-If that's your kind of thing, we could use your help.
diff --git a/markdown/dev/howtos/ways-to-contribute/en.md b/markdown/dev/howtos/ways-to-contribute/en.md
deleted file mode 100644
index bd2d2eefb19..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/en.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: Ways to contribute
----
-
-Thank you for being part of our community, and for wanting to contribute! ❤️
-FreeSewing is an open source project ran by volunteers from different corners of the world.
-We would love to have you on board, and this page lists everything you need to know to get started.
-
-## Requirements
-
-The only requirement we ask from our contributors is that they are the kind of people who
-value a safe and welcoming environment for all members of the FreeSewing community.
-
-To that extend, we impose the following requirements to ensure everyone feels safe and welcome:
-
-- Any member of our community must respect [our community standards](https://freesewing.org/docs/about/community-standards/)
-- As a contributor, you must uphold [our Code of Conduct](/guides/code-of-conduct/)
-
-Go ahead and read those, we'll wait.
-
-## Good to know
-
-With that out of the way, here's a few more things that are _good to know_:
-
-- Nobody gets paid to work on/for FreeSewing. We are a 100% volunteer organisation.
-- We have patrons who support us financially, but all the money that comes in goes to charity —
- See our [revenue pledge](https://freesewing.org/docs/about/pledge/) for details
-- FreeSewing follows the [all-contributors](https://allcontributors.org/) specification.
- Contributions of any kind are welcome.
-
-## Where to begin
-
-Below is a list of ideas or roles you could take up.
-If you're not sure what to do, or if you have questions, [please reach out to
-us](https://discord.freesewing.org/).
-
-
-
-
-
-##### Who wants a job in the tech sector?
-
-For many in our community, contributing to FreeSewing marked their
-first steps into the world of open source software development.
-
-I (joost) am happy to provide guidance or mentorship to anyone who
-wants to learn, especially when doing so enables upwards social mobility.
-
-[Reach out](https://discord.freesewing.org/) and we let's do this.
-
-
diff --git a/markdown/dev/howtos/ways-to-contribute/illustrations/en.md b/markdown/dev/howtos/ways-to-contribute/illustrations/en.md
deleted file mode 100644
index 137b81d1853..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/illustrations/en.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Make illustrations
----
-
-Our documentation can always use some more/better illustrations to help people figure out how
-to make our patterns into garments.
diff --git a/markdown/dev/howtos/ways-to-contribute/language-ambassador/en.md b/markdown/dev/howtos/ways-to-contribute/language-ambassador/en.md
deleted file mode 100644
index c86fe12b3e5..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/language-ambassador/en.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Language ambassador
----
-
-You could represent FreeSewing in a non-English community.
-There, you can help answer questions or triage problem reports.
-Or you can point out where translations are missing.
diff --git a/markdown/dev/howtos/ways-to-contribute/pattern-ambassador/en.md b/markdown/dev/howtos/ways-to-contribute/pattern-ambassador/en.md
deleted file mode 100644
index ca1e7dc3a10..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/pattern-ambassador/en.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: Pattern ambassador
----
-
-You could take charge of a specific FreeSewing design/pattern.
-
-You’ll be the person to ask questions about how to make that pattern.
-You’ll make sure the documentation is not forgotten.
-And you can help with questions or triage problem reports to developers or designers.
diff --git a/markdown/dev/howtos/ways-to-contribute/pattern-testing/en.md b/markdown/dev/howtos/ways-to-contribute/pattern-testing/en.md
deleted file mode 100644
index fc9f6bec356..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/pattern-testing/en.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: Pattern testing
----
-
-You could make (a muslin for) our patterns prior to release to make sure everything is ok.
-
-
-
-Join the `#pattern-design` channel on the Discord server and let us know you would like to help. Here you will find people designing new patterns and reviewing existing patterns. Feedback is very welcome!
-
-
diff --git a/markdown/dev/howtos/ways-to-contribute/project-management/en.md b/markdown/dev/howtos/ways-to-contribute/project-management/en.md
deleted file mode 100644
index d8d53c5fdc8..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/project-management/en.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Project management
----
-
-There's a lot going on within the FreeSewing project and it's easy to forget about something.
-
-A project manager would be helpful to prioritize tasks, makes sure all tasks have an issue,
-organize milestones, and so on.
-
-This is helpful in more than one way:
-
-- It reduces the cognitive load of the people implementing changes because they don't have to worry about forgetting things
-- It increases transparency by making it clear what sort of things are being worked on
-- It gives us that good feeling of closing the issue when the task is done
diff --git a/markdown/dev/howtos/ways-to-contribute/proofreading/en.md b/markdown/dev/howtos/ways-to-contribute/proofreading/en.md
deleted file mode 100644
index 4ed056059fe..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/proofreading/en.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Proofreading
----
-
-You could check the original English text or translations for typos and/or grammar mistakes.
-You could propose improvements and watch over a consistent style and tone across FreeSewing’s documentation and written text.
diff --git a/markdown/dev/howtos/ways-to-contribute/report-bugs/en.md b/markdown/dev/howtos/ways-to-contribute/report-bugs/en.md
deleted file mode 100644
index 071d174b5a7..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/report-bugs/en.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Report bugs
----
-
-Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/).
-Create an issue [in our monorepo](https://github.com/freesewing/freesewing/issues/new?assignees=\&labels=%F0%9F%90%9B+bug\&template=bug-report.md\&title=Bug+report) if you've found one.
-
-Explain the problem and include additional details to help maintainers reproduce the problem:
-
-- **Use a clear and descriptive title** for the issue to identify the problem.
-- **Describe the exact steps which reproduce the problem** in as many details as possible.
-- **Include relevant information** such as your username on the site, or the person you drafted a pattern for.
-
-Provide more context by answering these questions:
-
-- **Did the problem start happening recently** (e.g. it worked fine before but since the latest update it doesn't)
-- **Can you reliably reproduce the issue?** If not, provide details about how often the problem happens and under which conditions it normally happens.
diff --git a/markdown/dev/howtos/ways-to-contribute/showcase-our-patterns/en.md b/markdown/dev/howtos/ways-to-contribute/showcase-our-patterns/en.md
deleted file mode 100644
index b8ae3beff82..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/showcase-our-patterns/en.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title: Showcase our patterns
----
-
-Anytime somebody has made one of our patterns, we like to Showcase it on [freesewing.org](https://freesewing.org/showcase/).
-
-## How to get your pictures to us
-
-If you've got pictures, there's a few ways you can get them on the site:
-
-- [FreeSewing](#freesewing)
-- [Instagram](#instagram)
-- [Mastodon](#mastodon)
-- [Facebook](#facebook)
-- [Discord](#discord)
-- [Reddit](#reddit)
-- [GitHub](#github)
-- [Email](#email)
-
-### FreeSewing
-
-You can share something you (or someone else, with permission) made based on our designs at [FreeSewing.org/new/showcase](https://freesewing.org/new/showcase).
-
-### Instagram
-
-Post your pictures on Instagram, and tag or mention [@freesewing\_org](https://instagram.com/freesewing_org).
-
-### Mastodon
-
-Post your pictures — or a link to them — on freesewing.social (our Mastodon instance), and tag or mention [@freesewing](https://freesewing.social/@freesewing).
-
-### Facebook
-
-Post your pictures — or a link to them — on Facebook, and tag or mention the [@FreeSewing](https://www.facebook.com/groups/627769821272714/) group.
-
-### Discord
-
-Post your pictures — or a link to them — in the `#pattern-showcase` channel [on our Discord](https://discord.freesewing.org).
-
-### Reddit
-
-Post your pictures — or a link to them — in [r/freesewing](https://www.reddit.com/r/freesewing).
-
-### GitHub
-
-Create an issue [on GitHub](https://github.com/freesewing/freesewing/issues/new?assignees=&labels=:%2B1:+good+first+issue%2C+:camera_flash:+showcase%2C+:hugs:+community&template=04_showcase-template.yaml&title=%5Bshowcase%5D%3A+Found+a+great+project+to+showcase) and attach your pictures to it, or include a link to the pictures.
-
-### Email
-
-Email your pictures — or a link to them — to showcase@freesewing.org.
-
-## Tips for great pictures
-
-Below are just a few easy tips and tricks for your Showcase post.
-Of course, any Showcase is infinitely better than nothing, so go ahead and send us those low-light mirror selfies - we love them.
-
-But if you want to take things to the next level, a few things to consider:
-
-### Show it all
-
-Show the whole garment. From multiple angles, if possible.
-It's awesome to see garments from the front, but back and side views can be really helpful, too.
-Bonus points for adding in a seated picture, which are especially great for sewists who use a wheelchair.
-
-### Embrace the light
-
-Take pictures in the best light you can — that might be next to a bright window,
-in a room where you've turned on all the extra lamps you could find,
-or that elusive "golden hour" outdoors.
-Bonus points if you can make it bright enough to not need a flash.
-
-### Background
-
-A neutral background can be helpful for seeing details.
-Try to avoid black on black or another setting that makes it hard to see what is what.
-
-And remember that the outdoors is often the best background.
-
-### Close-ups
-
-If you nailed that welt pocket or hand-stitched all your buttonholes, go ahead and show them off.
-Close-up pictures make the showcase so much more relevant for people looking to make the same thing.
diff --git a/markdown/dev/howtos/ways-to-contribute/technical-writing/code/en.md b/markdown/dev/howtos/ways-to-contribute/technical-writing/code/en.md
deleted file mode 100644
index eabdb17dd93..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/technical-writing/code/en.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Writing for freesewing.dev
----
-
-You could write documentation for freesewing.dev, our developers website.
-
-You would need good writing skills and a familiarity with code (JavaScript).
diff --git a/markdown/dev/howtos/ways-to-contribute/technical-writing/en.md b/markdown/dev/howtos/ways-to-contribute/technical-writing/en.md
deleted file mode 100644
index ba6435334aa..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/technical-writing/en.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Technical writing
----
-
-
diff --git a/markdown/dev/howtos/ways-to-contribute/technical-writing/patterns/en.md b/markdown/dev/howtos/ways-to-contribute/technical-writing/patterns/en.md
deleted file mode 100644
index 1611bcb0700..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/technical-writing/patterns/en.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Writing for freesewing.org
----
-
-You could write documentation for freesewing.org, our makers website.
-
-You would need good writing skills and a familiarity with sewing.
diff --git a/markdown/dev/howtos/ways-to-contribute/translation/en.md b/markdown/dev/howtos/ways-to-contribute/translation/en.md
deleted file mode 100644
index fdf3c0c33f7..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/translation/en.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Translation
----
-
-You could translate FreeSewing into one of its additional languages
-(French, German, Dutch, Spanish, Ukrainian). Or if you’re ambitious, add a new one.
diff --git a/markdown/dev/howtos/ways-to-contribute/triage-issues/en.md b/markdown/dev/howtos/ways-to-contribute/triage-issues/en.md
deleted file mode 100644
index bb59c8cacde..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/triage-issues/en.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Triage issues
----
-
-Triaging issues is a great way to get involved in FreeSewing. You can do tasks such as:
-
-- Making sure issues are properly labeled
-- Ensuring they have a good title that explains the issue in brief
-- Assigning issues to people to make sure they are tended to
-- Keeping an eye on stale issues, and either updating or closing them
-- Assigning issues to milestones so we can plan our releases
-
-All FreeSewing contributors have triage permissions that allows them to do this.
-If you don't have the rights, or bump into any issues, [reach out to us on Discord](https://discord.freesewing.org).
diff --git a/markdown/dev/howtos/ways-to-contribute/webdesign/en.md b/markdown/dev/howtos/ways-to-contribute/webdesign/en.md
deleted file mode 100644
index 84547393a05..00000000000
--- a/markdown/dev/howtos/ways-to-contribute/webdesign/en.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: UI / UX Webdesign
----
-
-You could help us make our website and tools pretty and improve the user experience.
diff --git a/markdown/dev/i18n/en.md b/markdown/dev/i18n/en.md
deleted file mode 100644
index 2e2affc3578..00000000000
--- a/markdown/dev/i18n/en.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Translate
----
-
-FreeSewing is proudly multilingual. For that, we rely on the
-support of our translators.
-
-FreeSewing currently is available in the following languages:
-
-- English
-- Dutch
-- French
-- Spanish
-- German
-- Ukrainian
-
-## Translation guide
-
-This guide for translators covers everything you need to know about (helping out with) the translation of FreeSewing.
-
--
-
diff --git a/markdown/dev/reference/api/point/dist/en.md b/markdown/dev/reference/api/point/dist/en.md
deleted file mode 100644
index 54210137b13..00000000000
--- a/markdown/dev/reference/api/point/dist/en.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: Point.dist()
----
-
-The `Point.dist()` method returns the distance (in mm) between this point and
-the point you pass it.
-
-## Signature
-
-```js
-float point.dist(Point point)
-```
-
-## Example
-
-
-```js
-({ Point, points, Path, paths, units, part }) => {
-
- points.from = new Point(10, 10)
- points.to = new Point(80, 70)
-
- points.text = points.from
- .shiftFractionTowards(points.to, 0.6)
- .setText(units(points.from.dist(points.to)), 'text-sm fill-note center')
-
- paths.line = new Path()
- .move(points.from)
- .line(points.to)
- .setClass('dashed')
-
- return part
-}
-```
-
diff --git a/markdown/dev/reference/backend/account/confirm/en.md b/markdown/dev/reference/backend/account/confirm/en.md
deleted file mode 100644
index e1c39c4d675..00000000000
--- a/markdown/dev/reference/backend/account/confirm/en.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-title: Confirm an account
----
-
-Confirms a newly created User account.
-If confirmation is successful this will also result in a (passwordless) sign-in.
-
-## Endpoints
-
-Confirming a new User account is possible via this endpoint:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/confirm/signup/:id` | None |
-
-This endpoint requires no authentication
-
-## Request URL
-
-The URL should contain the confirmation ID that was E-mailed to the E-mail
-address used for the signup. It replaces the `:id` placeholder in the
-[endpoint listed above](#endpoints).
-
-## Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `consent` | Number | An integer representing the consent given by the user to process their data |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the confirmation was not found |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `token` | String | A JSON web token (JWT) token to authenticate with |
-| `account.id` | Number | The ID of the User |
-| `account.bio` | String | The bio of the User |
-| `account.consent` | Number | The consent given by the User |
-| `account.control` | Number | The control desired by the User |
-| `account.createdAt` | String | Date string indicating the moment the User was created |
-| `account.email` | String | The E-mail address currently tied to the User |
-| `account.github` | String | The GitHub username of the User |
-| `account.img` | String | The URL to the image stored with this User |
-| `account.imperial` | Boolean| Whether or not the User prefers imperial units |
-| `account.initial` | String | The E-mail address that the User was created with |
-| `account.language` | String | The language preferred by the user |
-| `account.lastSignIn`| String | Date string indicating them moment the User last signed in |
-| `account.mfaEnabled`| Boolean| Whether or not the User has MFA enabled |
-| `account.newsletter`| Boolean| Whether or not the User is subscribed to the FreeSewing newsletter |
-| `account.patron` | Number | The level of patronage the user provides to FreeSewing |
-| `account.role` | String | The role of the User |
-| `account.status` | Number | The status of the user |
-| `account.updatedAt` | String | Date string indicating the last time the User was updated |
-| `account.username` | String | The username of the User |
-| `account.lusername` | String | A lowercased version of the username of the User |
-
-## Example request
-
-```js
-const confirm = await axios.post(
- 'https://backend.freesewing.org/confirm/signup/3985f312-e407-458a-a78c-4596c361d284',
- { consent: 2 },
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "token": "eyJhbGciOiJIUzI1NiIsInR5c...truncated",
- "account": {
- "id": 14,
- "bio": "",
- "consent": 1,
- "control": 1,
- "createdAt": "2022-11-19T18:15:22.642Z",
- "email": "test_54c6856275aaa8a1@freesewing.dev",
- "github": "",
- "img": "https://freesewing.org/avatar.svg",
- "imperial": false,
- "initial": "test_54c6856275aaa8a1@freesewing.dev",
- "language": "en",
- "lastSignIn": "2022-11-19T18:15:22.668Z",
- "mfaEnabled": false,
- "newsletter": false,
- "patron": 0,
- "role": "user",
- "status": 1,
- "updatedAt": "2022-11-19T18:15:22.668Z",
- "username": "user-14",
- "lusername": "user-14"
- }
-}
-```
-
-[duri]: https://en.wikipedia.org/wiki/Data_URI_scheme
diff --git a/markdown/dev/reference/backend/account/create/en.md b/markdown/dev/reference/backend/account/create/en.md
deleted file mode 100644
index 1ae884282f7..00000000000
--- a/markdown/dev/reference/backend/account/create/en.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: Create an account
----
-
-Creates a new User account. The User account will remain inactive
-until [it is confirmed](/reference/backend/account/confirm).
-
-## Endpoints
-
-Creating a new User account is possible via this endpoint:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/signup` | None |
-
-This endpoint requires no authentication
-
-## Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `email` | `string` | The E-mail address of the User |
-| `language` | `boolean`| The language code for the User |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `email` | String | The E-mail address where the confirmation email was sent to |
-
-## Example request
-
-```js
-const signup = await axios.post(
- 'https://backend.freesewing.org/signup',
- {
- email: "joost@joost.at",
- language: "en"
- }
-)
-```
-
-## Example response
-```201.json
-{
- "result": "success",
- "email": "joost@joost.at"
-}
-```
diff --git a/markdown/dev/reference/backend/account/en.md b/markdown/dev/reference/backend/account/en.md
deleted file mode 100644
index 8f8ba4ec505..00000000000
--- a/markdown/dev/reference/backend/account/en.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-title: Account
----
-
-From an end-user's point of view, their account holds all of their data. From
-an API point of view, these endpoints deal with data in the User table.
-
-As the endpoints typically use `/account` we tend to use _account_ more often
-than _user_.
-
-## Endpoints
-
-
-
-## Notes
-
-### The `consent` field is about data protection
-
-The `consent` field holds a number indicating to which level the user has
-agreed to the processing of their data:
-
-- `0` : No consent given (yet)
-- `1` : Consent given for processing profile data
-- `2` : Consent given for processing profile & people data
-- `3` : Consent given for processing profile & people data, and for publishing
- anonymized measurements as open data
-
-Providing a consent value (that is higher than `0`) is a requirement for
-confirming a User account. In other words, without sufficient consent, you
-can't sign up.
-
-### The `control` field is about keeping it simple
-
-The `control` field holds a number indicating to which level the user wants to
-be in control of the FreeSewing platform. It was added as a way to allow for
-progressive disclosure of (more) advanced features and settings on the
-FreeSewing website.
-
-Possible values are:
-
-- `1` : Hide all but the most crucial features. Make it as simple as possible.
-- `2` : Hide the majority of features. Make it simple, but not too much.
-- `3` : Reveal the majority of features, but not all. Balance simplicity with
- power.
-- `4` : Reveal everything, but keep handrails and safety checks. Only intervene
- when I'm about to do something dangerous.
-- `5` : Reveal everything, remove the handrails and safety checks. Get out of
- my way, I know what I'm doing.
-
-### The `ihash` and `ehash` fields are for search
-
-Because we encrypt a lot of data at rest, it can be difficult for support or
-administrators to find users when they don't know or remember their username
-because we cannot search on their E-mail address since that data is encrypted.
-
-That is why we store a hash of the (lowercased) email address. This way, we can
-hash the email provided to us, and search the hash instead.
-
-The `ehash` and `ihash` fields hold the hash for the `email` and `initial`
-fields.
-
-### The `imperial` property is a Boolean
-
-If the `imperial` property is `false`, the user wants metric units.
-
-If the `imperial` property is `true`, the user wants imperial units.
-
-### The `initial` field guards against account takeover
-
-The `initial` field will be set to the E-mail address the account was
-registered with. It can never be changed.
-
-This ensures that when there's an account takeover dispute, we can always know
-what E-mail address was used to create the account, even if the E-mail address
-associated with the account was changed.
-
-### The `lusername` field should be unique
-
-For the backend users `Joost` and `joost` are -- strictly speaking -- two
-different users. This tends to lead to confusion and possible impersonation.
-So we enforce uniqueness on the `lusername` field which holds a lowercased
-version of the `username` field..
-
-In other words, lowercased username must be unique.
-
-### The `status` field holds the account status
-
-Possible values are:
-
-- `0` : The account is not active (yet)
-- `1` : The account is active
-- `-1` : The account was disabled by the user
-- `-2` : The account was administratively disabled
-
diff --git a/markdown/dev/reference/backend/account/mfa/en.md b/markdown/dev/reference/backend/account/mfa/en.md
deleted file mode 100644
index 0b2067d56a7..00000000000
--- a/markdown/dev/reference/backend/account/mfa/en.md
+++ /dev/null
@@ -1,213 +0,0 @@
----
-title: MFA
----
-
-Enable of disable Multi-Factor Authentication (MFA) on the User account.
-
-- [Setup MFA](#setup-mfa)
-- [Confirm MFA](#confirm-mfa)
-- [Disable MFA](#disable-mfa)
-
-## Endpoints
-
-Enabling, confirming, and disabling MFA is all possible via this endpoint:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/account/mfa/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/account/mfa/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Setup MFA
-
-### Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `mfa` | `boolean`| Set to `true` to enable MFA |
-
-### Response status codes
-
-Possible status codes for this endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | authentication failed |
-| | access denied |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-### Response body
-
-| Value | Type | Description |
-| -------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `mfa.secret` | String | The shared secret for generating one-time password (OTP) tokens |
-| `mfa.otpauth` | String | The OTP Auth URI that is encoded in the QR code |
-| `mfa.qrcode` | String | SVG to display a QR code with the otpauth URI encoded |
-
-
-##### Styling the SVG
-The SVG returned by the backend uses `currentColor` for the QR code, so you can
-style it with CSS if you embed it in the page.
-
-
-### Example request
-
-```js
-const mfa = await axios.post(
- 'https://backend.freesewing.org/account/mfa/jwt',
- { mfa: true },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-### Example response
-```200.json
-{
- "result": "success",
- "mfa": {
- "secret": "KBTSKUKRDJPEGCZK",
- "otpauth": "otpauth://totp/FreeSewing:user-294?secret=KBTSKUKRDJPEGCZK&period=30&digits=6&algorithm=SHA1&issuer=FreeSewing",
- "qrcode": "\n"
- }
-}
-```
-
-## Confirm MFA
-
-To confirm the MFA, we need to provide an MFA token to ensure the user can
-generate them.
-
-### Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `mfa` | `boolean`| Must be set to `true` to confirm MFA |
-| `secret` | `boolean`| The secret returned when setting up MFA |
-| `token` | `boolean`| Must be set to `true` to confirm MFA |
-
-### Response status codes
-
-Possible status codes for this endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | authentication failed |
-| | access denied |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-### Response body
-
-| Value | Type | Description |
-| -------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-
-### Example request
-
-```js
-import { authenticator } from '@otplib/preset-default'
-
-const confirm = await axios.post(
- 'https://backend.freesewing.org/account/mfa/jwt',
- {
- mfa: true,
- secret: mfa.secret,
- token: authenticator.generate(mfa.secret)
- },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-### Example response
-
-```200.json
-{
- "result": "success",
-}
-```
-## Disable MFA
-
-To disable MFA, you need to provide both the account password and a valid token.
-
-### Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `mfa` | `boolean`| Must be set to `false` to disable MFA |
-| `password` | `boolean`| The User's password |
-| `token` | `boolean`| Must be set to `true` to confirm MFA |
-
-### Response status codes
-
-Possible status codes for this endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | authentication failed |
-| | access denied |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-### Response body
-
-| Value | Type | Description |
-| -------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-
-### Example request
-
-```js
-import { authenticator } from '@otplib/preset-default'
-
-const confirm = await axios.post(
- 'https://backend.freesewing.org/account/mfa/jwt',
- {
- mfa: false,
- password: "I like big bewbs and I just can't lie",
- token: authenticator.generate(mfa.secret)
- },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-### Example response
-
-```200.json
-{
- "result": "success",
-}
-```
diff --git a/markdown/dev/reference/backend/account/signin/en.md b/markdown/dev/reference/backend/account/signin/en.md
deleted file mode 100644
index f1ae7c68b1a..00000000000
--- a/markdown/dev/reference/backend/account/signin/en.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-title: Sign In
----
-
-Sign in as a User with username and password, and optional MFA token.
-
-## Endpoints
-
-Password-based sign-in is possible via this endpoint:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/signin` | None |
-
-This endpoint requires no authentication
-
-## Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `username` | `string` | The E-mail address of the User |
-| `password` | `boolean`| The language code for the User |
-| `token` | `boolean`| The MFA token |
-
-An MFA token is required (only) when the User enabled MFA
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | authentication failed |
-| | MFA token missing |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `token` | String | A JSON web token (JWT) token to authenticate with |
-| `account.id` | Number | The ID of the User |
-| `account.bio` | String | The bio of the User |
-| `account.consent` | Number | The consent given by the User |
-| `account.control` | Number | The control desired by the User |
-| `account.createdAt` | String | Date string indicating the moment the User was created |
-| `account.email` | String | The E-mail address currently tied to the User |
-| `account.github` | String | The GitHub username of the User |
-| `account.img` | String | The URL to the image stored with this User |
-| `account.imperial` | Boolean| Whether or not the User prefers imperial units |
-| `account.initial` | String | The E-mail address that the User was created with |
-| `account.language` | String | The language preferred by the user |
-| `account.lastSignIn`| String | Date string indicating them moment the User last signed in |
-| `account.mfaEnabled`| Boolean| Whether or not the User has MFA enabled |
-| `account.newsletter`| Boolean| Whether or not the User is subscribed to the FreeSewing newsletter |
-| `account.patron` | Number | The level of patronage the user provides to FreeSewing |
-| `account.role` | String | The role of the User |
-| `account.status` | Number | The status of the user |
-| `account.updatedAt` | String | Date string indicating the last time the User was updated |
-| `account.username` | String | The username of the User |
-| `account.lusername` | String | A lowercased version of the username of the User |
-
-## Example request
-
-```js
-const signup = await axios.post(
- 'https://backend.freesewing.org/signup',
- {
- username: "jimmy",
- language: "I like big bewbs and I just can't lie",
- token: 231586
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "token": "eyJhbGciOiJIUzI1NiIsInR5c...truncated",
- "account": {
- "id": 14,
- "bio": "",
- "consent": 1,
- "control": 1,
- "createdAt": "2022-11-19T18:15:22.642Z",
- "email": "test_54c6856275aaa8a1@freesewing.dev",
- "github": "",
- "img": "https://freesewing.org/avatar.svg",
- "imperial": false,
- "initial": "test_54c6856275aaa8a1@freesewing.dev",
- "language": "en",
- "lastSignIn": "2022-11-19T18:15:22.668Z",
- "mfaEnabled": false,
- "newsletter": false,
- "patron": 0,
- "role": "user",
- "status": 1,
- "updatedAt": "2022-11-19T18:15:22.668Z",
- "username": "jimmy",
- "lusername": "jimmy"
- }
-}
-```
diff --git a/markdown/dev/reference/backend/account/update/en.md b/markdown/dev/reference/backend/account/update/en.md
deleted file mode 100644
index e216d9d38b0..00000000000
--- a/markdown/dev/reference/backend/account/update/en.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-title: Update account
----
-
-Updates an existing User account.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `4` or higher is required to update your own User account
-- [Permission level](/reference/backend/rbac) `8` is required to update **another user's** account
-
-## Endpoints
-
-Updating an existing User account is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/account/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/account/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `bio` | `string` | The User's bio |
-| `consent` | `string` | A number that indicates [the consent given by the user](/reference/backend/account#the-consent-field-is-about-data-protection) |
-| `control` | `string` | A number that indicates [the level of control the user prefers](/reference/backend/account#the-control-field-is-about-keeping-it-simple) |
-| `github` | `string` | The User's username on GitHub |
-| `imperial` | `boolean`| Whether or not the User prefers imperial units |
-| `newsletter`| `boolean`| Whether this Person prefers imperial measurements (`true`) or not (`false`) |
-| `img` | `string` | An image [data-uri][duri] to store with this Person |
-| `password` | `string` | The (new) password for the User |
-| `username` | `string` | The (new) username for the User |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `account.id` | Number | The ID of the User |
-| `account.bio` | String | The bio of the User |
-| `account.consent` | Number | The consent given by the User |
-| `account.control` | Number | The control desired by the User |
-| `account.createdAt` | String | Date string indicating the moment the User was created |
-| `account.email` | String | The E-mail address currently tied to the User |
-| `account.github` | String | The GitHub username of the User |
-| `account.img` | String | The URL to the image stored with this User |
-| `account.imperial` | Boolean| Whether or not the User prefers imperial units |
-| `account.initial` | String | The E-mail address that the User was created with |
-| `account.language` | String | The language preferred by the user |
-| `account.lastSignIn`| String | Date string indicating them moment the User last signed in |
-| `account.mfaEnabled`| Boolean| Whether or not the User has MFA enabled |
-| `account.newsletter`| Boolean| Whether or not the User is subscribed to the FreeSewing newsletter |
-| `account.patron` | Number | The level of patronage the user provides to FreeSewing |
-| `account.role` | String | The role of the User |
-| `account.status` | Number | The status of the user |
-| `account.updatedAt` | String | Date string indicating the last time the User was updated |
-| `account.username` | String | The username of the User |
-| `account.lusername` | String | A lowercased version of the username of the User |
-
-## Example request
-
-```js
-const udpate = await axios.put(
- 'https://backend.freesewing.org/account/jwt',
- {
- bio: "I like imperial now",
- imperial: true,
- username: "ImperialLover"
- },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "account": {
- "id": 14,
- "bio": "I like imperial now",
- "consent": 1,
- "control": 1,
- "createdAt": "2022-11-19T18:15:22.642Z",
- "email": "test_54c6856275aaa8a1@freesewing.dev",
- "github": "",
- "img": "https://freesewing.org/avatar.svg",
- "imperial": true,
- "initial": "test_54c6856275aaa8a1@freesewing.dev",
- "language": "en",
- "lastSignIn": "2022-11-19T18:15:22.668Z",
- "mfaEnabled": false,
- "newsletter": false,
- "patron": 0,
- "role": "user",
- "status": 1,
- "updatedAt": "2022-11-19T18:15:22.668Z",
- "username": "ImperialLover",
- "lusername": "imperiallover"
- }
-}
-```
-
-[duri]: https://en.wikipedia.org/wiki/Data_URI_scheme
diff --git a/markdown/dev/reference/backend/apikeys/create/en.md b/markdown/dev/reference/backend/apikeys/create/en.md
deleted file mode 100644
index abcd26f0a27..00000000000
--- a/markdown/dev/reference/backend/apikeys/create/en.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: Create an API key
----
-
-Creates a new API key. An API key can be used to authenticate against the
-backend API.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `4` or higher is required to create an API key
-
-## Endpoints
-
-Creating a new API key is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/apikeys/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/apikeys/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `name` | `string` | A name for the API key |
-| `level` | `number` | A privilege level from 0 to 8. |
-| `expiresIn` | `number` | The number of seconds until the API key expires |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-
-##### Make sure to save the secret
-The response body is the only time the API key's secret will be revealed.
-
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | `string` | Either `success` or `error` |
-| `error` | `string` | Will give info on the nature of the error. Only set if an error occurred. |
-| `apikey.key` | `string` | The API key |
-| `apikey.secret` | `string` | The API secret |
-| `apikey.level` | `number` | The privilege level of the API key |
-| `apikey.expiresAt` | `string` | A string representation of the moment the API key expires |
-| `apikey.name` | `string` | The name of the API key |
-| `apikey.userId` | `number` | The ID of the user who created the API key |
-
-
-
-## Example request
-
-```js
-const apiKey = axios.post(
- 'https://backend.freesewing.org/apikeys/jwt',
- {
- name: 'My first API key',
- level: 2, // Read only
- expiresIn: 3600, // One hour
- },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```201.json
-{
- "result": "success",
- "apikey": {
- "key": "7ea12968-7758-40b6-8c73-75cc99be762b",
- "secret": "503d7adbdb3ec18ab27adfcd895d8b47a8d6bc8307d548500fbf9c05a5a8820e",
- "level": 3,
- "expiresAt": "2022-11-06T15:57:30.190Z",
- "name": "My first API key",
- "userId": 61
- }
-}
-```
diff --git a/markdown/dev/reference/backend/apikeys/delete/en.md b/markdown/dev/reference/backend/apikeys/delete/en.md
deleted file mode 100644
index 02b95146e9a..00000000000
--- a/markdown/dev/reference/backend/apikeys/delete/en.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: Delete an API key
----
-
-Deletes an existing API key.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `4` or higher is required to delete an API key
-
-## Endpoints
-
-Deleting an API key is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/apikeys/:id/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/apikeys/:id/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the API key you wish to remove.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-## Example request
-
-```js
-await axios.delete(
- 'https://backend.freesewing.org/apikeys/7ea12968-7758-40b6-8c73-75cc99be762b/jwt',
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-
-```204.json
-```
-
-These endpoints return status code (no content) on
-success, with no response body.
-
-
diff --git a/markdown/dev/reference/backend/apikeys/en.md b/markdown/dev/reference/backend/apikeys/en.md
deleted file mode 100644
index 745e3b54f49..00000000000
--- a/markdown/dev/reference/backend/apikeys/en.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: API Keys
----
-
-API keys are a way to authenticate to the API with basic authentication.
-They are intended to be used when interacting with the API in an automated
-way such as from a script or a CI/CD pipeline.
-
-They are an alternative to JSON Web Tokens (JWT) which is typically used
-to authenticate users in a browser session.
-
-The FreeSewing backend REST API supports authentication both with JSON Web
-Tokens (JWT) as with API keys (KEY). This describes the endpoints that deal
-with creating, reading, and removing API keys. For authentication details,
-refer to [the section on
-authenticating](/reference/backend/authentication).
-
-## Endpoints
-
-
-
-## Notes
-
-The following is good to keep in mind when working with API keys:
-
-### API keys are immutable
-
-Once created, API keys cannot be updated.
-You should remove them and re-create a new one if you want to make a change.
-
-### API keys have an expiry
-
-API keys have an expiry date. The maximum validity for an API key is 1 year.
-
-### API keys have a permission level
-
-API keys have a permission level. You can never create an API key with a higher
-permission level than your own permission level.
-
-### Circumstances that will trigger your API keys to be revoked
-
-As a precaution, all your API keys will be revoked when:
-
-- Your role is downgraded to a role with fewer privileges
-- Your account is (b)locked
-- You revoke your consent for FreeSewing to process your data
-
-
-This is not an exhaustive list. For example, if we find your use of our API to
-be excessive, we might also revoke your API keys to shield us from the
-financial impact of your use of our API.
-
-
diff --git a/markdown/dev/reference/backend/apikeys/read/en.md b/markdown/dev/reference/backend/apikeys/read/en.md
deleted file mode 100644
index de6cc862fc1..00000000000
--- a/markdown/dev/reference/backend/apikeys/read/en.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-title: Read an API key
----
-
-Reads an existing API key. Note that the API secret can only be retrieved at
-the moment the API key is created.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `4` or higher is required to read an API key
-
-## Endpoints
-
-Reading an API key is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/apikeys/:id/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/apikeys/:id/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the API key you wish to remove.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | API key not found |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | `string` | `success` on success, and `error` on error |
-| `error` | `string` | Will give info on the nature of the error. Only set if an error occurred. |
-| `apikey.key` | `string` | The API key |
-| `apikey.level` | `number` | The privilege level of the API key |
-| `apikey.expiresAt` | `string` | A string representation of the moment the API key expires |
-| `apikey.name` | `string` | The name of the API key |
-| `apikey.userId` | `number` | The ID of the user who created the API key |
-
-## Example request
-
-```js
-const keyInfo = await axios.get(
- 'https://backend.freesewing.org/apikeys/7ea12968-7758-40b6-8c73-75cc99be762b/jwt',
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "apikey": {
- "key": "7ea12968-7758-40b6-8c73-75cc99be762b",
- "level": 3,
- "expiresAt": "2022-11-06T15:57:30.190Z",
- "name": "My first API key",
- "userId": 61
- }
-}
-```
diff --git a/markdown/dev/reference/backend/apikeys/whoami/en.md b/markdown/dev/reference/backend/apikeys/whoami/en.md
deleted file mode 100644
index 541bb72b847..00000000000
--- a/markdown/dev/reference/backend/apikeys/whoami/en.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-title: Read the current API key
----
-
-Reads the current API key used to authenticate the request.
-For obvious reasons, this endpoint is only available with API key authentication.
-However, there's an equivalent endpoint for JWT authentication.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `0` or higher is required to read the current API key
-
-## Endpoints
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/whoami/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | `string` | `success` on success, and `error` on error |
-| `error` | `string` | Will give info on the nature of the error. Only set if an error occurred. |
-| `apikey.key` | `string` | The API key |
-| `apikey.level` | `number` | The privilege level of the API key |
-| `apikey.expiresAt` | `string` | A string representation of the moment the API key expires |
-| `apikey.name` | `string` | The name of the API key |
-| `apikey.userId` | `number` | The ID of the user who created the API key |
-
-## Example request
-
-```js
-const keyInfo = await axios.get(
- 'https://backend.freesewing.org/whoami/key',
- {
- auth: {
- username: apikey.key,
- password: apikey.secret,
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "apikey": {
- "key": "7ea12968-7758-40b6-8c73-75cc99be762b",
- "level": 3,
- "expiresAt": "2022-11-06T15:57:30.190Z",
- "name": "My first API key",
- "userId": 61
- }
-}
diff --git a/markdown/dev/reference/backend/authentication/en.md b/markdown/dev/reference/backend/authentication/en.md
deleted file mode 100644
index 951fbf1fc7c..00000000000
--- a/markdown/dev/reference/backend/authentication/en.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-title: Authentication
----
-
-The FreeSewing backend API requires authentication for all but a handful of
-endpoints.
-
-The API supports two different types of authentication:
-
-| Type | Name | Description |
-| ---- | ---- | ----------- |
-| [JSON Web Tokens](#jwt-authentication) | `jwt` | This is typically used to authenticate humans in a browser session. |
-| [API Keys](#key-authentication) | `key` | This is typically used to interact with the API in an automated way. Like in a script, a CI/CD context, a serverless runner, and so on. |
-
-While the API supports both, they are not supported on the same endpoint.
-Instead, add the authentication type you want to use as the final part of
-endpoint:
-
-- `/some/endpoint/jwt` : Authenticate with a JSON Web Token
-- `/some/endpoint/key` : Authenticate with an API key and secret
-
-## `jwt` authentication
-
-The use of JSON Web Tokens ([jwt](https://jwt.io)) is typically used in a
-browser context where we want to establish a *session*.
-
-To get a token, you must first authenticate at the [`/signin`](/reference/backend/account/signin) endpoint.
-You will receive a JSON Web Token (jwt) as part of the response.
-
-In subsequent API calls, you must then include this token in the
-`Authorization` header prefixed by `Bearer `. Like his:
-
-```js
-const account = await axios.get(
- `https://backend.freesewing.org/account/jwt`,
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## `key` authentication
-
-The combination of API key & secret serves as a username & password for [HTTP
-basic authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).
-
-
-In basic authentication, the password is sent
-unencrypted. To guard against this, this API should only be served over a
-connection that is encrypted with TLS. (a URL starting with `https://`).
-
-
-Sending a username and password with a request like this is supported
-pretty much everywhere. In addition, there is no need to establish a session
-first, so this make the entire transaction stateless.
-
-Below is an example using curl:
-
-```sh
-curl -u api-key-here:api-secret-here \
- https://backend.freesewing.org/account/key
-```
diff --git a/markdown/dev/reference/backend/patterns/clone/en.md b/markdown/dev/reference/backend/patterns/clone/en.md
deleted file mode 100644
index 2be6b6a9f4d..00000000000
--- a/markdown/dev/reference/backend/patterns/clone/en.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-title: Clone a Pattern
----
-
-Create a new Pattern by cloning an existing one.
-
-## Access control
-
-The [Permission level](/reference/backend/rbac) required to clone a
-Pattern depends on:
-
-- Whether the Pattern is `public`
-- Who created the Pattern
-
-The details are outlined in the table below:
-
-| | Public Patterns | Non-Public Patterns |
-| ---------------: | :-------------: | :-----------------: |
-| **Your own** | `0` or higher | `3` or higher |
-| **Other user's** | `0` or higher | `5` or higher |
-
-## Endpoints
-
-Creating a new Person is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/patterns/:id/clone/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/patterns/:id/clone/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the Pattern you wish to remove.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `pattern.id` | Number | The ID of the Pattern |
-| `pattern.createdAt` | String | Date string indicating the moment the pattern was created |
-| `pattern.data` | Object | Any additional data that was stored with Pattern data |
-| `pattern.design` | String | The name of the design of which this Pattern is an instance |
-| `pattern.img` | String | The URL to the image stored with this Pattern |
-| `pattern.name` | String | The name of the Pattern |
-| `pattern.notes` | String | The notes stored with the Pattern |
-| `pattern.personId` | Number | The ID of the Person for whom the Pattern was created |
-| `pattern.public` | Boolean| Indicates whether the Pattern is publicly accessible or not |
-| `pattern.settings` | Object | The settings used to (re-)create the Pattern |
-| `pattern.userId` | Number | The ID of the user who created the Pattern |
-| `pattern.updatedAt` | String | Date string indicating the last time the pattern was updated |
-
-## Example request
-
-```js
-const clone = axios.post(
- 'https://backend.freesewing.org/patterns/10/clone/jwt',
- null,
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "pattern": {
- "id": 19,
- "createdAt": "2022-11-19T16:29:33.346Z",
- "data": {
- "some": "value"
- },
- "design": "aaron",
- "img": "https://cdn.sanity.io/images/hl5bw8cj/production/a1565c8c6c70cfe7ea0fdf5c65501cd885adbe78-200x187.png",
- "name": "Just a test",
- "notes": "These are my notes",
- "personId": 17,
- "public": true,
- "settings": {
- "sa": 5
- },
- "userId": 10,
- "updatedAt": "2022-11-19T16:29:33.346Z"
- }
-}
-```
diff --git a/markdown/dev/reference/backend/patterns/create/en.md b/markdown/dev/reference/backend/patterns/create/en.md
deleted file mode 100644
index fb621cf0647..00000000000
--- a/markdown/dev/reference/backend/patterns/create/en.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-title: Create a Pattern
----
-
-Creates a new Pattern. This is typically used when users choose to save a pattern.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `3` or higher is required to create a Pattern
-
-## Endpoints
-
-Creating a new Pattern is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/patterns/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/patterns/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request body
-The request body is a JSON object with the following properties:
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `data` | `object` | Any additional data to store with the pattern |
-| `design` | `string` | The name of the design this Pattern is an instance of |
-| `img` | `object` | An image [data-uri][duri] to store with this Pattern |
-| `name` | `string` | A name for the Pattern |
-| `notes` | `string` | User notes for the pattern |
-| `person` | `object` | The ID of the person to associate with this pattern |
-| `settings` | `object` | The settings object to (re-)create the Pattern |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `pattern.id` | Number | The ID of the Pattern |
-| `pattern.createdAt` | String | Date string indicating the moment the pattern was created |
-| `pattern.data` | Object | Any additional data that was stored with Pattern data |
-| `pattern.design` | String | The name of the design of which this Pattern is an instance |
-| `pattern.img` | String | The URL to the image stored with this Pattern |
-| `pattern.name` | String | The name of the Pattern |
-| `pattern.notes` | String | The notes stored with the Pattern |
-| `pattern.personId` | Number | The ID of the Person for whom the Pattern was created |
-| `pattern.public` | Boolean| Indicates whether the Pattern is publicly accessible or not |
-| `pattern.settings` | Object | The settings used to (re-)create the Pattern |
-| `pattern.userId` | Number | The ID of the user who created the Pattern |
-| `pattern.updatedAt` | String | Date string indicating the last time the pattern was updated |
-
-## Example request
-
-```js
-const pattern = await axios.post(
- 'https://backend.freesewing.org/patterns/jwt',
- {
- data: {
- some: 'value',
- }
- design: "aaron",
- img: "data:image/png;base64,iVBORw0KGgoAAAANSUhEU...truncated",
- name: "Just a test",
- notes: "These are my notes",
- person: 17,
- public: true,
- settings: {
- sa: 5,
- },
- },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```201.json
-{
- "result": "success",
- "pattern": {
- "id": 10,
- "createdAt": "2022-11-19T16:29:33.346Z",
- "data": {
- "some": "value"
- },
- "design": "aaron",
- "img": "https://cdn.sanity.io/images/hl5bw8cj/production/a1565c8c6c70cfe7ea0fdf5c65501cd885adbe78-200x187.png",
- "name": "Just a test",
- "notes": "These are my notes",
- "personId": 17,
- "public": true,
- "settings": {
- "sa": 5
- },
- "userId": 10,
- "updatedAt": "2022-11-19T16:29:35.023Z"
- }
-}
-```
-
-[duri]: https://en.wikipedia.org/wiki/Data_URI_scheme
diff --git a/markdown/dev/reference/backend/patterns/delete/en.md b/markdown/dev/reference/backend/patterns/delete/en.md
deleted file mode 100644
index 40daa793aed..00000000000
--- a/markdown/dev/reference/backend/patterns/delete/en.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: Delete a Pattern
----
-
-Deletes an existing Pattern.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `3` or higher is required to delete a Pattern
-- [Permission level](/reference/backend/rbac) `8` is required to delete **another user's** Pattern
-
-## Endpoints
-
-Deleting a Pattern is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/patterns/:id/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/patterns/:id/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the Pattern you wish to remove.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-## Example request
-
-```js
-await axios.delete(
- 'https://backend.freesewing.org/patterns/10/jwt',
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-
-```204.json
-```
-
-These endpoints return status code (no content) on
-success, with no response body.
-
diff --git a/markdown/dev/reference/backend/patterns/en.md b/markdown/dev/reference/backend/patterns/en.md
deleted file mode 100644
index e63b1e73280..00000000000
--- a/markdown/dev/reference/backend/patterns/en.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Patterns
----
-
-Patterns hold information on and settings for a user's patterns.
-
-## Endpoints
-
-
-
-## Notes
-
-### The `design` property should hold the design
-
-The `design` property should hold the name of the FreeSewing design.
-For example, `aaron`.
-
-### The `notes` vs `data` properties
-
-Both the `data` and `notes` properties can hold additional information about
-the pattern.
-
-Keep in mind that:
-- The `notes` property is intended to be used by the user to add notes about
- their pattern. It will only accept data of type `string`.
-- The `data` property is intended to allow frontend developers to store
- additional data about the pattern. It will only accept data of type `object`.
-
-### The `settings` property should hold the pattern settings
-
-The `settings` property should hold [a settings object](/reference/settings)
-that can be passed to [the Pattern
-constructor](/reference/api/pattern#creating-a-pattern).
diff --git a/markdown/dev/reference/backend/patterns/read/en.md b/markdown/dev/reference/backend/patterns/read/en.md
deleted file mode 100644
index 17c168aef2b..00000000000
--- a/markdown/dev/reference/backend/patterns/read/en.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-title: Read a Pattern
----
-
-Reads an existing Pattern.
-
-## Access control
-
-The [Permission level](/reference/backend/rbac) required to read a
-Pattern depends on:
-
-- Whether the Pattern is `public`
-- Who created the Pattern
-
-The details are outlined in the table below:
-
-| | Public Patterns | Non-Public Patterns |
-| ---------------: | :-------------: | :-----------------: |
-| **Your own** | `0` or higher | `1` or higher |
-| **Other user's** | `0` or higher | `5` or higher |
-
-## Endpoints
-
-Reading a Pattern is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/patterns/:id/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/patterns/:id/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the Pattern you wish to read.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | API key not found |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `pattern.id` | Number | The ID of the Pattern |
-| `pattern.createdAt` | String | Date string indicating the moment the pattern was created |
-| `pattern.data` | Object | Any additional data that was stored with Pattern data |
-| `pattern.design` | String | The name of the design of which this Pattern is an instance |
-| `pattern.img` | String | The URL to the image stored with this Pattern |
-| `pattern.name` | String | The name of the Pattern |
-| `pattern.notes` | String | The notes stored with the Pattern |
-| `pattern.personId` | Number | The ID of the Person for whom the Pattern was created |
-| `pattern.public` | Boolean| Indicates whether the Pattern is publicly accessible or not |
-| `pattern.settings` | Object | The settings used to (re-)create the Pattern |
-| `pattern.userId` | Number | The ID of the user who created the Pattern |
-| `pattern.updatedAt` | String | Date string indicating the last time the pattern was updated |
-
-## Example request
-
-```js
-const pattern = await axios.get(
- 'https://backend.freesewing.org/patterns/10/jwt',
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "pattern": {
- "id": 10,
- "createdAt": "2022-11-19T16:29:33.346Z",
- "data": {
- "some": "value"
- },
- "design": "aaron",
- "img": "https://cdn.sanity.io/images/hl5bw8cj/production/a1565c8c6c70cfe7ea0fdf5c65501cd885adbe78-200x187.png",
- "name": "Just a test",
- "notes": "These are my notes",
- "personId": 17,
- "public": true,
- "settings": {
- "sa": 5
- },
- "userId": 10,
- "updatedAt": "2022-11-19T16:29:35.023Z"
- }
-}
-```
diff --git a/markdown/dev/reference/backend/patterns/update/en.md b/markdown/dev/reference/backend/patterns/update/en.md
deleted file mode 100644
index 349dce70486..00000000000
--- a/markdown/dev/reference/backend/patterns/update/en.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-title: Update a Pattern
----
-
-Updates an existing Pattern.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `3` or higher is required to update a Pattern
-- [Permission level](/reference/backend/rbac) `8` is required to update **another user's** Pattern
-
-## Endpoints
-
-Updating an existing Pattern is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/patterns/:id/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/patterns/:id/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the Pattern you wish to remove.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `data` | `object` | Any additional data to store with the pattern |
-| `design` | `string` | The name of the design this Pattern is an instance of |
-| `img` | `object` | An image [data-uri][duri] to store with this Pattern |
-| `name` | `string` | A name for the Pattern |
-| `notes` | `string` | User notes for the pattern |
-| `person` | `object` | The ID of the person to associate with this pattern |
-| `settings` | `object` | The settings object to (re-)create the Pattern |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `pattern.id` | Number | The ID of the Pattern |
-| `pattern.createdAt` | String | Date string indicating the moment the pattern was created |
-| `pattern.data` | Object | Any additional data that was stored with Pattern data |
-| `pattern.design` | String | The name of the design of which this Pattern is an instance |
-| `pattern.img` | String | The URL to the image stored with this Pattern |
-| `pattern.name` | String | The name of the Pattern |
-| `pattern.notes` | String | The notes stored with the Pattern |
-| `pattern.personId` | Number | The ID of the Person for whom the Pattern was created |
-| `pattern.public` | Boolean| Indicates whether the Pattern is publicly accessible or not |
-| `pattern.settings` | Object | The settings used to (re-)create the Pattern |
-| `pattern.userId` | Number | The ID of the user who created the Pattern |
-| `pattern.updatedAt` | String | Date string indicating the last time the pattern was updated |
-
-## Example request
-
-```js
-const udpate = await axios.put(
- 'https://backend.freesewing.org/patterns/10/jwt',
- {
- data: {
- some: 'new value',
- }
- public: false,
- },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "pattern": {
- "id": 10,
- "createdAt": "2022-11-19T16:29:33.346Z",
- "data": {
- "some": "new value"
- },
- "design": "aaron",
- "img": "https://cdn.sanity.io/images/hl5bw8cj/production/a1565c8c6c70cfe7ea0fdf5c65501cd885adbe78-200x187.png",
- "name": "Just a test",
- "notes": "These are my notes",
- "personId": 17,
- "public": false,
- "settings": {
- "sa": 5
- },
- "userId": 10,
- "updatedAt": "2022-11-19T16:43:39.223Z"
- }
-}
-```
-
-[duri]: https://en.wikipedia.org/wiki/Data_URI_scheme
diff --git a/markdown/dev/reference/backend/people/clone/en.md b/markdown/dev/reference/backend/people/clone/en.md
deleted file mode 100644
index 7d46cdeb516..00000000000
--- a/markdown/dev/reference/backend/people/clone/en.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-title: Clone a Person
----
-
-Create a new Person by cloning an existing one.
-
-## Access control
-
-The [Permission level](/reference/backend/rbac) required to clone a
-Person depends on:
-
-- Whether the Person is `public`
-- Who created the Pattern
-
-The details are outlined in the table below:
-
-| | Public Patterns | Non-Public Patterns |
-| ---------------: | :-------------: | :-----------------: |
-| **Your own** | `0` or higher | `3` or higher |
-| **Other user's** | `0` or higher | `5` or higher |
-
-## Endpoints
-
-Creating a new Person is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/people/:id/clone/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/people/:id/clone/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the Person you wish to remove.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `person.id` | Number | The ID of the Person |
-| `person.createdAt` | String | Date string indicating the moment the Person was created |
-| `person.img` | String | The URL to the image stored with this Person |
-| `person.name` | String | The name of the Person |
-| `person.notes` | String | The notes stored with the Person |
-| `person.userId` | Number | The ID of the user who created the Person |
-| `person.measies` | Object | The measurements of the Person |
-| `person.public` | Boolean| Indicates whether the Person is publicly accessible or not |
-| `person.updatedAt` | String | Date string indicating the last time the Person was updated |
-
-## Example request
-
-```js
-const clone = axios.post(
- 'https://backend.freesewing.org/people/27/clone/jwt',
- null,
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "person": {
- "id": 32,
- "createdAt": "2022-11-19T17:36:41.342Z",
- "img": "https://cdn.sanity.io/images/hl5bw8cj/production/a1565c8c6c70cfe7ea0fdf5c65501cd885adbe78-200x187.png",
- "imperial": false,
- "name": "Someone",
- "notes": "These are some notes",
- "userId": 12,
- "measies": {
- "chest": 930,
- "neck": 360
- },
- "public": true,
- "updatedAt": "2022-11-19T17:36:41.342Z"
- }
-}
-```
diff --git a/markdown/dev/reference/backend/people/create/en.md b/markdown/dev/reference/backend/people/create/en.md
deleted file mode 100644
index d4dae9c4dcf..00000000000
--- a/markdown/dev/reference/backend/people/create/en.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: Create a Person
----
-
-Creates a new Person.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `3` or higher is required to create a Person
-
-## Endpoints
-
-Creating a new Person is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/people/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/people/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `img` | `string` | An image [data-uri][duri] to store with this Person |
-| `imperial` | `boolean`| Whether this Person prefers imperial measurements (`true`) or not (`false`) |
-| `name` | `string` | A name for the Person |
-| `notes` | `string` | User notes for the person |
-| `measies` | `object` | The measurements for this person |
-| `public` | `string` | The name of the design this Pattern is an instance of |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `person.id` | Number | The ID of the Person |
-| `person.createdAt` | String | Date string indicating the moment the Person was created |
-| `person.img` | String | The URL to the image stored with this Person |
-| `person.name` | String | The name of the Person |
-| `person.notes` | String | The notes stored with the Person |
-| `person.userId` | Number | The ID of the user who created the Person |
-| `person.measies` | Object | The measurements of the Person |
-| `person.public` | Boolean| Indicates whether the Person is publicly accessible or not |
-| `person.updatedAt` | String | Date string indicating the last time the Person was updated |
-
-## Example request
-
-```js
-const person = await axios.post(
- 'https://backend.freesewing.org/people/jwt',
- {
- name: "Someone",
- notes: "These are some notes",
- measies: {
- "chest": 930,
- "neck": 360
- },
- public: true,
- imperial: false,
- img: "data:image/png;base64,iVBORw0KGgoAAAANSUhEU...truncated"
- },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```201.json
-{
- "result": "success",
- "person": {
- "id": 27,
- "createdAt": "2022-11-19T17:36:41.342Z",
- "img": "https://cdn.sanity.io/images/hl5bw8cj/production/a1565c8c6c70cfe7ea0fdf5c65501cd885adbe78-200x187.png",
- "imperial": false,
- "name": "Someone",
- "notes": "These are some notes",
- "userId": 12,
- "measies": {
- "chest": 930,
- "neck": 360
- },
- "public": true,
- "updatedAt": "2022-11-19T17:36:41.342Z"
- }
-}
-```
-
-[duri]: https://en.wikipedia.org/wiki/Data_URI_scheme
diff --git a/markdown/dev/reference/backend/people/delete/en.md b/markdown/dev/reference/backend/people/delete/en.md
deleted file mode 100644
index 0c687dc54ea..00000000000
--- a/markdown/dev/reference/backend/people/delete/en.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: Delete a Person
----
-
-Deletes an existing Person.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `3` or higher is required to delete a Person
-- [Permission level](/reference/backend/rbac) `8` is required to delete **another user's** Person
-
-## Endpoints
-
-Deleting a Person is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/people/:id/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/people/:id/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the Person you wish to remove.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-## Example request
-
-```js
-await axios.delete(
- 'https://backend.freesewing.org/people/27/jwt',
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-
-```204.json
-```
-
-These endpoints return status code (no content) on
-success, with no response body.
-
diff --git a/markdown/dev/reference/backend/people/en.md b/markdown/dev/reference/backend/people/en.md
deleted file mode 100644
index 429e72b2ac1..00000000000
--- a/markdown/dev/reference/backend/people/en.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: People
----
-
-A Person hold information and measurements on the people we generate patterns
-for.
-
-## Endpoints
-
-
-
-## Notes
-
-### The `imperial` property is a Boolean
-
-- If the `imperial` property is `false`, the person wants metric units.
-- If the `imperial` property is `true`, the person wants imperial units.
-
-### The `measies` property holds measurements
-
-These measurements should be structured as an object that can be used for the
-`measurements` key in the [pattern settings
-object](/reference/settings/measurements).
-
-The backend will only accept known measurements listed in the configuration file.
-
-
-##### Why we use measies instead of measurements
-First of all, _measies_ is a cute and adorable alternative for _measurements_
-coined by Karen. She deserves all the credit.
-
-But also, I am slightly dyslexic and for some reason, I often drop the middle
-_e_ when typing measurements' (sic).
-
-Those typos lead to bugs and I find it much easier to write _measies_.
-So because fewer bugs, plus did I mention it's cute?
-
-
-
-### The `settings` property should hold the pattern settings
-
-The `settings` property should hold [a settings object](/reference/settings)
-that can be passed to [the Pattern
-constructor](/reference/api/pattern#creating-a-pattern).
diff --git a/markdown/dev/reference/backend/people/read/en.md b/markdown/dev/reference/backend/people/read/en.md
deleted file mode 100644
index 2954b3c2ff9..00000000000
--- a/markdown/dev/reference/backend/people/read/en.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-title: Read a Person
----
-
-Reads an existing Person.
-
-## Access control
-
-The [Permission level](/reference/backend/rbac) required to read a
-Person depends on:
-
-- Whether the Person is `public`
-- Who created the Person
-
-The details are outlined in the table below:
-
-| | Public People | Non-Public People |
-| ---------------: | :-------------: | :-----------------: |
-| **Your own** | `0` or higher | `4` or higher |
-| **Other user's** | `0` or higher | `5` or higher |
-
-## Endpoints
-
-Reading a Person is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/people/:id/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/people/:id/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request url
-
-The url should contain the ID of the Person you wish to read.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | API key not found |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `person.id` | Number | The ID of the Person |
-| `person.createdAt` | String | Date string indicating the moment the Person was created |
-| `person.img` | String | The URL to the image stored with this Person |
-| `person.name` | String | The name of the Person |
-| `person.notes` | String | The notes stored with the Person |
-| `person.userId` | Number | The ID of the user who created the Person |
-| `person.measies` | Object | The measurements of the Person |
-| `person.public` | Boolean| Indicates whether the Person is publicly accessible or not |
-| `person.updatedAt` | String | Date string indicating the last time the Person was updated |
-
-## Example request
-
-```js
-const person = await axios.get(
- 'https://backend.freesewing.org/people/27/jwt',
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "person": {
- "id": 27,
- "createdAt": "2022-11-19T17:36:41.342Z",
- "img": "https://cdn.sanity.io/images/hl5bw8cj/production/a1565c8c6c70cfe7ea0fdf5c65501cd885adbe78-200x187.png",
- "imperial": false,
- "name": "Someone",
- "notes": "These are some notes",
- "userId": 12,
- "measies": {
- "chest": 930,
- "neck": 360
- },
- "public": true,
- "updatedAt": "2022-11-19T17:36:41.342Z"
- }
-}
-```
diff --git a/markdown/dev/reference/backend/people/update/en.md b/markdown/dev/reference/backend/people/update/en.md
deleted file mode 100644
index 32ecba825e6..00000000000
--- a/markdown/dev/reference/backend/people/update/en.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-title: Update a Person
----
-
-Updates an existing Person.
-
-## Access control
-
-- [Permission level](/reference/backend/rbac) `3` or higher is required to update a Person
-- [Permission level](/reference/backend/rbac) `8` is required to update **another user's** Person
-
-## Endpoints
-
-Updating an existing Person is possible via these endpoints:
-
-| Method | Path | Authentication |
-| --------: | :--- | :------------- |
-| | `/people/:id/jwt` | [JSON Web Token](/reference/backend/authentication#jwt-authentication) |
-| | `/people/:id/key` | [API Key & Secret](/reference/backend/authentication#key-authentication) |
-
-## Request URL
-
-The URL should contain the ID of the Person you wish to remove.
-It replaces the `:id` placeholder in the [endpoints listed above](#endpoints).
-
-## Request body
-
-| Property | Type | Description |
-| ----------: | :------- | :---------- |
-| `img` | `string` | An image [data-uri][duri] to store with this Person |
-| `imperial` | `boolean`| Whether this Person prefers imperial measurements (`true`) or not (`false`) |
-| `name` | `string` | A name for the Person |
-| `notes` | `string` | User notes for the person |
-| `measies` | `object` | The measurements for this person |
-| `public` | `string` | The name of the design this Pattern is an instance of |
-
-## Response status codes
-
-Possible status codes for these endpoints are:
-
-| Status code | Description |
-| ----------: | :---------- |
-| | success |
-| | the request was malformed |
-| | the request lacks authentication |
-| | authentication failed |
-| | server error |
-
-
-If the status code is not the `error` property
-in the response body should indicate the nature of the problem.
-
-
-## Response body
-
-| Value | Type | Description |
-| ------------------- | -------- | ----------- |
-| `result` | String | Either `success` or `error` |
-| `error` | String | Will give info on the nature of the error. Only set if an error occurred. |
-| `person.id` | Number | The ID of the Person |
-| `person.createdAt` | String | Date string indicating the moment the Person was created |
-| `person.img` | String | The URL to the image stored with this Person |
-| `person.name` | String | The name of the Person |
-| `person.notes` | String | The notes stored with the Person |
-| `person.userId` | Number | The ID of the user who created the Person |
-| `person.measies` | Object | The measurements of the Person |
-| `person.public` | Boolean| Indicates whether the Person is publicly accessible or not |
-| `person.updatedAt` | String | Date string indicating the last time the Person was updated |
-
-## Example request
-
-```js
-const udpate = await axios.put(
- 'https://backend.freesewing.org/people/27/jwt',
- {
- notes: "Turns out some people like imperial",
- imperial: true,
- },
- {
- headers: {
- Authorization: `Bearer ${token}`
- }
- }
-)
-```
-
-## Example response
-```200.json
-{
- "result": "success",
- "person": {
- "id": 27,
- "createdAt": "2022-11-19T17:36:41.342Z",
- "img": "https://cdn.sanity.io/images/hl5bw8cj/production/a1565c8c6c70cfe7ea0fdf5c65501cd885adbe78-200x187.png",
- "imperial": true,
- "name": "Someone",
- "notes": "Turns out some people like imperial",
- "userId": 12,
- "measies": {
- "chest": 930,
- "neck": 360
- },
- "public": true,
- "updatedAt": "2022-11-19T17:36:41.342Z"
- }
-}
-```
-
-[duri]: https://en.wikipedia.org/wiki/Data_URI_scheme
diff --git a/markdown/dev/reference/backend/rbac/en.md b/markdown/dev/reference/backend/rbac/en.md
deleted file mode 100644
index c5ad1da3ea6..00000000000
--- a/markdown/dev/reference/backend/rbac/en.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Access control
----
-
-The backend API implements role-based access control (RBAC). Each
-user has a role and that role determines what they can and cannot do.
-
-## Roles vs levels
-
-In practice, the different user roles map to a permission level between
-`0` and `8`.
-The available roles and their privilege levels are:
-
-- **user**: `4`
-- **bughunter**: `5`
-- **support**: `6`
-- **admin**: `8`
-
-We offer more fine-grained control over the permission level when
-authenticating with API keys. When you create an API key, you can choose any
-permissioning level that is equal or lower than your own role's permission level.
-
-This allows you to -- for example -- generate an API key that only have read
-access to your data.
-
-## Permission levels
-
-The table below lists the privilege of all levels as well as their
-corresponding `role`
-
-| Level | Abilities | `user` | `bughunter` | `support` | `admin` |
-| --: | -- | :--: | :--: | :--: | :--: |
-| `0` | authenticate | ✅ | ✅ | ✅ | ✅ |
-| `1` | **read** people and patterns | ✅ | ✅ | ✅ | ✅ |
-| `2` | **read all** account data | ✅ | ✅ | ✅ | ✅ |
-| `3` | **write** people or patterns | ✅ | ✅ | ✅ | ✅ |
-| `4` | **write all** account data | ✅ | ✅ | ✅ | ✅ |
-| `5` | **read** people or patterns of **other users** | ❌ | ✅ | ✅ | ✅ |
-| `6` | **read all** account data of **other users** | ❌ | ❌ | ✅ | ✅ |
-| `7` | **write** account data of **other users** through **specific support methods** | ❌ | ❌ | ✅ | ✅ |
-| `8` | impersonate other users, **full write access** | ❌ | ❌ | ❌ | ✅ |
-
diff --git a/markdown/dev/reference/sites/en.md b/markdown/dev/reference/sites/en.md
deleted file mode 100644
index 6240b657dd9..00000000000
--- a/markdown/dev/reference/sites/en.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Sites
----
-
-
diff --git a/markdown/dev/reference/sites/sanity/en.md b/markdown/dev/reference/sites/sanity/en.md
deleted file mode 100644
index fd0848752f4..00000000000
--- a/markdown/dev/reference/sites/sanity/en.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-title: Sanity
----
-
-FreeSewing uses [Sanity](https://www.sanity.io/) -- a headless CMS, or a SaaS
-platform for structure content -- to host various types of content.
-
-For background information, please refer to [the Sanity content
-guide](/guides/content/sanity).
-
-## Content schema
-
-The Sanity content scheme is stored in `sites/sanity/schema` in our monorepo.
-
-## Datasets
-
-We use two datasets:
-
-- `site-data` holds blog and showcase posts in all languages, as well as
- newsletter editions. This dataset is publicly available.
-- `user-data` holds images uploaded by users, such as for their account image,
- or measurements set image. This dataset is not publicly available.
-
-## Sanity studio
-
-The `sites/sanity` folder holds an instance of Sanity Studio -- the frontend to
-manage the content -- preconfigured to work with our content. This site is
-published at https://cms.freesewing.org/ where editors can work on our content.
-
-### Authentication
-
-To be able to use the Sanity Studio with FreeSewing's data, you need to be
-added as an editor. Sanity supports using your GitHub account to authenticate,
-so if you want to become an editor, you can ask joost to grant you access.
-
-### Local development
-
-After setting up the monorepo with `yarn kickstart` in the root folder, change your working directory to `sites/sanity` and run `yarn dev`:
-
-```sh
-git clone git@github.com:freesewing/freesewing.git
-cd freesewing
-yarn kickstart
-cd sites/sanity
-yarn dev
-```
-
-The Sanity Studio UI will open at http://localhost:3333
-
-
-This instance is setup to work with our production data.
-
-
-## Sanity API
-
-The following data is required to interact with Sanity:
-
-- Project ID: `hl5bw8cj`
-- Dataset: `site-content`
-
-With that and [the API reference
-documentation](https://www.sanity.io/docs/reference) you should be able to get
-started.
-
diff --git a/markdown/dev/reference/terms/cjs/en.md b/markdown/dev/reference/terms/cjs/en.md
deleted file mode 100644
index 7d9da894f6d..00000000000
--- a/markdown/dev/reference/terms/cjs/en.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: cjs
-jargon: true
----
-
-**cjs** stands for **CommonJS**. It is a module system for JavaScript that was
-popularized by NodeJS, and as such typically used in server-side JavaScript.
-
-CommonJS uses the **require** keyword to import modules:
-
-```js
-const fs = require('fs')
-```
-
-In recent years, **cjs** is increasingly being replaced by **esm**, or ECMA
-Script Modules which is the official module system of the JavaScript language,
-and the future-proof choice.
-
-Since version 3, FreeSewing is ESM-only.
diff --git a/markdown/dev/reference/terms/en.md b/markdown/dev/reference/terms/en.md
deleted file mode 100644
index 85aef4f47b1..00000000000
--- a/markdown/dev/reference/terms/en.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Terminology
----
-
-This page includes a glossary of terms that are used on FreeSewing.dev.
-
-
-##### The purpose of this glossary
-
-To avoid having to explain what (for example) __esm__ means each time
-we use it, we maintain a central list of terminology (jargon) with a link to
-its documentation.
-
-##### How to use this glossary
-
-We also make it easy for documentation authors to include definitions for
-glossary terms they use by merely emphasising the term, like this:
-_esm_.
-
-For more details, refer to [our Markdown guide](https://freesewing.dev/guides/markdown/jargon).
-
-
-
-## Glossary
-
-
diff --git a/markdown/dev/reference/terms/esm/en.md b/markdown/dev/reference/terms/esm/en.md
deleted file mode 100644
index 0d4f6b611fa..00000000000
--- a/markdown/dev/reference/terms/esm/en.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: esm
-jargon: true
----
-
-**esm** stands for **ECMAScript Modules** and is the official module system of
-the JavaScript language, supported both in the browser, and on the server.
-
-While ESM is the official standard, before it existed people would typically use CJS outside the browser, as it was popularized by NodeJS.
-Some libraries still are not available in ESM, but FreeSewing has been ESM-only since version 3.
-
-
-ESM uses the **import** keyword to import modules:
-
-```js
-import fs from 'fs'
-```
-
diff --git a/markdown/dev/reference/terms/variadic/en.md b/markdown/dev/reference/terms/variadic/en.md
deleted file mode 100644
index eea9f7f4471..00000000000
--- a/markdown/dev/reference/terms/variadic/en.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Variadic
-jargon: true
----
-
-A **variadic** function is a function that accepts a variable number of arguments.
-
-For example, JavaScript's `console.log` method is variadic:
-
-```js
-console.log('one')
-console.log('one', 'two')
-console.log('one', 'two', 'three')
-console.log('It', 'works', 'regardless', 'of', 'how', 'many', 'arguments', 'you', 'pass')
-```
diff --git a/markdown/dev/reference/trust/en.md b/markdown/dev/reference/trust/en.md
deleted file mode 100644
index a7315972fc5..00000000000
--- a/markdown/dev/reference/trust/en.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: Web of Trust
----
-
-In the wake of [the March 2024 supply-chain attack on XZ
-Utils](https://www.wired.com/story/xz-backdoor-everything-you-need-to-know/) --
-which attempted to smuggle a backdoor into Linux distributions -- FreeSewing has
-taken steps to guard against the attack vector where a contributor gains trust
-over a long period of time, with the end goal to smuggle malicious code into the project.
-
-__Elevated permissions or access will only be granted to people who are in FreeSewing's web of trust__.
-
-We have established an initial web of trust (more on this below) and have
-revoked elevated permissions from all other contributors.
-
-
-
-##### Paranoia much?
-
-We appreciate that -- given to the nature of software FreeSewing provides -- the chances of a supply chain attack by an adversary willing to invest months or even years to gain our trust are vanishingly small.
-
-Still, we are a small part of the larger open source ecosystem, and we cannot foresee the ways in which others may end up using our software.
-In addition, we want to help normalize this approach, and help raise awareness of the risks involved in trusting pseudo-anonymous contributions.
-
-
-
-## Defining trust
-
-To understand what we mean by a _web of trust_, we need to keep in mind what we want to guard against.
-In other words, the web of trust should prevent:
-
-**Someone attempting to gain our trust -- possibly over a prolonged period of time -- to achieve a malicious goal.**
-
-Right from the start, you can see that this is impossible. There is no real way to know people's true intentions, so we cannot guard against that.
-However, if we assume people try to pull this off without giving up their real identity, we can instead just focus on identity instead.
-
-The FreeSewing community exists almost exclusively online.
-In contrast, **FreeSewing's web of trust is made up of people who know and have verified each others _real_ identities**.
-
-In other words, to gain elevated permissions or access in FreeSewing, we need to know who you are and where you live.
-
-## Joining the web of trust
-
-To join FreeSewing's web of trust, you should:
-
-- Be a contributor
-- Reach out to one of the current trustees
-- Meet up with them -- physically, in the real world -- and verify each other's identities.
-- Once the current trustee vouches for your identity, you can be added to the web of trust
-
-
-Being a trustee is a requirement to be granted elevated privileges. It ddoes not automatically grant them.
-
-
-## FreeSewing's web of trust
-
-
-
-## Trustees
-
-
-
diff --git a/markdown/dev/sitemap/en.md b/markdown/dev/sitemap/en.md
deleted file mode 100644
index 45c24f6710d..00000000000
--- a/markdown/dev/sitemap/en.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Sitemap
----
-
-
diff --git a/markdown/dev/support/en.md b/markdown/dev/support/en.md
deleted file mode 100644
index 985a34771b8..00000000000
--- a/markdown/dev/support/en.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Support FreeSewing
----
-
-FreeSewing is fuelled by a voluntary subscription model
-
-If you think what we do is worthwhile, and if you can spare a few coins each
-month without hardship, please support our work and [become a
-patron](https://freesewing.org/patrons/join).
-
-
-
-##### Need help?
-If it's not support for FreeSewing you're looking for, but rather
-support for yourself, then the [support page](https://freesewing.org/support) is for you.
-
diff --git a/packages/new-design/lib/download-list.mjs b/packages/new-design/lib/download-list.mjs
index d73fb0b799f..e8c60c24feb 100644
--- a/packages/new-design/lib/download-list.mjs
+++ b/packages/new-design/lib/download-list.mjs
@@ -1,5 +1,5 @@
export const downloads = {
- sites: [
+ 'sites': [
'sde/README.md',
'sde/env.local',
'sde/i18n.config.mjs',
@@ -22,7 +22,6 @@ export const downloads = {
'sde/mock/youtube.mjs',
'sde/pkgs/.gitkeep',
'sde/prebuild/.gitkeep',
- 'sde/prebuild/sitenav.de.mjs',
'sde/prebuild/sitenav.en.mjs',
'sde/prebuild/sitenav.es.mjs',
'sde/prebuild/sitenav.fr.mjs',
@@ -30,111 +29,222 @@ export const downloads = {
'sde/prebuild/sitenav.nl.mjs',
'sde/prebuild/sitenav.uk.mjs',
'sde/prebuild/sluglut.mjs',
+ 'sde/prebuild/sitenav.de.mjs',
'sde/components/design-examples.mjs',
'sde/components/dynamic-org-docs.mjs',
'sde/components/feeds.mjs',
'sde/components/search.mjs',
- 'sde/components/header/design-picker.mjs',
'sde/components/header/index.mjs',
+ 'sde/components/header/design-picker.mjs',
'sde/components/layouts/bare.mjs',
'sde/components/layouts/default.mjs',
'sde/components/layouts/workbench.mjs',
- 'sde/components/navigation/modal-menu.mjs',
'sde/components/wrappers/page.mjs',
+ 'sde/components/navigation/modal-menu.mjs',
+ 'sde/pages/_app.mjs',
+ 'sde/pages/account.mjs',
+ 'sde/pages/design.mjs',
+ 'sde/pages/index.mjs',
+ 'sde/pages/design/[design].mjs',
+ 'sde/pages/sde/en.yaml',
+ 'sde/pages/sde/es.yaml',
+ 'sde/pages/sde/de.yaml',
+ 'sde/pages/sde/fr.yaml',
+ 'sde/pages/sde/index.mjs',
+ 'sde/pages/sde/uk.yaml',
+ 'sde/pages/sde/nl.yaml',
+ 'sde/pages/signup/index.mjs',
+ 'sde/pages/signin/index.mjs',
+ 'sde/pages/signin/callback/[provider].mjs',
'sde/design/from-bella/en.json',
- 'sde/design/from-bella/i18n/de.json',
- 'sde/design/from-bella/i18n/en.json',
- 'sde/design/from-bella/i18n/es.json',
- 'sde/design/from-bella/i18n/fr.json',
- 'sde/design/from-bella/i18n/index.mjs',
- 'sde/design/from-bella/i18n/nl.json',
- 'sde/design/from-bella/i18n/uk.json',
'sde/design/from-bella/src/back.mjs',
'sde/design/from-bella/src/front.mjs',
'sde/design/from-bella/src/index.mjs',
+ 'sde/design/from-bella/i18n/de.json',
+ 'sde/design/from-bella/i18n/en.json',
+ 'sde/design/from-bella/i18n/es.json',
+ 'sde/design/from-bella/i18n/index.mjs',
+ 'sde/design/from-bella/i18n/fr.json',
+ 'sde/design/from-bella/i18n/nl.json',
+ 'sde/design/from-bella/i18n/uk.json',
'sde/design/from-bent/i18n/de.json',
'sde/design/from-bent/i18n/en.json',
'sde/design/from-bent/i18n/es.json',
'sde/design/from-bent/i18n/fr.json',
- 'sde/design/from-bent/i18n/index.mjs',
'sde/design/from-bent/i18n/nl.json',
+ 'sde/design/from-bent/i18n/index.mjs',
'sde/design/from-bent/i18n/uk.json',
- 'sde/design/from-bent/src/back.mjs',
'sde/design/from-bent/src/front.mjs',
+ 'sde/design/from-bent/src/back.mjs',
'sde/design/from-bent/src/index.mjs',
- 'sde/design/from-bent/src/top-sleeve.mjs',
'sde/design/from-bent/src/under-sleeve.mjs',
+ 'sde/design/from-bent/src/top-sleeve.mjs',
'sde/design/from-breanna/i18n/de.json',
'sde/design/from-breanna/i18n/en.json',
- 'sde/design/from-breanna/i18n/es.json',
- 'sde/design/from-breanna/i18n/fr.json',
'sde/design/from-breanna/i18n/index.mjs',
'sde/design/from-breanna/i18n/nl.json',
+ 'sde/design/from-breanna/i18n/fr.json',
+ 'sde/design/from-breanna/i18n/es.json',
'sde/design/from-breanna/i18n/uk.json',
'sde/design/from-breanna/src/back.mjs',
'sde/design/from-breanna/src/front.mjs',
'sde/design/from-breanna/src/index.mjs',
'sde/design/from-breanna/src/sleeve.mjs',
- 'sde/design/from-brian/i18n/de.json',
- 'sde/design/from-brian/i18n/en.json',
- 'sde/design/from-brian/i18n/es.json',
- 'sde/design/from-brian/i18n/fr.json',
- 'sde/design/from-brian/i18n/index.mjs',
- 'sde/design/from-brian/i18n/nl.json',
- 'sde/design/from-brian/i18n/uk.json',
- 'sde/design/from-brian/src/back.mjs',
- 'sde/design/from-brian/src/front.mjs',
- 'sde/design/from-brian/src/index.mjs',
- 'sde/design/from-brian/src/sleeve.mjs',
- 'sde/design/from-scratch/i18n/de.json',
- 'sde/design/from-scratch/i18n/en.json',
- 'sde/design/from-scratch/i18n/es.json',
- 'sde/design/from-scratch/i18n/fr.json',
- 'sde/design/from-scratch/i18n/index.mjs',
- 'sde/design/from-scratch/i18n/nl.json',
- 'sde/design/from-scratch/i18n/uk.json',
- 'sde/design/from-scratch/src/bib.mjs',
- 'sde/design/from-scratch/src/index.mjs',
'sde/design/from-titan/i18n/de.json',
- 'sde/design/from-titan/i18n/en.json',
'sde/design/from-titan/i18n/es.json',
- 'sde/design/from-titan/i18n/fr.json',
+ 'sde/design/from-titan/i18n/en.json',
'sde/design/from-titan/i18n/index.mjs',
- 'sde/design/from-titan/i18n/nl.json',
+ 'sde/design/from-titan/i18n/fr.json',
'sde/design/from-titan/i18n/uk.json',
+ 'sde/design/from-titan/i18n/nl.json',
'sde/design/from-titan/src/back.mjs',
'sde/design/from-titan/src/front.mjs',
'sde/design/from-titan/src/index.mjs',
- 'sde/design/tutorial/i18n/de.json',
- 'sde/design/tutorial/i18n/en.json',
'sde/design/tutorial/i18n/es.json',
+ 'sde/design/tutorial/i18n/en.json',
+ 'sde/design/tutorial/i18n/de.json',
'sde/design/tutorial/i18n/fr.json',
'sde/design/tutorial/i18n/index.mjs',
'sde/design/tutorial/i18n/nl.json',
'sde/design/tutorial/i18n/uk.json',
'sde/design/tutorial/src/bib.mjs',
'sde/design/tutorial/src/index.mjs',
- 'sde/pages/_app.mjs',
- 'sde/pages/account.mjs',
- 'sde/pages/design.mjs',
- 'sde/pages/index.mjs',
- 'sde/pages/design/[design].mjs',
- 'sde/pages/sde/de.yaml',
- 'sde/pages/sde/en.yaml',
- 'sde/pages/sde/es.yaml',
- 'sde/pages/sde/fr.yaml',
- 'sde/pages/sde/index.mjs',
- 'sde/pages/sde/nl.yaml',
- 'sde/pages/sde/uk.yaml',
- 'sde/pages/signup/index.mjs',
- 'sde/pages/signin/index.mjs',
- 'sde/pages/signin/callback/[provider].mjs',
- 'sde/public/brands/algolia.svg',
+ 'sde/design/from-scratch/i18n/de.json',
+ 'sde/design/from-scratch/i18n/en.json',
+ 'sde/design/from-scratch/i18n/nl.json',
+ 'sde/design/from-scratch/i18n/uk.json',
+ 'sde/design/from-scratch/i18n/index.mjs',
+ 'sde/design/from-scratch/i18n/es.json',
+ 'sde/design/from-scratch/i18n/fr.json',
+ 'sde/design/from-scratch/src/bib.mjs',
+ 'sde/design/from-scratch/src/index.mjs',
+ 'sde/design/from-brian/i18n/de.json',
+ 'sde/design/from-brian/i18n/en.json',
+ 'sde/design/from-brian/i18n/fr.json',
+ 'sde/design/from-brian/i18n/nl.json',
+ 'sde/design/from-brian/i18n/es.json',
+ 'sde/design/from-brian/i18n/index.mjs',
+ 'sde/design/from-brian/i18n/uk.json',
+ 'sde/design/from-brian/src/back.mjs',
+ 'sde/design/from-brian/src/front.mjs',
+ 'sde/design/from-brian/src/index.mjs',
+ 'sde/design/from-brian/src/sleeve.mjs',
'sde/public/brands/bugsnag.svg',
- 'sde/public/brands/crowdin.svg',
+ 'sde/public/brands/algolia.svg',
'sde/public/brands/netlify.svg',
'sde/public/brands/vercel.svg',
+ 'sde/public/brands/crowdin.svg',
'sde/public/img/lineup-backdrop.svg',
+ 'sde/public/locales/es/account.json',
+ 'sde/public/locales/es/auth.json',
+ 'sde/public/locales/es/bella.json',
+ 'sde/public/locales/es/bent.json',
+ 'sde/public/locales/es/breanna.json',
+ 'sde/public/locales/es/brian.json',
+ 'sde/public/locales/es/common.json',
+ 'sde/public/locales/es/core-settings.json',
+ 'sde/public/locales/es/curate.json',
+ 'sde/public/locales/es/cut.json',
+ 'sde/public/locales/es/design-options.json',
+ 'sde/public/locales/es/designs.json',
+ 'sde/public/locales/es/docs.json',
+ 'sde/public/locales/es/errors.json',
+ 'sde/public/locales/es/flag.json',
+ 'sde/public/locales/es/footer.json',
+ 'sde/public/locales/es/frombella.json',
+ 'sde/public/locales/es/frombent.json',
+ 'sde/public/locales/es/frombreanna.json',
+ 'sde/public/locales/es/fromscratch.json',
+ 'sde/public/locales/es/fromtitan.json',
+ 'sde/public/locales/es/frombrian.json',
+ 'sde/public/locales/es/gdpr.json',
+ 'sde/public/locales/es/hodl.json',
+ 'sde/public/locales/es/header.json',
+ 'sde/public/locales/es/homepage.json',
+ 'sde/public/locales/es/lab.json',
+ 'sde/public/locales/es/locales.json',
+ 'sde/public/locales/es/logs.json',
+ 'sde/public/locales/es/measurements.json',
+ 'sde/public/locales/es/modal.json',
+ 'sde/public/locales/es/newsletter.json',
+ 'sde/public/locales/es/patrons.json',
+ 'sde/public/locales/es/plugin-annotations.json',
+ 'sde/public/locales/es/plugins.json',
+ 'sde/public/locales/es/popout.json',
+ 'sde/public/locales/es/print.json',
+ 'sde/public/locales/es/sde.json',
+ 'sde/public/locales/es/roles.json',
+ 'sde/public/locales/es/sections.json',
+ 'sde/public/locales/es/sets.json',
+ 'sde/public/locales/es/sponsors.json',
+ 'sde/public/locales/es/stats.json',
+ 'sde/public/locales/es/status.json',
+ 'sde/public/locales/es/submissions.json',
+ 'sde/public/locales/es/support.json',
+ 'sde/public/locales/es/susi.json',
+ 'sde/public/locales/es/tags.json',
+ 'sde/public/locales/es/techniques.json',
+ 'sde/public/locales/es/themes.json',
+ 'sde/public/locales/es/timeago.json',
+ 'sde/public/locales/es/titan.json',
+ 'sde/public/locales/es/tutorial.json',
+ 'sde/public/locales/es/ui-settings.json',
+ 'sde/public/locales/es/workbench.json',
+ 'sde/public/locales/fr/account.json',
+ 'sde/public/locales/fr/auth.json',
+ 'sde/public/locales/fr/bella.json',
+ 'sde/public/locales/fr/bent.json',
+ 'sde/public/locales/fr/breanna.json',
+ 'sde/public/locales/fr/brian.json',
+ 'sde/public/locales/fr/common.json',
+ 'sde/public/locales/fr/core-settings.json',
+ 'sde/public/locales/fr/curate.json',
+ 'sde/public/locales/fr/cut.json',
+ 'sde/public/locales/fr/designs.json',
+ 'sde/public/locales/fr/docs.json',
+ 'sde/public/locales/fr/errors.json',
+ 'sde/public/locales/fr/flag.json',
+ 'sde/public/locales/fr/design-options.json',
+ 'sde/public/locales/fr/footer.json',
+ 'sde/public/locales/fr/frombella.json',
+ 'sde/public/locales/fr/frombent.json',
+ 'sde/public/locales/fr/frombreanna.json',
+ 'sde/public/locales/fr/frombrian.json',
+ 'sde/public/locales/fr/fromscratch.json',
+ 'sde/public/locales/fr/fromtitan.json',
+ 'sde/public/locales/fr/gdpr.json',
+ 'sde/public/locales/fr/hodl.json',
+ 'sde/public/locales/fr/header.json',
+ 'sde/public/locales/fr/lab.json',
+ 'sde/public/locales/fr/locales.json',
+ 'sde/public/locales/fr/logs.json',
+ 'sde/public/locales/fr/homepage.json',
+ 'sde/public/locales/fr/measurements.json',
+ 'sde/public/locales/fr/modal.json',
+ 'sde/public/locales/fr/newsletter.json',
+ 'sde/public/locales/fr/plugin-annotations.json',
+ 'sde/public/locales/fr/plugins.json',
+ 'sde/public/locales/fr/popout.json',
+ 'sde/public/locales/fr/print.json',
+ 'sde/public/locales/fr/sde.json',
+ 'sde/public/locales/fr/sections.json',
+ 'sde/public/locales/fr/patrons.json',
+ 'sde/public/locales/fr/sets.json',
+ 'sde/public/locales/fr/roles.json',
+ 'sde/public/locales/fr/status.json',
+ 'sde/public/locales/fr/sponsors.json',
+ 'sde/public/locales/fr/submissions.json',
+ 'sde/public/locales/fr/stats.json',
+ 'sde/public/locales/fr/susi.json',
+ 'sde/public/locales/fr/tags.json',
+ 'sde/public/locales/fr/techniques.json',
+ 'sde/public/locales/fr/themes.json',
+ 'sde/public/locales/fr/support.json',
+ 'sde/public/locales/fr/timeago.json',
+ 'sde/public/locales/fr/titan.json',
+ 'sde/public/locales/fr/tutorial.json',
+ 'sde/public/locales/fr/ui-settings.json',
+ 'sde/public/locales/fr/workbench.json',
'sde/public/locales/de/account.json',
'sde/public/locales/de/auth.json',
'sde/public/locales/de/bella.json',
@@ -142,23 +252,23 @@ export const downloads = {
'sde/public/locales/de/breanna.json',
'sde/public/locales/de/brian.json',
'sde/public/locales/de/common.json',
- 'sde/public/locales/de/core-settings.json',
'sde/public/locales/de/curate.json',
+ 'sde/public/locales/de/core-settings.json',
'sde/public/locales/de/cut.json',
'sde/public/locales/de/design-options.json',
'sde/public/locales/de/designs.json',
- 'sde/public/locales/de/docs.json',
- 'sde/public/locales/de/errors.json',
'sde/public/locales/de/flag.json',
+ 'sde/public/locales/de/docs.json',
'sde/public/locales/de/footer.json',
+ 'sde/public/locales/de/errors.json',
'sde/public/locales/de/frombella.json',
'sde/public/locales/de/frombent.json',
- 'sde/public/locales/de/frombreanna.json',
'sde/public/locales/de/frombrian.json',
- 'sde/public/locales/de/fromscratch.json',
'sde/public/locales/de/fromtitan.json',
'sde/public/locales/de/gdpr.json',
'sde/public/locales/de/header.json',
+ 'sde/public/locales/de/fromscratch.json',
+ 'sde/public/locales/de/frombreanna.json',
'sde/public/locales/de/hodl.json',
'sde/public/locales/de/homepage.json',
'sde/public/locales/de/lab.json',
@@ -245,116 +355,6 @@ export const downloads = {
'sde/public/locales/en/tutorial.json',
'sde/public/locales/en/ui-settings.json',
'sde/public/locales/en/workbench.json',
- 'sde/public/locales/es/account.json',
- 'sde/public/locales/es/auth.json',
- 'sde/public/locales/es/bella.json',
- 'sde/public/locales/es/bent.json',
- 'sde/public/locales/es/breanna.json',
- 'sde/public/locales/es/brian.json',
- 'sde/public/locales/es/common.json',
- 'sde/public/locales/es/core-settings.json',
- 'sde/public/locales/es/curate.json',
- 'sde/public/locales/es/cut.json',
- 'sde/public/locales/es/design-options.json',
- 'sde/public/locales/es/designs.json',
- 'sde/public/locales/es/docs.json',
- 'sde/public/locales/es/errors.json',
- 'sde/public/locales/es/flag.json',
- 'sde/public/locales/es/footer.json',
- 'sde/public/locales/es/frombella.json',
- 'sde/public/locales/es/frombent.json',
- 'sde/public/locales/es/frombreanna.json',
- 'sde/public/locales/es/frombrian.json',
- 'sde/public/locales/es/fromscratch.json',
- 'sde/public/locales/es/fromtitan.json',
- 'sde/public/locales/es/gdpr.json',
- 'sde/public/locales/es/header.json',
- 'sde/public/locales/es/hodl.json',
- 'sde/public/locales/es/homepage.json',
- 'sde/public/locales/es/lab.json',
- 'sde/public/locales/es/locales.json',
- 'sde/public/locales/es/logs.json',
- 'sde/public/locales/es/measurements.json',
- 'sde/public/locales/es/modal.json',
- 'sde/public/locales/es/newsletter.json',
- 'sde/public/locales/es/patrons.json',
- 'sde/public/locales/es/plugin-annotations.json',
- 'sde/public/locales/es/plugins.json',
- 'sde/public/locales/es/popout.json',
- 'sde/public/locales/es/print.json',
- 'sde/public/locales/es/roles.json',
- 'sde/public/locales/es/sde.json',
- 'sde/public/locales/es/sections.json',
- 'sde/public/locales/es/sets.json',
- 'sde/public/locales/es/sponsors.json',
- 'sde/public/locales/es/stats.json',
- 'sde/public/locales/es/status.json',
- 'sde/public/locales/es/submissions.json',
- 'sde/public/locales/es/support.json',
- 'sde/public/locales/es/susi.json',
- 'sde/public/locales/es/tags.json',
- 'sde/public/locales/es/techniques.json',
- 'sde/public/locales/es/themes.json',
- 'sde/public/locales/es/timeago.json',
- 'sde/public/locales/es/titan.json',
- 'sde/public/locales/es/tutorial.json',
- 'sde/public/locales/es/ui-settings.json',
- 'sde/public/locales/es/workbench.json',
- 'sde/public/locales/fr/account.json',
- 'sde/public/locales/fr/auth.json',
- 'sde/public/locales/fr/bella.json',
- 'sde/public/locales/fr/bent.json',
- 'sde/public/locales/fr/breanna.json',
- 'sde/public/locales/fr/brian.json',
- 'sde/public/locales/fr/common.json',
- 'sde/public/locales/fr/core-settings.json',
- 'sde/public/locales/fr/curate.json',
- 'sde/public/locales/fr/cut.json',
- 'sde/public/locales/fr/design-options.json',
- 'sde/public/locales/fr/designs.json',
- 'sde/public/locales/fr/docs.json',
- 'sde/public/locales/fr/errors.json',
- 'sde/public/locales/fr/flag.json',
- 'sde/public/locales/fr/footer.json',
- 'sde/public/locales/fr/frombella.json',
- 'sde/public/locales/fr/frombent.json',
- 'sde/public/locales/fr/frombreanna.json',
- 'sde/public/locales/fr/frombrian.json',
- 'sde/public/locales/fr/fromscratch.json',
- 'sde/public/locales/fr/fromtitan.json',
- 'sde/public/locales/fr/gdpr.json',
- 'sde/public/locales/fr/header.json',
- 'sde/public/locales/fr/hodl.json',
- 'sde/public/locales/fr/homepage.json',
- 'sde/public/locales/fr/lab.json',
- 'sde/public/locales/fr/locales.json',
- 'sde/public/locales/fr/logs.json',
- 'sde/public/locales/fr/measurements.json',
- 'sde/public/locales/fr/modal.json',
- 'sde/public/locales/fr/newsletter.json',
- 'sde/public/locales/fr/patrons.json',
- 'sde/public/locales/fr/plugin-annotations.json',
- 'sde/public/locales/fr/plugins.json',
- 'sde/public/locales/fr/popout.json',
- 'sde/public/locales/fr/print.json',
- 'sde/public/locales/fr/roles.json',
- 'sde/public/locales/fr/sde.json',
- 'sde/public/locales/fr/sections.json',
- 'sde/public/locales/fr/sets.json',
- 'sde/public/locales/fr/sponsors.json',
- 'sde/public/locales/fr/stats.json',
- 'sde/public/locales/fr/status.json',
- 'sde/public/locales/fr/submissions.json',
- 'sde/public/locales/fr/support.json',
- 'sde/public/locales/fr/susi.json',
- 'sde/public/locales/fr/tags.json',
- 'sde/public/locales/fr/techniques.json',
- 'sde/public/locales/fr/themes.json',
- 'sde/public/locales/fr/timeago.json',
- 'sde/public/locales/fr/titan.json',
- 'sde/public/locales/fr/tutorial.json',
- 'sde/public/locales/fr/ui-settings.json',
- 'sde/public/locales/fr/workbench.json',
'sde/public/locales/nl/account.json',
'sde/public/locales/nl/auth.json',
'sde/public/locales/nl/bella.json',
@@ -466,270 +466,270 @@ export const downloads = {
'sde/public/locales/uk/ui-settings.json',
'sde/public/locales/uk/workbench.json',
'shared/utils.mjs',
- 'shared/components/mdx/dynamic.mjs',
- 'shared/components/mdx/design-measurements.mjs',
+ 'shared/components/icons.mjs',
'shared/components/mdx/design-options.mjs',
+ 'shared/components/mdx/dynamic.mjs',
'shared/components/mdx/index.mjs',
- 'shared/components/footer/index.mjs',
- 'shared/components/buttons/continue-button.mjs',
- 'shared/components/patrons/please-subscribe.mjs',
- 'shared/components/patrons/plea.mjs',
- 'shared/components/patrons/subscribe.mjs',
- 'shared/components/susi/sign-in.mjs',
- 'shared/components/susi/sign-up.mjs',
- 'shared/components/account/shared.mjs',
- 'shared/components/account/control.mjs',
- 'shared/components/account/sets.mjs',
- 'shared/components/popout/index.mjs',
- 'shared/components/robot/index.mjs',
- 'shared/components/robot/poses.mjs',
- 'shared/components/inputs.mjs',
- 'shared/components/collapse.mjs',
- 'shared/components/wordmark.mjs',
- 'shared/components/link.mjs',
- 'shared/components/error/view.mjs',
- 'shared/components/accordion.mjs',
- 'shared/components/wrappers/mdx.mjs',
- 'shared/components/wrappers/page.mjs',
- 'shared/components/wrappers/swipes.mjs',
- 'shared/components/wrappers/modal.mjs',
- 'shared/components/wrappers/layout.mjs',
- 'shared/components/wrappers/context.mjs',
- 'shared/components/wrappers/chart.mjs',
- 'shared/components/wrappers/auth/index.mjs',
+ 'shared/components/mdx/design-measurements.mjs',
+ 'shared/components/header.mjs',
'shared/components/wrappers/header.mjs',
- 'shared/components/control/tip.mjs',
- 'shared/components/control/score.mjs',
- 'shared/components/choice-link.mjs',
- 'shared/components/copy-to-clipboard.mjs',
- 'shared/components/code-box.mjs',
+ 'shared/components/wrappers/context.mjs',
+ 'shared/components/wrappers/layout.mjs',
+ 'shared/components/wrappers/auth/index.mjs',
+ 'shared/components/wrappers/page.mjs',
+ 'shared/components/wrappers/modal.mjs',
+ 'shared/components/wrappers/swipes.mjs',
+ 'shared/components/wrappers/mdx.mjs',
+ 'shared/components/wrappers/chart.mjs',
+ 'shared/components/footer/index.mjs',
+ 'shared/components/v3-wip.mjs',
'shared/components/designs/difficulty.mjs',
'shared/components/designs/info.mjs',
- 'shared/components/measurements/tim/head.svg',
- 'shared/components/measurements/tim/highbust.svg',
- 'shared/components/measurements/tim/upperleg.svg',
- 'shared/components/measurements/tim/hpstowaistback.svg',
- 'shared/components/measurements/tim/chest.svg',
- 'shared/components/measurements/tim/biceps.svg',
- 'shared/components/measurements/tim/inseam.svg',
- 'shared/components/measurements/tim/waisttoknee.svg',
- 'shared/components/measurements/tim/knee.svg',
- 'shared/components/measurements/tim/shouldertowrist.svg',
- 'shared/components/measurements/tim/waisttoarmpit.svg',
- 'shared/components/measurements/tim/neck.svg',
- 'shared/components/measurements/tim/shouldertoelbow.svg',
- 'shared/components/measurements/tim/shoulderslope.svg',
- 'shared/components/measurements/tim/waisttofloor.svg',
- 'shared/components/measurements/tim/hips.svg',
- 'shared/components/measurements/tim/bustfront.svg',
- 'shared/components/measurements/tim/waisttounderbust.svg',
- 'shared/components/measurements/tim/bustpointtounderbust.svg',
- 'shared/components/measurements/tim/crossseam.svg',
- 'shared/components/measurements/tim/underbust.svg',
- 'shared/components/measurements/tim/hpstobust.svg',
- 'shared/components/measurements/tim/ankle.svg',
- 'shared/components/measurements/tim/wrist.svg',
- 'shared/components/measurements/tim/seatback.svg',
- 'shared/components/measurements/tim/waisttoseat.svg',
- 'shared/components/measurements/tim/shouldertoshoulder.svg',
- 'shared/components/measurements/tim/index.mjs',
- 'shared/components/measurements/tim/bustspan.svg',
- 'shared/components/measurements/tim/acrossback.svg',
- 'shared/components/measurements/tim/hipstoupperleg.svg',
- 'shared/components/measurements/tim/waist.svg',
- 'shared/components/measurements/tim/heel.svg',
- 'shared/components/measurements/tim/waistback.svg',
- 'shared/components/measurements/tim/hpstowaistfront.svg',
- 'shared/components/measurements/tim/crotchdepth.svg',
- 'shared/components/measurements/tim/highbustfront.svg',
- 'shared/components/measurements/tim/waisttoupperleg.svg',
- 'shared/components/measurements/tim/crossseamfront.svg',
- 'shared/components/measurements/tim/seat.svg',
- 'shared/components/measurements/tim/waisttohips.svg',
- 'shared/components/measurements/image.mjs',
- 'shared/components/measurements/sarah/head.svg',
- 'shared/components/measurements/sarah/highbust.svg',
- 'shared/components/measurements/sarah/upperleg.svg',
- 'shared/components/measurements/sarah/hpstowaistback.svg',
- 'shared/components/measurements/sarah/chest.svg',
- 'shared/components/measurements/sarah/biceps.svg',
- 'shared/components/measurements/sarah/inseam.svg',
- 'shared/components/measurements/sarah/waisttoknee.svg',
- 'shared/components/measurements/sarah/knee.svg',
- 'shared/components/measurements/sarah/shouldertowrist.svg',
- 'shared/components/measurements/sarah/waisttoarmpit.svg',
- 'shared/components/measurements/sarah/neck.svg',
- 'shared/components/measurements/sarah/shouldertoelbow.svg',
- 'shared/components/measurements/sarah/shoulderslope.svg',
- 'shared/components/measurements/sarah/waisttofloor.svg',
- 'shared/components/measurements/sarah/hips.svg',
- 'shared/components/measurements/sarah/bustfront.svg',
- 'shared/components/measurements/sarah/waisttounderbust.svg',
- 'shared/components/measurements/sarah/bustpointtounderbust.svg',
- 'shared/components/measurements/sarah/crossseam.svg',
- 'shared/components/measurements/sarah/underbust.svg',
- 'shared/components/measurements/sarah/hpstobust.svg',
- 'shared/components/measurements/sarah/ankle.svg',
- 'shared/components/measurements/sarah/wrist.svg',
- 'shared/components/measurements/sarah/seatback.svg',
- 'shared/components/measurements/sarah/waisttoseat.svg',
- 'shared/components/measurements/sarah/shouldertoshoulder.svg',
- 'shared/components/measurements/sarah/index.mjs',
- 'shared/components/measurements/sarah/bustspan.svg',
- 'shared/components/measurements/sarah/acrossback.svg',
- 'shared/components/measurements/sarah/hipstoupperleg.svg',
- 'shared/components/measurements/sarah/waist.svg',
- 'shared/components/measurements/sarah/heel.svg',
- 'shared/components/measurements/sarah/waistback.svg',
- 'shared/components/measurements/sarah/hpstowaistfront.svg',
- 'shared/components/measurements/sarah/crotchdepth.svg',
- 'shared/components/measurements/sarah/highbustfront.svg',
- 'shared/components/measurements/sarah/waisttoupperleg.svg',
- 'shared/components/measurements/sarah/crossseamfront.svg',
- 'shared/components/measurements/sarah/seat.svg',
- 'shared/components/measurements/sarah/waisttohips.svg',
- 'shared/components/gdpr/details.mjs',
- 'shared/components/gdpr/form.mjs',
- 'shared/components/breadcrumbs.mjs',
- 'shared/components/v3-wip.mjs',
- 'shared/components/joost.mjs',
- 'shared/components/modal/theme-picker.mjs',
- 'shared/components/modal/locale-picker.mjs',
- 'shared/components/bookmarks.mjs',
- 'shared/components/tabs.mjs',
- 'shared/components/social/icons.mjs',
- 'shared/components/icons.mjs',
+ 'shared/components/buttons/continue-button.mjs',
+ 'shared/components/copy-to-clipboard.mjs',
+ 'shared/components/patrons/plea.mjs',
+ 'shared/components/patrons/please-subscribe.mjs',
+ 'shared/components/patrons/subscribe.mjs',
'shared/components/spinner.mjs',
- 'shared/components/sponsors/bugsnag.mjs',
- 'shared/components/sponsors/vercel.mjs',
+ 'shared/components/choice-link.mjs',
+ 'shared/components/navigation/sections-menu.mjs',
+ 'shared/components/navigation/primary.mjs',
+ 'shared/components/navigation/sitenav.mjs',
+ 'shared/components/logos/freesewing.mjs',
+ 'shared/components/bookmarks.mjs',
+ 'shared/components/susi/sign-in.mjs',
+ 'shared/components/susi/sign-up.mjs',
+ 'shared/components/robot/index.mjs',
+ 'shared/components/robot/poses.mjs',
+ 'shared/components/code-box.mjs',
+ 'shared/components/collapse.mjs',
'shared/components/sponsors/crowdin.mjs',
+ 'shared/components/sponsors/vercel.mjs',
'shared/components/sponsors/algolia.mjs',
'shared/components/sponsors/index.mjs',
- 'shared/components/curated-sets.mjs',
+ 'shared/components/sponsors/bugsnag.mjs',
+ 'shared/components/gdpr/form.mjs',
+ 'shared/components/gdpr/details.mjs',
+ 'shared/components/social/icons.mjs',
+ 'shared/components/tabs.mjs',
+ 'shared/components/support/support.mjs',
+ 'shared/components/workbench/header.mjs',
'shared/components/workbench/new.mjs',
'shared/components/workbench/pan-zoom-pattern.mjs',
- 'shared/components/workbench/exporting/pdf.mjs',
'shared/components/workbench/exporting/pdf-maker.mjs',
- 'shared/components/workbench/exporting/single-pdf-maker.mjs',
- 'shared/components/workbench/exporting/export-handler.mjs',
'shared/components/workbench/exporting/export-worker.js',
- 'shared/components/workbench/menus/shared/inputs.mjs',
- 'shared/components/workbench/menus/shared/menu-wrapper.mjs',
- 'shared/components/workbench/menus/shared/values.mjs',
- 'shared/components/workbench/menus/shared/index.mjs',
- 'shared/components/workbench/menus/shared/menu-item.mjs',
- 'shared/components/workbench/menus/design-options/inputs.mjs',
+ 'shared/components/workbench/exporting/export-handler.mjs',
+ 'shared/components/workbench/exporting/pdf.mjs',
+ 'shared/components/workbench/exporting/single-pdf-maker.mjs',
'shared/components/workbench/menus/design-options/values.mjs',
'shared/components/workbench/menus/design-options/index.mjs',
+ 'shared/components/workbench/menus/design-options/inputs.mjs',
'shared/components/workbench/menus/mobile-menubar.mjs',
- 'shared/components/workbench/menus/core-settings/inputs.mjs',
- 'shared/components/workbench/menus/core-settings/config.mjs',
'shared/components/workbench/menus/core-settings/values.mjs',
'shared/components/workbench/menus/core-settings/index.mjs',
- 'shared/components/workbench/menus/ui-settings/inputs.mjs',
- 'shared/components/workbench/menus/ui-settings/config.mjs',
+ 'shared/components/workbench/menus/core-settings/inputs.mjs',
+ 'shared/components/workbench/menus/core-settings/config.mjs',
'shared/components/workbench/menus/ui-settings/values.mjs',
'shared/components/workbench/menus/ui-settings/index.mjs',
- 'shared/components/workbench/views/inspect/menu.mjs',
- 'shared/components/workbench/views/inspect/inspector/pattern.mjs',
- 'shared/components/workbench/views/inspect/inspector/path.mjs',
- 'shared/components/workbench/views/inspect/inspector/shared.mjs',
- 'shared/components/workbench/views/inspect/inspector/stack.mjs',
- 'shared/components/workbench/views/inspect/inspector/menu.mjs',
- 'shared/components/workbench/views/inspect/inspector/point.mjs',
- 'shared/components/workbench/views/inspect/index.mjs',
- 'shared/components/workbench/views/pattern-with-menu.mjs',
- 'shared/components/workbench/views/logs/errors.mjs',
- 'shared/components/workbench/views/logs/index.mjs',
- 'shared/components/workbench/views/measies/editor.mjs',
- 'shared/components/workbench/views/measies/index.mjs',
- 'shared/components/workbench/views/flags.mjs',
- 'shared/components/workbench/views/save/index.mjs',
- 'shared/components/workbench/views/exporting/index.mjs',
- 'shared/components/workbench/views/docs/index.mjs',
- 'shared/components/workbench/views/test/options.mjs',
- 'shared/components/workbench/views/test/menu.mjs',
- 'shared/components/workbench/views/test/measurements.mjs',
- 'shared/components/workbench/views/test/index.mjs',
- 'shared/components/workbench/views/time/index.mjs',
+ 'shared/components/workbench/menus/ui-settings/inputs.mjs',
+ 'shared/components/workbench/menus/ui-settings/config.mjs',
+ 'shared/components/workbench/menus/shared/menu-wrapper.mjs',
+ 'shared/components/workbench/menus/shared/menu-item.mjs',
+ 'shared/components/workbench/menus/shared/values.mjs',
+ 'shared/components/workbench/menus/shared/index.mjs',
+ 'shared/components/workbench/menus/shared/inputs.mjs',
+ 'shared/components/workbench/pattern/utils.mjs',
+ 'shared/components/workbench/pattern/pan-zoom-context.mjs',
+ 'shared/components/workbench/pattern/movable/stack.mjs',
+ 'shared/components/workbench/pattern/movable/transform-buttons.mjs',
+ 'shared/components/workbench/pattern/movable/index.mjs',
+ 'shared/components/workbench/views/draft/header.mjs',
'shared/components/workbench/views/draft/menu.mjs',
'shared/components/workbench/views/draft/index.mjs',
- 'shared/components/workbench/views/draft/header.mjs',
+ 'shared/components/workbench/views/inspect/menu.mjs',
+ 'shared/components/workbench/views/inspect/inspector/menu.mjs',
+ 'shared/components/workbench/views/inspect/inspector/stack.mjs',
+ 'shared/components/workbench/views/inspect/inspector/shared.mjs',
+ 'shared/components/workbench/views/inspect/inspector/point.mjs',
+ 'shared/components/workbench/views/inspect/inspector/pattern.mjs',
+ 'shared/components/workbench/views/inspect/inspector/path.mjs',
+ 'shared/components/workbench/views/inspect/index.mjs',
+ 'shared/components/workbench/views/test/menu.mjs',
+ 'shared/components/workbench/views/test/options.mjs',
+ 'shared/components/workbench/views/test/index.mjs',
+ 'shared/components/workbench/views/test/measurements.mjs',
+ 'shared/components/workbench/views/flags.mjs',
+ 'shared/components/workbench/views/docs/index.mjs',
'shared/components/workbench/views/print/menu.mjs',
- 'shared/components/workbench/views/print/settings.mjs',
- 'shared/components/workbench/views/print/config.mjs',
- 'shared/components/workbench/views/print/actions.mjs',
'shared/components/workbench/views/print/index.mjs',
- 'shared/components/workbench/views/cut/menu.mjs',
- 'shared/components/workbench/views/cut/settings.mjs',
- 'shared/components/workbench/views/cut/index.mjs',
- 'shared/components/workbench/views/cut/hooks.mjs',
- 'shared/components/workbench/views/edit/index.mjs',
+ 'shared/components/workbench/views/print/settings.mjs',
+ 'shared/components/workbench/views/print/actions.mjs',
+ 'shared/components/workbench/views/print/config.mjs',
+ 'shared/components/workbench/views/time/index.mjs',
+ 'shared/components/workbench/views/exporting/index.mjs',
'shared/components/workbench/views/edit/settings-validator.mjs',
- 'shared/components/workbench/pattern/utils.mjs',
- 'shared/components/workbench/pattern/movable/transform-buttons.mjs',
- 'shared/components/workbench/pattern/movable/stack.mjs',
- 'shared/components/workbench/pattern/movable/index.mjs',
- 'shared/components/workbench/pattern/pan-zoom-context.mjs',
- 'shared/components/workbench/header.mjs',
- 'shared/components/navigation/sitenav.mjs',
- 'shared/components/navigation/primary.mjs',
- 'shared/components/navigation/sections-menu.mjs',
- 'shared/components/logos/freesewing.mjs',
- 'shared/components/support/support.mjs',
- 'shared/components/header.mjs',
- 'shared/config/cloudflare.mjs',
- 'shared/config/i18n.config.mjs',
+ 'shared/components/workbench/views/edit/index.mjs',
+ 'shared/components/workbench/views/logs/errors.mjs',
+ 'shared/components/workbench/views/logs/index.mjs',
+ 'shared/components/workbench/views/pattern-with-menu.mjs',
+ 'shared/components/workbench/views/cut/menu.mjs',
+ 'shared/components/workbench/views/cut/hooks.mjs',
+ 'shared/components/workbench/views/cut/index.mjs',
+ 'shared/components/workbench/views/cut/settings.mjs',
+ 'shared/components/workbench/views/measies/index.mjs',
+ 'shared/components/workbench/views/measies/editor.mjs',
+ 'shared/components/workbench/views/save/index.mjs',
+ 'shared/components/link.mjs',
+ 'shared/components/curated-sets.mjs',
+ 'shared/components/popout/index.mjs',
+ 'shared/components/inputs.mjs',
+ 'shared/components/account/sets.mjs',
+ 'shared/components/account/shared.mjs',
+ 'shared/components/account/control.mjs',
+ 'shared/components/breadcrumbs.mjs',
+ 'shared/components/modal/theme-picker.mjs',
+ 'shared/components/modal/locale-picker.mjs',
+ 'shared/components/accordion.mjs',
+ 'shared/components/error/view.mjs',
+ 'shared/components/measurements/image.mjs',
+ 'shared/components/measurements/tim/acrossback.svg',
+ 'shared/components/measurements/tim/waisttohips.svg',
+ 'shared/components/measurements/tim/chest.svg',
+ 'shared/components/measurements/tim/crotchdepth.svg',
+ 'shared/components/measurements/tim/shouldertowrist.svg',
+ 'shared/components/measurements/tim/waist.svg',
+ 'shared/components/measurements/tim/waisttounderbust.svg',
+ 'shared/components/measurements/tim/seat.svg',
+ 'shared/components/measurements/tim/highbustfront.svg',
+ 'shared/components/measurements/tim/bustspan.svg',
+ 'shared/components/measurements/tim/crossseamfront.svg',
+ 'shared/components/measurements/tim/shouldertoshoulder.svg',
+ 'shared/components/measurements/tim/shoulderslope.svg',
+ 'shared/components/measurements/tim/knee.svg',
+ 'shared/components/measurements/tim/seatback.svg',
+ 'shared/components/measurements/tim/hipstoupperleg.svg',
+ 'shared/components/measurements/tim/biceps.svg',
+ 'shared/components/measurements/tim/hpstobust.svg',
+ 'shared/components/measurements/tim/bustfront.svg',
+ 'shared/components/measurements/tim/heel.svg',
+ 'shared/components/measurements/tim/waistback.svg',
+ 'shared/components/measurements/tim/waisttoarmpit.svg',
+ 'shared/components/measurements/tim/hpstowaistfront.svg',
+ 'shared/components/measurements/tim/ankle.svg',
+ 'shared/components/measurements/tim/neck.svg',
+ 'shared/components/measurements/tim/hpstowaistback.svg',
+ 'shared/components/measurements/tim/index.mjs',
+ 'shared/components/measurements/tim/hips.svg',
+ 'shared/components/measurements/tim/waisttoupperleg.svg',
+ 'shared/components/measurements/tim/highbust.svg',
+ 'shared/components/measurements/tim/bustpointtounderbust.svg',
+ 'shared/components/measurements/tim/inseam.svg',
+ 'shared/components/measurements/tim/crossseam.svg',
+ 'shared/components/measurements/tim/head.svg',
+ 'shared/components/measurements/tim/waisttoknee.svg',
+ 'shared/components/measurements/tim/underbust.svg',
+ 'shared/components/measurements/tim/waisttofloor.svg',
+ 'shared/components/measurements/tim/waisttoseat.svg',
+ 'shared/components/measurements/tim/wrist.svg',
+ 'shared/components/measurements/tim/shouldertoelbow.svg',
+ 'shared/components/measurements/tim/upperleg.svg',
+ 'shared/components/measurements/sarah/acrossback.svg',
+ 'shared/components/measurements/sarah/waisttohips.svg',
+ 'shared/components/measurements/sarah/chest.svg',
+ 'shared/components/measurements/sarah/crotchdepth.svg',
+ 'shared/components/measurements/sarah/shouldertowrist.svg',
+ 'shared/components/measurements/sarah/waist.svg',
+ 'shared/components/measurements/sarah/waisttounderbust.svg',
+ 'shared/components/measurements/sarah/seat.svg',
+ 'shared/components/measurements/sarah/highbustfront.svg',
+ 'shared/components/measurements/sarah/bustspan.svg',
+ 'shared/components/measurements/sarah/crossseamfront.svg',
+ 'shared/components/measurements/sarah/shouldertoshoulder.svg',
+ 'shared/components/measurements/sarah/shoulderslope.svg',
+ 'shared/components/measurements/sarah/knee.svg',
+ 'shared/components/measurements/sarah/seatback.svg',
+ 'shared/components/measurements/sarah/hipstoupperleg.svg',
+ 'shared/components/measurements/sarah/biceps.svg',
+ 'shared/components/measurements/sarah/hpstobust.svg',
+ 'shared/components/measurements/sarah/bustfront.svg',
+ 'shared/components/measurements/sarah/heel.svg',
+ 'shared/components/measurements/sarah/waistback.svg',
+ 'shared/components/measurements/sarah/waisttoarmpit.svg',
+ 'shared/components/measurements/sarah/hpstowaistfront.svg',
+ 'shared/components/measurements/sarah/ankle.svg',
+ 'shared/components/measurements/sarah/neck.svg',
+ 'shared/components/measurements/sarah/hpstowaistback.svg',
+ 'shared/components/measurements/sarah/index.mjs',
+ 'shared/components/measurements/sarah/hips.svg',
+ 'shared/components/measurements/sarah/waisttoupperleg.svg',
+ 'shared/components/measurements/sarah/highbust.svg',
+ 'shared/components/measurements/sarah/bustpointtounderbust.svg',
+ 'shared/components/measurements/sarah/inseam.svg',
+ 'shared/components/measurements/sarah/crossseam.svg',
+ 'shared/components/measurements/sarah/head.svg',
+ 'shared/components/measurements/sarah/waisttoknee.svg',
+ 'shared/components/measurements/sarah/underbust.svg',
+ 'shared/components/measurements/sarah/waisttofloor.svg',
+ 'shared/components/measurements/sarah/waisttoseat.svg',
+ 'shared/components/measurements/sarah/wrist.svg',
+ 'shared/components/measurements/sarah/shouldertoelbow.svg',
+ 'shared/components/measurements/sarah/upperleg.svg',
+ 'shared/components/control/score.mjs',
+ 'shared/components/control/tip.mjs',
+ 'shared/components/wordmark.mjs',
+ 'shared/components/joost.mjs',
'shared/config/social.mjs',
'shared/config/paypal.mjs',
+ 'shared/config/i18n.config.mjs',
'shared/config/tailwind-force.html',
'shared/config/freesewing.config.mjs',
+ 'shared/config/cloudflare.mjs',
'shared/context/loading-status-context.mjs',
+ 'shared/context/navigation-context.mjs',
'shared/context/modal-context.mjs',
'shared/context/mobile-menubar-context.mjs',
- 'shared/context/navigation-context.mjs',
- 'shared/hooks/use-pattern-settings.mjs',
+ 'shared/hooks/use-view.mjs',
'shared/hooks/use-theme.mjs',
'shared/hooks/use-id.mjs',
'shared/hooks/use-backend.mjs',
- 'shared/hooks/use-view.mjs',
+ 'shared/hooks/use-pattern-settings.mjs',
'shared/hooks/use-account.mjs',
- 'shared/mdx/remark-github-images.mjs',
'shared/mdx/browser-compile.mjs',
- 'shared/plugins/plugin-layout-part.mjs',
+ 'shared/mdx/remark-github-images.mjs',
'shared/plugins/plugin-cut-layout.mjs',
- 'shared/styles/code.css',
+ 'shared/plugins/plugin-layout-part.mjs',
'shared/styles/svg-freesewing-draft.css',
+ 'shared/styles/code.css',
'shared/styles/globals.css',
- 'shared/themes/lgbtq.mjs',
+ 'shared/themes/monochrome.mjs',
'shared/themes/light.mjs',
- 'shared/themes/dark.mjs',
+ 'shared/themes/hax0r.mjs',
'shared/themes/aqua.mjs',
'shared/themes/pastel.mjs',
- 'shared/themes/monochrome.mjs',
- 'shared/themes/hax0r.mjs',
'shared/themes/index.mjs',
- 'shared/prebuild/data/design-measurements.mjs',
- 'shared/prebuild/data/designs.mjs',
+ 'shared/themes/dark.mjs',
+ 'shared/themes/lgbtq.mjs',
'shared/prebuild/data/design-options.mjs',
+ 'shared/prebuild/data/designs.mjs',
+ 'shared/prebuild/data/design-measurements.mjs'
],
- pkgs: [
- 'react-components/src/pattern-xray/path.mjs',
+ 'pkgs': [
'react-components/src/pattern-xray/index.mjs',
'react-components/src/pattern-xray/point.mjs',
- 'react-components/src/index.mjs',
- 'react-components/src/pattern/path.mjs',
- 'react-components/src/pattern/grid.mjs',
- 'react-components/src/pattern/group.mjs',
+ 'react-components/src/pattern-xray/path.mjs',
'react-components/src/pattern/stack.mjs',
- 'react-components/src/pattern/snippet.mjs',
- 'react-components/src/pattern/circle.mjs',
- 'react-components/src/pattern/utils.mjs',
- 'react-components/src/pattern/svg.mjs',
- 'react-components/src/pattern/text.mjs',
- 'react-components/src/pattern/index.mjs',
- 'react-components/src/pattern/part.mjs',
'react-components/src/pattern/defs.mjs',
+ 'react-components/src/pattern/utils.mjs',
+ 'react-components/src/pattern/text.mjs',
+ 'react-components/src/pattern/snippet.mjs',
+ 'react-components/src/pattern/svg.mjs',
+ 'react-components/src/pattern/part.mjs',
+ 'react-components/src/pattern/index.mjs',
+ 'react-components/src/pattern/group.mjs',
'react-components/src/pattern/point.mjs',
- ],
-}
+ 'react-components/src/pattern/grid.mjs',
+ 'react-components/src/pattern/path.mjs',
+ 'react-components/src/pattern/circle.mjs',
+ 'react-components/src/editor/swizzle/components/popout.mjs'
+ ]
+}
\ No newline at end of file
diff --git a/packages/react-components/package.json b/packages/react-components/package.json
index 6fedcadf921..bd3d3304bfb 100644
--- a/packages/react-components/package.json
+++ b/packages/react-components/package.json
@@ -18,17 +18,22 @@
"freesewing"
],
"type": "module",
- "module": "dist/index.mjs",
+ "module": "src/index.mjs",
"exports": {
".": {
"internal": "./src/index.mjs",
- "default": "./dist/index.mjs"
+ "default": "./src/index.mjs"
},
"./pattern": "./src/pattern/index.mjs",
"./xray": "./src/pattern-xray/index.mjs",
"./editor": "./src/editor/index.mjs",
- "./icons": "./src/editor/swizzle/components/icons.mjs"
-
+ "./icons": "./src/editor/swizzle/components/icons.mjs",
+ "./popout": "./src/popout.mjs",
+ "./methods": "./src/editor/swizzle/methods/index.mjs"
+ },
+ "imports": {
+ "#components": "./src/editor/swizzle/components/index.mjs",
+ "#methods": "./src/editor/swizzle/methods/index.mjs"
},
"scripts": {
"build": "node build.mjs",
diff --git a/packages/react-components/src/editor/swizzle/components/icons.mjs b/packages/react-components/src/editor/swizzle/components/icons.mjs
index fc2952d6858..b62c5272b44 100644
--- a/packages/react-components/src/editor/swizzle/components/icons.mjs
+++ b/packages/react-components/src/editor/swizzle/components/icons.mjs
@@ -1,3 +1,4 @@
+import React from 'react'
/*
* Used inside the pattern editor
*/
diff --git a/packages/react-components/src/editor/swizzle/components/index.mjs b/packages/react-components/src/editor/swizzle/components/index.mjs
index 9bf1262b860..f7a6dcdfdc4 100644
--- a/packages/react-components/src/editor/swizzle/components/index.mjs
+++ b/packages/react-components/src/editor/swizzle/components/index.mjs
@@ -434,7 +434,7 @@ const defaultComponents = {
* This method returns a component that can be swizzled
* So either the passed-in component, or the default one
*/
-export const swizzleComponents = (components = {}, Swizzled) => {
+const swizzleComponents = (components = {}, Swizzled) => {
/*
* We need to return all resulting components, swizzled or not
* So we create this object so we can pass that down
@@ -451,3 +451,209 @@ export const swizzleComponents = (components = {}, Swizzled) => {
*/
return all
}
+
+/*
+ * Named exports
+ */
+export {
+ swizzleComponents,
+ // Re-export all components for specific imports
+ Accordion,
+ AuthWrapper,
+ AuthMessageWrapper,
+ BackIcon,
+ ContactSupport,
+ AuthRequired,
+ AccountInactive,
+ AccountDisabled,
+ AccountProhibited,
+ AccountStatusUnknown,
+ AnchorLink,
+ AsideViewMenu,
+ AsideViewMenuIcons,
+ AsideViewMenuButton,
+ AsideViewMenuSpacer,
+ RoleLacking,
+ ConsentLacking,
+ BaseAccordion,
+ BookmarkedSetPicker,
+ ButtonFrame,
+ CardLink,
+ CircleIcon,
+ CoreSetting,
+ CoreSettingsMenu,
+ CuratedMeasurementsSetIcon,
+ CuratedMeasurementsSetLineup,
+ CuratedSetPicker,
+ DesignOption,
+ DesignOptionsMenu,
+ DesignsView,
+ DraftMenu,
+ DraftView,
+ ErrorView,
+ SaveView,
+ Flag,
+ FlagsAccordionTitle,
+ FlagsAccordionEntries,
+ FlagTypeIcon,
+ FormControl,
+ HeaderMenu,
+ HeaderMenuAllViews,
+ HeaderMenuDraftView,
+ HeaderMenuDraftViewDesignOptions,
+ HeaderMenuDraftViewCoreSettings,
+ HeaderMenuDraftViewUiPreferences,
+ HeaderMenuDraftViewFlags,
+ HeaderMenuDraftViewIcons,
+ HeaderMenuButton,
+ HeaderMenuDropdown,
+ HeaderMenuIcon,
+ HeaderMenuIconSpacer,
+ HeaderMenuSaveIcons,
+ HeaderMenuUndoIcons,
+ HtmlSpan,
+ LargeScreenOnly,
+ Link,
+ ListInput,
+ Loading,
+ LoadingStatus,
+ Markdown,
+ MarkdownInput,
+ MeasurementInput,
+ MeasurementsSetCard,
+ MeasurementsView,
+ MeasurementsEditor,
+ MenuIcon,
+ NumberInput,
+ Null,
+ PageLink,
+ Pattern,
+ PatternLayout,
+ Popout,
+ StringInput,
+ SubAccordion,
+ Spinner,
+ SpinnerIcon,
+ Tab,
+ Tabs,
+ TemporaryLoader,
+ ToggleInput,
+ Tooltip,
+ UiPreferencesMenu,
+ UiPreference,
+ UndoStep,
+ UndoStepTimeAgo,
+ UndosView,
+ UserSetPicker,
+ Ux,
+ HeaderMenuViewMenu,
+ ViewPicker,
+ ViewTypeIcon,
+ WebLink,
+ ZoomablePattern,
+ ZoomContextProvider,
+ // icons
+ ApplyIcon,
+ BeakerIcon,
+ BookmarkIcon,
+ BoolNoIcon,
+ BoolYesIcon,
+ CloseIcon,
+ DesignIcon,
+ DetailIcon,
+ DocsIcon,
+ DownIcon,
+ EditIcon,
+ ExpandIcon,
+ ExportIcon,
+ FailureIcon,
+ FlagIcon,
+ FlagNoteIcon,
+ FlagInfoIcon,
+ FlagTipIcon,
+ FlagWarningIcon,
+ FlagErrorIcon,
+ FlagFixmeIcon,
+ FlagExpandIcon,
+ FlagOtionsIcon,
+ GaugeIcon,
+ GroupIcon,
+ HelpIcon,
+ IncludeIcon,
+ KioskIcon,
+ LeftIcon,
+ ListIcon,
+ LockIcon,
+ MarginIcon,
+ MeasurementsIcon,
+ MeasurementsSetIcon,
+ NoIcon,
+ OkIcon,
+ OptionsIcon,
+ PaperlessIcon,
+ PlusIcon,
+ PrintIcon,
+ ResetAllIcon,
+ ResetIcon,
+ RightIcon,
+ RocketIcon,
+ RotateIcon,
+ SaIcon,
+ SaveIcon,
+ SaveAsIcon,
+ ScaleIcon,
+ SettingsIcon,
+ SuccessIcon,
+ TipIcon,
+ TrashIcon,
+ UiIcon,
+ UndoIcon,
+ UnitsIcon,
+ UpIcon,
+ UploadIcon,
+ UxIcon,
+ XrayIcon,
+ ViewDraftIcon,
+ ViewMeasurementsIcon,
+ ViewTestIcon,
+ ViewTimingIcon,
+ ViewPrintLayoutIcon,
+ ViewSaveIcon,
+ ViewExportIcon,
+ ViewEditSettingsIcon,
+ ViewLogsIcon,
+ ViewInspectIcon,
+ ViewDocsIcon,
+ ViewDesignsIcon,
+ ViewViewPickerIcon,
+ ViewUndosIcon,
+ // menus
+ MenuItem,
+ MenuItemGroup,
+ MenuItemTitle,
+ MenuBoolInput,
+ MenuConstantInput,
+ MenuDegInput,
+ MenuEditOption,
+ MenuListInput,
+ MenuListToggle,
+ MenuMmInput,
+ //MenuNumberInput,
+ MenuUxSettingInput,
+ MenuOnlySettingInput,
+ MenuPctInput,
+ MenuSliderInput,
+ MenuBoolValue,
+ MenuConstantOptionValue,
+ MenuCountOptionValue,
+ MenuDegOptionValue,
+ MenuHighlightValue,
+ MenuListOptionValue,
+ MenuListValue,
+ MenuMmOptionValue,
+ MenuMmValue,
+ MenuOnlySettingValue,
+ MenuPctOptionValue,
+ MenuScaleSettingValue,
+ MenuShowValue,
+}
diff --git a/packages/react-components/src/editor/swizzle/components/popout.mjs b/packages/react-components/src/editor/swizzle/components/popout.mjs
index 7bbee39cbd8..9eab3dd7ed7 100644
--- a/packages/react-components/src/editor/swizzle/components/popout.mjs
+++ b/packages/react-components/src/editor/swizzle/components/popout.mjs
@@ -1,5 +1,4 @@
-// __SDEFILE__ - This file is a dependency for the stand-alone environment
-import { useState } from 'react'
+import React, { useState } from 'react'
const colors = {
comment: 'secondary',
@@ -35,8 +34,8 @@ export const Popout = (props) => {
if (hide) return null
let type = 'none'
- for (const t in colors) {
- if (props[t]) type = t
+ for (const c in colors) {
+ if (props[c]) type = c
}
const color = colors[type]
const { className = '' } = props
diff --git a/packages/react-components/src/editor/swizzle/methods/editor.mjs b/packages/react-components/src/editor/swizzle/methods/editor.mjs
index c26134be6d1..ddbd67d3b51 100644
--- a/packages/react-components/src/editor/swizzle/methods/editor.mjs
+++ b/packages/react-components/src/editor/swizzle/methods/editor.mjs
@@ -705,6 +705,10 @@ export function nsMerge(Swizzled, ...args) {
* @return {string} key - The input is returned
*/
export function t(Swizzled, key) {
+ /*
+ * Make sure this works when Swizzled is not passed in
+ */
+ if (typeof Swizzled.components === 'undefined') key = Swizzled
return Array.isArray(key) ? key[0] : key
}
export function settingsValueIsCustom(Swizzled, val, dflt) {
diff --git a/packages/react-components/src/editor/swizzle/methods/index.mjs b/packages/react-components/src/editor/swizzle/methods/index.mjs
index 6ec60661fc0..d3b9ed47f82 100644
--- a/packages/react-components/src/editor/swizzle/methods/index.mjs
+++ b/packages/react-components/src/editor/swizzle/methods/index.mjs
@@ -152,7 +152,7 @@ const defaultMethods = {
* This method returns methods that can be swizzled
* So either the passed-in methods, or the default ones
*/
-export const swizzleMethods = (methods, Swizzled) => {
+const swizzleMethods = (methods, Swizzled) => {
/*
* We need to pass down the resulting methods, swizzled or not
* because some methods rely on other (possibly swizzled) methods.
@@ -172,3 +172,69 @@ export const swizzleMethods = (methods, Swizzled) => {
*/
return all
}
+
+/*
+ * Named exports
+ */
+export {
+ swizzleMethods,
+ // Re-export all methods for specific imports
+ // core-settings.mjs
+ defaultSa,
+ defaultSamm,
+ menuCoreSettingsOnlyHandler,
+ menuCoreSettingsSaboolHandler,
+ menuCoreSettingsSammHandler,
+ menuCoreSettingsStructure,
+ // design-options.mjs
+ designOptionType,
+ findOption,
+ getOptionStructure,
+ menuDesignOptionsStructure,
+ // editor.mjs
+ addUndoStep,
+ cloneObject,
+ cloudImageUrl,
+ draft,
+ flattenFlags,
+ getCoreSettingUndoStepData,
+ getDesignOptionUndoStepData,
+ getUiPreferenceUndoStepData,
+ getUndoStepData,
+ initialEditorState,
+ menuRoundPct,
+ menuValidateNumericValue,
+ menuValueWasChanged,
+ noop,
+ notEmpty,
+ nsMerge,
+ objUpdate,
+ settingsValueIsCustom,
+ settingsValueCustomOrDefault,
+ statePrefixPath,
+ stateUpdateFactory,
+ t,
+ undoableObjUpdate,
+ // formatting.mjs
+ capitalize,
+ formatDesignOptionValue,
+ formatFraction128,
+ formatImperial,
+ formatMm,
+ formatPercentage,
+ round,
+ roundMm,
+ fractionToDecimal,
+ measurementAsMm,
+ measurementAsUnits,
+ shortDate,
+ parseDistanceInput,
+ // measurements.mjs
+ designMeasurements,
+ hasRequiredMeasurements,
+ isDegreeMeasurement,
+ missingMeasurements,
+ structureMeasurementsAsDesign,
+ // ui-preferences.mjs
+ menuUiPreferencesStructure,
+}
diff --git a/packages/react-components/src/index.mjs b/packages/react-components/src/index.mjs
index 008aa8aabd0..bec8beed9fa 100644
--- a/packages/react-components/src/index.mjs
+++ b/packages/react-components/src/index.mjs
@@ -13,6 +13,8 @@ import { Svg } from './pattern/svg.mjs'
import { Text, TextOnPath } from './pattern/text.mjs'
// Pattern Utils
import { getId, getProps, translateStrings, withinPartBounds } from './pattern/utils.mjs'
+// Stand alone components
+import { Popout } from './popout.mjs'
/**
* Translation namespaces used by these components
@@ -44,4 +46,6 @@ export {
withinPartBounds,
// These are not React components but various helpers
ns,
+ // Stand along components
+ Popout,
}
diff --git a/packages/react-components/src/pattern-xray/path.mjs b/packages/react-components/src/pattern-xray/path.mjs
index ae514a42d96..69193310fab 100644
--- a/packages/react-components/src/pattern-xray/path.mjs
+++ b/packages/react-components/src/pattern-xray/path.mjs
@@ -1,4 +1,5 @@
// __SDEFILE__ - This file is a dependency for the stand-alone environment
+import React from 'react'
// Components
import { Path } from '../pattern/path.mjs'
import { getProps } from '../pattern/utils.mjs'
diff --git a/packages/react-components/src/pattern-xray/point.mjs b/packages/react-components/src/pattern-xray/point.mjs
index a16aa52fd45..4d92370c99f 100644
--- a/packages/react-components/src/pattern-xray/point.mjs
+++ b/packages/react-components/src/pattern-xray/point.mjs
@@ -1,4 +1,5 @@
// __SDEFILE__ - This file is a dependency for the stand-alone environment
+import React from 'react'
// Components
import { Point } from '../pattern/point.mjs'
import { withinPartBounds } from '../pattern/utils.mjs'
diff --git a/packages/react-components/src/popout.mjs b/packages/react-components/src/popout.mjs
new file mode 100644
index 00000000000..7417579befb
--- /dev/null
+++ b/packages/react-components/src/popout.mjs
@@ -0,0 +1,7 @@
+import React from 'react'
+import { mergeProps } from './utils.mjs'
+import { Popout as SwizzledPopout } from './editor/swizzle/components/popout.mjs'
+import { CloseIcon } from './editor/swizzle/components/icons.mjs'
+import { t } from '#methods'
+
+export const Popout = (props) =>
diff --git a/packages/react-components/src/utils.mjs b/packages/react-components/src/utils.mjs
new file mode 100644
index 00000000000..0f06f2953ce
--- /dev/null
+++ b/packages/react-components/src/utils.mjs
@@ -0,0 +1,37 @@
+/*
+ * Helper method to save us having to type typeof checks all the time
+ *
+ * @param {mixed} obj - The value to check
+ * @return {bool} result - True of obj is of type object
+ */
+export function isObject (obj) {
+ return (typeof obj === 'object' && !Array.isArray(obj))
+}
+
+/*
+ * Helper method to inject props into a component made for Swizzling
+ *
+ * @param {object} props - The props to merge
+ * @param {object} components - Any swizzled components to add
+ * @param {object} methods - Any swizzled methods to add
+ * @return {object} props - The merged props object
+ */
+export function mergeProps (props, components=false, methods=false) {
+ const Swizzled = isObject(props.Swizzled)
+ ? props.Swizzled
+ : { components: {}, methods: {} }
+
+ if (components) {
+ if (isObject(Swizzled.components)) Swizzled.components = { ...components, ...Swizzled.components }
+ else Swizzled.components = components
+ }
+
+ if (methods) {
+ if (isObject(Swizzled.methods)) Swizzled.methods = { ...methods, ...Swizzled.methods }
+ else Swizzled.methods = methods
+ }
+
+ return { ...props, Swizzled }
+}
+
+
diff --git a/plugins/plugin-annotations/i18n/index.mjs b/plugins/plugin-annotations/i18n/index.mjs
index 36aac928b67..3cb4ad5492b 100644
--- a/plugins/plugin-annotations/i18n/index.mjs
+++ b/plugins/plugin-annotations/i18n/index.mjs
@@ -1,8 +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' }
+import en from './en.json' with { type: 'json' }
+import de from './de.json' with { type: 'json' }
+import es from './es.json' with { type: 'json' }
+import fr from './fr.json' with { type: 'json' }
+import nl from './nl.json' with { type: 'json' }
+import uk from './uk.json' with { type: 'json' }
export const i18n = { en, de, es, fr, nl, uk }
diff --git a/sites/dev/babel.config.js b/sites/dev/babel.config.js
new file mode 100644
index 00000000000..965033e32e8
--- /dev/null
+++ b/sites/dev/babel.config.js
@@ -0,0 +1,4 @@
+module.exports = {
+ presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
+ plugins: ['@babel/plugin-syntax-import-attributes'],
+}
diff --git a/sites/dev/components/design-examples.mjs b/sites/dev/components/design-examples.mjs
deleted file mode 100644
index 0e2287a8d2e..00000000000
--- a/sites/dev/components/design-examples.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export const examples = {}
diff --git a/sites/dev/components/feeds.mjs b/sites/dev/components/feeds.mjs
deleted file mode 100644
index 37d8fbe6ef7..00000000000
--- a/sites/dev/components/feeds.mjs
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Placeholder feeds component that does nothing
- * but allows us to re-use code that expects this
- * to be here
- */
-export const Feeds = () => null
diff --git a/sites/dev/components/header/index.mjs b/sites/dev/components/header/index.mjs
deleted file mode 100644
index 4f5c2edf47a..00000000000
--- a/sites/dev/components/header/index.mjs
+++ /dev/null
@@ -1,138 +0,0 @@
-// Hooks
-import { useContext } from 'react'
-import { useTranslation } from 'next-i18next'
-import { useTheme } from 'shared/hooks/use-theme.mjs'
-// Context
-import { ModalContext } from 'shared/context/modal-context.mjs'
-// Components
-import {
- SearchIcon,
- ThemeIcon,
- MenuIcon,
- CodeIcon,
- DocsIcon,
- FreeSewingIcon,
- HeartIcon,
- PlusIcon,
- RocketIcon,
- TutorialIcon,
- YouTubeIcon,
-} from 'shared/components/icons.mjs'
-import { HeaderWrapper } from 'shared/components/wrappers/header.mjs'
-import { ModalThemePicker, ns as themeNs } from 'shared/components/modal/theme-picker.mjs'
-import { ModalMenu } from 'site/components/navigation/modal-menu.mjs'
-import { NavButton, NavSpacer } from 'shared/components/header.mjs'
-
-export const ns = ['common', 'header', 'sections', ...themeNs]
-
-const NavIcons = ({ setModal, slug }) => {
- const { t } = useTranslation(['header'])
- const iconSize = 'h-6 w-6 lg:h-12 lg:w-12'
- const { spectrum } = useTheme()
-
- return (
- <>
- setModal()}
- label={t('header:menu')}
- color={spectrum[0]}
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- setModal()}
- label={t('header:theme')}
- color={spectrum[8]}
- >
-
-
-
-
-
- >
- )
-}
-
-export const Header = ({
- show = true, // Whether or not to show the header
- slug, // Slug of the current page
-}) => {
- const { setModal } = useContext(ModalContext) || {}
-
- const headerIcons =
-
- return show ? (
-
-
-
- {/* Non-mobile content */}
-
- {headerIcons}
-
-
- {/* Mobile content */}
-
- {headerIcons}
-
-
-
-
- ) : null
-}
diff --git a/sites/dev/components/help-us.mjs b/sites/dev/components/help-us.mjs
deleted file mode 100644
index f87d944af4b..00000000000
--- a/sites/dev/components/help-us.mjs
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Popout } from 'shared/components/popout/index.mjs'
-
-export const HelpUs = ({ slug = '/' }) => (
-
- Click here to learn how you can help us improve this page
-
-
Found a mistake?
- You can{' '}
-
- edit this page on Github
- {' '}
- and help us improve our documentation.
-
-
-)
diff --git a/sites/dev/components/layouts/bare.mjs b/sites/dev/components/layouts/bare.mjs
deleted file mode 100644
index 8e24baf0d36..00000000000
--- a/sites/dev/components/layouts/bare.mjs
+++ /dev/null
@@ -1,3 +0,0 @@
-export const ns = []
-
-export const BareLayout = (props) => props.children
diff --git a/sites/dev/components/layouts/default.mjs b/sites/dev/components/layouts/default.mjs
deleted file mode 100644
index 65b0bedc6cb..00000000000
--- a/sites/dev/components/layouts/default.mjs
+++ /dev/null
@@ -1,4 +0,0 @@
-export const ns = []
-
-// This layout adds nothing
-export const DefaultLayout = ({ children = [] }) => children
diff --git a/sites/dev/components/navigation/modal-menu.mjs b/sites/dev/components/navigation/modal-menu.mjs
deleted file mode 100644
index ef35476939e..00000000000
--- a/sites/dev/components/navigation/modal-menu.mjs
+++ /dev/null
@@ -1,47 +0,0 @@
-// Dependencies
-import { NavigationContext } from 'shared/context/navigation-context.mjs'
-// Hooks
-import { useContext } from 'react'
-// Components
-import { SectionsMenu, ns as sectionsNs } from 'shared/components/navigation/sections-menu.mjs'
-import { ModalWrapper } from 'shared/components/wrappers/modal.mjs'
-import { nsMerge } from 'shared/utils.mjs'
-import { ChoiceLink } from 'shared/components/choice-link.mjs'
-import { NavLinks, Breadcrumbs } from 'shared/components/navigation/sitenav.mjs'
-
-export const ns = nsMerge(sectionsNs)
-
-export const ModalMenu = ({ slug }) => {
- // Grab siteNav from the navigation context
- const { siteNav } = useContext(NavigationContext)
-
- return (
-
-
-
-
-
-
- If you cannot find what you are looking for but you know the key words, try our
- search.
-
-
- The sitemap lists all pages on this website. It can give you a good idea of what you
- can find here.
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/sites/dev/components/navigation/sections-menu.mjs b/sites/dev/components/navigation/sections-menu.mjs
deleted file mode 100644
index 5d909d94d16..00000000000
--- a/sites/dev/components/navigation/sections-menu.mjs
+++ /dev/null
@@ -1,54 +0,0 @@
-import { useContext } from 'react'
-import { NavigationContext } from 'shared/context/navigation-context.mjs'
-import Link from 'next/link'
-import { icons, ns as sectionsNs } from 'shared/components/navigation/primary.mjs'
-import { useTranslation } from 'next-i18next'
-import orderBy from 'lodash.orderby'
-import { colors } from 'shared/components/header.mjs'
-
-export const ns = sectionsNs
-
-const onlySections = (tree) => orderBy(tree, ['t'], ['asc']).filter((entry) => entry.m)
-
-export const SectionsMenu = ({ bOnly = false }) => {
- const { t } = useTranslation(ns)
- const { siteNav } = useContext(NavigationContext)
-
- const output = []
- let i = 1
- const sharedClasses = 'p-0 rounded shadow hover:shadow-lg w-full text-neutral-900'
- for (const page of onlySections(siteNav)) {
- if ((!bOnly && !page.h && !page.b) || (!page.h && bOnly && page.b)) {
- if (page.t !== 'spacer') {
- const item = (
-
-
-)
-
-export const Search = () => {
- return (
-
- }
- />
- {/* Widgets */}
-
-
- )
-}
diff --git a/sites/dev/components/web-of-trust.mjs b/sites/dev/components/web-of-trust.mjs
deleted file mode 100644
index 4139e74fab3..00000000000
--- a/sites/dev/components/web-of-trust.mjs
+++ /dev/null
@@ -1,9514 +0,0 @@
-// Dependencies
-import { trustees, connections, lastUpdate } from 'config/trustees.mjs'
-import { shortDate } from 'shared/utils.mjs'
-// Hooks
-import { useState, useContext } from 'react'
-// Context
-import { ModalContext } from 'shared/context/modal-context.mjs'
-import { PanZoomContext } from 'shared/components/workbench/pattern/pan-zoom-context.mjs'
-// Components
-import { Point } from '@freesewing/core'
-import { ModalWrapper } from 'shared/components/wrappers/modal.mjs'
-import { WebLink, linkClasses } from 'shared/components/link.mjs'
-import { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch'
-import { UserIcon, MapMarkerIcon, LinkIcon } from 'shared/components/icons.mjs'
-
-/**
- * This displays the trustees as a table
- */
-export const WebOfTrustTable = () => {
- const { setModal } = useContext(ModalContext)
-
- return (
-
-
-
-
User
-
Location
-
-
-
- {Object.keys(trustees).map((id) => (
-
-
-
-
-
{trustees[id].in}
-
- ))}
-
-
- )
-}
-
-/**
- * Helper method to draw a connection between two trustees on the map
- *
- * @param {object} from - An objectt with x and y coordinates
- * @param {object} to - An objectt with x and y coordinates
- * @return {string} pathString - The path string to draw the path
- */
-const fromToPath = (from, to) => {
- const p = {}
- const angle = 35
- const shift = 0.5
- p.from = new Point(from.x, from.y)
- p.to = new Point(to.x, to.y)
- p.fromCp = p.from.shiftFractionTowards(p.to, shift).rotate(-1 * angle, p.from)
- p.toCp = p.to.shiftFractionTowards(p.from, shift).rotate(angle, p.to)
-
- return `M ${p.from.x},${p.from.y} C ${p.fromCp.x}, ${p.fromCp.y} ${p.toCp.x}, ${p.toCp.y} ${p.to.x}, ${p.to.y}`
-}
-
-/**
- * This component shows the trustee details, typically loaded in a modal window
- *
- * @param {number} props.id - The id (FreeSewing user id) of the trustee
- */
-const Details = ({ id }) => (
- <>
-
- >
- )
-}
-
-/* eslint-disable */
-/*
- * React version of https://upload.wikimedia.org/wikipedia/commons/b/bc/BlankMap-World-Compact.svg
- */
-const world = (
- <>
-
-
-
-
-
-
-
- Sudan
-
-
- South Sudan
-
-
- Georgia
-
-
- Abkhazia
-
-
-
- South Ossetia
-
-
-
-
- Peru
-
-
- Burkina Faso
-
-
- France
-
-
-
-
-
-
-
-
-
- Guadeloupe
-
-
-
-
-
-
-
- Martinique
-
-
-
- Reunion
-
-
-
- Mayotte
-
-
-
- French Guiana
-
-
-
- Libya
-
-
- Belarus
-
-
- Pakistan
-
-
- Azad Kashmir
-
-
-
- Indonesia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Yemen
-
-
-
-
-
-
- Madagascar
-
-
-
-
-
- Bolivia, Plurinational State of
-
-
-
-
- Serbia
-
-
- Kosovo
-
-
-
-
- Cote d'Ivoire
-
-
- Algeria
-
-
- Switzerland
-
-
- Cameroon
-
-
- North Macedonia
-
-
- Botswana
-
-
- Kenya
-
-
- Jordan
-
-
- Mexico
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- United Arab Emirates
-
-
-
-
- Belize
-
-
-
-
- Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sierra Leone
-
-
-
-
- Mali
-
-
- Congo, Democratic Republic of the
-
-
- Italy
-
-
-
-
-
-
-
- Somalia
-
-
- Somaliland
-
-
-
- Afghanistan
-
-
- Bangladesh
-
-
-
-
-
-
-
-
-
-
-
-
-
- Dominican Republic
-
-
-
-
- Guinea-Bissau
-
-
-
-
-
-
-
-
-
-
- Ghana
-
-
- Austria
-
-
- Sweden
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Turkey
-
-
-
-
-
- Uganda
-
-
- Mozambique
-
-
-
-
-
-
- Japan
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- New Zealand
-
-
-
-
-
-
-
-
-
-
-
- Cuba
-
-
-
-
-
-
-
-
-
-
- Venezuela, Bolivarian Republic of
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Portugal
-
-
-
-
-
-
-
-
-
-
- Colombia
-
-
- Mauritania
-
-
-
-
- Angola
-
-
-
-
- Germany
-
-
-
-
-
-
-
- Thailand
-
-
-
-
-
-
-
-
-
-
-
- Australia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Papua New Guinea
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Iraq
-
-
- Croatia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Greenland
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Niger
-
-
- Denmark
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Latvia
-
-
- Romania
-
-
- Zambia
-
-
- Myanmar
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ethiopia
-
-
- Guatemala
-
-
- Suriname
-
-
- Czech Republic
-
-
- Chad
-
-
- Albania
-
-
- Finland
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Syrian Arab Republic
-
-
- Kyrgyzstan
-
-
- Solomon Islands
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Oman
-
-
-
-
-
- Panama
-
-
-
-
-
-
-
- Argentina
-
-
-
-
-
-
-
- United Kingdom of Great Britain and Northern Ireland
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Costa Rica
-
-
- Paraguay
-
-
- Guinea
-
-
-
-
- Ireland
-
-
-
-
-
- Nigeria
-
-
-
-
-
- Tunisia
-
-
-
-
- Poland
-
-
- Namibia
-
-
- South Africa
-
-
- Egypt
-
-
- Tanzania, United Republic of
-
-
-
-
-
-
- Saudi Arabia
-
-
-
-
-
-
-
- Viet Nam
-
-
-
-
-
-
-
-
-
-
-
-
- Russian Federation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Crimea
-
-
-
- Haiti
-
-
-
-
-
-
- Bosnia and Herzegovina
-
-
- India
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- China
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hong Kong
-
-
-
-
-
-
-
- Macao
-
-
-
- Taiwan
-
-
-
-
-
- Canada
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- El Salvador
-
-
- Guyana
-
-
- Belgium
-
-
- Equatorial Guinea
-
-
-
-
- Lesotho
-
-
- Bulgaria
-
-
- Burundi
-
-
- Djibouti
-
-
- Azerbaijan
-
-
-
-
-
- Nagorno-Karabakh
-
-
-
-
- Iran, Islamic Republic of
-
-
-
-
-
-
- Malaysia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Philippines
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Uruguay
-
-
- Congo
-
-
- Montenegro
-
-
-
- Estonia
-
-
-
-
-
-
-
- Rwanda
-
-
- Armenia
-
-
- Senegal
-
-
- Togo
-
-
- Spain
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Gabon
-
-
-
-
- Hungary
-
-
- Malawi
-
-
- Tajikistan
-
-
- Cambodia
-
-
-
-
-
-
- Korea, Republic of
-
-
-
-
-
-
-
-
-
-
-
- Honduras
-
-
-
-
- Iceland
-
-
- Nicaragua
-
-
- Chile
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Morocco
-
-
-
- Western Sahara
-
-
- Sahrawi Arab Democratic Republic (Free Zone)
-
-
-
-
- Liberia
-
-
- Netherlands
-
-
-
-
-
-
-
-
-
-
-
- Bonaire, Sint Eustatius and Saba
-
-
-
-
- Central African Republic
-
-
- Slovakia
-
-
- Lithuania
-
-
- Zimbabwe
-
-
- Sri Lanka
-
-
-
-
-
- Israel
-
-
-
-
- Gaza Strip (State of Palestine)
-
-
- West Bank (State of Palestine)
-
-
-
-
-
-
- Lao People's Democratic Republic
-
-
- Korea, Democratic People's Republic of
-
-
- Greece
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Turkmenistan
-
-
- Ecuador
-
-
-
-
-
-
-
-
-
-
-
-
- Benin
-
-
- Slovenia
-
-
- Norway
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Moldova, Republic of
-
-
- Transnistria
-
-
-
-
- Ukraine
-
-
- Donetsk People's Republic
-
-
-
- Luhansk People's Republic
-
-
-
-
- Lebanon
-
-
-
- Nepal
-
-
- Eritrea
-
-
-
-
- United States of America
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kazakhstan
-
-
-
-
- French Southern Territories
-
-
-
- Eswatini
-
-
-
- Uzbekistan
-
-
- Mongolia
-
-
- Bhutan
-
-
- New Caledonia
-
-
-
-
-
-
-
-
-
-
- Fiji
-
-
-
-
-
-
-
-
-
-
-
-
- Kuwait
-
-
-
-
-
-
- Timor-Leste
-
-
-
-
-
-
- Bahamas
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Vanuatu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Falkland Islands (Malvinas)
-
-
-
-
-
-
-
-
-
-
-
-
- South Georgia and the South Sandwich Islands
-
-
-
-
-
- Gambia, Republic of The
-
-
-
- Qatar
-
-
-
- Jamaica
-
-
-
- Cyprus
-
-
-
-
- Northern Cyprus
-
-
-
-
- Puerto Rico
-
-
-
- Brunei Darussalam
-
-
-
-
-
-
- Trinidad and Tobago
-
-
-
-
-
-
- Cabo Verde
-
-
-
-
-
-
-
-
-
-
-
-
- French Polynesia
-
-
-
-
-
-
-
-
-
-
-
-
- Samoa
-
-
-
-
-
-
- Luxembourg
-
-
-
- Comoros
-
-
-
-
-
-
-
- Mauritius
-
-
-
- Faroe Islands
-
-
-
-
-
-
-
-
-
-
- Sao Tome and Principe
-
-
-
-
-
-
- Virgin Islands, U.S.
-
-
-
-
-
-
- Curacao
-
-
-
- Sint Maarten (Dutch Part)
-
-
-
- Dominica
-
-
-
- Tonga
-
-
-
-
-
-
- Kiribati
-
-
-
-
-
-
- Micronesia, Federated States of
-
-
-
- Bahrain
-
-
-
- Andorra
-
-
-
- Northern Mariana Islands
-
-
-
- Palau
-
-
-
- Seychelles
-
-
-
- Antigua and Barbuda
-
-
-
-
-
-
- Barbados
-
-
-
- Turks and Caicos Islands
-
-
-
-
-
-
-
- Saint Vincent and the Grenadines
-
-
-
- Saint Lucia
-
-
-
- Grenada
-
-
-
- Malta
-
-
-
- Maldives
-
-
-
- Cayman Islands
-
-
-
- Saint Kitts and Nevis
-
-
-
-
-
-
- Montserrat
-
-
-
- Saint Barthelemy
-
-
-
- Niue
-
-
-
- Saint Pierre and Miquelon
-
-
-
- Cook Islands
-
-
-
-
-
-
- Wallis and Futuna
-
-
-
- American Samoa
-
-
-
- Marshall Islands
-
-
-
- Aruba
-
-
-
- Liechtenstein
-
-
-
- Virgin Islands, British
-
-
-
-
-
-
- Saint Helena, Ascension and Tristan Da Cunha
-
-
-
- Jersey
-
-
-
- Anguilla
-
-
-
- Saint Martin (French Part)
-
-
-
- Guernsey
-
-
-
- San Marino
-
-
-
- Bermuda
-
-
-
- Tuvalu
-
-
-
- Nauru
-
-
-
- Gibraltar
-
-
-
- Pitcairn
-
-
-
- Monaco
-
-
-
- Holy See (Vatican City State)
-
-
-
- Isle of Man
-
-
-
- Guam
-
-
-
- Singapore
-
-
-
- Norfolk Island
-
-
-
- Tokelau
-
-
- >
-)
-/* eslint-enable */
diff --git a/sites/dev/docs/guides/best-practices/readme.mdx b/sites/dev/docs/guides/best-practices/readme.mdx
new file mode 100644
index 00000000000..e9f52d1ff32
--- /dev/null
+++ b/sites/dev/docs/guides/best-practices/readme.mdx
@@ -0,0 +1,193 @@
+---
+title: Pattern design best practices
+---
+
+Here is a list of best practices when designing patterns:
+
+## Re-use measurements
+
+When designing patterns, re-use the measurements that are already in use as much as possible.
+Nobody wins when every pattern requires its own set of measurements, or names
+certain measurements differently.
+
+:::tip
+
+###### See our measurements page for standard measurement names
+
+The [measurements reference page](/reference/measurements/)
+contains all our standard measurement names.
+
+:::
+
+## Re-use options
+
+The same arguments for re-using measurements are also (somewhat) true for options.
+
+While your pattern may require some very specific
+options, there's probably a bunch that are similar to other patterns. Re-use those names.
+
+As in, `bicepsEase` exists. So don't go creating an `upperArmEase` option.
+
+## Re-use CSS classes
+
+While you can style your pattern however you want, try to re-use the
+[CSS class names](/reference/css) that
+are in use in our default `@freesewing/plugin-theme` plugin.
+
+Doing so will ensure consistent styling for patterns.
+
+## Respect draft settings
+
+Apart from the pattern options that you configure for your pattern,
+all FreeSewing patterns have a set of [draft settings](/reference/settings) that can be tweaked
+by the user.
+
+While many of these will automatically be handled by FreeSewing, there are some
+that you will need to take into account while developing your pattern. They are:
+
+### Complete
+
+The [`complete`](/reference/settings/complete) setting is a boolean that is either true or false.
+
+Its goal is to determine whether we should draft a _complete_ pattern which
+includes elements such as seam allowance lines, labels, and markings for
+buttons and notches,
+or if the pattern should include the part outlines only.
+
+It is your job when developing your pattern to ensure that the pattern
+checks the `complete` setting and includes or omits the appropriate elements
+based on the setting's value.
+
+### Paperless
+
+The [`paperless`](/reference/settings/paperless) setting is a boolean that is either true or false.
+
+A _paperless_ pattern is a pattern that has extra dimension markings so
+users can trace or transfer the pattern onto fabric or paper without having
+the need to print it.
+
+It is your job when developing your pattern to ensure that the pattern
+checks the `paperless` setting and includes or omits the dimensions
+based on the setting's value.
+
+### Seam allowance
+
+The [`sa`](/reference/settings/sa) setting is a number that controls the seam allowance width.
+
+Unless `sa` is zero, patterns are drafted with seam allowance lines included.
+
+It is your job when developing your pattern to ensure that the pattern
+checks the `sa` setting and includes or omits the seam allowance lines
+based on the setting's value.
+
+:::tip
+
+##### Use a multiple of `sa` for your hem allowance
+
+Resist the temptation to use an absolute value for any seam allowance,
+including at the hem.
+
+Instead, always use a multiple of the `sa` value.
+This will help to ensure that the seam allowances will scale to appropriate
+values when the pattern is scaled up or down to giant or doll sizes.
+
+:::
+
+## Use percentage options where possible
+
+When designing patterns, you should refrain from using absolute values.
+
+That 6 cm ease you add might be fine for all scenarios you tested.
+But, then somebody comes around who is twice your size or who is making clothes for a doll,
+and things will go off the rails.
+
+Don't be tempted to add absolute values to your patterns, as they don't scale.
+Instead, embrace percentages as options.
+By using values that are percentages of measurements, the values will scale
+and continue to work as the measurements scale up or down.
+
+:::tip
+
+##### Use the doll and giant tests
+
+To check how well your pattern scales, you can
+use the _doll_ and _giant_ tests by sampling the pattern for 3 measurements sets:
+
+1. A set of measurements from an average person (the person)
+2. A set of measurements 1/10th of an average person (the doll)
+3. A set of measurements 3 times that of an average person (the giant)
+
+A well-designed pattern will scale a factor 10 down or 3 up and still hold its shape.
+If your pattern makes assumptions about size, these tests will show that.
+
+FreeSewing's development environment provides these tests out of the box,
+so you can see their results at the click of a button.
+
+:::
+
+## Use translation keys, not text
+
+Don't insert literal text in your patterns. Instead, insert a key that can then be translated.
+
+For example, if you want to put "_Finish with bias tape_" on your pattern, don't be
+tempted to do this:
+
+```js
+path.seam.attr("data-text", "Finish with bias tape");
+```
+
+That (English) string is now hard-coded in your pattern. As FreeSewing supports
+translation out of the box, it would be a real shame not to make use of it.
+
+Instead, insert a key to identify the string:
+
+```js
+path.seam.attr("data-text", "finishWithBiasTape");
+```
+
+This way, different strings for different languages can be associated with
+the key, allowing translated text to be used.
+
+You can find and browse the translations and available translation keys for each design in the design's
+[i18n folder on GitHub][1].
+
+[1]: https://github.com/freesewing/freesewing/tree/develop/designs/aaron/i18n
+
+## Construct paths counter-clockwise
+
+Construct your paths _counter-clockwise_ (anti-clockwise). You have to pick a direction anyway, and going
+counter-clockwise is a bit of a convention.
+
+This applies both to naming points (specifically the control points of curves)
+and the order in which you define your points.
+
+Obviously, the order in which you add points to your code needs to take a backseat
+to the logic of your code. But typically what you're doing is constructing an outline
+of (a part of) a garment.
+
+So pick a point, and make your way around counter-clockwise.
+
+When naming control points for curves, re-use the name of the point they are attached to
+and add `Cp1` to the control point before and `Cp2` to the control point after the point if,
+once again, you follow your path counter-clockwise.
+
+For example:
+
+```js
+part.paths.seam = new Path()
+ .move(points.hemCenter)
+ .line(points.hemSide)
+ .line(points.waistSide)
+ .curve(points.waistSideCp2, points.armholeCp1, points.armhole)
+```
+
+:::tip
+
+##### This convention helps with `Path.offset()` too
+
+Constructing a path counter-clockwise will also ensure that the path offset goes outwards
+rather than inwards.
+
+:::
+
+
diff --git a/sites/dev/docs/guides/code-of-conduct/readme.mdx b/sites/dev/docs/guides/code-of-conduct/readme.mdx
new file mode 100644
index 00000000000..9df8732b9ea
--- /dev/null
+++ b/sites/dev/docs/guides/code-of-conduct/readme.mdx
@@ -0,0 +1,155 @@
+---
+title: Code of Conduct
+sidebar_position: 20
+---
+
+All FreeSewing contributors must respect and uphold our Code of Conduct:
+
+:::note
+
+##### Attribution
+
+This Code of Conduct is an almost verbatim copy of the [Contributor Covenant][homepage], version 2.0,
+available at [http://contributor-covenant.org/version/2/0][version]
+
+[homepage]: http://contributor-covenant.org
+
+[version]: http://contributor-covenant.org/version/2/0/
+
+:::
+
+## Our pledge
+
+We as members, contributors, and leaders of the FreeSewing community pledge
+to make participation in our community a harassment-free experience for everyone.
+
+Everyone, regardless of age, body size, visible or invisible disability,
+ethnicity, sex characteristics, gender identity and expression, level of experience,
+education, socio-economic status, nationality, personal appearance, race,
+religion, or sexual identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our standards
+
+Examples of behavior that contributes to a positive environment for our community include:
+
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
+- Focusing on what is best not just for us as individuals, but for the overall community
+
+Examples of unacceptable behavior include:
+
+- The use of sexualized language or imagery, and sexual attention or advances of any kind
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others’ private information, such as a physical or email address, without their explicit permission
+- Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Enforcement responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards
+of acceptable behavior and will take appropriate and fair corrective action
+in response to any behavior that they deem inappropriate, threatening,
+offensive, or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, and will communicate reasons
+for moderation decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all FreeSewing community spaces and also applies
+when an individual is officially representing the FreeSewing community in public spaces.
+
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed representative
+at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior
+may be reported to the community leaders responsible for enforcement:
+
+- Joost De Cock (joost@joost.at)
+- Sorcha Ní Dhubhghaill (nidhubhs@gmail.com)
+
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and
+security of the reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines
+in determining the consequences for any action they deem
+in violation of FreeSewing's Code of Conduct:
+
+### Correction
+
+##### Community Impact
+
+Use of inappropriate language or other behavior
+deemed unprofessional or unwelcome in the community.
+
+##### Consequence
+
+A private, written warning from community leaders,
+providing clarity around the nature of the violation and an
+explanation of why the behavior was inappropriate.
+
+A public apology may be requested.
+
+### Warning
+
+##### Community Impact
+
+A violation through a single incident or series of actions.
+
+##### Consequence
+
+A warning with consequences for continued behavior.
+
+No interaction with the people involved, including unsolicited
+interaction with those enforcing the Code of Conduct, for a
+specified period of time. This includes avoiding interactions
+in community spaces as well as external channels like social
+media.
+
+Violating these terms may lead to a temporary or permanent ban.
+
+### Temporary ban
+
+##### Community Impact
+
+A serious violation of community standards,
+including sustained inappropriate behavior.
+
+##### Consequence
+
+A temporary ban from any sort of interaction or
+public communication with the community for a specified period
+of time.
+
+No public or private interaction with the people
+involved, including unsolicited interaction with those enforcing
+the Code of Conduct, is allowed during this period.
+
+Violating these terms may lead to a permanent ban.
+
+### Permanent ban
+
+##### Community Impact
+
+Demonstrating a pattern of violation of
+community standards, including sustained inappropriate behavior,
+harassment of an individual, or aggression toward or
+disparagement of classes of individuals.
+
+##### Consequence
+
+A permanent ban from any sort of public interaction within the community.
diff --git a/markdown/dev/guides/designs/parts/en.md b/sites/dev/docs/guides/designs/parts/readme.mdx
similarity index 99%
rename from markdown/dev/guides/designs/parts/en.md
rename to sites/dev/docs/guides/designs/parts/readme.mdx
index 4f07a553dd9..f0317c843d6 100644
--- a/markdown/dev/guides/designs/parts/en.md
+++ b/sites/dev/docs/guides/designs/parts/readme.mdx
@@ -1,6 +1,6 @@
---
title: Parts
-order: 120
+sidebar_position: 120
---
A pattern is a container for a bunch of parts. And parts are in turn a
diff --git a/markdown/dev/guides/designs/paths/en.md b/sites/dev/docs/guides/designs/paths/readme.mdx
similarity index 98%
rename from markdown/dev/guides/designs/paths/en.md
rename to sites/dev/docs/guides/designs/paths/readme.mdx
index ea67d1abaf2..d157cc63d32 100644
--- a/markdown/dev/guides/designs/paths/en.md
+++ b/sites/dev/docs/guides/designs/paths/readme.mdx
@@ -1,6 +1,6 @@
---
title: Paths
-order: 40
+sidebar_position: 40
---
Paths are the lines and curves that make up your pattern.
@@ -10,7 +10,7 @@ FreeSewing supports the following types of drawing operations:
- The **move** operation moves our virtual pen but does not draw anything.
- The **line** operation draws a straight line
-- The **curve** operation draws a [Bézier curve](/guides/prerequisites/bezier-curves)
+- The **curve** operation draws a [Bézier curve](/guides/prerequisites/#bezier-curves)
- The **close** operation closes the path
To crucial thing to keep in mind is that, with the exception of the **move** operation,
@@ -23,11 +23,11 @@ currently is to said endpoint.
Because all but the **move** drawing operations are relative to their operation preceding it,
**all Paths must start with a move operation**.
-
+:::note
Understanding that each drawing operation builds upon the next one is an important insight.
-
+:::
```mjs
@@ -108,7 +108,7 @@ Understanding that each drawing operation builds upon the next one is an importa
```
-
+:::tip
Our example image (which, if you hadn't realized was created with FreeSewing)
has a lot of paths in it.
@@ -117,6 +117,6 @@ containing a hidden line.
Click the **X-Ray** tab to reveal some of the lines in the paths.
-
+:::
diff --git a/markdown/dev/guides/designs/pattern/en.md b/sites/dev/docs/guides/designs/pattern/readme.mdx
similarity index 96%
rename from markdown/dev/guides/designs/pattern/en.md
rename to sites/dev/docs/guides/designs/pattern/readme.mdx
index 50b3fc051b0..25914ceae2e 100644
--- a/markdown/dev/guides/designs/pattern/en.md
+++ b/sites/dev/docs/guides/designs/pattern/readme.mdx
@@ -1,6 +1,6 @@
---
title: Pattern
-order: 80
+sidebar_position: 80
---
Last but not least, we've arrived at the level of the pattern itself.
diff --git a/markdown/dev/guides/designs/points/en.md b/sites/dev/docs/guides/designs/points/readme.mdx
similarity index 96%
rename from markdown/dev/guides/designs/points/en.md
rename to sites/dev/docs/guides/designs/points/readme.mdx
index 767d33fba68..e2e8c384083 100644
--- a/markdown/dev/guides/designs/points/en.md
+++ b/sites/dev/docs/guides/designs/points/readme.mdx
@@ -1,6 +1,6 @@
---
title: Points
-order: 30
+sidebar_position: 30
---
Developing a pattern with FreeSewing is similar to doing it on paper.
@@ -17,13 +17,13 @@ Each point must have:
Together, these coordinates determine the location of the point in the 2-dimensional plane we're drawing on.
-
+:::note
Points are unlikely to confuse you. The only gotcha is [the
-coordinate system](/guides/prerequisites/coordinate-system/) which has a Y-axis that is inverted to what you
+coordinate system](/guides/prerequisites#coordinate-system) which has a Y-axis that is inverted to what you
may intuitively expect.
-
+:::
```mjs
@@ -104,13 +104,13 @@ may intuitively expect.
```
-
+:::tip
Our example image (which, if you hadn't realized was created with FreeSewing) has a lot of
points in it. The corners of the boxes, the location where the text goes, and so on.
Click the **X-Ray** tab to reveal them.
-
+:::
diff --git a/markdown/dev/guides/designs/en.md b/sites/dev/docs/guides/designs/readme.mdx
similarity index 98%
rename from markdown/dev/guides/designs/en.md
rename to sites/dev/docs/guides/designs/readme.mdx
index b6f63991ffa..ca64c2b2980 100644
--- a/markdown/dev/guides/designs/en.md
+++ b/sites/dev/docs/guides/designs/readme.mdx
@@ -1,5 +1,6 @@
---
title: Design guide
+sidebar_position: 30
---
Hi there and welcome to this guide that explains how FreeSewing designs work.
@@ -195,7 +196,7 @@ If we look at our image through squinted eyes, we can identify three areas:
- The[ **Render stage**](#rendering-your-pattern) on the right
- The[ **Pattern**](#the-pattern) in the center
-
+:::note
The left and right parts are all about how to integrate FreeSewing in your _frontend_.
In other words, how you'll plug it into your website, or online store, or a mobile
@@ -204,12 +205,12 @@ application.
We'll briefly cover those areas in this page. But a deep-dive into those topics
is outside the scope of this guide.
-
+:::
## The settings
On the left, we have the **settings** box. It represents the
-[settings](/reference/settings) that are provided by the user.
+[settings](/reference/settings) that are provided by the user.
Most of the settings are the same for all designs generated with FreeSewing as they are provided by the core library.
@@ -219,11 +220,11 @@ and [`options`](/reference/settings/options) keys as they are defined by the pat
In other words, different patterns will required different measurements and provide different options.
But all patterns will allow users to set the [`units`](/reference/settings/units) (for example).
-
+:::tip
Settings are provided by passing them to the [Pattern constructor](/reference/api/pattern)
-
+:::
-
+:::note
##### Multiset support
Since version 3 of FreeSewing, you can pass multiple sets of settings to `Pattern.draft()`.
@@ -231,7 +232,7 @@ We call this _multset support_.
In 99% of the cases, you will only have a single set of settings, and you can mostly forget about this feature.
It is typically used to compare different drafts or to draft for different sets of measurements (for example).
-
+:::
## Rendering your pattern
@@ -253,9 +254,9 @@ If you'd like more fine-grained control over the output, you can use your own re
To do so, call [`Pattern.getRenderProps()`](/reference/api/pattern/getrenderprops)
which will return all the data you need to render your pattern in the way you prefer.
-
+:::note
This is what we use on these documentation pages to render with React
-
+:::
## The pattern
diff --git a/markdown/dev/guides/designs/sets/en.md b/sites/dev/docs/guides/designs/sets/readme.mdx
similarity index 98%
rename from markdown/dev/guides/designs/sets/en.md
rename to sites/dev/docs/guides/designs/sets/readme.mdx
index 31aaa65c509..800695a32f1 100644
--- a/markdown/dev/guides/designs/sets/en.md
+++ b/sites/dev/docs/guides/designs/sets/readme.mdx
@@ -1,9 +1,9 @@
---
title: Sets
-order: 100
+sidebar_position: 100
---
-When we refer to a _set_ we mean a _set of settings_.
+When we refer to a _set_ we mean a _set of settings_.
In the vast majority of cases, there is only one set of settings. So we just
refer to them as _the settings_. But FreeSewing supports instantiating a
pattern with multiple sets of settings. We refer to this as **multiset
@@ -19,15 +19,15 @@ Here's a simple example:
```js
-({
- Point,
- points,
- Path,
- paths,
- Snippet,
- snippets,
- measurements,
- part
+({
+ Point,
+ points,
+ Path,
+ paths,
+ Snippet,
+ snippets,
+ measurements,
+ part
}) => {
const size = measurements.head
diff --git a/markdown/dev/guides/designs/snippets/en.md b/sites/dev/docs/guides/designs/snippets/readme.mdx
similarity index 99%
rename from markdown/dev/guides/designs/snippets/en.md
rename to sites/dev/docs/guides/designs/snippets/readme.mdx
index d5726afb5d5..aa22d6f3455 100644
--- a/markdown/dev/guides/designs/snippets/en.md
+++ b/sites/dev/docs/guides/designs/snippets/readme.mdx
@@ -1,6 +1,6 @@
---
title: Snippets
-order: 50
+sidebar_position: 50
---
Snippets are little embellishments you can use and re-use on your pattern.
diff --git a/markdown/dev/guides/designs/stacks/en.md b/sites/dev/docs/guides/designs/stacks/readme.mdx
similarity index 94%
rename from markdown/dev/guides/designs/stacks/en.md
rename to sites/dev/docs/guides/designs/stacks/readme.mdx
index 7b37d3477be..fe1cb62b3dd 100644
--- a/markdown/dev/guides/designs/stacks/en.md
+++ b/sites/dev/docs/guides/designs/stacks/readme.mdx
@@ -1,6 +1,6 @@
---
title: Stacks
-order: 110
+sidebar_position: 110
---
[Stacks](/reference/api/stack) come into play when laying out a pattern.
@@ -50,20 +50,22 @@ of each other.
You can stack parts from the same set, or from different sets.
-Include code example
+:::note FIXME
+Include code example
+:::
-
+:::note
In the vast majority of cases, stacks will be handled for you by the
core library (like in the sampling example above).
By default, parts are added to a stack with the same name as the part,
so you only need to specify a stack if you want a different behavior.
-
+:::
-
+:::note RELATED
Please see [Assigning parts to stacks](/reference/api/part/config/stack)
for information about how to use stacks.
-
+:::
diff --git a/markdown/dev/guides/designs/store/en.md b/sites/dev/docs/guides/designs/store/readme.mdx
similarity index 97%
rename from markdown/dev/guides/designs/store/en.md
rename to sites/dev/docs/guides/designs/store/readme.mdx
index 39cf133a28c..df7627d6ed7 100644
--- a/markdown/dev/guides/designs/store/en.md
+++ b/sites/dev/docs/guides/designs/store/readme.mdx
@@ -1,6 +1,6 @@
---
title: Store
-order: 60
+sidebar_position: 60
---
The store in a FreeSewing pattern provides shared key-value storage.
@@ -22,13 +22,13 @@ other data in the early stages of the pattern lifecycle.
```js
(props) => {
-
- const box = ({
- getId,
- points,
- Point,
- paths,
- Path,
+
+ const box = ({
+ getId,
+ points,
+ Point,
+ paths,
+ Path,
}, center, text, w=40, h=10, classes="") => {
paths[getId()] = new Path()
.move(center.translate(w/-2,h/-2))
diff --git a/markdown/dev/guides/faq/is-copying-ok/en.md b/sites/dev/docs/guides/faq/is-copying-ok/readme.mdx
similarity index 96%
rename from markdown/dev/guides/faq/is-copying-ok/en.md
rename to sites/dev/docs/guides/faq/is-copying-ok/readme.mdx
index ffb9e8e3799..0b56bb1a27e 100644
--- a/markdown/dev/guides/faq/is-copying-ok/en.md
+++ b/sites/dev/docs/guides/faq/is-copying-ok/readme.mdx
@@ -20,7 +20,7 @@ contributing to FreeSewing, here are some practical examples:
## Do you accept contributions that are a copy of a commercial pattern?
-Absolutely not.
+Absolutely not.
Copying a commercial pattern is obviously a dick move, and we won't accept any
contribution if we know it was ripped from a commercial pattern.
@@ -32,7 +32,7 @@ taken down a notch: It doesn't matter. Not cool. Don't do this.
## Do you accept contributions that are a copy of an existing garment?
-Yes.
+Yes.
Do you own something you really love or saw something on the runway that has
you swooning? Go ahead and (try to) replicate that look in a pattern you design
@@ -41,13 +41,13 @@ yourself. It's fair game; it's how the fashion industry operates.
One could argue that it is probably impossible to come up with a design that is
not -- to some extent -- influenced by things we've seen before.
-
+:::note
### Don't pretend trademarks don't exist
This should go without saying, but this does not mean you can put "*Gucci*" (or
whatever) on your design.
-
+:::
## Do you accept contributions that are based on instructions in a book?
@@ -76,5 +76,5 @@ Examples would be:
Coffin](https://www.amazon.com/Shirtmaking-Developing-Skills-Fine-Sewing-ebook/dp/B00243GMOO)
(who was a friend of FreeSewing and is sorely missed 💔 )
- [Patternmaking for Menswear by Gareth
- Kershaw](https://www.laurenceking.com/products/pattern-cutting-for-menswear) (probably
- the best teacher out there)
+ Kershaw](https://www.laurenceking.com/products/pattern-cutting-for-menswear) (another
+ good resource)
diff --git a/markdown/dev/guides/faq/en.md b/sites/dev/docs/guides/faq/readme.mdx
similarity index 52%
rename from markdown/dev/guides/faq/en.md
rename to sites/dev/docs/guides/faq/readme.mdx
index 4fe5a90df8e..77d16be00ea 100644
--- a/markdown/dev/guides/faq/en.md
+++ b/sites/dev/docs/guides/faq/readme.mdx
@@ -1,5 +1,7 @@
---
title: Frequently Asked Questions (FAQ)
+sidebar_position: 40
+sidebar_label: Frequently Asked Questions
---
diff --git a/sites/dev/docs/guides/plugins/readme.mdx b/sites/dev/docs/guides/plugins/readme.mdx
new file mode 100644
index 00000000000..715e92d0722
--- /dev/null
+++ b/sites/dev/docs/guides/plugins/readme.mdx
@@ -0,0 +1,201 @@
+---
+title: Plugin guide
+---
+
+Plugins allow you to extend FreeSewing with new features and functionality.
+A FreeSewing plugin can extend FreeSewing in 3 different ways:
+
+- It can [provide macros](#macro-methods), which are a way to automate a number of steps into a
+ single command.
+- It can [hook into the pattern](#lifecycle-hook-methods), which allows you to manipulate the pattern or
+ interact with it at various stages of it's lifecycle.
+- It can [provide store methods](#store-methods), which allows you to add new ways to handle data
+ in the pattern, including providing a custom logger.
+
+We have [a list of plugins](/reference/plugins/) that we maintain, but
+if you can't find what you're looking for, you can write your own plugin.
+
+If you plan on doing that or if you would like to understand how plugins work,
+this guide is for you.
+
+## Plugin structure
+
+A FreeSewing plugin is a plain object with the following structure:
+
+```mjs
+Object plugin = {
+ String name,
+ String version,
+ Object hooks,
+ Object macros,
+ Array store,
+}
+```
+
+A plugin **must** have the `name` and `version` properties.
+The other properties are optional, and they map to the three different functionalities macros can provide:
+
+- [`hooks`](#lifecycle-hook-methods): Holds an object with lifecycle hooks the plugin wants to hook into
+- [`macros`](#macro-methods): Holds and object with macros the plugin provides
+- [`store`](#store-methods): Holds and Array with store methods the plugin provides.
+
+Click on the links above for more details on the structure of these properties.
+
+## Lifecycle hook methods
+
+FreeSewing plugins can provide hooks, which is a way to hook into the pattern's
+lifecycle.
+
+### Signature
+
+To provide one or more hooks, your plugin should have a `hooks` property that
+is an object where the keys are the lifecycle hook name and the value holds a
+method. When the lifecycle hook is triggered, your method will be called.
+
+```mjs
+const myPlugin = {
+ name: 'example',
+ version: '0.0.1',
+ hooks: {
+ hookName: function (obj, data = {}) {
+ }
+ }
+}
+```
+
+If you want to attach multiple methods to the same lifecycle hook, you can pass
+them as an array:
+
+```mjs
+const myPlugin = {
+ name: 'example',
+ version: '0.0.1',
+ hooks: {
+ hookName: [
+ function one (obj, data = {}) { },
+ function two (obj, data = {}) { }
+ ]
+ }
+}
+```
+
+### Arguments
+
+All lifecycle methods will receive two parameters:
+
+- An object relevant to the lifecycle hook. See the [hooks API reference](/reference/hooks/) for details.
+- Data passed when the hook was registered (optional)
+
+### Notes
+
+Refer to the [hooks API reference](/reference/hooks/) for a list of all
+available lifecycle hooks.
+
+## Macro methods
+
+FreeSewing plugins can provide macros, which is a way to automate multiple
+steps into a single command.
+
+### Signature
+
+To provide one or more macros, your plugin should have a `macros` property that
+is an object where the keys are the macro name, and the value holds a method to
+run when the macro is executed.
+
+```mjs
+const myPlugin = {
+ name: 'example',
+ version: '0.0.1',
+ macros: {
+ example: function(so, { log }) {
+ log.info('Running the example macro')
+ }
+ }
+}
+```
+
+### Arguments
+
+All macros receive two arguments:
+
+- `so`: A plain object holding configuration object passed to the macro
+- `props`: The same object as passed to the [`Part.draft()`](/reference/api/part/draft) method that you can destructure
+
+:::note Macros take only 1 argument
+
+When writing a macro, keep in mind that all information that needs to be passed
+to a macro needs to be contained in a single argument.
+
+Typically, you use a single plain object to configure the macro.
+
+:::
+
+### Return value
+
+Macros do not need to return anything. If they do, it will be ignored.
+
+## Store methods
+
+FreeSewing plugins can provide store methods, which facilitate data handling
+within a pattern.
+
+### Signature
+
+To provide one or more store methods, your plugin should have a `store` property that
+is an array where each member is itself an array with two members:
+
+- The first member holds the key to attach the method to (in dot notation)
+- The second member holds the method to attach
+
+```mjs
+const myPlugin = {
+ name: 'example',
+ version: '0.0.1',
+ store: [
+ [
+ 'log.panic',
+ function(store, ...params) {
+ store.setIfUnset('logs.panic', new Array())
+ store.push(...params)
+ }
+ ]
+ }
+}
+```
+
+### Arguments
+
+All store methods receive at least two arguments:
+
+- `store`: The store object itself
+- `...params`: All additional plugins that were passed to the store method
+
+### Overwriting store methods
+
+You are allowed to overwrite existing store methods.
+As it happens, this is how you should implement a custom logging solution,
+by overwriting the logging methods under the store's `log` key,
+
+However, the following store methods cannot be overwritten:
+
+- `extend()`
+- `get()`
+- `push()`
+- `set()`
+- `setIfUnset()`
+- `unset()`
+
+### Return value
+
+Store methods do not need to return anything. If they do, it will be ignored.
+
+## Loading plugins
+
+Plugins can be loaded at build time and added to the design.
+Or, they can be added at run time and added to an instantiated pattern.
+
+To load a plugin at build time, it should be added to [the `plugins` key of the part configuration](/reference/api/part/config/plugins).
+
+To load a plugin at run time, it should be loaded with a call to [`Pattern.use()`](/reference/api/pattern/use).
+
+Please refer to the relevant documentation for more details.
diff --git a/markdown/dev/guides/prerequisites/bezier-curves/bezier.gif b/sites/dev/docs/guides/prerequisites/bezier.gif
similarity index 100%
rename from markdown/dev/guides/prerequisites/bezier-curves/bezier.gif
rename to sites/dev/docs/guides/prerequisites/bezier.gif
diff --git a/sites/dev/docs/guides/prerequisites/readme.mdx b/sites/dev/docs/guides/prerequisites/readme.mdx
new file mode 100644
index 00000000000..bfde5ca0d08
--- /dev/null
+++ b/sites/dev/docs/guides/prerequisites/readme.mdx
@@ -0,0 +1,147 @@
+---
+title: Before you start
+sidebar_position: 10
+---
+
+Drawing lines and curves on paper is a skill most people have been practicing since kindergarten.
+In FreeSewing, we draw lines and curves with code, which is a bit more abstract
+but doesn't have to be complicated once you understand a few basic building blocks.
+
+Understanding the concepts that are involved in designing sewing patterns in code will pay dividends later.
+That is why we recommend you familiarize yourself with the following topics:
+
+:::note
+
+##### There's no need to know everything
+
+FreeSewing sits at the intersection of the world of makers and developers.
+If your background is in development, you will need no explaining what SVG is but might not
+know much about designing sewing patterns.
+If on the other hand your background is in sewing or pattern design, you might wonder what
+the heck NodeJS is and why you should care.
+
+Few people straddle both worlds, so as you start using FreeSewing, chances are
+you'll learn a few new things along the way.
+
+And if you get stuck [our chatrooms on Discord](https://discord.freesewing.org/) are the best place to get help.
+
+:::
+
+## Scalable Vector Graphics
+
+Patterns are rendered as **SVG** — short
+for [Scalable Vector Graphics](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics) —
+an XML-based vector image format and an open standard.
+While you don’t need to be an SVG expert, a basic understanding of the format
+will greatly help you to understand FreeSewing.
+
+For example, the coordinate system and the way paths
+are structured are all related to the SVG drawing system, which is closely related
+to other 2D drawing technologies such as PostScript or PDF.
+
+
+## The coordinate system
+
+The coordinate system in FreeSewing -- and in SVG -- follows the same rules as text on a page.
+You start at the top-left, and as you go to the right, the X-coordinate will increase.
+As you go down the Y-coordinate will increase.
+
+
+```mjs
+({ Point, points, paths, Path, part }) => {
+ points.origin = new Point(10, 10)
+ points.x = new Point(100, 10)
+ points.y = new Point(10, 50)
+ points.textX = new Point(85, 20).addText('X', 'text-lg')
+ points.textY = new Point(12, 43).addText('Y', 'text-lg')
+ paths.coords = new Path()
+ .move(points.y)
+ .line(points.origin)
+ .line(points.x)
+ .addClass('mark')
+ .attr('marker-start', 'url(#dimensionFrom)')
+ .attr('marker-end', 'url(#dimensionTo)')
+
+ return part
+}
+```
+
+
+The image above illustrates both the X-axis and Y-axis.
+On the X-axis, `20` is further to the right than `10`.
+On the Y-axis, `50` is lower than `20`.
+
+:::note
+
+The Y-axis is inverted in many drawing programs, with the origin
+`(0,0)` being the lower left corner, rather than the upper left corner.
+
+This is a common point of confusion so keep in mind that the Y-axis may
+not behave as you would have intuitively expected.
+
+:::
+
+## Units in FreeSewing
+
+FreeSewing uses _millimeter (mm)_ for all its internal units.
+We do support both imperial and metrics units, which are displayed
+as _cm_ or _inch_, but under the hood everything is handled in millimeter.
+
+So as a pattern designer, you will work with mm.
+When you write `1`, that’s one millimeter. When you write `7.8`, that’s 7.8 mm.
+
+While you can use cm or inch on the FreeSewing website, that is merely a layer of
+abstraction on top of the internal units, which are always mm.
+
+## Understanding Bézier curves
+
+While lines on computers are easy to store with a start and end point,
+curves require more information.
+In FreeSewing — as in SVG and countless of other computer applications —
+curves are stored as [Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve),
+named after French engineer [Pierre Bézier](https://en.wikipedia.org/wiki/Pierre_B%C3%A9zier) who
+popularized their use back in the 1960s.
+
+In FreeSewing, we use so-called cubic Bézier curves which have:
+
+- A start point
+- A first control point that’s linked to the start point
+- A second control point that’s linked to the end point
+- An end point
+
+
+```js
+({ Point, points, Path, paths, part }) => {
+
+ points.from = new Point(10, 20)
+ points.cp1 = new Point(40, 0)
+ points.cp2 = new Point(60, 40)
+ points.to = new Point(90, 20)
+
+ paths.line = new Path()
+ .move(points.from)
+ .curve(points.cp1, points.cp2, points.to)
+ .setText("Path.curve()", "text-sm center fill-note")
+
+ return part
+}
+```
+
+
+Bézier curves and their _handles_ or _control points_ are surprisingly intuitive.
+The following illustration does a great job at explaining how they are constructed:
+
+
+
+You don't need to understand the mathematics behind Bézier Curves.
+As long as you intuitively _get_ how the control points influence the curve, you're good to go.
+
+:::note
+
+###### More on Bézier curves
+
+Wikipedia has a good [introduction to Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve).
+For a deep-dive into the subject, check out [A Primer on Bézier Curves](https://pomax.github.io/bezierinfo/) by
+[Pomax](https://github.com/Pomax).
+
+:::
diff --git a/sites/dev/docs/guides/readme.mdx b/sites/dev/docs/guides/readme.mdx
new file mode 100644
index 00000000000..b75aec7e021
--- /dev/null
+++ b/sites/dev/docs/guides/readme.mdx
@@ -0,0 +1,8 @@
+---
+title: Guides
+order: zbb
+---
+
+Below is an overview of the various FreeSewing guides:
+
+
diff --git a/markdown/dev/howtos/code/accessing-measurements/en.md b/sites/dev/docs/howtos/code/accessing-measurements/readme.mdx
similarity index 85%
rename from markdown/dev/howtos/code/accessing-measurements/en.md
rename to sites/dev/docs/howtos/code/accessing-measurements/readme.mdx
index 31e96ae9aea..465337cb1d4 100644
--- a/markdown/dev/howtos/code/accessing-measurements/en.md
+++ b/sites/dev/docs/howtos/code/accessing-measurements/readme.mdx
@@ -6,11 +6,11 @@ title: Accessing measurements
to your part's draft method. You can destructure them for easy access.
```design/src/part.mjs
-function draftPart = ({
+function draftPart = ({
// highlight-start
measurements,
// highlight-end
- part
+ part
}) {
const a = measurements.chest
@@ -20,8 +20,8 @@ function draftPart = ({
}
```
-
+:::note
-Keep in mind that [FreeSewing uses millimeter for everything](/guides/prerequisites/units).
+Keep in mind that [FreeSewing uses millimeter for everything](/guides/prerequisites#units).
-
+:::
diff --git a/markdown/dev/howtos/code/accessing-options/en.md b/sites/dev/docs/howtos/code/accessing-options/readme.mdx
similarity index 96%
rename from markdown/dev/howtos/code/accessing-options/en.md
rename to sites/dev/docs/howtos/code/accessing-options/readme.mdx
index 76960327256..9a74654b36f 100644
--- a/markdown/dev/howtos/code/accessing-options/en.md
+++ b/sites/dev/docs/howtos/code/accessing-options/readme.mdx
@@ -20,8 +20,8 @@ function draftPart = ({
}
```
-
+:::note
Unlike measurements, options come with default values.
-
+:::
diff --git a/markdown/dev/howtos/code/adding-parts/en.md b/sites/dev/docs/howtos/code/adding-parts/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/adding-parts/en.md
rename to sites/dev/docs/howtos/code/adding-parts/readme.mdx
diff --git a/markdown/dev/howtos/code/adding-paths/en.md b/sites/dev/docs/howtos/code/adding-paths/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/adding-paths/en.md
rename to sites/dev/docs/howtos/code/adding-paths/readme.mdx
diff --git a/markdown/dev/howtos/code/adding-points/en.md b/sites/dev/docs/howtos/code/adding-points/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/adding-points/en.md
rename to sites/dev/docs/howtos/code/adding-points/readme.mdx
diff --git a/markdown/dev/howtos/code/adding-snippets/en.md b/sites/dev/docs/howtos/code/adding-snippets/readme.mdx
similarity index 98%
rename from markdown/dev/howtos/code/adding-snippets/en.md
rename to sites/dev/docs/howtos/code/adding-snippets/readme.mdx
index e586a4139ee..5194b6080b2 100644
--- a/markdown/dev/howtos/code/adding-snippets/en.md
+++ b/sites/dev/docs/howtos/code/adding-snippets/readme.mdx
@@ -44,8 +44,8 @@ You can scale and rotate a snippet by setting the `data-scale` and `data-rotate`
- **data-rotate**: A rotation in degrees. The center of the rotation will be
the snippet's anchor point
-
+:::tip
See [Using attributes](/howtos/code/attributes/) for details on how to set attributes.
-
+:::
diff --git a/markdown/dev/howtos/code/adding-text/en.md b/sites/dev/docs/howtos/code/adding-text/readme.mdx
similarity index 92%
rename from markdown/dev/howtos/code/adding-text/en.md
rename to sites/dev/docs/howtos/code/adding-text/readme.mdx
index d802d7ef1bd..6d2faa4e921 100644
--- a/markdown/dev/howtos/code/adding-text/en.md
+++ b/sites/dev/docs/howtos/code/adding-text/readme.mdx
@@ -20,13 +20,13 @@ To facilitate this, FreeSewing will enforce a line break when you use `\n` in yo
## Translation
-Text that is added to a pattern typically requires translation.
+Text that is added to a pattern typically requires translation.
You should break up your text in such a way that it remains possible to translate it.
You can do that either via repeated calls to `addText()` or you can pass an array of strings, or even a nested array of strings, and FreeSewing will translate all individual pieces prior to concatenating them.
-
+:::note
Refer to [the `insertText` hook](/reference/hooks/inserttext#notes) for details.
-
+:::
diff --git a/markdown/dev/howtos/code/after/en.md b/sites/dev/docs/howtos/code/after/readme.mdx
similarity index 95%
rename from markdown/dev/howtos/code/after/en.md
rename to sites/dev/docs/howtos/code/after/readme.mdx
index f0771753ef6..001a391d2ac 100644
--- a/markdown/dev/howtos/code/after/en.md
+++ b/sites/dev/docs/howtos/code/after/readme.mdx
@@ -6,11 +6,11 @@ Part dependencies control the order in which parts are drafted. FreeSewing will
make sure to draft all of a part's dependencies before drafting the part
itself.
-
+:::warning
Even though inherited parts are automatically included in a part's dependencies,
do not confuse part dependencies with [part inheritance](/howtos/code/from).
-
+:::
Part dependencies are configured with [the `after`
keyword](/reference/api/part/config/dependencies#after). Let's look at an
@@ -33,7 +33,7 @@ export const myPart = {
}
```
-
+:::tip
Refer to [the part documentation on
dependencies](/reference/api/part/config/dependencies) for all details.
-
+:::
diff --git a/markdown/dev/howtos/code/attributes/en.md b/sites/dev/docs/howtos/code/attributes/readme.mdx
similarity index 98%
rename from markdown/dev/howtos/code/attributes/en.md
rename to sites/dev/docs/howtos/code/attributes/readme.mdx
index 8edf69b0a18..14e2a0dfc49 100644
--- a/markdown/dev/howtos/code/attributes/en.md
+++ b/sites/dev/docs/howtos/code/attributes/readme.mdx
@@ -69,12 +69,12 @@ points.message = new Point(0,0)
.attr("data-text-class", "note");
```
-
+:::note
In this example, we're using attributes to add text to our pattern.
The [adding-text](/howtos/code/adding-text) documentation explains this in detail.
-
+:::
## Custom attributes
@@ -93,13 +93,13 @@ The custom attributes that can be added to Points:
| `data-circle` | Radius of the circle to display at the point |
| `data-circle-class` | [CSS classes](/reference/css) to apply to the circle to provide styling |
-
+:::note RELATED
See [Drawing circles](/howtos/code/drawing-circles) for more information
and other ways to draw circles.
See [Adding text](/howtos/code/adding-text) for other ways to add text
to points.
-
+:::
### Paths
@@ -110,10 +110,10 @@ The custom attributes that can be added to Paths:
| `data-text` | Text to display along the path |
| `data-text-class` | [CSS classes](/reference/css) to apply to the text to provide styling |
-
+:::note RELATED
See [Adding text](/howtos/code/adding-text) for other ways to add text
to paths.
-
+:::
### Snippets
@@ -124,7 +124,7 @@ The custom attributes that can be added to Snippets:
| `data-rotate` | Number of degrees to rotate the snippet |
| `data-scale` | Scaling factor to apply to the snippet. Either a single number or an array of 2 numbers for separate X and Y scaling factors |
-
+:::tip
When rendering an SVG document, FreeSewing will output all your attributes.
This gives you the
@@ -135,4 +135,4 @@ special meaning within FreeSewing, such as `data-text`. Adding a `text` attribut
would result in invalid SVG as there is no such thing as a text attribute. But `data-text`
is fine because the `data-` prefix indicates it is a [custom attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/data-*).
-
+:::
diff --git a/markdown/dev/howtos/code/create-new-design/en.md b/sites/dev/docs/howtos/code/create-new-design/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/create-new-design/en.md
rename to sites/dev/docs/howtos/code/create-new-design/readme.mdx
diff --git a/markdown/dev/howtos/code/create-snippet/en.md b/sites/dev/docs/howtos/code/create-snippet/readme.mdx
similarity index 99%
rename from markdown/dev/howtos/code/create-snippet/en.md
rename to sites/dev/docs/howtos/code/create-snippet/readme.mdx
index a566a386cea..e032b2dd320 100644
--- a/markdown/dev/howtos/code/create-snippet/en.md
+++ b/sites/dev/docs/howtos/code/create-snippet/readme.mdx
@@ -33,7 +33,7 @@ If you're curious, it will end up looking like this:

-
+:::warning
##### Avoid self-closing tags
@@ -48,7 +48,7 @@ Make sure to explicitly close the tag in your defs:
```
-
+:::
## Load the plugin
diff --git a/markdown/dev/howtos/code/create-snippet/smiley.png b/sites/dev/docs/howtos/code/create-snippet/smiley.png
similarity index 100%
rename from markdown/dev/howtos/code/create-snippet/smiley.png
rename to sites/dev/docs/howtos/code/create-snippet/smiley.png
diff --git a/markdown/dev/howtos/code/drawing-circles/en.md b/sites/dev/docs/howtos/code/drawing-circles/readme.mdx
similarity index 93%
rename from markdown/dev/howtos/code/drawing-circles/en.md
rename to sites/dev/docs/howtos/code/drawing-circles/readme.mdx
index f2045e7641e..9418ac312c3 100644
--- a/markdown/dev/howtos/code/drawing-circles/en.md
+++ b/sites/dev/docs/howtos/code/drawing-circles/readme.mdx
@@ -10,12 +10,12 @@ Still, if you want a circle, you can draw one by calling
```design/src/part.mjs
-function draftPart = ({
+function draftPart = ({
Point,
points,
Path,
paths,
- part
+ part
}) {
points.anchor = new Point(0,0)
@@ -36,15 +36,16 @@ function draftPart = ({
```
-
+:::warning
Circles are not taken into account when calculating the part's boundary.
-
+:::
+
+:::note COMMENT (by joost)
-
##### How multiple circles are implemented
When you add the same attribute multiple times, they are typically joined together
-when rendering. For example multiple calls to add a `class` attribute will end up being
+when rendering. For example multiple calls to add a `class` attribute will end up being
rendered as `class="class1 class2 class3` which makes a lot of sense.
But when we're placing multiple circles on the same point, that raises a bit of a problem.
@@ -56,7 +57,7 @@ point.a = new Point(0,0)
.addCircle(20, 'fabric')
```
-Based on the rules of attributes, this would render a single circle with `r="10 20"
+Based on the rules of attributes, this would render a single circle with `r="10 20"
class="lining fabric"`. Which does not make a lot of sense and is invalid SVG
as `r` only takes one value.
@@ -67,5 +68,5 @@ values of their respective calls.
While this is probably what you'd intuitively expect, it is somewhat inconsistent with how
other attributes are rendered, so I felt it was best to point it out explicitly.
-
+:::
diff --git a/markdown/dev/howtos/code/from/en.md b/sites/dev/docs/howtos/code/from/readme.mdx
similarity index 95%
rename from markdown/dev/howtos/code/from/en.md
rename to sites/dev/docs/howtos/code/from/readme.mdx
index 22688bfe4a8..d7f59f8ba45 100644
--- a/markdown/dev/howtos/code/from/en.md
+++ b/sites/dev/docs/howtos/code/from/readme.mdx
@@ -5,9 +5,9 @@ title: Part inheritance
Part inheritance means that rather than start your part from a blank slate, your starting point is another part.
You will _inherit_ all its points, paths, and snippets, hence the name.
-
+:::warning
Do not confuse this with [part dependencies](/howtos/code/after).
-
+:::
Part inheritance is configured with [the `from`
keyword](/reference/api/part/config/dependencies#from). Let's look at an
@@ -30,7 +30,7 @@ export const front = {
}
```
-
+:::tip
Refer to [the part documentation on
dependencies](/reference/api/part/config/dependencies) for all details.
-
+:::
diff --git a/markdown/dev/howtos/code/hide-paths-show-text/en.md b/sites/dev/docs/howtos/code/hide-paths-show-text/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/hide-paths-show-text/en.md
rename to sites/dev/docs/howtos/code/hide-paths-show-text/readme.mdx
diff --git a/markdown/dev/howtos/code/hide-paths/en.md b/sites/dev/docs/howtos/code/hide-paths/readme.mdx
similarity index 94%
rename from markdown/dev/howtos/code/hide-paths/en.md
rename to sites/dev/docs/howtos/code/hide-paths/readme.mdx
index 80e9e747512..0530b56f1fc 100644
--- a/markdown/dev/howtos/code/hide-paths/en.md
+++ b/sites/dev/docs/howtos/code/hide-paths/readme.mdx
@@ -15,7 +15,7 @@ To outright remove the paths all together, delete them:
for (const i in paths) delete paths[i]
```
-
+:::warning
Do __not__ replace the `path` object:
```mjs
@@ -23,8 +23,8 @@ paths = {}
```
as the `paths` object is more than a pojo (plain old JavaScript object)
-
+:::
-
+:::tip
You can use the same strategy for hiding or removing points or snippets.
-
+:::
diff --git a/markdown/dev/howtos/code/macros/en.md b/sites/dev/docs/howtos/code/macros/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/macros/en.md
rename to sites/dev/docs/howtos/code/macros/readme.mdx
diff --git a/markdown/dev/howtos/code/en.md b/sites/dev/docs/howtos/code/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/en.md
rename to sites/dev/docs/howtos/code/readme.mdx
diff --git a/markdown/dev/howtos/code/shared-dimensions/en.md b/sites/dev/docs/howtos/code/shared-dimensions/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/shared-dimensions/en.md
rename to sites/dev/docs/howtos/code/shared-dimensions/readme.mdx
diff --git a/markdown/dev/howtos/code/store/en.md b/sites/dev/docs/howtos/code/store/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/store/en.md
rename to sites/dev/docs/howtos/code/store/readme.mdx
diff --git a/markdown/dev/howtos/code/storing-path-length/en.md b/sites/dev/docs/howtos/code/storing-path-length/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/code/storing-path-length/en.md
rename to sites/dev/docs/howtos/code/storing-path-length/readme.mdx
diff --git a/markdown/dev/howtos/code/text-whitespace/en.md b/sites/dev/docs/howtos/code/text-whitespace/readme.mdx
similarity index 99%
rename from markdown/dev/howtos/code/text-whitespace/en.md
rename to sites/dev/docs/howtos/code/text-whitespace/readme.mdx
index c03ec315dfe..c33443540e8 100644
--- a/markdown/dev/howtos/code/text-whitespace/en.md
+++ b/sites/dev/docs/howtos/code/text-whitespace/readme.mdx
@@ -50,9 +50,9 @@ function draftPart = ({
```
-
+:::tip
You can control the lineheight by setting the `data-text-lineheight` attribute.
-
+:::
## Adding consecutive spaces to text
diff --git a/markdown/dev/howtos/design/cutlist/en.md b/sites/dev/docs/howtos/design/cutlist/readme.mdx
similarity index 91%
rename from markdown/dev/howtos/design/cutlist/en.md
rename to sites/dev/docs/howtos/design/cutlist/readme.mdx
index 323784e5a71..16d479680a7 100644
--- a/markdown/dev/howtos/design/cutlist/en.md
+++ b/sites/dev/docs/howtos/design/cutlist/readme.mdx
@@ -4,11 +4,11 @@ title: "Include Cutting Instructions"
To include cutting instructions with your part, use the [annotations plugin](/reference/plugins/annotations) (included by default via [core-plugins](/reference/plugins/core)) to add the `cutlist.addCut` method to your part's [`store`](/reference/api/store/extend).
-The [grainline macro](/reference/macros/grainline) and the [cutonfold macro](/reference/macros/cutonfold) will automatically add grain and fold information to the cutting instructions
+:::tipThe [grainline macro](/reference/macros/grainline) and the [cutonfold macro](/reference/macros/cutonfold) will automatically add grain and fold information to the cutting instructions :::
-These cutting instructions get used by the [title macro](/reference/macros/title), so be sure to add them before adding your part's title.
+:::tipThese cutting instructions get used by the [title macro](/reference/macros/title), so be sure to add them before adding your part's title. :::
-
+:::note
addCut() Parameters
@@ -37,7 +37,7 @@ You can use any `string` you want for your material, but here are some standard
| ribbing | Ribbing |
-
+:::
## Basic Usage
diff --git a/markdown/dev/howtos/design/fit-sleeve/en.md b/sites/dev/docs/howtos/design/fit-sleeve/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/design/fit-sleeve/en.md
rename to sites/dev/docs/howtos/design/fit-sleeve/readme.mdx
diff --git a/markdown/dev/howtos/design/en.md b/sites/dev/docs/howtos/design/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/design/en.md
rename to sites/dev/docs/howtos/design/readme.mdx
diff --git a/markdown/dev/howtos/design/seam-allowance/en.md b/sites/dev/docs/howtos/design/seam-allowance/readme.mdx
similarity index 99%
rename from markdown/dev/howtos/design/seam-allowance/en.md
rename to sites/dev/docs/howtos/design/seam-allowance/readme.mdx
index 4670670b630..7fb98ab7711 100644
--- a/markdown/dev/howtos/design/seam-allowance/en.md
+++ b/sites/dev/docs/howtos/design/seam-allowance/readme.mdx
@@ -43,7 +43,7 @@ Then we string together our real path and our seam allowance based on them:
}
```
-
+:::tip
##### Use a multiple of `sa` for your hem allowance
@@ -51,4 +51,4 @@ Resist the temptation to use an absolute value for any seam allowance, including
Always use a multiple of the `sa` value.
-
+:::
diff --git a/markdown/dev/howtos/design/slash-spread/en.md b/sites/dev/docs/howtos/design/slash-spread/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/design/slash-spread/en.md
rename to sites/dev/docs/howtos/design/slash-spread/readme.mdx
diff --git a/markdown/dev/howtos/design/sprinkle-snippets/en.md b/sites/dev/docs/howtos/design/sprinkle-snippets/readme.mdx
similarity index 98%
rename from markdown/dev/howtos/design/sprinkle-snippets/en.md
rename to sites/dev/docs/howtos/design/sprinkle-snippets/readme.mdx
index 2164af2942e..0efefa188b9 100644
--- a/markdown/dev/howtos/design/sprinkle-snippets/en.md
+++ b/sites/dev/docs/howtos/design/sprinkle-snippets/readme.mdx
@@ -27,9 +27,9 @@ macro('sprinkle', {
})
```
-
+:::tip
Refer to [the sprinkle macro documentation](/reference/macros/sprinkle) for details on how
to use this macro
-
+:::
diff --git a/markdown/dev/howtos/design/trace/en.md b/sites/dev/docs/howtos/design/trace/readme.mdx
similarity index 98%
rename from markdown/dev/howtos/design/trace/en.md
rename to sites/dev/docs/howtos/design/trace/readme.mdx
index f295378bc52..08a57e448c0 100644
--- a/markdown/dev/howtos/design/trace/en.md
+++ b/sites/dev/docs/howtos/design/trace/readme.mdx
@@ -18,17 +18,17 @@ outline, then save it as SVG.
Let's say we've save the original pattern as `original.svg`.
-
+:::note
[Inkscape](https://inkscape.org/) is a free SVG editor that can both import a
variety of formats and save them as SVG, as well as trace the lines in a
picture.
-
+:::
-
+:::tip
When saving in Inkscape, use the **Optimized SVG** format
-
+:::
## Step 2: Convert the SVG file to JavaScript
@@ -132,6 +132,6 @@ To do so, we needed to take a couple of steps:
- Add the plugin to our part
- Use the snippet in our part's draft method
-
+:::warning
Be mindful of the scale of the background SVG when using this technique
-
+:::
diff --git a/markdown/dev/howtos/editors/blogpost/en.md b/sites/dev/docs/howtos/editors/blogpost/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/editors/blogpost/en.md
rename to sites/dev/docs/howtos/editors/blogpost/readme.mdx
diff --git a/markdown/dev/howtos/editors/frontmatter/about/en.md b/sites/dev/docs/howtos/editors/frontmatter/about/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/editors/frontmatter/about/en.md
rename to sites/dev/docs/howtos/editors/frontmatter/about/readme.mdx
diff --git a/markdown/dev/howtos/editors/frontmatter/lists/en.md b/sites/dev/docs/howtos/editors/frontmatter/lists/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/editors/frontmatter/lists/en.md
rename to sites/dev/docs/howtos/editors/frontmatter/lists/readme.mdx
diff --git a/markdown/dev/howtos/editors/frontmatter/multi-line/en.md b/sites/dev/docs/howtos/editors/frontmatter/multi-line/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/editors/frontmatter/multi-line/en.md
rename to sites/dev/docs/howtos/editors/frontmatter/multi-line/readme.mdx
diff --git a/markdown/dev/howtos/editors/frontmatter/en.md b/sites/dev/docs/howtos/editors/frontmatter/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/editors/frontmatter/en.md
rename to sites/dev/docs/howtos/editors/frontmatter/readme.mdx
diff --git a/markdown/dev/howtos/editors/frontmatter/structure/en.md b/sites/dev/docs/howtos/editors/frontmatter/structure/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/editors/frontmatter/structure/en.md
rename to sites/dev/docs/howtos/editors/frontmatter/structure/readme.mdx
diff --git a/markdown/dev/howtos/editors/en.md b/sites/dev/docs/howtos/editors/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/editors/en.md
rename to sites/dev/docs/howtos/editors/readme.mdx
diff --git a/markdown/dev/howtos/editors/showcase/en.md b/sites/dev/docs/howtos/editors/showcase/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/editors/showcase/en.md
rename to sites/dev/docs/howtos/editors/showcase/readme.mdx
diff --git a/markdown/dev/howtos/environments/browser/en.md b/sites/dev/docs/howtos/environments/browser/readme.mdx
similarity index 99%
rename from markdown/dev/howtos/environments/browser/en.md
rename to sites/dev/docs/howtos/environments/browser/readme.mdx
index 26c4e0c7825..2408875bb29 100644
--- a/markdown/dev/howtos/environments/browser/en.md
+++ b/sites/dev/docs/howtos/environments/browser/readme.mdx
@@ -6,7 +6,7 @@ Thanks to the advances in browser standardisation around JavaScript
ESM modules, not to mention [the new Skypack CDN](https://www.skypack.dev/),
you can generate patterns in the browser with a few lines of JavaScript.
-
+:::tip
##### Use FreeSewing.org if you just want a pattern
@@ -16,7 +16,7 @@ If you _just want a sewing pattern created for you,_
you can get all our designs on [FreeSewing.org](https://freesewing.org/),
our website for makers.
-
+:::
## High level overview
diff --git a/markdown/dev/howtos/environments/nodejs/en.md b/sites/dev/docs/howtos/environments/nodejs/readme.mdx
similarity index 99%
rename from markdown/dev/howtos/environments/nodejs/en.md
rename to sites/dev/docs/howtos/environments/nodejs/readme.mdx
index f328f1ba407..36799821afb 100644
--- a/markdown/dev/howtos/environments/nodejs/en.md
+++ b/sites/dev/docs/howtos/environments/nodejs/readme.mdx
@@ -7,7 +7,7 @@ Whether it's in a backend application or on the command line, all
it takes is a few lines of code — and a couple of dependencies — to
generate a pattern.
-
+:::tip
##### Use FreeSewing.org if you just want a pattern
@@ -17,7 +17,7 @@ If you _just want a sewing pattern created for you,_
you can get all our designs on [FreeSewing.org](https://freesewing.org/),
our website for makers.
-
+:::
## High level overview
@@ -61,7 +61,7 @@ const svg = new Aaron( // Instantiate pattern
console.log(svg)
```
-
+:::note
##### Remarks on the example code
@@ -71,7 +71,7 @@ console.log(svg)
- We are using `@freesewing/plugin-theme` to theme our SVG, but you
could [pass in your own CSS](/reference/api/svg/style)
-
+:::
## Dependencies
diff --git a/markdown/dev/howtos/environments/en.md b/sites/dev/docs/howtos/environments/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/environments/en.md
rename to sites/dev/docs/howtos/environments/readme.mdx
diff --git a/markdown/dev/howtos/git/ammend/en.md b/sites/dev/docs/howtos/git/ammend/readme.mdx
similarity index 100%
rename from markdown/dev/howtos/git/ammend/en.md
rename to sites/dev/docs/howtos/git/ammend/readme.mdx
diff --git a/markdown/dev/howtos/git/editing-content-on-github/commit-changes.png b/sites/dev/docs/howtos/git/editing-content-on-github/commit-changes.png
similarity index 100%
rename from markdown/dev/howtos/git/editing-content-on-github/commit-changes.png
rename to sites/dev/docs/howtos/git/editing-content-on-github/commit-changes.png
diff --git a/markdown/dev/howtos/git/editing-content-on-github/discord-github-updates.png b/sites/dev/docs/howtos/git/editing-content-on-github/discord-github-updates.png
similarity index 100%
rename from markdown/dev/howtos/git/editing-content-on-github/discord-github-updates.png
rename to sites/dev/docs/howtos/git/editing-content-on-github/discord-github-updates.png
diff --git a/markdown/dev/howtos/git/editing-content-on-github/edit-button.png b/sites/dev/docs/howtos/git/editing-content-on-github/edit-button.png
similarity index 100%
rename from markdown/dev/howtos/git/editing-content-on-github/edit-button.png
rename to sites/dev/docs/howtos/git/editing-content-on-github/edit-button.png
diff --git a/markdown/dev/howtos/git/editing-content-on-github/edit-preview-buttons.png b/sites/dev/docs/howtos/git/editing-content-on-github/edit-preview-buttons.png
similarity index 100%
rename from markdown/dev/howtos/git/editing-content-on-github/edit-preview-buttons.png
rename to sites/dev/docs/howtos/git/editing-content-on-github/edit-preview-buttons.png
diff --git a/markdown/dev/howtos/git/editing-content-on-github/fork-create-button.png b/sites/dev/docs/howtos/git/editing-content-on-github/fork-create-button.png
similarity index 100%
rename from markdown/dev/howtos/git/editing-content-on-github/fork-create-button.png
rename to sites/dev/docs/howtos/git/editing-content-on-github/fork-create-button.png
diff --git a/markdown/dev/howtos/git/editing-content-on-github/fork_button.png b/sites/dev/docs/howtos/git/editing-content-on-github/fork_button.png
similarity index 100%
rename from markdown/dev/howtos/git/editing-content-on-github/fork_button.png
rename to sites/dev/docs/howtos/git/editing-content-on-github/fork_button.png
diff --git a/markdown/dev/howtos/git/editing-content-on-github/pull-request-button.png b/sites/dev/docs/howtos/git/editing-content-on-github/pull-request-button.png
similarity index 100%
rename from markdown/dev/howtos/git/editing-content-on-github/pull-request-button.png
rename to sites/dev/docs/howtos/git/editing-content-on-github/pull-request-button.png
diff --git a/markdown/dev/howtos/git/editing-content-on-github/en.md b/sites/dev/docs/howtos/git/editing-content-on-github/readme.mdx
similarity index 88%
rename from markdown/dev/howtos/git/editing-content-on-github/en.md
rename to sites/dev/docs/howtos/git/editing-content-on-github/readme.mdx
index 9d4d31aa10c..864ae948203 100644
--- a/markdown/dev/howtos/git/editing-content-on-github/en.md
+++ b/sites/dev/docs/howtos/git/editing-content-on-github/readme.mdx
@@ -14,11 +14,11 @@ If you are new to GitHub, you will need to [create an
account](https://github.com/signup?user_email=\&source=form-home-signup)
(they are free).
-
+:::note
It is also possible to make changes using the GitHub desktop
application and/or your computer's command line; these advanced topics are
beyond the scope of this 'How to'.
-
+:::
All pattern instructions and web pages (including this 'How to') are written in
_Markdown_. Please see our [Markdown
@@ -58,23 +58,22 @@ Simone instructions:
contains several files, one for each language.

-- Select on the file you want to update.
+- Select on the file you want to update.
-
-
-Please only edit the English language files (called `en.md`),
-our translation software will handle the other languages.
-Read more about translations in our [translation guide](/guides/translation).
-
-
+:::warning
+
+Please only edit the English language files (called `en.md`),
+our translation software will handle the other languages.
+
+:::
- Click on the **Edit** button.

-
-Clicking **Preview** will show what your changes will look like.
+:::note
+Clicking **Preview** will show what your changes will look like.
-
-
+
+:::
## Save your edits and submit a pull request
@@ -83,14 +82,14 @@ When you are happy with your edits:
- Scroll to the bottom of the page and enter a brief description of your edits.
This will help us know what has changed.
- Click the **Commit changes** button. This is similar to saving a snapshot of
- your edits.
+ your edits.

Now you will create a _pull request_ to let the admins know your edits are
ready for review:
- Navigate to the repository where you created your fork.
-- Above the list of files, click the **Pull request** button.
+- Above the list of files, click the **Pull request** button.

Congratulations - you have just submitted your first edits to the site
diff --git a/markdown/dev/howtos/git/editing-content-on-github/simone-instructions-path.png b/sites/dev/docs/howtos/git/editing-content-on-github/simone-instructions-path.png
similarity index 100%
rename from markdown/dev/howtos/git/editing-content-on-github/simone-instructions-path.png
rename to sites/dev/docs/howtos/git/editing-content-on-github/simone-instructions-path.png
diff --git a/markdown/dev/howtos/git/en.md b/sites/dev/docs/howtos/git/readme.mdx
similarity index 98%
rename from markdown/dev/howtos/git/en.md
rename to sites/dev/docs/howtos/git/readme.mdx
index c2409751661..3b07d3523b3 100644
--- a/markdown/dev/howtos/git/en.md
+++ b/sites/dev/docs/howtos/git/readme.mdx
@@ -11,7 +11,7 @@ Below are some common challenges when working with FreeSewing code in git:
-
+:::tip
##### Git what now?
@@ -23,4 +23,4 @@ If you've used git before, but always felt confused about how it works,
check out this [Git For Ages 4 And Up](https://youtu.be/1ffBJ4sVUb4?t=121) video.
A bit longer, but it well worth a watch.
-
+:::
diff --git a/markdown/dev/howtos/git/save-often/en.md b/sites/dev/docs/howtos/git/save-often/readme.mdx
similarity index 99%
rename from markdown/dev/howtos/git/save-often/en.md
rename to sites/dev/docs/howtos/git/save-often/readme.mdx
index d7326766819..3015a5dd5b2 100644
--- a/markdown/dev/howtos/git/save-often/en.md
+++ b/sites/dev/docs/howtos/git/save-often/readme.mdx
@@ -74,12 +74,12 @@ To roll back history and go back 4 commits, run this command:
git reset --soft HEAD~4
```
-
+:::tip
The `4` in the command above should be updated if you want to
roll back more or less commits.
-
+:::
After this command, the output of `git log` will now no longer include
our hasty commits:
diff --git a/markdown/dev/howtos/help/en.md b/sites/dev/docs/howtos/help/readme.mdx
similarity index 97%
rename from markdown/dev/howtos/help/en.md
rename to sites/dev/docs/howtos/help/readme.mdx
index 1347578e7f4..9dd7c1f8f30 100644
--- a/markdown/dev/howtos/help/en.md
+++ b/sites/dev/docs/howtos/help/readme.mdx
@@ -9,8 +9,8 @@ Many of the FreeSewing contributors hang out there, and since we're spread over
different parts of the world, you're likely to find somebody there who can answer
your question(s) at any given moment.
-
+:::tip
If you want to report a problem, please [create an issue](https://github.com/freesewing/freesewing/issues/new).
-
+:::
diff --git a/markdown/dev/howtos/en.md b/sites/dev/docs/howtos/readme.mdx
similarity index 71%
rename from markdown/dev/howtos/en.md
rename to sites/dev/docs/howtos/readme.mdx
index 52ebf3078c2..6cbacbbf972 100644
--- a/markdown/dev/howtos/en.md
+++ b/sites/dev/docs/howtos/readme.mdx
@@ -5,11 +5,9 @@ order: zcc
You can find a list of all FreeSewing hotwtos below:
-## Main sections
-
-
+:::note RELATED
##### What makes a howto a howto?
@@ -18,11 +16,5 @@ Howtos give your concrete steps to solve a common problem or challenge.
Guides and howtos are on a spectrum with howtos being terse _do-this-then-that_ recipes, whereas
guides take more time to explain in-depth what is being done and why.
-For more details, refer to [How we structure our documentation](/guides/docs).
-
-
-
-## Full list
-
-
+:::
diff --git a/markdown/dev/reference/api/attributes/add/en.md b/sites/dev/docs/reference/api/attributes/add/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/add/en.md
rename to sites/dev/docs/reference/api/attributes/add/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/aspropsifprefixis/en.md b/sites/dev/docs/reference/api/attributes/aspropsifprefixis/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/aspropsifprefixis/en.md
rename to sites/dev/docs/reference/api/attributes/aspropsifprefixis/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/asrenderprops/en.md b/sites/dev/docs/reference/api/attributes/asrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/asrenderprops/en.md
rename to sites/dev/docs/reference/api/attributes/asrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/clone/en.md b/sites/dev/docs/reference/api/attributes/clone/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/clone/en.md
rename to sites/dev/docs/reference/api/attributes/clone/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/get/en.md b/sites/dev/docs/reference/api/attributes/get/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/get/en.md
rename to sites/dev/docs/reference/api/attributes/get/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/getasarray/en.md b/sites/dev/docs/reference/api/attributes/getasarray/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/getasarray/en.md
rename to sites/dev/docs/reference/api/attributes/getasarray/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/en.md b/sites/dev/docs/reference/api/attributes/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/en.md
rename to sites/dev/docs/reference/api/attributes/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/remove/en.md b/sites/dev/docs/reference/api/attributes/remove/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/remove/en.md
rename to sites/dev/docs/reference/api/attributes/remove/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/render/en.md b/sites/dev/docs/reference/api/attributes/render/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/render/en.md
rename to sites/dev/docs/reference/api/attributes/render/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/renderascss/en.md b/sites/dev/docs/reference/api/attributes/renderascss/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/renderascss/en.md
rename to sites/dev/docs/reference/api/attributes/renderascss/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/renderifprefixis/en.md b/sites/dev/docs/reference/api/attributes/renderifprefixis/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/renderifprefixis/en.md
rename to sites/dev/docs/reference/api/attributes/renderifprefixis/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/set/en.md b/sites/dev/docs/reference/api/attributes/set/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/set/en.md
rename to sites/dev/docs/reference/api/attributes/set/readme.mdx
diff --git a/markdown/dev/reference/api/attributes/setifunset/en.md b/sites/dev/docs/reference/api/attributes/setifunset/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/attributes/setifunset/en.md
rename to sites/dev/docs/reference/api/attributes/setifunset/readme.mdx
diff --git a/markdown/dev/reference/api/defs/asrenderprops/en.md b/sites/dev/docs/reference/api/defs/asrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/defs/asrenderprops/en.md
rename to sites/dev/docs/reference/api/defs/asrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/defs/clone/en.md b/sites/dev/docs/reference/api/defs/clone/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/defs/clone/en.md
rename to sites/dev/docs/reference/api/defs/clone/readme.mdx
diff --git a/markdown/dev/reference/api/defs/get/en.md b/sites/dev/docs/reference/api/defs/get/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/defs/get/en.md
rename to sites/dev/docs/reference/api/defs/get/readme.mdx
diff --git a/markdown/dev/reference/api/defs/en.md b/sites/dev/docs/reference/api/defs/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/defs/en.md
rename to sites/dev/docs/reference/api/defs/readme.mdx
diff --git a/markdown/dev/reference/api/defs/remove/en.md b/sites/dev/docs/reference/api/defs/remove/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/defs/remove/en.md
rename to sites/dev/docs/reference/api/defs/remove/readme.mdx
diff --git a/markdown/dev/reference/api/defs/render/en.md b/sites/dev/docs/reference/api/defs/render/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/defs/render/en.md
rename to sites/dev/docs/reference/api/defs/render/readme.mdx
diff --git a/markdown/dev/reference/api/defs/set/en.md b/sites/dev/docs/reference/api/defs/set/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/defs/set/en.md
rename to sites/dev/docs/reference/api/defs/set/readme.mdx
diff --git a/markdown/dev/reference/api/defs/setifunset/en.md b/sites/dev/docs/reference/api/defs/setifunset/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/defs/setifunset/en.md
rename to sites/dev/docs/reference/api/defs/setifunset/readme.mdx
diff --git a/markdown/dev/reference/api/design/en.md b/sites/dev/docs/reference/api/design/readme.mdx
similarity index 94%
rename from markdown/dev/reference/api/design/en.md
rename to sites/dev/docs/reference/api/design/readme.mdx
index cd8cd5764a8..685ca837ed3 100644
--- a/markdown/dev/reference/api/design/en.md
+++ b/sites/dev/docs/reference/api/design/readme.mdx
@@ -37,7 +37,7 @@ const Sorcha = new Design({
})
```
-A Design in FreeSewing is little more than a container for various Parts
+:::tipA Design in FreeSewing is little more than a container for various Parts:::
Optionally, you can also pass it a `data` attribute
to hold any custom data you'd like to add to your Design.
diff --git a/markdown/dev/reference/api/part/asrenderprops/en.md b/sites/dev/docs/reference/api/part/asrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/part/asrenderprops/en.md
rename to sites/dev/docs/reference/api/part/asrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/part/attr/en.md b/sites/dev/docs/reference/api/part/attr/readme.mdx
similarity index 97%
rename from markdown/dev/reference/api/part/attr/en.md
rename to sites/dev/docs/reference/api/part/attr/readme.mdx
index 4265d11108b..c1e1238aa39 100644
--- a/markdown/dev/reference/api/part/attr/en.md
+++ b/sites/dev/docs/reference/api/part/attr/readme.mdx
@@ -20,11 +20,11 @@ Part Part.attr(
```
-
+:::tip
This method is chainable as it returns the `Part` object
-
+:::
## Example
diff --git a/markdown/dev/reference/api/part/config/dependencies/en.md b/sites/dev/docs/reference/api/part/config/dependencies/readme.mdx
similarity index 96%
rename from markdown/dev/reference/api/part/config/dependencies/en.md
rename to sites/dev/docs/reference/api/part/config/dependencies/readme.mdx
index 98aea4362eb..2fe4e88e11a 100644
--- a/markdown/dev/reference/api/part/config/dependencies/en.md
+++ b/sites/dev/docs/reference/api/part/config/dependencies/readme.mdx
@@ -4,20 +4,20 @@ title: Part dependencies
Dependencies in a part's configuration object are controlled by the `from` and `after` properties.
-
+:::note
In both cases, you should specify the actual configuration object of the dependency part,
not merely a string with its name.
-
+:::
-
+:::tip
Dependencies configured on parts do not need to be included in the `parts` property
passed to [the Design constructor](/reference/api/design). FreeSewing core will
recursively resolve all dependencies and add them to the design for you.
-
+:::
## after
@@ -37,7 +37,7 @@ const part = {
The effect of the `after` property is that drafting of this part will be deferred until all the parts listed
in the `after` property are drafted.
-
+:::tip
If you only have one part for the `after` property, you do not have to specify an array:
@@ -51,7 +51,7 @@ const part = {
}
```
-
+:::
## from
@@ -68,9 +68,9 @@ const part = {
}
```
-
+:::warning
Unlike `after`, `from` only ever takes one part since you can only extend one part.
-
+:::
diff --git a/markdown/dev/reference/api/part/config/hide/en.md b/sites/dev/docs/reference/api/part/config/hide/readme.mdx
similarity index 88%
rename from markdown/dev/reference/api/part/config/hide/en.md
rename to sites/dev/docs/reference/api/part/config/hide/readme.mdx
index e433ee1f662..8c7d92f945f 100644
--- a/markdown/dev/reference/api/part/config/hide/en.md
+++ b/sites/dev/docs/reference/api/part/config/hide/readme.mdx
@@ -4,8 +4,8 @@ title: Hiding parts
The `hide` option of a part's configuration controls how to hide it and/or its dependencies.
-A hidden part will not be included in the output when it's rendered
-The `hide` configuration from parts that you include in your design will always override configuration from inherited parts.
+:::tipA hidden part will not be included in the output when it's rendered:::
+:::tipThe `hide` configuration from parts that you include in your design will always override configuration from inherited parts.:::
## Settings
@@ -62,7 +62,7 @@ const part = {
To hide parts that you have not explicitly included in this part that may be pulled in by the explicitly included `from` and `after` parts, set `hide.inherited` to a truthy value.
-This setting will hide any part included as `from` or `after` by your explicitly included `from` part or its dependency chain. It will also hide any part included as `from` by your explicitly included `after` part or its dependency chain. It will not hide the `after` parts of `after` parts
+:::noteThis setting will hide any part included as `from` or `after` by your explicitly included `from` part or its dependency chain. It will also hide any part included as `from` by your explicitly included `after` part or its dependency chain. It will not hide the `after` parts of `after` parts:::
```js
// the "after" chain
@@ -109,7 +109,7 @@ const mainBack = {
}
```
-
+:::tip
Need more clarity?
@@ -128,7 +128,7 @@ const mainBack = {
Dependencies are considered inherited if they have two or more dashes (-) next to them, and are either **bold** themselves, or underneath a **bold** part.
-
+:::
### hide.never
@@ -166,11 +166,11 @@ const part = {
## Presets
We provide two presets for common hiding configurations. For convenience, you can pass a preset to the `hide` configuration as a string like `hide: `, or you can use `import { hidePresets } from '@freesewing.core` and pass `hide: hidePresets.`
- If you don't like to remember strings and you're working in development a environment that has code completion, importing the presets from `@freesewing/core` will help you be sure you're definitely using an available preset
+:::tip If you don't like to remember strings and you're working in development a environment that has code completion, importing the presets from `@freesewing/core` will help you be sure you're definitely using an available preset :::
### HIDE_ALL
For a shortcut to setting all `boolean` hiding options ([`after`](#hideafter), [`from`](#hidefrom), [`inherited`](#hideinherited), and [`self`](#hideself)) to true, use `HIDE_ALL`
-
+:::note
This is equivalent to using
```js
@@ -181,7 +181,7 @@ This is equivalent to using
inherited: true
}
```
-
+:::
To use it as an imported preset:
```js
@@ -220,7 +220,7 @@ const part = {
### HIDE_TREE
For a shortcut to setting [`from: true`](#hidefrom) and [`inherited: true`](#hideinherited), use `HIDE_TREE`
-
+:::note
This is equivalent to using
```js
@@ -229,10 +229,10 @@ This is equivalent to using
inherited: true
}
````
-
-
+:::
+:::note RELATED
See [`hide.inherited`](#hideinherited) for a full explanation of how that option works
-
+:::
To use it as an imported preset:
```js
diff --git a/markdown/dev/reference/api/part/config/measurements/en.md b/sites/dev/docs/reference/api/part/config/measurements/readme.mdx
similarity index 90%
rename from markdown/dev/reference/api/part/config/measurements/en.md
rename to sites/dev/docs/reference/api/part/config/measurements/readme.mdx
index a7a08213297..ed9e472c2b4 100644
--- a/markdown/dev/reference/api/part/config/measurements/en.md
+++ b/sites/dev/docs/reference/api/part/config/measurements/readme.mdx
@@ -6,7 +6,7 @@ The `measurements` and `optionalMeasurements` properties on the
part configuration object list the part's required and optional
measurements respectively.
-You should only include what's required by the part itself, not its dependencies
+:::tipYou should only include what's required by the part itself, not its dependencies:::
## measurements
diff --git a/markdown/dev/reference/api/part/config/name/en.md b/sites/dev/docs/reference/api/part/config/name/readme.mdx
similarity index 97%
rename from markdown/dev/reference/api/part/config/name/en.md
rename to sites/dev/docs/reference/api/part/config/name/readme.mdx
index 864174a2825..82381311d31 100644
--- a/markdown/dev/reference/api/part/config/name/en.md
+++ b/sites/dev/docs/reference/api/part/config/name/readme.mdx
@@ -15,10 +15,10 @@ const part = {
}
```
-
+:::tip
We recommend to use a `design.part` format when naming your part.
This avoids naming clashes when people re-use your parts in other designs.
-
+:::
diff --git a/markdown/dev/reference/api/part/config/options/bool/en.md b/sites/dev/docs/reference/api/part/config/options/bool/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/config/options/bool/en.md
rename to sites/dev/docs/reference/api/part/config/options/bool/readme.mdx
index d17964e5264..37fcfd92dc0 100644
--- a/markdown/dev/reference/api/part/config/options/bool/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/bool/readme.mdx
@@ -11,7 +11,7 @@ A boolean option is a plain object with these properties:
- `bool` : Either `true` or `false` which will be the default
-
+:::tip
Like all options that are configured through an object, you can
add more properties to the options' object to implement functionality on
@@ -20,7 +20,7 @@ top of what's provided by the core library.
Refer to [extending options](/reference/api/part/config/options/extend) for
more details.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/part/config/options/const/en.md b/sites/dev/docs/reference/api/part/config/options/const/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/config/options/const/en.md
rename to sites/dev/docs/reference/api/part/config/options/const/readme.mdx
index cf35e3e4ad1..57e4bede555 100644
--- a/markdown/dev/reference/api/part/config/options/const/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/const/readme.mdx
@@ -24,7 +24,7 @@ const part = {
}
```
-
+:::tip
##### Why would you use this?
@@ -37,4 +37,4 @@ There are typically two use-cases for constant options:
parts of the code beyond the control of the end user, but accessible to
developers.
-
+:::
diff --git a/markdown/dev/reference/api/part/config/options/counter/en.md b/sites/dev/docs/reference/api/part/config/options/counter/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/config/options/counter/en.md
rename to sites/dev/docs/reference/api/part/config/options/counter/readme.mdx
index 3391fb18694..6f7fdd64136 100644
--- a/markdown/dev/reference/api/part/config/options/counter/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/counter/readme.mdx
@@ -13,7 +13,7 @@ Your counter option should be a plain object with these properties:
- `min` : The minimum integer value that's allowed
- `max` : The maximum integer value that's allowed
-
+:::tip
Like all options that are configured through an object, you can
add more properties to the options' object to implement functionality on
@@ -22,7 +22,7 @@ top of what's provided by the core library.
Refer to [extending options](/reference/api/part/config/options/extend) for
more details.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/part/config/options/deg/en.md b/sites/dev/docs/reference/api/part/config/options/deg/readme.mdx
similarity index 97%
rename from markdown/dev/reference/api/part/config/options/deg/en.md
rename to sites/dev/docs/reference/api/part/config/options/deg/readme.mdx
index 5c45014122f..d296657cec7 100644
--- a/markdown/dev/reference/api/part/config/options/deg/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/deg/readme.mdx
@@ -12,7 +12,7 @@ Your degree option should be a plain object with these properties:
- `min` : The minimum that's allowed
- `max` : The maximum that's allowed
-
+:::tip
Like all options that are configured through an object, you can
add more properties to the options' object to implement functionality on
@@ -21,7 +21,7 @@ top of what's provided by the core library.
Refer to [extending options](/reference/api/part/config/options/extend) for
more details.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/part/config/options/extend/en.md b/sites/dev/docs/reference/api/part/config/options/extend/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/config/options/extend/en.md
rename to sites/dev/docs/reference/api/part/config/options/extend/readme.mdx
index 505523fabe2..58c0da97df5 100644
--- a/markdown/dev/reference/api/part/config/options/extend/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/extend/readme.mdx
@@ -49,7 +49,7 @@ so it should appear after the options that do.
before any of the `order` values for options in the `style` menu,
the `fit` menu should appear before the `style` menu.
-
+:::note
##### This is not a core feature
@@ -57,9 +57,9 @@ To be clear, setting this here does not do anything in core.
It's merely extra metadata you can add on the option to facilitate
frontend integration.
-
+:::
-
+:::note
freesewing.org UI behavior:
- Ordering is performed using an alphabetic, not numeric, sort.
@@ -73,7 +73,7 @@ their names.
- However, the `advanced` menu, if present, is always ordered to
be the last menu, appearing after all the other menus.
-
+:::
## Suppress translation
@@ -111,12 +111,12 @@ options: {
As you can see above, you can set the `doNotTranslate` property to `true` and to indicate this.
-
+:::note
##### This is not a core feature
To be clear, setting this here does not do anything in core. It's merely extra
metadata you can add on the option to facilitate frontend integration.
-
+:::
diff --git a/markdown/dev/reference/api/part/config/options/list/en.md b/sites/dev/docs/reference/api/part/config/options/list/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/config/options/list/en.md
rename to sites/dev/docs/reference/api/part/config/options/list/readme.mdx
index 437b84353cd..f56675e0334 100644
--- a/markdown/dev/reference/api/part/config/options/list/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/list/readme.mdx
@@ -11,7 +11,7 @@ Your list option should be a plain object with these properties:
- `dflt` : The default for this option
- `list` : An array of available values options
-
+:::tip
Like all options that are configured through an object, you can
add more properties to the options' object to implement functionality on
@@ -20,7 +20,7 @@ top of what's provided by the core library.
Refer to [extending options](/reference/api/part/config/options/extend) for
more details.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/part/config/options/mm/en.md b/sites/dev/docs/reference/api/part/config/options/mm/readme.mdx
similarity index 90%
rename from markdown/dev/reference/api/part/config/options/mm/en.md
rename to sites/dev/docs/reference/api/part/config/options/mm/readme.mdx
index 9ae6688243b..fad04d32721 100644
--- a/markdown/dev/reference/api/part/config/options/mm/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/mm/readme.mdx
@@ -2,13 +2,13 @@
title: Millimeter options
---
-
+:::warning
While FreeSewing supports millimeter options, we recommend
using [percentage options][1] and will not accept
contributions that use millimeter options.
-
+:::
## Structure
@@ -22,15 +22,15 @@ A millimeter option should be a plain object with these properties:
```js
options: {
- elasticWidth: {
- mm: 35,
- min: 5,
- max: 80
+ elasticWidth: {
+ mm: 35,
+ min: 5,
+ max: 80
}
}
```
-
+:::note COMMENT (by joost)
##### What's wrong with millimeter options?
@@ -48,6 +48,6 @@ a footgun.
When you need a millimeter option, reach for a [snapped
percentage option][1] instead.
-
+:::
[1]: /reference/api/part/config/options/pct
diff --git a/markdown/dev/reference/api/part/config/options/pct/fromabs/en.md b/sites/dev/docs/reference/api/part/config/options/pct/fromabs/readme.mdx
similarity index 99%
rename from markdown/dev/reference/api/part/config/options/pct/fromabs/en.md
rename to sites/dev/docs/reference/api/part/config/options/pct/fromabs/readme.mdx
index 25dc86a8fff..af79d3e6662 100644
--- a/markdown/dev/reference/api/part/config/options/pct/fromabs/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/pct/fromabs/readme.mdx
@@ -12,14 +12,14 @@ To address this common grievance, FreeSewing allows you to add a
return the percentage the option should be set to to result in this
value.
-
+:::note
Note that this method will not change the percentage of the option.
It will merely return a percentage value. It is up to the
frontend designer to then either set this value, or suggest it to
the user.
-
+:::
## Structure
diff --git a/markdown/dev/reference/api/part/config/options/pct/en.md b/sites/dev/docs/reference/api/part/config/options/pct/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/config/options/pct/en.md
rename to sites/dev/docs/reference/api/part/config/options/pct/readme.mdx
index 8313cac3cd4..c23b66015f2 100644
--- a/markdown/dev/reference/api/part/config/options/pct/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/pct/readme.mdx
@@ -14,7 +14,7 @@ Your percentage option should be a plain object with these properties:
- `min` : The minimum percentage that's allowed
- `max` : The maximum percentage that's allowed
-
+:::note
###### Percentage options will be divided by 100 when loaded
@@ -28,9 +28,9 @@ So a percentage of `50` in your config file will be `0.5` when you read out that
The minimum and maximum (and default) percentages are not restricted to the range from `0%` to `100%`.
A percentage option that spans from `-25%` to `135%` is just as valid.
-
+:::
-
+:::tip
Like all options that are configured through an object, you can
add more properties to the options' object to implement functionality on
@@ -39,7 +39,7 @@ top of what's provided by the core library.
Refer to [extending options](/reference/api/part/config/options/extend) for
more details.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/part/config/options/pct/snap/en.md b/sites/dev/docs/reference/api/part/config/options/pct/snap/readme.mdx
similarity index 99%
rename from markdown/dev/reference/api/part/config/options/pct/snap/en.md
rename to sites/dev/docs/reference/api/part/config/options/pct/snap/readme.mdx
index c623d552e20..c912474d2b5 100644
--- a/markdown/dev/reference/api/part/config/options/pct/snap/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/pct/snap/readme.mdx
@@ -18,7 +18,7 @@ Your snapped percentage option should be a plain object with these properties:
- `snap`: Holds the snap configuration (see below)
- `toAbs`: a method returning the **millimeter value** of the option ([see `toAbs()`][toabs])
-
+:::tip
##### Values for snapped percentage options are available through `absoluteOptions`
Your draft method can not only destructure the `options` property to get access to options,
@@ -27,7 +27,7 @@ for those options with snaps configured.
See [the part `draft()` method](/reference/api/part/draft) for more details.
-
+:::
## Snap configuration
@@ -54,13 +54,13 @@ myOption: {
}
```
-
+:::note
In a case like this, the value will **always** be snapped,
because the snap points will be distributed equally across the entire range
of all possible inputs.
-
+:::
### snap holds an array of numbers
@@ -136,7 +136,7 @@ myOption: {
will be distributed equally across the entire range, and
the value will **always** be snapped,)
-
+:::note
##### Read on for an in-depth look at snapped percentage options
@@ -145,7 +145,7 @@ it does not explain why or when you should use them, or how they work.
Read on if you'd like to learn more about that.
-
+:::
## Example use-case
diff --git a/markdown/dev/reference/api/part/config/options/pct/snap/snap.png b/sites/dev/docs/reference/api/part/config/options/pct/snap/snap.png
similarity index 100%
rename from markdown/dev/reference/api/part/config/options/pct/snap/snap.png
rename to sites/dev/docs/reference/api/part/config/options/pct/snap/snap.png
diff --git a/markdown/dev/reference/api/part/config/options/pct/toabs/en.md b/sites/dev/docs/reference/api/part/config/options/pct/toabs/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/part/config/options/pct/toabs/en.md
rename to sites/dev/docs/reference/api/part/config/options/pct/toabs/readme.mdx
diff --git a/markdown/dev/reference/api/part/config/options/en.md b/sites/dev/docs/reference/api/part/config/options/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/config/options/en.md
rename to sites/dev/docs/reference/api/part/config/options/readme.mdx
index ad05ed8277a..381bb76a337 100644
--- a/markdown/dev/reference/api/part/config/options/en.md
+++ b/sites/dev/docs/reference/api/part/config/options/readme.mdx
@@ -46,14 +46,14 @@ These are the types of options supported by the FreeSewing core library:
These options can be [extended][extend] with additional, optional
information to help with their use outside of the core.
-
+:::tip
In parametric design, percentage options are by far the most common.
They also have the most features and flexibility.
-
+:::
-
+:::warning
While our core library supports millimeter (`mm`) options,
we do not allow them in designs contributed to FreeSewing.org
@@ -62,7 +62,7 @@ as they are a _red flag_ for poor parametric design.
If you believe you need `mm` options, look into [snapped
percentage options][snapped] instead.
-
+:::
[bool]: /reference/api/part/config/options/bool
[const]: /reference/api/part/config/options/const
diff --git a/markdown/dev/reference/api/part/config/plugins/en.md b/sites/dev/docs/reference/api/part/config/plugins/readme.mdx
similarity index 97%
rename from markdown/dev/reference/api/part/config/plugins/en.md
rename to sites/dev/docs/reference/api/part/config/plugins/readme.mdx
index 52d27fd9023..82930be52a0 100644
--- a/markdown/dev/reference/api/part/config/plugins/en.md
+++ b/sites/dev/docs/reference/api/part/config/plugins/readme.mdx
@@ -15,12 +15,12 @@ const part = {
draft: ({ part }) => part
}
```
-
+:::tip
You should only list the plugins that are required by the part itself,
not those required by its dependencies
-
+:::
## Passing data to a plugin
@@ -60,9 +60,9 @@ const myConditionalPlugin = {
Where `myPlugin` is the plugin itself, and `condition` is a method
that returns `true` if the plugin should be loaded.
-
+:::note RELATED
Refer to [the plugin guide](/guides/plugins) to learn
about conditional plugins
-
+:::
diff --git a/markdown/dev/reference/api/part/config/en.md b/sites/dev/docs/reference/api/part/config/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/part/config/en.md
rename to sites/dev/docs/reference/api/part/config/readme.mdx
diff --git a/markdown/dev/reference/api/part/config/stack/en.md b/sites/dev/docs/reference/api/part/config/stack/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/config/stack/en.md
rename to sites/dev/docs/reference/api/part/config/stack/readme.mdx
index 5e2b3fab62d..3d28fb65d4b 100644
--- a/markdown/dev/reference/api/part/config/stack/en.md
+++ b/sites/dev/docs/reference/api/part/config/stack/readme.mdx
@@ -43,9 +43,9 @@ the only part drafted within its stack and stacks do not overlap.
using the same stack.
This is how we achieve the layered look of parts in sample drafts.
-
+:::note RELATED
Please see [Stacks](/guides/designs/stacks) in the Design Guide for
more information about how stacks can be used.
-
+:::
diff --git a/markdown/dev/reference/api/part/draft/en.md b/sites/dev/docs/reference/api/part/draft/readme.mdx
similarity index 99%
rename from markdown/dev/reference/api/part/draft/en.md
rename to sites/dev/docs/reference/api/part/draft/readme.mdx
index 03cca8732f6..b28a175ef8c 100644
--- a/markdown/dev/reference/api/part/draft/en.md
+++ b/sites/dev/docs/reference/api/part/draft/readme.mdx
@@ -43,10 +43,10 @@ access the following properties:
|| **_Return value_** |
| `part` | Your draft method **must** return this |
-
+:::tip
Please note that there is no `optionalMeasurements` property.
Instead, optional measurements are accessed via the 'measurements'
property.
-
+:::
diff --git a/markdown/dev/reference/api/part/getid/en.md b/sites/dev/docs/reference/api/part/getid/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/getid/en.md
rename to sites/dev/docs/reference/api/part/getid/readme.mdx
index 754d0f7c092..074d9846b6b 100644
--- a/markdown/dev/reference/api/part/getid/en.md
+++ b/sites/dev/docs/reference/api/part/getid/readme.mdx
@@ -7,10 +7,10 @@ for ID Points/Paths/Snippets. This method will ensure the ID is unique by
keeping an internal incremental counter of the IDs that have been used.
It is typically used when programatically adding points, paths, or snippets.
-
+:::tip
This method can be destructured as `getID`
in [a part's draft method](/reference/api/part/draft).
-
+:::
## Part.getId() signature
diff --git a/markdown/dev/reference/api/part/hide/en.md b/sites/dev/docs/reference/api/part/hide/readme.mdx
similarity index 93%
rename from markdown/dev/reference/api/part/hide/en.md
rename to sites/dev/docs/reference/api/part/hide/readme.mdx
index f3acd9566e2..f76fb87277a 100644
--- a/markdown/dev/reference/api/part/hide/en.md
+++ b/sites/dev/docs/reference/api/part/hide/readme.mdx
@@ -5,18 +5,18 @@ title: Part.hide()
The `Part.hide()` method will mark the part as hidden.
This method returns the `part` object, so it's chainable.
-
+:::tip
This method can be destructured as `hidden`
in [a part's draft method](/reference/api/part/draft).
-
+:::
-
+:::note RELATED
The [unhide](/reference/api/part/unhide) and
[setHidden](/reference/api/part/sethidden) methods also control a
part's visibility
-
+:::
## Part.hide() example
diff --git a/markdown/dev/reference/api/part/en.md b/sites/dev/docs/reference/api/part/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/part/en.md
rename to sites/dev/docs/reference/api/part/readme.mdx
index 1d7fbb3f69a..bf11bfad0f1 100644
--- a/markdown/dev/reference/api/part/en.md
+++ b/sites/dev/docs/reference/api/part/readme.mdx
@@ -23,10 +23,10 @@ A Part object comes with the following properties:
- `points` : Holds the points used in the part
- `snippets` : Holds the snippets used in the part
-
+:::note RELATED
See [Using Attributes](/howtos/code/attributes)
for information about custom Attributes that can be used with Parts.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/part/sethidden/en.md b/sites/dev/docs/reference/api/part/sethidden/readme.mdx
similarity index 95%
rename from markdown/dev/reference/api/part/sethidden/en.md
rename to sites/dev/docs/reference/api/part/sethidden/readme.mdx
index caaffad1582..099bfaefc46 100644
--- a/markdown/dev/reference/api/part/sethidden/en.md
+++ b/sites/dev/docs/reference/api/part/sethidden/readme.mdx
@@ -9,18 +9,18 @@ This method returns the `part` object, so it's chainable
- Pass a *truthy* value: The part will be hidden
- Pass a *falsy* value: The part will be unhidden/revealed
-
+:::tip
This method can be destructured as `setHidden`
in [a part's draft method](/reference/api/part/draft).
-
+:::
-
+:::note RELATED
The [hide](/reference/api/part/hide) and
[unhide](/reference/api/part/unhide) also control a
part's visibility
-
+:::
## Part.setHidden() example
diff --git a/markdown/dev/reference/api/part/shorthand/en.md b/sites/dev/docs/reference/api/part/shorthand/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/part/shorthand/en.md
rename to sites/dev/docs/reference/api/part/shorthand/readme.mdx
diff --git a/markdown/dev/reference/api/part/unhide/en.md b/sites/dev/docs/reference/api/part/unhide/readme.mdx
similarity index 93%
rename from markdown/dev/reference/api/part/unhide/en.md
rename to sites/dev/docs/reference/api/part/unhide/readme.mdx
index 7eb69b64a57..2f0e0f1065f 100644
--- a/markdown/dev/reference/api/part/unhide/en.md
+++ b/sites/dev/docs/reference/api/part/unhide/readme.mdx
@@ -5,18 +5,18 @@ title: Part.unhide()
The `Part.unhide()` method will mark the part as not hidden.
This method returns the `part` object, so it's chainable.
-
+:::tip
This method can be destructured as `inhide`
in [a part's draft method](/reference/api/part/draft).
-
+:::
-
+:::note RELATED
The [hide](/reference/api/part/hide) and
[setHidden](/reference/api/part/sethidden) methods also control a
part's visibility
-
+:::
## Part.unhide() example
diff --git a/markdown/dev/reference/api/part/units/en.md b/sites/dev/docs/reference/api/part/units/readme.mdx
similarity index 95%
rename from markdown/dev/reference/api/part/units/en.md
rename to sites/dev/docs/reference/api/part/units/readme.mdx
index 7acae322a01..73f24e6f889 100644
--- a/markdown/dev/reference/api/part/units/en.md
+++ b/sites/dev/docs/reference/api/part/units/readme.mdx
@@ -5,9 +5,9 @@ title: Part.units()
The `Part.units()` method returns a value formatted according to the
units set in settings.
-
+:::note
This method is used internally.
You will probably want to the use `units()` method you can destructure
in [a part's draft method](/reference/api/part/draft) instead.
-
+:::
diff --git a/markdown/dev/reference/api/path/_curve/en.md b/sites/dev/docs/reference/api/path/_curve/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/path/_curve/en.md
rename to sites/dev/docs/reference/api/path/_curve/readme.mdx
index 75d5e30c194..89b7c3c9a40 100644
--- a/markdown/dev/reference/api/path/_curve/en.md
+++ b/sites/dev/docs/reference/api/path/_curve/readme.mdx
@@ -13,7 +13,7 @@ so you do not need to provide it.
Path path._curve(Point cp2, Point to)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/addclass/en.md b/sites/dev/docs/reference/api/path/addclass/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/path/addclass/en.md
rename to sites/dev/docs/reference/api/path/addclass/readme.mdx
index 4837fc6ba4e..e027ecf920a 100644
--- a/markdown/dev/reference/api/path/addclass/en.md
+++ b/sites/dev/docs/reference/api/path/addclass/readme.mdx
@@ -10,7 +10,7 @@ The `Path.addClass()` method adds a CSS class to the path.
Path path.addClass(string className)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/addtext/en.md b/sites/dev/docs/reference/api/path/addtext/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/path/addtext/en.md
rename to sites/dev/docs/reference/api/path/addtext/readme.mdx
index 8ce9c0b7021..4ff8e72c426 100644
--- a/markdown/dev/reference/api/path/addtext/en.md
+++ b/sites/dev/docs/reference/api/path/addtext/readme.mdx
@@ -12,7 +12,7 @@ Path path.addText(string text, string className = '')
The second argument will optionally be used to set the CSS class for the text.
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/angleat/en.md b/sites/dev/docs/reference/api/path/angleat/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/angleat/en.md
rename to sites/dev/docs/reference/api/path/angleat/readme.mdx
diff --git a/markdown/dev/reference/api/path/aspathstring/en.md b/sites/dev/docs/reference/api/path/aspathstring/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/aspathstring/en.md
rename to sites/dev/docs/reference/api/path/aspathstring/readme.mdx
diff --git a/markdown/dev/reference/api/path/asrenderprops/en.md b/sites/dev/docs/reference/api/path/asrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/asrenderprops/en.md
rename to sites/dev/docs/reference/api/path/asrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/path/attr/en.md b/sites/dev/docs/reference/api/path/attr/readme.mdx
similarity index 94%
rename from markdown/dev/reference/api/path/attr/en.md
rename to sites/dev/docs/reference/api/path/attr/readme.mdx
index 81bf3182525..ec3da84f0c1 100644
--- a/markdown/dev/reference/api/path/attr/en.md
+++ b/sites/dev/docs/reference/api/path/attr/readme.mdx
@@ -18,7 +18,7 @@ Path path.attr(
)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/bbox/en.md b/sites/dev/docs/reference/api/path/bbox/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/bbox/en.md
rename to sites/dev/docs/reference/api/path/bbox/readme.mdx
diff --git a/markdown/dev/reference/api/path/circlesegment/en.md b/sites/dev/docs/reference/api/path/circlesegment/readme.mdx
similarity index 91%
rename from markdown/dev/reference/api/path/circlesegment/en.md
rename to sites/dev/docs/reference/api/path/circlesegment/readme.mdx
index 00369994f6c..0be0a457b83 100644
--- a/markdown/dev/reference/api/path/circlesegment/en.md
+++ b/sites/dev/docs/reference/api/path/circlesegment/readme.mdx
@@ -9,14 +9,14 @@ A positive angle results in a counter-clockwise arc.
A negative angle results in a clockwise arc.
-
+:::tip
The new endpoint of this path is the same point
that
```js
path.end().rotate(deg, origin)
```
would return.
-
+:::
## Signature
@@ -24,7 +24,7 @@ would return.
Path path.circleSegment(deg, origin)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/clean/en.md b/sites/dev/docs/reference/api/path/clean/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/clean/en.md
rename to sites/dev/docs/reference/api/path/clean/readme.mdx
diff --git a/markdown/dev/reference/api/path/clone/en.md b/sites/dev/docs/reference/api/path/clone/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/clone/en.md
rename to sites/dev/docs/reference/api/path/clone/readme.mdx
diff --git a/markdown/dev/reference/api/path/close/en.md b/sites/dev/docs/reference/api/path/close/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/path/close/en.md
rename to sites/dev/docs/reference/api/path/close/readme.mdx
index 4908b4a0906..f954da69308 100644
--- a/markdown/dev/reference/api/path/close/en.md
+++ b/sites/dev/docs/reference/api/path/close/readme.mdx
@@ -10,7 +10,7 @@ The `Path.close()` method closes a path by drawing a straight line from the curr
Path path.close()
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/combine/en.md b/sites/dev/docs/reference/api/path/combine/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/combine/en.md
rename to sites/dev/docs/reference/api/path/combine/readme.mdx
diff --git a/markdown/dev/reference/api/path/curve/en.md b/sites/dev/docs/reference/api/path/curve/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/path/curve/en.md
rename to sites/dev/docs/reference/api/path/curve/readme.mdx
index 8cab6c113cc..a24df16c2dd 100644
--- a/markdown/dev/reference/api/path/curve/en.md
+++ b/sites/dev/docs/reference/api/path/curve/readme.mdx
@@ -11,7 +11,7 @@ via two control points to a given endpoint.
Path path.curve(Point cp1, Point cp2, Point to)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/curve_/en.md b/sites/dev/docs/reference/api/path/curve_/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/path/curve_/en.md
rename to sites/dev/docs/reference/api/path/curve_/readme.mdx
index 0955e15cbcb..6e8b18d21bc 100644
--- a/markdown/dev/reference/api/path/curve_/en.md
+++ b/sites/dev/docs/reference/api/path/curve_/readme.mdx
@@ -12,7 +12,7 @@ identical to the end point.
Path path.curve_(Point cp1, Point to)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/divide/en.md b/sites/dev/docs/reference/api/path/divide/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/divide/en.md
rename to sites/dev/docs/reference/api/path/divide/readme.mdx
diff --git a/markdown/dev/reference/api/path/edge/en.md b/sites/dev/docs/reference/api/path/edge/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/edge/en.md
rename to sites/dev/docs/reference/api/path/edge/readme.mdx
diff --git a/markdown/dev/reference/api/path/end/en.md b/sites/dev/docs/reference/api/path/end/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/path/end/en.md
rename to sites/dev/docs/reference/api/path/end/readme.mdx
index edd73a6dfa8..d354405e0e8 100644
--- a/markdown/dev/reference/api/path/end/en.md
+++ b/sites/dev/docs/reference/api/path/end/readme.mdx
@@ -10,7 +10,7 @@ The `Path.end()` method returns the Point object at the end of the path.
Point path.end()
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/hide/en.md b/sites/dev/docs/reference/api/path/hide/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/path/hide/en.md
rename to sites/dev/docs/reference/api/path/hide/readme.mdx
index e191eec3fcd..e441fda5f25 100644
--- a/markdown/dev/reference/api/path/hide/en.md
+++ b/sites/dev/docs/reference/api/path/hide/readme.mdx
@@ -10,7 +10,7 @@ The `Path.hide()` hides the path so it does not appear in the output.
Path path.hide()
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/insop/en.md b/sites/dev/docs/reference/api/path/insop/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/path/insop/en.md
rename to sites/dev/docs/reference/api/path/insop/readme.mdx
index a07637d61e1..e81aba387e6 100644
--- a/markdown/dev/reference/api/path/insop/en.md
+++ b/sites/dev/docs/reference/api/path/insop/readme.mdx
@@ -11,7 +11,7 @@ operation](/reference/api/path/noop) with id `id`.
Path path.insop(string id, Path path)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
diff --git a/markdown/dev/reference/api/path/intersects/en.md b/sites/dev/docs/reference/api/path/intersects/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/path/intersects/en.md
rename to sites/dev/docs/reference/api/path/intersects/readme.mdx
index fc41fa2ea42..dc7e76b299d 100644
--- a/markdown/dev/reference/api/path/intersects/en.md
+++ b/sites/dev/docs/reference/api/path/intersects/readme.mdx
@@ -5,14 +5,14 @@ title: Path.intersects()
The `Path.intersects()` method returns the Point object(s) where the path
intersects with a path you pass it.
-
+:::warning
This method can sometimes fail to find intersections in some curves
due to a limitation in an underlying Bézier library.
Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367)
for more information.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/path/intersectsx/en.md b/sites/dev/docs/reference/api/path/intersectsx/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/path/intersectsx/en.md
rename to sites/dev/docs/reference/api/path/intersectsx/readme.mdx
index dc5cf81e97e..dceffe551af 100644
--- a/markdown/dev/reference/api/path/intersectsx/en.md
+++ b/sites/dev/docs/reference/api/path/intersectsx/readme.mdx
@@ -5,14 +5,14 @@ title: Path.intersectsX()
The `Path.intersectsX()` method returns the Point object(s) where the path
intersects with a given X-value.
-
+:::warning
This method can sometimes fail to find intersections in some curves
due to a limitation in an underlying Bézier library.
Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367)
for more information.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/path/intersectsy/en.md b/sites/dev/docs/reference/api/path/intersectsy/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/path/intersectsy/en.md
rename to sites/dev/docs/reference/api/path/intersectsy/readme.mdx
index 95a3f12c599..afb075424e4 100644
--- a/markdown/dev/reference/api/path/intersectsy/en.md
+++ b/sites/dev/docs/reference/api/path/intersectsy/readme.mdx
@@ -5,14 +5,14 @@ title: Path.intersectsY()
The `Path.intersectsY()` method returns the Point object(s) where the path
intersects with a given Y-value.
-
+:::warning
This method can sometimes fail to find intersections in some curves
due to a limitation in an underlying Bézier library.
Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367)
for more information.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/path/join/en.md b/sites/dev/docs/reference/api/path/join/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/join/en.md
rename to sites/dev/docs/reference/api/path/join/readme.mdx
diff --git a/markdown/dev/reference/api/path/length/en.md b/sites/dev/docs/reference/api/path/length/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/length/en.md
rename to sites/dev/docs/reference/api/path/length/readme.mdx
diff --git a/markdown/dev/reference/api/path/line/en.md b/sites/dev/docs/reference/api/path/line/readme.mdx
similarity index 87%
rename from markdown/dev/reference/api/path/line/en.md
rename to sites/dev/docs/reference/api/path/line/readme.mdx
index 6629a149158..346da53d4b1 100644
--- a/markdown/dev/reference/api/path/line/en.md
+++ b/sites/dev/docs/reference/api/path/line/readme.mdx
@@ -11,7 +11,7 @@ given point.
Path path.line(Point to)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/move/en.md b/sites/dev/docs/reference/api/path/move/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/move/en.md
rename to sites/dev/docs/reference/api/path/move/readme.mdx
diff --git a/markdown/dev/reference/api/path/noop/en.md b/sites/dev/docs/reference/api/path/noop/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/path/noop/en.md
rename to sites/dev/docs/reference/api/path/noop/readme.mdx
index a4b8f349d6b..bee37514e15 100644
--- a/markdown/dev/reference/api/path/noop/en.md
+++ b/sites/dev/docs/reference/api/path/noop/readme.mdx
@@ -12,7 +12,7 @@ with [`Path.insop()`](/reference/api/path/insop).
Path path.noop(string id)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/offset/en.md b/sites/dev/docs/reference/api/path/offset/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/offset/en.md
rename to sites/dev/docs/reference/api/path/offset/readme.mdx
diff --git a/markdown/dev/reference/api/path/en.md b/sites/dev/docs/reference/api/path/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/path/en.md
rename to sites/dev/docs/reference/api/path/readme.mdx
index e2163d3919b..27f752df9b2 100644
--- a/markdown/dev/reference/api/path/en.md
+++ b/sites/dev/docs/reference/api/path/readme.mdx
@@ -24,10 +24,10 @@ A Path object comes with the following properties:
[Path.setHidden()](/reference/api/path/sethidden) for various methods that
allow setting this in a chainable way.
-
+:::note RELATED
See [Using Attributes](/howtos/code/attributes)
for information about custom Attributes that can be used with Paths.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/path/reverse/en.md b/sites/dev/docs/reference/api/path/reverse/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/reverse/en.md
rename to sites/dev/docs/reference/api/path/reverse/readme.mdx
diff --git a/markdown/dev/reference/api/path/rotate/en.md b/sites/dev/docs/reference/api/path/rotate/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/rotate/en.md
rename to sites/dev/docs/reference/api/path/rotate/readme.mdx
diff --git a/markdown/dev/reference/api/path/roughlength/en.md b/sites/dev/docs/reference/api/path/roughlength/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/roughlength/en.md
rename to sites/dev/docs/reference/api/path/roughlength/readme.mdx
diff --git a/markdown/dev/reference/api/path/setclass/en.md b/sites/dev/docs/reference/api/path/setclass/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/path/setclass/en.md
rename to sites/dev/docs/reference/api/path/setclass/readme.mdx
index 2152530f684..1589e828b94 100644
--- a/markdown/dev/reference/api/path/setclass/en.md
+++ b/sites/dev/docs/reference/api/path/setclass/readme.mdx
@@ -10,7 +10,7 @@ The `Path.setClass()` method sets the CSS class(es) of the path.
Path path.setClass(string className)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/sethidden/en.md b/sites/dev/docs/reference/api/path/sethidden/readme.mdx
similarity index 90%
rename from markdown/dev/reference/api/path/sethidden/en.md
rename to sites/dev/docs/reference/api/path/sethidden/readme.mdx
index f5aef358873..c545af74ca9 100644
--- a/markdown/dev/reference/api/path/sethidden/en.md
+++ b/sites/dev/docs/reference/api/path/sethidden/readme.mdx
@@ -11,7 +11,7 @@ value you pass it.
Path path.setHidden(bool hidden = false)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/settext/en.md b/sites/dev/docs/reference/api/path/settext/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/path/settext/en.md
rename to sites/dev/docs/reference/api/path/settext/readme.mdx
index 9c68ebafe11..dac1fd988da 100644
--- a/markdown/dev/reference/api/path/settext/en.md
+++ b/sites/dev/docs/reference/api/path/settext/readme.mdx
@@ -12,7 +12,7 @@ Path path.setText(string text, string className = '')
The second argument will optionally be used to set the CSS class for the text.
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/shiftalong/en.md b/sites/dev/docs/reference/api/path/shiftalong/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/shiftalong/en.md
rename to sites/dev/docs/reference/api/path/shiftalong/readme.mdx
diff --git a/markdown/dev/reference/api/path/shiftfractionalong/en.md b/sites/dev/docs/reference/api/path/shiftfractionalong/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/shiftfractionalong/en.md
rename to sites/dev/docs/reference/api/path/shiftfractionalong/readme.mdx
diff --git a/markdown/dev/reference/api/path/smurve/en.md b/sites/dev/docs/reference/api/path/smurve/readme.mdx
similarity index 91%
rename from markdown/dev/reference/api/path/smurve/en.md
rename to sites/dev/docs/reference/api/path/smurve/readme.mdx
index 3ca5367c1e6..193e6c002d4 100644
--- a/markdown/dev/reference/api/path/smurve/en.md
+++ b/sites/dev/docs/reference/api/path/smurve/readme.mdx
@@ -11,7 +11,7 @@ A smooth curve means it will use the reflection of the end control point of the
Path path.smurve(Point cp2, Point end)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/smurve_/en.md b/sites/dev/docs/reference/api/path/smurve_/readme.mdx
similarity index 91%
rename from markdown/dev/reference/api/path/smurve_/en.md
rename to sites/dev/docs/reference/api/path/smurve_/readme.mdx
index 3b699d7353e..620af2bdf69 100644
--- a/markdown/dev/reference/api/path/smurve_/en.md
+++ b/sites/dev/docs/reference/api/path/smurve_/readme.mdx
@@ -13,7 +13,7 @@ A smooth curve means it will use the reflection of the end control point of the
Path path.smurve_(Point cp2, Point end)
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/split/en.md b/sites/dev/docs/reference/api/path/split/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/split/en.md
rename to sites/dev/docs/reference/api/path/split/readme.mdx
diff --git a/markdown/dev/reference/api/path/start/en.md b/sites/dev/docs/reference/api/path/start/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/path/start/en.md
rename to sites/dev/docs/reference/api/path/start/readme.mdx
index f79e2ef085b..e3d01036911 100644
--- a/markdown/dev/reference/api/path/start/en.md
+++ b/sites/dev/docs/reference/api/path/start/readme.mdx
@@ -10,7 +10,7 @@ The `Path.start()` method returns the Point object at the start of the path.
Point path.start()
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/path/translate/en.md b/sites/dev/docs/reference/api/path/translate/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/translate/en.md
rename to sites/dev/docs/reference/api/path/translate/readme.mdx
diff --git a/markdown/dev/reference/api/path/trim/en.md b/sites/dev/docs/reference/api/path/trim/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/path/trim/en.md
rename to sites/dev/docs/reference/api/path/trim/readme.mdx
diff --git a/markdown/dev/reference/api/path/unhide/en.md b/sites/dev/docs/reference/api/path/unhide/readme.mdx
similarity index 90%
rename from markdown/dev/reference/api/path/unhide/en.md
rename to sites/dev/docs/reference/api/path/unhide/readme.mdx
index 9ea89dca286..f108eebd19e 100644
--- a/markdown/dev/reference/api/path/unhide/en.md
+++ b/sites/dev/docs/reference/api/path/unhide/readme.mdx
@@ -12,7 +12,7 @@ hidden via `Path.hide()`.
Path path.unhide()
```
-This method is chainable as it returns the `Path` object
+:::tipThis method is chainable as it returns the `Path` object:::
## Example
diff --git a/markdown/dev/reference/api/pattern/addpart/en.md b/sites/dev/docs/reference/api/pattern/addpart/readme.mdx
similarity index 93%
rename from markdown/dev/reference/api/pattern/addpart/en.md
rename to sites/dev/docs/reference/api/pattern/addpart/readme.mdx
index ece42d850e1..720672358fe 100644
--- a/markdown/dev/reference/api/pattern/addpart/en.md
+++ b/sites/dev/docs/reference/api/pattern/addpart/readme.mdx
@@ -5,7 +5,7 @@ title: Pattern.addPart()
The `Pattern.addPart()` method allows you to add a part to a pattern.
It has the same effect as passing a part to the Design constructor.
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
## Pattern.addPart() signature
diff --git a/markdown/dev/reference/api/pattern/draft/en.md b/sites/dev/docs/reference/api/pattern/draft/readme.mdx
similarity index 91%
rename from markdown/dev/reference/api/pattern/draft/en.md
rename to sites/dev/docs/reference/api/pattern/draft/readme.mdx
index 9d7b3d636bb..b4f798ec980 100644
--- a/markdown/dev/reference/api/pattern/draft/en.md
+++ b/sites/dev/docs/reference/api/pattern/draft/readme.mdx
@@ -7,7 +7,7 @@ making sure to do so in the right order, handle dependencies, resolve
options to their absolute values and a number of other housekeeping things
that are required for the pattern to be drafted.
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
## Pattern.draft() signature
diff --git a/markdown/dev/reference/api/pattern/draftpartforset/en.md b/sites/dev/docs/reference/api/pattern/draftpartforset/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/pattern/draftpartforset/en.md
rename to sites/dev/docs/reference/api/pattern/draftpartforset/readme.mdx
index 0a3b08ca6db..d3e19786c8e 100644
--- a/markdown/dev/reference/api/pattern/draftpartforset/en.md
+++ b/sites/dev/docs/reference/api/pattern/draftpartforset/readme.mdx
@@ -5,7 +5,7 @@ title: Pattern.draftPartForSet()
A pattern's `draftPartForSet()` method will draft a part using a
given set of settings.
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
## Pattern.draftPartForSet() signature
diff --git a/markdown/dev/reference/api/pattern/getconfig/en.md b/sites/dev/docs/reference/api/pattern/getconfig/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/pattern/getconfig/en.md
rename to sites/dev/docs/reference/api/pattern/getconfig/readme.mdx
diff --git a/markdown/dev/reference/api/pattern/getlogs/en.md b/sites/dev/docs/reference/api/pattern/getlogs/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/pattern/getlogs/en.md
rename to sites/dev/docs/reference/api/pattern/getlogs/readme.mdx
diff --git a/markdown/dev/reference/api/pattern/getrenderprops/en.md b/sites/dev/docs/reference/api/pattern/getrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/pattern/getrenderprops/en.md
rename to sites/dev/docs/reference/api/pattern/getrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/pattern/on/en.md b/sites/dev/docs/reference/api/pattern/on/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/pattern/on/en.md
rename to sites/dev/docs/reference/api/pattern/on/readme.mdx
index 58494efaf98..86c89500033 100644
--- a/markdown/dev/reference/api/pattern/on/en.md
+++ b/sites/dev/docs/reference/api/pattern/on/readme.mdx
@@ -7,7 +7,7 @@ pattern's [lifecycle hooks](/reference/hooks/). It takes the
lifecycle hook's name as the first argument and the function as the second.
This method will then be triggered by the lifecycle hook.
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
## Pattern.on() signature
@@ -15,13 +15,13 @@ This method will then be triggered by the lifecycle hook.
Pattern pattern.on(string hook, function method)
```
-
+:::tip
Refer to [the Lifecycle hooks documentation](/reference/hooks/) for a list
of all available lifecycle hooks, as well as the signature of the function you
should pass it.
-
+:::
## Pattern.on() example
@@ -33,8 +33,8 @@ pattern.on('preRender', function(svg) {
Your pattern now has a yellow background.
-
+:::tip
The [plugin guide](/guides/plugins/) contains more info on how you can use hooks
-
+:::
diff --git a/markdown/dev/reference/api/pattern/en.md b/sites/dev/docs/reference/api/pattern/readme.mdx
similarity index 99%
rename from markdown/dev/reference/api/pattern/en.md
rename to sites/dev/docs/reference/api/pattern/readme.mdx
index fbceb6f7bd9..85f74cb2c2d 100644
--- a/markdown/dev/reference/api/pattern/en.md
+++ b/sites/dev/docs/reference/api/pattern/readme.mdx
@@ -55,7 +55,7 @@ It is what powers FreeSewing's [sampling capabilities](/reference/api/pattern/sa
it also allows you to draft some pattern parts with one set of measurements, and other parts
with another set. For example if you have an asymmetric model to fit.
-
+:::note
##### Core always keeps a set of settings
@@ -65,7 +65,7 @@ until the day you want to use it.
However, it's good to keep in mind that under the hood, FreeSewing will always use a set of settings.
It just so happens that in most cases, there will be only one settings object in the set.
-
+:::
## Pattern attributes
diff --git a/markdown/dev/reference/api/pattern/render/en.md b/sites/dev/docs/reference/api/pattern/render/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/pattern/render/en.md
rename to sites/dev/docs/reference/api/pattern/render/readme.mdx
diff --git a/markdown/dev/reference/api/pattern/sample/en.md b/sites/dev/docs/reference/api/pattern/sample/readme.mdx
similarity index 95%
rename from markdown/dev/reference/api/pattern/sample/en.md
rename to sites/dev/docs/reference/api/pattern/sample/readme.mdx
index fbb18f7c58a..3df3d260406 100644
--- a/markdown/dev/reference/api/pattern/sample/en.md
+++ b/sites/dev/docs/reference/api/pattern/sample/readme.mdx
@@ -6,7 +6,7 @@ The `Pattern.sample()` method will _sample_ the pattern which means
to draft multiple variants of the same pattern, and stack them on
top of each other.
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
Under the hood, this method will call one of
[Pattern.sampleOption()](/reference/api/pattern/sampleoption),
diff --git a/markdown/dev/reference/api/pattern/samplemeasurement/en.md b/sites/dev/docs/reference/api/pattern/samplemeasurement/readme.mdx
similarity index 91%
rename from markdown/dev/reference/api/pattern/samplemeasurement/en.md
rename to sites/dev/docs/reference/api/pattern/samplemeasurement/readme.mdx
index a9900d66b7b..b8ebe44ab89 100644
--- a/markdown/dev/reference/api/pattern/samplemeasurement/en.md
+++ b/sites/dev/docs/reference/api/pattern/samplemeasurement/readme.mdx
@@ -9,11 +9,11 @@ top of each other.
In this particular case, it will draft 10 variants of the pattern that vary
the measurement of your choice between 90% and 110% if the value in the settings.
-
+:::tip
The goal of measurement sampling is to understand the impact of a given measurement on a pattern.
-
+:::
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
## Pattern.sampleMeasurement() signature
diff --git a/markdown/dev/reference/api/pattern/samplemodels/en.md b/sites/dev/docs/reference/api/pattern/samplemodels/readme.mdx
similarity index 95%
rename from markdown/dev/reference/api/pattern/samplemodels/en.md
rename to sites/dev/docs/reference/api/pattern/samplemodels/readme.mdx
index c25195b6492..eeeb6b7d80b 100644
--- a/markdown/dev/reference/api/pattern/samplemodels/en.md
+++ b/sites/dev/docs/reference/api/pattern/samplemodels/readme.mdx
@@ -8,11 +8,11 @@ top of each other.
In this particular case, it will draft a variants for each of the models you pass it.
-
+:::tip
The goal of model sampling is to verify that a pattern grades correctly up and down as sizes change.
-
+:::
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
## Pattern.sampleModels() signature
diff --git a/markdown/dev/reference/api/pattern/sampleoption/en.md b/sites/dev/docs/reference/api/pattern/sampleoption/readme.mdx
similarity index 94%
rename from markdown/dev/reference/api/pattern/sampleoption/en.md
rename to sites/dev/docs/reference/api/pattern/sampleoption/readme.mdx
index 557e889bcde..d4d2a09b34f 100644
--- a/markdown/dev/reference/api/pattern/sampleoption/en.md
+++ b/sites/dev/docs/reference/api/pattern/sampleoption/readme.mdx
@@ -15,12 +15,12 @@ In this particular case, the variants it drafts depend
- For a List option, each option in the list will be sampled
- For a Boolean option, both `false` and `true` will be sampled
-
+:::tip
The goal of option sampling is to verify the impact of an option on the pattern, and verify that
its min and max boundaries are correct and its default value is sensible.
-
+:::
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
## Pattern.sampleOption() signature
diff --git a/markdown/dev/reference/api/pattern/use/en.md b/sites/dev/docs/reference/api/pattern/use/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/pattern/use/en.md
rename to sites/dev/docs/reference/api/pattern/use/readme.mdx
index 963d0ab8132..42fabb436a4 100644
--- a/markdown/dev/reference/api/pattern/use/en.md
+++ b/sites/dev/docs/reference/api/pattern/use/readme.mdx
@@ -6,7 +6,7 @@ The `Pattern.use()` method will load a FreeSewing plugin.
Plugins are a way to extend a pattern's functionality.
For more details, refer to [the plugin guide](/guides/plugins/).
-This method is chainable as it returns the Pattern object
+:::noteThis method is chainable as it returns the Pattern object:::
## Pattern.use() signature
diff --git a/markdown/dev/reference/api/point/addcircle/en.md b/sites/dev/docs/reference/api/point/addcircle/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/point/addcircle/en.md
rename to sites/dev/docs/reference/api/point/addcircle/readme.mdx
index 012c53b5165..0a675f3432a 100644
--- a/markdown/dev/reference/api/point/addcircle/en.md
+++ b/sites/dev/docs/reference/api/point/addcircle/readme.mdx
@@ -15,7 +15,7 @@ Point point.addCircle(
)
```
-This method is chainable as it returns the `Point` object
+:::tipThis method is chainable as it returns the `Point` object:::
## Example
diff --git a/markdown/dev/reference/api/point/addtext/en.md b/sites/dev/docs/reference/api/point/addtext/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/point/addtext/en.md
rename to sites/dev/docs/reference/api/point/addtext/readme.mdx
index daa18b6c23b..af2e5b25672 100644
--- a/markdown/dev/reference/api/point/addtext/en.md
+++ b/sites/dev/docs/reference/api/point/addtext/readme.mdx
@@ -15,7 +15,7 @@ Point point.addText(
)
```
-This method is chainable as it returns the `Point` object
+:::tipThis method is chainable as it returns the `Point` object:::
## Example
@@ -40,4 +40,4 @@ Point point.addText(
## Notes
-Remember to [use translation keys, not text](/guides/best-practices/use-translation-keys)
+Remember to [use translation keys, not text](/guides/best-practices#use-translation-keys)
diff --git a/markdown/dev/reference/api/point/angle/en.md b/sites/dev/docs/reference/api/point/angle/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/angle/en.md
rename to sites/dev/docs/reference/api/point/angle/readme.mdx
diff --git a/markdown/dev/reference/api/point/asrenderprops/en.md b/sites/dev/docs/reference/api/point/asrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/asrenderprops/en.md
rename to sites/dev/docs/reference/api/point/asrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/point/attr/en.md b/sites/dev/docs/reference/api/point/attr/readme.mdx
similarity index 93%
rename from markdown/dev/reference/api/point/attr/en.md
rename to sites/dev/docs/reference/api/point/attr/readme.mdx
index ec0584b306f..b66cf21e379 100644
--- a/markdown/dev/reference/api/point/attr/en.md
+++ b/sites/dev/docs/reference/api/point/attr/readme.mdx
@@ -19,7 +19,7 @@ Point point.attr(
If the third parameter is set to `true` it will call [`this.attributes.set()`](/reference/api/attributes/set/) instead, thereby overwriting the value of the attribute.
-This method is chainable as it returns the `Point` object
+:::tipThis method is chainable as it returns the `Point` object:::
## Example
diff --git a/markdown/dev/reference/api/point/clone/en.md b/sites/dev/docs/reference/api/point/clone/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/point/clone/en.md
rename to sites/dev/docs/reference/api/point/clone/readme.mdx
index 44cef8d360b..696beeafa7e 100644
--- a/markdown/dev/reference/api/point/clone/en.md
+++ b/sites/dev/docs/reference/api/point/clone/readme.mdx
@@ -11,7 +11,7 @@ attributes as the original point.
Point point.clone()
```
-This method is chainable as it returns the `Point` object
+:::tipThis method is chainable as it returns the `Point` object:::
## Example
diff --git a/markdown/dev/reference/api/point/copy/en.md b/sites/dev/docs/reference/api/point/copy/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/copy/en.md
rename to sites/dev/docs/reference/api/point/copy/readme.mdx
diff --git a/markdown/dev/reference/api/point/dx/en.md b/sites/dev/docs/reference/api/point/dx/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/dx/en.md
rename to sites/dev/docs/reference/api/point/dx/readme.mdx
diff --git a/markdown/dev/reference/api/point/dy/en.md b/sites/dev/docs/reference/api/point/dy/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/dy/en.md
rename to sites/dev/docs/reference/api/point/dy/readme.mdx
diff --git a/markdown/dev/reference/api/point/flipx/en.md b/sites/dev/docs/reference/api/point/flipx/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/flipx/en.md
rename to sites/dev/docs/reference/api/point/flipx/readme.mdx
diff --git a/markdown/dev/reference/api/point/flipy/en.md b/sites/dev/docs/reference/api/point/flipy/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/flipy/en.md
rename to sites/dev/docs/reference/api/point/flipy/readme.mdx
diff --git a/markdown/dev/reference/api/point/en.md b/sites/dev/docs/reference/api/point/readme.mdx
similarity index 97%
rename from markdown/dev/reference/api/point/en.md
rename to sites/dev/docs/reference/api/point/readme.mdx
index 125885c8171..154c2c6aff9 100644
--- a/markdown/dev/reference/api/point/en.md
+++ b/sites/dev/docs/reference/api/point/readme.mdx
@@ -23,10 +23,10 @@ Point objects come with the following properties:
- `y` : The Y-coordinate of the point
- `attributes` : An [Attributes](/reference/api/attributes) instance holding the point's attributes
-
+:::note RELATED
See [Using Attributes](/howtos/code/attributes)
for information about custom Attributes that can be used with Points.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/point/rotate/en.md b/sites/dev/docs/reference/api/point/rotate/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/rotate/en.md
rename to sites/dev/docs/reference/api/point/rotate/readme.mdx
diff --git a/markdown/dev/reference/api/point/setcircle/en.md b/sites/dev/docs/reference/api/point/setcircle/readme.mdx
similarity index 93%
rename from markdown/dev/reference/api/point/setcircle/en.md
rename to sites/dev/docs/reference/api/point/setcircle/readme.mdx
index 38bcbb96278..736b9442154 100644
--- a/markdown/dev/reference/api/point/setcircle/en.md
+++ b/sites/dev/docs/reference/api/point/setcircle/readme.mdx
@@ -21,7 +21,7 @@ Point point.setCircle(
)
```
-This method is chainable as it returns the `Point` object
+:::tipThis method is chainable as it returns the `Point` object:::
## Example
diff --git a/markdown/dev/reference/api/point/settext/en.md b/sites/dev/docs/reference/api/point/settext/readme.mdx
similarity index 80%
rename from markdown/dev/reference/api/point/settext/en.md
rename to sites/dev/docs/reference/api/point/settext/readme.mdx
index 2b192ec71d3..cb1b2c6a304 100644
--- a/markdown/dev/reference/api/point/settext/en.md
+++ b/sites/dev/docs/reference/api/point/settext/readme.mdx
@@ -15,7 +15,7 @@ Point point.setText(
)
```
-This method is chainable as it returns the `Point` object
+:::tipThis method is chainable as it returns the `Point` object:::
## Example
@@ -38,4 +38,6 @@ Point point.setText(
```
-Remember to [use translation keys, not text](/guides/best-practices/use-translation-keys)
+## Notes
+
+Remember to [use translation keys, not text](/guides/best-practices#use-translation-keys)
diff --git a/markdown/dev/reference/api/point/shift/en.md b/sites/dev/docs/reference/api/point/shift/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/shift/en.md
rename to sites/dev/docs/reference/api/point/shift/readme.mdx
diff --git a/markdown/dev/reference/api/point/shiftfractiontowards/en.md b/sites/dev/docs/reference/api/point/shiftfractiontowards/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/shiftfractiontowards/en.md
rename to sites/dev/docs/reference/api/point/shiftfractiontowards/readme.mdx
diff --git a/markdown/dev/reference/api/point/shiftoutwards/en.md b/sites/dev/docs/reference/api/point/shiftoutwards/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/shiftoutwards/en.md
rename to sites/dev/docs/reference/api/point/shiftoutwards/readme.mdx
diff --git a/markdown/dev/reference/api/point/shifttowards/en.md b/sites/dev/docs/reference/api/point/shifttowards/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/shifttowards/en.md
rename to sites/dev/docs/reference/api/point/shifttowards/readme.mdx
diff --git a/markdown/dev/reference/api/point/sitson/en.md b/sites/dev/docs/reference/api/point/sitson/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/sitson/en.md
rename to sites/dev/docs/reference/api/point/sitson/readme.mdx
diff --git a/markdown/dev/reference/api/point/sitsroughlyon/en.md b/sites/dev/docs/reference/api/point/sitsroughlyon/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/sitsroughlyon/en.md
rename to sites/dev/docs/reference/api/point/sitsroughlyon/readme.mdx
diff --git a/markdown/dev/reference/api/point/slope/en.md b/sites/dev/docs/reference/api/point/slope/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/slope/en.md
rename to sites/dev/docs/reference/api/point/slope/readme.mdx
diff --git a/markdown/dev/reference/api/point/translate/en.md b/sites/dev/docs/reference/api/point/translate/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/point/translate/en.md
rename to sites/dev/docs/reference/api/point/translate/readme.mdx
diff --git a/markdown/dev/reference/api/en.md b/sites/dev/docs/reference/api/readme.mdx
similarity index 97%
rename from markdown/dev/reference/api/en.md
rename to sites/dev/docs/reference/api/readme.mdx
index 86f69f932ff..9c9d19a40f9 100644
--- a/markdown/dev/reference/api/en.md
+++ b/sites/dev/docs/reference/api/readme.mdx
@@ -6,14 +6,14 @@ This is the documentation for FreeSewing's core library, published as `@freesewi
It's a complete toolbox for parametric design with a primary focus on
sewing patterns, but can be utilized for a variety of similar 2D design tasks.
-
+:::tip
##### Looking to get started?
-You are currently browsing the reference documentation.
+You are currently browsing the reference documentation.
Please refer to our [tutorials](/tutorials) to get started.
-
+:::
## Core API Documentation
@@ -21,7 +21,7 @@ Please refer to our [tutorials](/tutorials) to get started.
## Named exports
-In general, software published under the FreeSewing namespaces prefers named
+In general, software published under the FreeSewing namespaces prefers named
exports over default exports, and the `@freesewing/core` package provides several of them.
I have grouped them below in different categories:
@@ -51,7 +51,7 @@ I have grouped them below in different categories:
| `goldenRatio` | The [golden ratio](https://en.wikipedia.org/wiki/Golden_ratio) constant: `1.618034` |
| `version` | The version of `@freesewing/core` |
-
+:::note RELATED
The `cbqc` cubic Bézier quarter circle constant is used to draw circles
using Bézier curves.
@@ -65,7 +65,7 @@ const quarterCircle = new Path()
new Point(radius, 0))
```
-
+:::
### Utilities
@@ -74,7 +74,7 @@ const quarterCircle = new Path()
| `beamIntersectsCircle` | See the [beamIntersectsCircle](/reference/api/utils/beamintersectscircle) documentation |
| `beamIntersectsCurve` | See the [beamIntersectsCurve](/reference/api/utils/beamintersectscurve) documentation |
| `beamIntersectsX` | See the [beamIntersectsX](/reference/api/utils/beamintersectsx) documentation |
-| `beamIntersectsY` | See the [beamIntersectsY](/reference/api/utils//beamintersectsy) documentation |
+| `beamIntersectsY` | See the [beamIntersectsY](/reference/api/utils/beamintersectsy) documentation |
| `beamsIntersect` | See the [beamsIntersect](/reference/api/utils/beamsintersect) documentation |
| `Bezier` | A re-export of [the bezier-js dependency](https://www.npmjs.com/package/bezier-js) |
| `capitalize` | See the [capitalize](/reference/api/utils/capitalize) documentation |
diff --git a/markdown/dev/reference/api/snippet/asrenderprops/en.md b/sites/dev/docs/reference/api/snippet/asrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/snippet/asrenderprops/en.md
rename to sites/dev/docs/reference/api/snippet/asrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/snippet/attr/en.md b/sites/dev/docs/reference/api/snippet/attr/readme.mdx
similarity index 90%
rename from markdown/dev/reference/api/snippet/attr/en.md
rename to sites/dev/docs/reference/api/snippet/attr/readme.mdx
index 3b56fe7eda7..64a560a611d 100644
--- a/markdown/dev/reference/api/snippet/attr/en.md
+++ b/sites/dev/docs/reference/api/snippet/attr/readme.mdx
@@ -19,7 +19,7 @@ Snippet snippet.attr(
)
```
-This method is chainable as it returns the `Snippet` object
+:::tipThis method is chainable as it returns the `Snippet` object:::
## Example
@@ -41,7 +41,7 @@ Snippet snippet.attr(
```
-
+:::note RELATED
See [Using Attributes](/howtos/code/attributes)
for information about what Attributes can be used with Snippets.
-
+:::
diff --git a/markdown/dev/reference/api/snippet/clone/en.md b/sites/dev/docs/reference/api/snippet/clone/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/snippet/clone/en.md
rename to sites/dev/docs/reference/api/snippet/clone/readme.mdx
diff --git a/markdown/dev/reference/api/snippet/en.md b/sites/dev/docs/reference/api/snippet/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/snippet/en.md
rename to sites/dev/docs/reference/api/snippet/readme.mdx
index 4e625bacb47..1e833884042 100644
--- a/markdown/dev/reference/api/snippet/en.md
+++ b/sites/dev/docs/reference/api/snippet/readme.mdx
@@ -24,10 +24,10 @@ A Snippet object comes with the following properties:
- `anchor` : A [`Point`](/reference/api/point) on which to anchor the snippet
- `attributes` : An [`Attributes`](/reference/api/attributes) instance holding the snippet's attributes
-
+:::note RELATED
See [Using Attributes](/howtos/code/attributes)
for information about custom Attributes that can be used with Snippets.
-
+:::
## Example
diff --git a/markdown/dev/reference/api/snippet/rotate/en.md b/sites/dev/docs/reference/api/snippet/rotate/readme.mdx
similarity index 89%
rename from markdown/dev/reference/api/snippet/rotate/en.md
rename to sites/dev/docs/reference/api/snippet/rotate/readme.mdx
index 3be1bf828ca..db180ac5045 100644
--- a/markdown/dev/reference/api/snippet/rotate/en.md
+++ b/sites/dev/docs/reference/api/snippet/rotate/readme.mdx
@@ -11,7 +11,7 @@ sets the `data-rotate` property.
Snippet snippet.rotate(rotation, overwrite=true)
```
-This method is chainable as it returns the `Snippet` object
+:::tipThis method is chainable as it returns the `Snippet` object:::
## Example
diff --git a/markdown/dev/reference/api/snippet/scale/en.md b/sites/dev/docs/reference/api/snippet/scale/readme.mdx
similarity index 88%
rename from markdown/dev/reference/api/snippet/scale/en.md
rename to sites/dev/docs/reference/api/snippet/scale/readme.mdx
index b49ed90f827..bb6669853bd 100644
--- a/markdown/dev/reference/api/snippet/scale/en.md
+++ b/sites/dev/docs/reference/api/snippet/scale/readme.mdx
@@ -11,7 +11,7 @@ sets the `data-scale` property.
Snippet snippet.scale(scale, overwrite=true)
```
-This method is chainable as it returns the `Snippet` object
+:::tipThis method is chainable as it returns the `Snippet` object:::
## Example
diff --git a/markdown/dev/reference/api/stack/addPart/en.md b/sites/dev/docs/reference/api/stack/addpart/readme.mdx
similarity index 73%
rename from markdown/dev/reference/api/stack/addPart/en.md
rename to sites/dev/docs/reference/api/stack/addpart/readme.mdx
index 9629511c4da..cfd154ebfb7 100644
--- a/markdown/dev/reference/api/stack/addPart/en.md
+++ b/sites/dev/docs/reference/api/stack/addpart/readme.mdx
@@ -11,4 +11,4 @@ original stack.
Stack stack.addPart(Part part)
```
-This method is chainable as it returns the Stack object
+:::noteThis method is chainable as it returns the Stack object:::
diff --git a/markdown/dev/reference/api/stack/asrenderprops/en.md b/sites/dev/docs/reference/api/stack/asrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/stack/asrenderprops/en.md
rename to sites/dev/docs/reference/api/stack/asrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/stack/attr/en.md b/sites/dev/docs/reference/api/stack/attr/readme.mdx
similarity index 87%
rename from markdown/dev/reference/api/stack/attr/en.md
rename to sites/dev/docs/reference/api/stack/attr/readme.mdx
index 17cf2e31888..a48fe030ccc 100644
--- a/markdown/dev/reference/api/stack/attr/en.md
+++ b/sites/dev/docs/reference/api/stack/attr/readme.mdx
@@ -20,4 +20,4 @@ If the third parameter is set to `true` it will call
`this.attributes.set()` instead,
thereby overwriting the value of the attribute.
-This method is chainable as it returns the Stack object
+:::noteThis method is chainable as it returns the Stack object:::
diff --git a/markdown/dev/reference/api/stack/generateTransform/en.md b/sites/dev/docs/reference/api/stack/generatetransform/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/stack/generateTransform/en.md
rename to sites/dev/docs/reference/api/stack/generatetransform/readme.mdx
index 025c4672d17..372c72f3d05 100644
--- a/markdown/dev/reference/api/stack/generateTransform/en.md
+++ b/sites/dev/docs/reference/api/stack/generatetransform/readme.mdx
@@ -23,4 +23,4 @@ to apply:
| `flipX` | Boolean | Whether to flip the stack along the X axis |
| `flipY` | Boolean | Whether to flip the stack along the Y axis |
-This method is chainable as it returns the Stack object
+:::noteThis method is chainable as it returns the Stack object:::
diff --git a/markdown/dev/reference/api/stack/getAnchor/en.md b/sites/dev/docs/reference/api/stack/getanchor/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/stack/getAnchor/en.md
rename to sites/dev/docs/reference/api/stack/getanchor/readme.mdx
diff --git a/markdown/dev/reference/api/stack/getPartList/en.md b/sites/dev/docs/reference/api/stack/getpartlist/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/stack/getPartList/en.md
rename to sites/dev/docs/reference/api/stack/getpartlist/readme.mdx
diff --git a/markdown/dev/reference/api/stack/getPartNames/en.md b/sites/dev/docs/reference/api/stack/getpartnames/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/stack/getPartNames/en.md
rename to sites/dev/docs/reference/api/stack/getpartnames/readme.mdx
diff --git a/markdown/dev/reference/api/stack/home/en.md b/sites/dev/docs/reference/api/stack/home/readme.mdx
similarity index 88%
rename from markdown/dev/reference/api/stack/home/en.md
rename to sites/dev/docs/reference/api/stack/home/readme.mdx
index 1819b6ad8e5..290d3902d67 100644
--- a/markdown/dev/reference/api/stack/home/en.md
+++ b/sites/dev/docs/reference/api/stack/home/readme.mdx
@@ -11,7 +11,7 @@ and returns the original stack.
```js
Stack stack.home()
```
-This method is chainable as it returns the Stack object
+:::noteThis method is chainable as it returns the Stack object:::
## Notes
diff --git a/markdown/dev/reference/api/stack/en.md b/sites/dev/docs/reference/api/stack/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/stack/en.md
rename to sites/dev/docs/reference/api/stack/readme.mdx
index a9eda64f38b..1b2a3c03212 100644
--- a/markdown/dev/reference/api/stack/en.md
+++ b/sites/dev/docs/reference/api/stack/readme.mdx
@@ -5,12 +5,12 @@ title: Stack
A Stack object represents a collection of parts within a pattern.
Stacks are used when laying out the pattern.
-
+:::note RELATED
See [Stacks](/guides/designs/stacks)
for information about how stacks are used in a pattern.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/store/extend/en.md b/sites/dev/docs/reference/api/store/extend/readme.mdx
similarity index 93%
rename from markdown/dev/reference/api/store/extend/en.md
rename to sites/dev/docs/reference/api/store/extend/readme.mdx
index d53bb771918..172cdf073f3 100644
--- a/markdown/dev/reference/api/store/extend/en.md
+++ b/sites/dev/docs/reference/api/store/extend/readme.mdx
@@ -13,7 +13,7 @@ rather through a plugin.
Store Store.extend(Array methods=[])
```
-This method is chainable as it returns the `Store` object
+:::tipThis method is chainable as it returns the `Store` object:::
The single argument should be an Array of methods to add to the
store. Each entry in the array should be an array itself holding a path in
diff --git a/markdown/dev/reference/api/store/get/en.md b/sites/dev/docs/reference/api/store/get/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/store/get/en.md
rename to sites/dev/docs/reference/api/store/get/readme.mdx
diff --git a/markdown/dev/reference/api/store/logs/en.md b/sites/dev/docs/reference/api/store/logs/readme.mdx
similarity index 96%
rename from markdown/dev/reference/api/store/logs/en.md
rename to sites/dev/docs/reference/api/store/logs/readme.mdx
index 178629f3c32..5e13014a3e3 100644
--- a/markdown/dev/reference/api/store/logs/en.md
+++ b/sites/dev/docs/reference/api/store/logs/readme.mdx
@@ -4,9 +4,9 @@ title: Store.logs
A **Store** is initialized with a `logs` property that holds logging data.
-
+:::note
If errors are logged, FreeSewing will not try to layout the pattern.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/store/push/en.md b/sites/dev/docs/reference/api/store/push/readme.mdx
similarity index 71%
rename from markdown/dev/reference/api/store/push/en.md
rename to sites/dev/docs/reference/api/store/push/readme.mdx
index 5bae3f92f92..efba2f873bd 100644
--- a/markdown/dev/reference/api/store/push/en.md
+++ b/sites/dev/docs/reference/api/store/push/readme.mdx
@@ -12,9 +12,9 @@ If `key` does not hold and Array, the Store will log a warning, but nothing will
Store store.push(mixed value1, mixed value2, ...)
```
-This method is [variadic](https://en.wikipedia.org/wiki/Variadic_function)
+:::noteThis method is [variadic](https://en.wikipedia.org/wiki/Variadic_function):::
-This method is chainable as it returns the `Store` object
+:::tipThis method is chainable as it returns the `Store` object:::
## Example
diff --git a/markdown/dev/reference/api/store/en.md b/sites/dev/docs/reference/api/store/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/store/en.md
rename to sites/dev/docs/reference/api/store/readme.mdx
diff --git a/markdown/dev/reference/api/store/set/en.md b/sites/dev/docs/reference/api/store/set/readme.mdx
similarity index 92%
rename from markdown/dev/reference/api/store/set/en.md
rename to sites/dev/docs/reference/api/store/set/readme.mdx
index 0b990b919b2..66918add238 100644
--- a/markdown/dev/reference/api/store/set/en.md
+++ b/sites/dev/docs/reference/api/store/set/readme.mdx
@@ -11,7 +11,7 @@ The `Store.set()` method stores the value of `value` in the store under key
Store store.set(mixed key, mixed value)
```
-This method is chainable as it returns the `Store` object
+:::tipThis method is chainable as it returns the `Store` object:::
## Example
diff --git a/markdown/dev/reference/api/store/setifunset/en.md b/sites/dev/docs/reference/api/store/setifunset/readme.mdx
similarity index 83%
rename from markdown/dev/reference/api/store/setifunset/en.md
rename to sites/dev/docs/reference/api/store/setifunset/readme.mdx
index d957d2d5ab6..dcb01718984 100644
--- a/markdown/dev/reference/api/store/setifunset/en.md
+++ b/sites/dev/docs/reference/api/store/setifunset/readme.mdx
@@ -11,7 +11,7 @@ The `Store.set()` method stores the value of `value` in the store under key
Store store.set(mixed key, mixed value)
```
-This method is chainable as it returns the `Store` object
+:::tipThis method is chainable as it returns the `Store` object:::
## Example
diff --git a/markdown/dev/reference/api/store/unset/en.md b/sites/dev/docs/reference/api/store/unset/readme.mdx
similarity index 77%
rename from markdown/dev/reference/api/store/unset/en.md
rename to sites/dev/docs/reference/api/store/unset/readme.mdx
index a8ee934e62b..587a80a1871 100644
--- a/markdown/dev/reference/api/store/unset/en.md
+++ b/sites/dev/docs/reference/api/store/unset/readme.mdx
@@ -10,7 +10,7 @@ The `Store.unset()` value removes a `key` from the store.
Store store.unset(string key)
```
-This method is chainable as it returns the `Store` object
+:::tipThis method is chainable as it returns the `Store` object:::
## Example
diff --git a/markdown/dev/reference/api/svg/asrenderprops/en.md b/sites/dev/docs/reference/api/svg/asrenderprops/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/svg/asrenderprops/en.md
rename to sites/dev/docs/reference/api/svg/asrenderprops/readme.mdx
diff --git a/markdown/dev/reference/api/svg/attributes/en.md b/sites/dev/docs/reference/api/svg/attributes/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/svg/attributes/en.md
rename to sites/dev/docs/reference/api/svg/attributes/readme.mdx
diff --git a/markdown/dev/reference/api/svg/defs/en.md b/sites/dev/docs/reference/api/svg/defs/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/svg/defs/en.md
rename to sites/dev/docs/reference/api/svg/defs/readme.mdx
diff --git a/markdown/dev/reference/api/svg/layout/en.md b/sites/dev/docs/reference/api/svg/layout/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/svg/layout/en.md
rename to sites/dev/docs/reference/api/svg/layout/readme.mdx
diff --git a/markdown/dev/reference/api/svg/pattern/en.md b/sites/dev/docs/reference/api/svg/pattern/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/svg/pattern/en.md
rename to sites/dev/docs/reference/api/svg/pattern/readme.mdx
diff --git a/markdown/dev/reference/api/svg/en.md b/sites/dev/docs/reference/api/svg/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/svg/en.md
rename to sites/dev/docs/reference/api/svg/readme.mdx
diff --git a/markdown/dev/reference/api/svg/render/en.md b/sites/dev/docs/reference/api/svg/render/readme.mdx
similarity index 94%
rename from markdown/dev/reference/api/svg/render/en.md
rename to sites/dev/docs/reference/api/svg/render/readme.mdx
index 0879bfa1161..66bd392c9c7 100644
--- a/markdown/dev/reference/api/svg/render/en.md
+++ b/sites/dev/docs/reference/api/svg/render/readme.mdx
@@ -11,11 +11,11 @@ The `Svg.render()` method will render a drafted
string svg.render()
```
-
+:::warning
This method is mostly internal and should not be used directly.
Instead, it is intended that the
[Pattern.render()](/reference/api/pattern/render)
method be used to render patterns as SVG.
-
+:::
diff --git a/markdown/dev/reference/api/svg/style/en.md b/sites/dev/docs/reference/api/svg/style/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/svg/style/en.md
rename to sites/dev/docs/reference/api/svg/style/readme.mdx
diff --git a/markdown/dev/reference/api/utils/applytransformtopoint/en.md b/sites/dev/docs/reference/api/utils/applytransformtopoint/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/applytransformtopoint/en.md
rename to sites/dev/docs/reference/api/utils/applytransformtopoint/readme.mdx
diff --git a/markdown/dev/reference/api/utils/beamintersectscircle/en.md b/sites/dev/docs/reference/api/utils/beamintersectscircle/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/beamintersectscircle/en.md
rename to sites/dev/docs/reference/api/utils/beamintersectscircle/readme.mdx
diff --git a/markdown/dev/reference/api/utils/beamintersectscurve/en.md b/sites/dev/docs/reference/api/utils/beamintersectscurve/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/utils/beamintersectscurve/en.md
rename to sites/dev/docs/reference/api/utils/beamintersectscurve/readme.mdx
index a27527e2b16..7784eb18f1c 100644
--- a/markdown/dev/reference/api/utils/beamintersectscurve/en.md
+++ b/sites/dev/docs/reference/api/utils/beamintersectscurve/readme.mdx
@@ -6,14 +6,14 @@ The `utils.beamIntersectsCurve()` function finds the intersection between an end
line and a curve described by points
`start`, `cp1`, `cp2`, and `end`.
-
+:::warning
This function can sometimes fail to find intersections in some curves
due to a limitation in an underlying Bézier library.
Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367)
for more information.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/utils/beamintersectsx/en.md b/sites/dev/docs/reference/api/utils/beamintersectsx/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/beamintersectsx/en.md
rename to sites/dev/docs/reference/api/utils/beamintersectsx/readme.mdx
diff --git a/markdown/dev/reference/api/utils/beamintersectsy/en.md b/sites/dev/docs/reference/api/utils/beamintersectsy/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/beamintersectsy/en.md
rename to sites/dev/docs/reference/api/utils/beamintersectsy/readme.mdx
diff --git a/markdown/dev/reference/api/utils/beamsintersect/en.md b/sites/dev/docs/reference/api/utils/beamsintersect/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/beamsintersect/en.md
rename to sites/dev/docs/reference/api/utils/beamsintersect/readme.mdx
diff --git a/markdown/dev/reference/api/utils/capitalize/en.md b/sites/dev/docs/reference/api/utils/capitalize/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/capitalize/en.md
rename to sites/dev/docs/reference/api/utils/capitalize/readme.mdx
diff --git a/markdown/dev/reference/api/utils/circlesintersect/en.md b/sites/dev/docs/reference/api/utils/circlesintersect/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/circlesintersect/en.md
rename to sites/dev/docs/reference/api/utils/circlesintersect/readme.mdx
diff --git a/markdown/dev/reference/api/utils/combinetransforms/en.md b/sites/dev/docs/reference/api/utils/combinetransforms/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/combinetransforms/en.md
rename to sites/dev/docs/reference/api/utils/combinetransforms/readme.mdx
diff --git a/markdown/dev/reference/api/utils/curveedge/en.md b/sites/dev/docs/reference/api/utils/curveedge/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/curveedge/en.md
rename to sites/dev/docs/reference/api/utils/curveedge/readme.mdx
diff --git a/markdown/dev/reference/api/utils/curveintersectsx/en.md b/sites/dev/docs/reference/api/utils/curveintersectsx/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/utils/curveintersectsx/en.md
rename to sites/dev/docs/reference/api/utils/curveintersectsx/readme.mdx
index d12aed991ac..c7d21150f68 100644
--- a/markdown/dev/reference/api/utils/curveintersectsx/en.md
+++ b/sites/dev/docs/reference/api/utils/curveintersectsx/readme.mdx
@@ -5,14 +5,14 @@ title: utils.curveIntersectsX()
The `utils.curveIntersectsX()` function finds the point(s) where a curve
intersects a given X-value.
-
+:::warning
This function can sometimes fail to find intersections in some curves
due to a limitation in an underlying Bézier library.
Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367)
for more information.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/utils/curveintersectsy/en.md b/sites/dev/docs/reference/api/utils/curveintersectsy/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/utils/curveintersectsy/en.md
rename to sites/dev/docs/reference/api/utils/curveintersectsy/readme.mdx
index 094529d9c17..c70ffbac1f9 100644
--- a/markdown/dev/reference/api/utils/curveintersectsy/en.md
+++ b/sites/dev/docs/reference/api/utils/curveintersectsy/readme.mdx
@@ -5,14 +5,14 @@ title: utils.curveIntersectsY()
The `utils.curveIntersectsY()` function finds the point(s) where a curve
intersects a given Y-value.
-
+:::warning
This function can sometimes fail to find intersections in some curves
due to a limitation in an underlying Bézier library.
Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367)
for more information.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/utils/curveparameterfrompoint/en.md b/sites/dev/docs/reference/api/utils/curveparameterfrompoint/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/curveparameterfrompoint/en.md
rename to sites/dev/docs/reference/api/utils/curveparameterfrompoint/readme.mdx
diff --git a/markdown/dev/reference/api/utils/curvesintersect/en.md b/sites/dev/docs/reference/api/utils/curvesintersect/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/utils/curvesintersect/en.md
rename to sites/dev/docs/reference/api/utils/curvesintersect/readme.mdx
index 3da974fd54e..0b794728747 100644
--- a/markdown/dev/reference/api/utils/curvesintersect/en.md
+++ b/sites/dev/docs/reference/api/utils/curvesintersect/readme.mdx
@@ -5,14 +5,14 @@ title: utils.curvesIntersect()
The `utils.curvesIntersect()` function finds the intersections between two curves
described by 4 points each.
-
+:::warning
This function can sometimes fail to find intersections in some curves
due to a limitation in an underlying Bézier library.
Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367)
for more information.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/utils/deg2rad/en.md b/sites/dev/docs/reference/api/utils/deg2rad/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/deg2rad/en.md
rename to sites/dev/docs/reference/api/utils/deg2rad/readme.mdx
diff --git a/markdown/dev/reference/api/utils/generatestacktransform/en.md b/sites/dev/docs/reference/api/utils/generatestacktransform/readme.mdx
similarity index 97%
rename from markdown/dev/reference/api/utils/generatestacktransform/en.md
rename to sites/dev/docs/reference/api/utils/generatestacktransform/readme.mdx
index a4dff80ac75..2e00bdf30d5 100644
--- a/markdown/dev/reference/api/utils/generatestacktransform/en.md
+++ b/sites/dev/docs/reference/api/utils/generatestacktransform/readme.mdx
@@ -27,8 +27,8 @@ In other words, it rotates the stack.
The fourth and fifth parameters flip the part along the X or Y axis respectively.
-
+:::note
This is a low-level function to facilitate intervening in the pattern layout late in the draft process.
It is unlikely you will want to use this.
-
+:::
diff --git a/markdown/dev/reference/api/utils/gettransformedbounds/en.md b/sites/dev/docs/reference/api/utils/gettransformedbounds/readme.mdx
similarity index 96%
rename from markdown/dev/reference/api/utils/gettransformedbounds/en.md
rename to sites/dev/docs/reference/api/utils/gettransformedbounds/readme.mdx
index d0f52b24bac..31deb9efcb1 100644
--- a/markdown/dev/reference/api/utils/gettransformedbounds/en.md
+++ b/sites/dev/docs/reference/api/utils/gettransformedbounds/readme.mdx
@@ -16,7 +16,7 @@ Object utils.getTransformedBounds(
)
```
-
+:::note
This is a low-level function to facilitate intervening in the pattern layout late in the draft process.
It is unlikely you will want to use this.
-
+:::
diff --git a/markdown/dev/reference/api/utils/lineintersectscircle/en.md b/sites/dev/docs/reference/api/utils/lineintersectscircle/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/lineintersectscircle/en.md
rename to sites/dev/docs/reference/api/utils/lineintersectscircle/readme.mdx
diff --git a/markdown/dev/reference/api/utils/lineintersectscurve/en.md b/sites/dev/docs/reference/api/utils/lineintersectscurve/readme.mdx
similarity index 98%
rename from markdown/dev/reference/api/utils/lineintersectscurve/en.md
rename to sites/dev/docs/reference/api/utils/lineintersectscurve/readme.mdx
index 11f8356492c..1cf6eddd17b 100644
--- a/markdown/dev/reference/api/utils/lineintersectscurve/en.md
+++ b/sites/dev/docs/reference/api/utils/lineintersectscurve/readme.mdx
@@ -6,14 +6,14 @@ The `utils.lineIntersectsCurve()` function finds the intersection between a line
segment from point `from` to point `to` and a curve described by points
`start`, `cp1`, `cp2, and `end\`.
-
+:::warning
This function can sometimes fail to find intersections in some curves
due to a limitation in an underlying Bézier library.
Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367)
for more information.
-
+:::
## Signature
diff --git a/markdown/dev/reference/api/utils/linesintersect/en.md b/sites/dev/docs/reference/api/utils/linesintersect/readme.mdx
similarity index 85%
rename from markdown/dev/reference/api/utils/linesintersect/en.md
rename to sites/dev/docs/reference/api/utils/linesintersect/readme.mdx
index 6e9cc815ca1..e9d1bf3c138 100644
--- a/markdown/dev/reference/api/utils/linesintersect/en.md
+++ b/sites/dev/docs/reference/api/utils/linesintersect/readme.mdx
@@ -3,16 +3,16 @@ title: utils.linesIntersect()
---
The `utils.linesIntersect()` function finds the intersection between two line
-segments. Returns a [Point](../point) object for the intersection, or `false`
+segments. Returns a [Point](/reference/api/point/) object for the intersection, or `false`
if the lines don't intersect.
## Signature
```js
Point | false utils.linesIntersect(
- Point A,
- Point B,
- Point C,
+ Point A,
+ Point B,
+ Point C,
Point D
)
```
@@ -27,10 +27,10 @@ Point | false utils.linesIntersect(
points.B = new Point(50, 40)
points.C = new Point(15, 30)
points.D = new Point(60, 15)
-
+
paths.AB = new Path().move(points.A).line(points.B)
paths.CD = new Path().move(points.C).line(points.D)
-
+
snippets.X = new Snippet(
"notch",
utils.linesIntersect(points.A, points.B, points.C, points.D)
diff --git a/markdown/dev/reference/api/utils/mergei18n/en.md b/sites/dev/docs/reference/api/utils/mergei18n/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/mergei18n/en.md
rename to sites/dev/docs/reference/api/utils/mergei18n/readme.mdx
diff --git a/markdown/dev/reference/api/utils/mergeoptions/en.md b/sites/dev/docs/reference/api/utils/mergeoptions/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/mergeoptions/en.md
rename to sites/dev/docs/reference/api/utils/mergeoptions/readme.mdx
diff --git a/markdown/dev/reference/api/utils/pctbasedon/en.md b/sites/dev/docs/reference/api/utils/pctbasedon/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/pctbasedon/en.md
rename to sites/dev/docs/reference/api/utils/pctbasedon/readme.mdx
diff --git a/markdown/dev/reference/api/utils/pointonbeam/en.md b/sites/dev/docs/reference/api/utils/pointonbeam/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/pointonbeam/en.md
rename to sites/dev/docs/reference/api/utils/pointonbeam/readme.mdx
diff --git a/markdown/dev/reference/api/utils/pointoncurve/en.md b/sites/dev/docs/reference/api/utils/pointoncurve/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/pointoncurve/en.md
rename to sites/dev/docs/reference/api/utils/pointoncurve/readme.mdx
diff --git a/markdown/dev/reference/api/utils/pointonline/en.md b/sites/dev/docs/reference/api/utils/pointonline/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/pointonline/en.md
rename to sites/dev/docs/reference/api/utils/pointonline/readme.mdx
diff --git a/markdown/dev/reference/api/utils/rad2deg/en.md b/sites/dev/docs/reference/api/utils/rad2deg/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/rad2deg/en.md
rename to sites/dev/docs/reference/api/utils/rad2deg/readme.mdx
diff --git a/markdown/dev/reference/api/utils/en.md b/sites/dev/docs/reference/api/utils/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/en.md
rename to sites/dev/docs/reference/api/utils/readme.mdx
diff --git a/markdown/dev/reference/api/utils/round/en.md b/sites/dev/docs/reference/api/utils/round/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/round/en.md
rename to sites/dev/docs/reference/api/utils/round/readme.mdx
diff --git a/markdown/dev/reference/api/utils/splitcurve/en.md b/sites/dev/docs/reference/api/utils/splitcurve/readme.mdx
similarity index 91%
rename from markdown/dev/reference/api/utils/splitcurve/en.md
rename to sites/dev/docs/reference/api/utils/splitcurve/readme.mdx
index 34e6067b666..31ee4a7fae4 100644
--- a/markdown/dev/reference/api/utils/splitcurve/en.md
+++ b/sites/dev/docs/reference/api/utils/splitcurve/readme.mdx
@@ -10,11 +10,11 @@ halves.
```js
array utils.splitCurve(
- Point start,
- Point cp1,
- Point cp2,
- Point end,
- Point check,
+ Point start,
+ Point cp1,
+ Point cp2,
+ Point end,
+ Point check,
)
```
@@ -44,7 +44,6 @@ array utils.splitCurve(
)
for (let i=0; i<2; i++) {
const { start, cp1, cp2, end } = halves[i]
- console.log({start, cp1, cp2,end})
paths[`segment${i}`] = new Path()
.move(start)
.curve(cp1, cp2, end)
@@ -65,13 +64,13 @@ The returned object has this signature:
```js
[
- {
+ {
start: Point,
cp1: Point,
cp2: Point,
end: Point,
},
- {
+ {
start: Point,
cp1: Point,
cp2: Point,
diff --git a/markdown/dev/reference/api/utils/stretchtoscale/en.md b/sites/dev/docs/reference/api/utils/stretchtoscale/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/stretchtoscale/en.md
rename to sites/dev/docs/reference/api/utils/stretchtoscale/readme.mdx
diff --git a/markdown/dev/reference/api/utils/units/en.md b/sites/dev/docs/reference/api/utils/units/readme.mdx
similarity index 100%
rename from markdown/dev/reference/api/utils/units/en.md
rename to sites/dev/docs/reference/api/utils/units/readme.mdx
diff --git a/markdown/dev/reference/backend/en.md b/sites/dev/docs/reference/backend/readme.mdx
similarity index 81%
rename from markdown/dev/reference/backend/en.md
rename to sites/dev/docs/reference/backend/readme.mdx
index 79870f5fa37..f720822b062 100644
--- a/markdown/dev/reference/backend/en.md
+++ b/sites/dev/docs/reference/backend/readme.mdx
@@ -4,23 +4,17 @@ title: Backend REST API
This is the reference documentation for the FreeSewing backend REST API.
-
-This documentation is under construction as we are re-working this API for v3.
-
-
## REST API docs
-
+:::tip
+The documentation generated from the OpenAPI specification is available
+alt [backend3.freesewing.org/docs/](https://backend3.freesewing.org/docs/)
+:::
-
-
-##### Also available as OpenAPI specification
-
-The backend hosts its own auto-generated (Swagger) documentation based
-on the OpenAPI specification (v3): [backend3.freesewing.org/docs/
-](https://backend3.freesewing.org/docs/)
-
-
+:::note FIXME
+This documentation is under construction.
+Meanwhile, check the Swagger docs, linked above.
+:::
## About the FreeSewing backend
@@ -33,10 +27,10 @@ as a service to users and developers. This allows integration with other tools
such as hosted instances of our lab, CLI tools, serverless runners, CI/CD
environments and so on.
-In other words, we no longer merely provide our own frontend, you can now also
+In other words, we no longer merely provide our own frontend, you can now also
use our backend as a service to build your own projects.
-
+:::warning
##### Use, don't abuse
@@ -49,7 +43,7 @@ have big plans, please reach out to us to discuss them first.
We will monitor the use of our backend API and we may at any moment decide to
revoke API keys if we feel the use is beyond what we can or want to support.
-
+:::
## Database schema
diff --git a/markdown/dev/reference/css/en.md b/sites/dev/docs/reference/css/readme.mdx
similarity index 90%
rename from markdown/dev/reference/css/en.md
rename to sites/dev/docs/reference/css/readme.mdx
index 13fd809b9a7..f67df1f6f38 100644
--- a/markdown/dev/reference/css/en.md
+++ b/sites/dev/docs/reference/css/readme.mdx
@@ -23,14 +23,14 @@ Which is typically what you want.
```mjs
-({
- Point,
- Path,
- points,
- paths,
- store,
- options,
- part
+({
+ Point,
+ Path,
+ points,
+ paths,
+ store,
+ options,
+ part
}) => {
const colors = [
'fabric',
@@ -75,14 +75,14 @@ These classes set the `stroke` property explicitly.
```mjs
-({
- Point,
- Path,
- points,
- paths,
- store,
- options,
- part
+({
+ Point,
+ Path,
+ points,
+ paths,
+ store,
+ options,
+ part
}) => {
const colors = [
'fabric',
@@ -122,19 +122,19 @@ These classes set the `stroke` property explicitly.
## Fill colors
-These classes set the `stroke-fill` property. Note that we've applied a background
+These classes set the `stroke-fill` property. Note that we've applied a background
to ensure the text remains readable.
```mjs
-({
- Point,
- Path,
- points,
- paths,
- store,
- options,
- part
+({
+ Point,
+ Path,
+ points,
+ paths,
+ store,
+ options,
+ part
}) => {
const colors = [
'fabric',
@@ -155,8 +155,8 @@ to ensure the text remains readable.
const h = 10
points[`${color}PathBg`] = new Point(2, y*row+8).addText(`path.fill-${color}`, 'stroke-interfacing left text-sm')
points[`${color}Path`] = new Point(2, y*row+8).addText(`path.fill-${color}`, 'left text-sm')
- points[`${color}TextBg`] = new Point(w-2, y*row+8).addText(`text.fill-${color}`, 'stroke-interfacing right text-sm')
- points[`${color}Text`] = new Point(w-2, y*row+8).addText(`text.fill-${color}`, 'right text-sm')
+ points[`${color}TextBg`] = new Point(w-2, y*row+8).addText(`text.fill-${color}`, `stroke-${color === 'fabric' ? 'interfacing' : 'fabric'} fill-${color} right text-sm`)
+ points[`${color}Text`] = new Point(w-2, y*row+8).addText(`text.fill-${color}`, `fill-${color} right text-sm`)
paths[color] = new Path()
.move(new Point(0, y*row))
.line(new Point(w, y*row))
@@ -184,21 +184,21 @@ These classes set the `stroke-dasharray` property.
```mjs
-({
- Point,
- Path,
- points,
- paths,
- store,
- options,
- part
+({
+ Point,
+ Path,
+ points,
+ paths,
+ store,
+ options,
+ part
}) => {
const styles = [
- 'dotted',
- 'dashed',
- 'lashed',
- 'sa',
- 'help',
+ 'dotted',
+ 'dashed',
+ 'lashed',
+ 'sa',
+ 'help',
'hidden',
]
const w = 120
@@ -234,14 +234,14 @@ The default width is shown at the top.
```mjs
-({
- Point,
- Path,
- points,
- paths,
- store,
- options,
- part
+({
+ Point,
+ Path,
+ points,
+ paths,
+ store,
+ options,
+ part
}) => {
const widths = [
'stroke-xs',
@@ -289,14 +289,14 @@ The default width is shown at the top.
```mjs
-({
- Point,
- Path,
- points,
- paths,
- store,
- options,
- part
+({
+ Point,
+ Path,
+ points,
+ paths,
+ store,
+ options,
+ part
}) => {
const sizes = [
'text-xs',
@@ -334,14 +334,14 @@ The default align is to the left (`text-anchor: start;`).
```mjs
-({
- Point,
- Path,
- points,
- paths,
- store,
- options,
- part
+({
+ Point,
+ Path,
+ points,
+ paths,
+ store,
+ options,
+ part
}) => {
const w = 120
@@ -371,14 +371,14 @@ The default align is to the left (`text-anchor: start;`).
```mjs
-({
- Point,
- Path,
- points,
- paths,
- store,
- options,
- part
+({
+ Point,
+ Path,
+ points,
+ paths,
+ store,
+ options,
+ part
}) => {
const w = 120
diff --git a/markdown/dev/reference/hooks/inserttext/en.md b/sites/dev/docs/reference/hooks/inserttext/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/inserttext/en.md
rename to sites/dev/docs/reference/hooks/inserttext/readme.mdx
diff --git a/markdown/dev/reference/hooks/postdraft/en.md b/sites/dev/docs/reference/hooks/postdraft/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/postdraft/en.md
rename to sites/dev/docs/reference/hooks/postdraft/readme.mdx
diff --git a/markdown/dev/reference/hooks/postinit/en.md b/sites/dev/docs/reference/hooks/postinit/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/postinit/en.md
rename to sites/dev/docs/reference/hooks/postinit/readme.mdx
diff --git a/markdown/dev/reference/hooks/postlayout/en.md b/sites/dev/docs/reference/hooks/postlayout/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/postlayout/en.md
rename to sites/dev/docs/reference/hooks/postlayout/readme.mdx
diff --git a/markdown/dev/reference/hooks/postpartdraft/en.md b/sites/dev/docs/reference/hooks/postpartdraft/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/postpartdraft/en.md
rename to sites/dev/docs/reference/hooks/postpartdraft/readme.mdx
diff --git a/markdown/dev/reference/hooks/postrender/en.md b/sites/dev/docs/reference/hooks/postrender/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/postrender/en.md
rename to sites/dev/docs/reference/hooks/postrender/readme.mdx
diff --git a/markdown/dev/reference/hooks/postsample/en.md b/sites/dev/docs/reference/hooks/postsample/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/postsample/en.md
rename to sites/dev/docs/reference/hooks/postsample/readme.mdx
diff --git a/markdown/dev/reference/hooks/postsetdraft/en.md b/sites/dev/docs/reference/hooks/postsetdraft/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/postsetdraft/en.md
rename to sites/dev/docs/reference/hooks/postsetdraft/readme.mdx
diff --git a/markdown/dev/reference/hooks/predraft/en.md b/sites/dev/docs/reference/hooks/predraft/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/predraft/en.md
rename to sites/dev/docs/reference/hooks/predraft/readme.mdx
diff --git a/markdown/dev/reference/hooks/preinit/en.md b/sites/dev/docs/reference/hooks/preinit/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/preinit/en.md
rename to sites/dev/docs/reference/hooks/preinit/readme.mdx
diff --git a/markdown/dev/reference/hooks/prelayout/en.md b/sites/dev/docs/reference/hooks/prelayout/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/prelayout/en.md
rename to sites/dev/docs/reference/hooks/prelayout/readme.mdx
diff --git a/markdown/dev/reference/hooks/prepartdraft/en.md b/sites/dev/docs/reference/hooks/prepartdraft/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/prepartdraft/en.md
rename to sites/dev/docs/reference/hooks/prepartdraft/readme.mdx
diff --git a/markdown/dev/reference/hooks/prerender/en.md b/sites/dev/docs/reference/hooks/prerender/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/prerender/en.md
rename to sites/dev/docs/reference/hooks/prerender/readme.mdx
diff --git a/markdown/dev/reference/hooks/presample/en.md b/sites/dev/docs/reference/hooks/presample/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/presample/en.md
rename to sites/dev/docs/reference/hooks/presample/readme.mdx
diff --git a/markdown/dev/reference/hooks/presetdraft/en.md b/sites/dev/docs/reference/hooks/presetdraft/readme.mdx
similarity index 100%
rename from markdown/dev/reference/hooks/presetdraft/en.md
rename to sites/dev/docs/reference/hooks/presetdraft/readme.mdx
diff --git a/markdown/dev/reference/hooks/en.md b/sites/dev/docs/reference/hooks/readme.mdx
similarity index 83%
rename from markdown/dev/reference/hooks/en.md
rename to sites/dev/docs/reference/hooks/readme.mdx
index 052046fafff..09c8b31edee 100644
--- a/markdown/dev/reference/hooks/en.md
+++ b/sites/dev/docs/reference/hooks/readme.mdx
@@ -5,7 +5,7 @@ title: Lifecycle hooks
FreeSewing has **lifecycle hooks** that allow you extend its functionality by
hooking into a lifecycle event.
-Through the [use of a plugin](/guides/plugins/hooks), you can register a method
+Through the [use of a plugin](/guides/plugins#hook-methods), you can register a method
for a hook. When the hook is triggered, your method will be called. It will
receive two parameters:
diff --git a/markdown/dev/reference/macros/banner/en.md b/sites/dev/docs/reference/macros/banner/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/banner/en.md
rename to sites/dev/docs/reference/macros/banner/readme.mdx
diff --git a/markdown/dev/reference/macros/bannerbox/en.md b/sites/dev/docs/reference/macros/bannerbox/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/bannerbox/en.md
rename to sites/dev/docs/reference/macros/bannerbox/readme.mdx
diff --git a/markdown/dev/reference/macros/bartack/en.md b/sites/dev/docs/reference/macros/bartack/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/bartack/en.md
rename to sites/dev/docs/reference/macros/bartack/readme.mdx
diff --git a/markdown/dev/reference/macros/bartackalong/en.md b/sites/dev/docs/reference/macros/bartackalong/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/bartackalong/en.md
rename to sites/dev/docs/reference/macros/bartackalong/readme.mdx
diff --git a/markdown/dev/reference/macros/bartackfractionalong/en.md b/sites/dev/docs/reference/macros/bartackfractionalong/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/bartackfractionalong/en.md
rename to sites/dev/docs/reference/macros/bartackfractionalong/readme.mdx
diff --git a/markdown/dev/reference/macros/crossbox/en.md b/sites/dev/docs/reference/macros/crossbox/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/crossbox/en.md
rename to sites/dev/docs/reference/macros/crossbox/readme.mdx
diff --git a/markdown/dev/reference/macros/cutonfold/en.md b/sites/dev/docs/reference/macros/cutonfold/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/cutonfold/en.md
rename to sites/dev/docs/reference/macros/cutonfold/readme.mdx
diff --git a/markdown/dev/reference/macros/flip/en.md b/sites/dev/docs/reference/macros/flip/readme.mdx
similarity index 99%
rename from markdown/dev/reference/macros/flip/en.md
rename to sites/dev/docs/reference/macros/flip/readme.mdx
index a3ad2061ea4..c3d37b9c746 100644
--- a/markdown/dev/reference/macros/flip/en.md
+++ b/sites/dev/docs/reference/macros/flip/readme.mdx
@@ -7,13 +7,13 @@ X-axis or the Y-axis.
It is provided by the [flip plugin](/reference/plugins/flip).
-
+:::note
##### Not a core-plugins macro
The `flip` macro is not provided by the [core-plugins](/reference/plugins/core),
so you need to load the [flip plugin](/reference/plugins/flip) explicitly
if you want to use it.
-
+:::
## Signature
diff --git a/markdown/dev/reference/macros/gore/en.md b/sites/dev/docs/reference/macros/gore/readme.mdx
similarity index 99%
rename from markdown/dev/reference/macros/gore/en.md
rename to sites/dev/docs/reference/macros/gore/readme.mdx
index b45388bafbe..552b709e85e 100644
--- a/markdown/dev/reference/macros/gore/en.md
+++ b/sites/dev/docs/reference/macros/gore/readme.mdx
@@ -4,13 +4,13 @@ title: gore
The `gore` macro facilitates the drafting of [gores][1] to create spherical or other roundish objects. They are are typically used in hats.
-
+:::note
##### Not a core-plugins macro
The `gore` macro is not provided by the [core plugins](/reference/plugins/core),
so you need to load the [gore plugin](/reference/plugins/gore) explicitly
if you want to use it.
-
+:::
## Signature
diff --git a/markdown/dev/reference/macros/grainline/en.md b/sites/dev/docs/reference/macros/grainline/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/grainline/en.md
rename to sites/dev/docs/reference/macros/grainline/readme.mdx
diff --git a/markdown/dev/reference/macros/hd/en.md b/sites/dev/docs/reference/macros/hd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/hd/en.md
rename to sites/dev/docs/reference/macros/hd/readme.mdx
diff --git a/markdown/dev/reference/macros/ld/en.md b/sites/dev/docs/reference/macros/ld/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/ld/en.md
rename to sites/dev/docs/reference/macros/ld/readme.mdx
diff --git a/markdown/dev/reference/macros/miniscale/en.md b/sites/dev/docs/reference/macros/miniscale/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/miniscale/en.md
rename to sites/dev/docs/reference/macros/miniscale/readme.mdx
diff --git a/markdown/dev/reference/macros/mirror/en.md b/sites/dev/docs/reference/macros/mirror/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/mirror/en.md
rename to sites/dev/docs/reference/macros/mirror/readme.mdx
diff --git a/markdown/dev/reference/macros/pd/en.md b/sites/dev/docs/reference/macros/pd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/pd/en.md
rename to sites/dev/docs/reference/macros/pd/readme.mdx
diff --git a/markdown/dev/reference/macros/pleat/en.md b/sites/dev/docs/reference/macros/pleat/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/pleat/en.md
rename to sites/dev/docs/reference/macros/pleat/readme.mdx
diff --git a/markdown/dev/reference/macros/en.md b/sites/dev/docs/reference/macros/readme.mdx
similarity index 98%
rename from markdown/dev/reference/macros/en.md
rename to sites/dev/docs/reference/macros/readme.mdx
index cfbf98bb747..3ee91b181c2 100644
--- a/markdown/dev/reference/macros/en.md
+++ b/sites/dev/docs/reference/macros/readme.mdx
@@ -69,10 +69,10 @@ part for each invocation.
Below is a list of macros from [the plugins we maintain](/reference/plugins).
-
+:::note
We use camelCase here, but macro names are case-insensitive
-
+:::
diff --git a/markdown/dev/reference/macros/ringsector/en.md b/sites/dev/docs/reference/macros/ringsector/readme.mdx
similarity index 99%
rename from markdown/dev/reference/macros/ringsector/en.md
rename to sites/dev/docs/reference/macros/ringsector/readme.mdx
index fb850181e52..e6425decfe5 100644
--- a/markdown/dev/reference/macros/ringsector/en.md
+++ b/sites/dev/docs/reference/macros/ringsector/readme.mdx
@@ -8,13 +8,13 @@ curved waistbands, circle skirts, and so on.
It is provided by the [ringsector plugin](/reference/plugins/ringsector).
-
+:::note
##### Not a core-plugins macro
The `ringsector` macro is not provided by the [core-plugins](/reference/plugins/core),
so you need to load the [ringsector plugin](/reference/plugins/ringsector) explicitly
if you want to use it.
-
+:::
## Signature
diff --git a/markdown/dev/reference/macros/rmad/en.md b/sites/dev/docs/reference/macros/rmad/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmad/en.md
rename to sites/dev/docs/reference/macros/rmad/readme.mdx
diff --git a/markdown/dev/reference/macros/rmahd/en.md b/sites/dev/docs/reference/macros/rmahd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmahd/en.md
rename to sites/dev/docs/reference/macros/rmahd/readme.mdx
diff --git a/markdown/dev/reference/macros/rmald/en.md b/sites/dev/docs/reference/macros/rmald/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmald/en.md
rename to sites/dev/docs/reference/macros/rmald/readme.mdx
diff --git a/markdown/dev/reference/macros/rmapd/en.md b/sites/dev/docs/reference/macros/rmapd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmapd/en.md
rename to sites/dev/docs/reference/macros/rmapd/readme.mdx
diff --git a/markdown/dev/reference/macros/rmavd/en.md b/sites/dev/docs/reference/macros/rmavd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmavd/en.md
rename to sites/dev/docs/reference/macros/rmavd/readme.mdx
diff --git a/markdown/dev/reference/macros/rmbanner/en.md b/sites/dev/docs/reference/macros/rmbanner/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmbanner/en.md
rename to sites/dev/docs/reference/macros/rmbanner/readme.mdx
diff --git a/markdown/dev/reference/macros/rmbannerbox/en.md b/sites/dev/docs/reference/macros/rmbannerbox/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmbannerbox/en.md
rename to sites/dev/docs/reference/macros/rmbannerbox/readme.mdx
diff --git a/markdown/dev/reference/macros/rmbartack/en.md b/sites/dev/docs/reference/macros/rmbartack/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmbartack/en.md
rename to sites/dev/docs/reference/macros/rmbartack/readme.mdx
diff --git a/markdown/dev/reference/macros/rmbartackalong/en.md b/sites/dev/docs/reference/macros/rmbartackalong/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmbartackalong/en.md
rename to sites/dev/docs/reference/macros/rmbartackalong/readme.mdx
diff --git a/markdown/dev/reference/macros/rmbartackfractionalong/en.md b/sites/dev/docs/reference/macros/rmbartackfractionalong/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmbartackfractionalong/en.md
rename to sites/dev/docs/reference/macros/rmbartackfractionalong/readme.mdx
diff --git a/markdown/dev/reference/macros/rmcrossbox/en.md b/sites/dev/docs/reference/macros/rmcrossbox/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmcrossbox/en.md
rename to sites/dev/docs/reference/macros/rmcrossbox/readme.mdx
diff --git a/markdown/dev/reference/macros/rmcutonfold/en.md b/sites/dev/docs/reference/macros/rmcutonfold/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmcutonfold/en.md
rename to sites/dev/docs/reference/macros/rmcutonfold/readme.mdx
diff --git a/markdown/dev/reference/macros/rmgrainline/en.md b/sites/dev/docs/reference/macros/rmgrainline/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmgrainline/en.md
rename to sites/dev/docs/reference/macros/rmgrainline/readme.mdx
diff --git a/markdown/dev/reference/macros/rmhd/en.md b/sites/dev/docs/reference/macros/rmhd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmhd/en.md
rename to sites/dev/docs/reference/macros/rmhd/readme.mdx
diff --git a/markdown/dev/reference/macros/rmld/en.md b/sites/dev/docs/reference/macros/rmld/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmld/en.md
rename to sites/dev/docs/reference/macros/rmld/readme.mdx
diff --git a/markdown/dev/reference/macros/rmminiscale/en.md b/sites/dev/docs/reference/macros/rmminiscale/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmminiscale/en.md
rename to sites/dev/docs/reference/macros/rmminiscale/readme.mdx
diff --git a/markdown/dev/reference/macros/rmpd/en.md b/sites/dev/docs/reference/macros/rmpd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmpd/en.md
rename to sites/dev/docs/reference/macros/rmpd/readme.mdx
diff --git a/markdown/dev/reference/macros/rmpleat/en.md b/sites/dev/docs/reference/macros/rmpleat/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmpleat/en.md
rename to sites/dev/docs/reference/macros/rmpleat/readme.mdx
diff --git a/markdown/dev/reference/macros/rmringsector/en.md b/sites/dev/docs/reference/macros/rmringsector/readme.mdx
similarity index 97%
rename from markdown/dev/reference/macros/rmringsector/en.md
rename to sites/dev/docs/reference/macros/rmringsector/readme.mdx
index 5392cc16f24..44dd8b3c192 100644
--- a/markdown/dev/reference/macros/rmringsector/en.md
+++ b/sites/dev/docs/reference/macros/rmringsector/readme.mdx
@@ -7,13 +7,13 @@ It is the recommended way to remove (the effects of) a `ringsector` macro.
It is provided by the [ringsector plugin](/reference/plugins/ringsector).
-
+:::note
##### Not a core-plugins macro
The `rmringsector` macro is not provided by the [core-plugins](/reference/plugins/core),
so you need to load the [ringsector plugin](/reference/plugins/ringsector) explicitly
if you want to use it.
-
+:::
## Signature
diff --git a/markdown/dev/reference/macros/rmscalebox/en.md b/sites/dev/docs/reference/macros/rmscalebox/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmscalebox/en.md
rename to sites/dev/docs/reference/macros/rmscalebox/readme.mdx
diff --git a/markdown/dev/reference/macros/rmsewtogether/en.md b/sites/dev/docs/reference/macros/rmsewtogether/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmsewtogether/en.md
rename to sites/dev/docs/reference/macros/rmsewtogether/readme.mdx
diff --git a/markdown/dev/reference/macros/rmtitle/en.md b/sites/dev/docs/reference/macros/rmtitle/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmtitle/en.md
rename to sites/dev/docs/reference/macros/rmtitle/readme.mdx
diff --git a/markdown/dev/reference/macros/rmvd/en.md b/sites/dev/docs/reference/macros/rmvd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/rmvd/en.md
rename to sites/dev/docs/reference/macros/rmvd/readme.mdx
diff --git a/markdown/dev/reference/macros/round/en.md b/sites/dev/docs/reference/macros/round/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/round/en.md
rename to sites/dev/docs/reference/macros/round/readme.mdx
diff --git a/markdown/dev/reference/macros/scalebox/en.md b/sites/dev/docs/reference/macros/scalebox/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/scalebox/en.md
rename to sites/dev/docs/reference/macros/scalebox/readme.mdx
diff --git a/markdown/dev/reference/macros/sewtogether/en.md b/sites/dev/docs/reference/macros/sewtogether/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/sewtogether/en.md
rename to sites/dev/docs/reference/macros/sewtogether/readme.mdx
diff --git a/markdown/dev/reference/macros/sprinkle/en.md b/sites/dev/docs/reference/macros/sprinkle/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/sprinkle/en.md
rename to sites/dev/docs/reference/macros/sprinkle/readme.mdx
diff --git a/markdown/dev/reference/macros/title/en.md b/sites/dev/docs/reference/macros/title/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/title/en.md
rename to sites/dev/docs/reference/macros/title/readme.mdx
diff --git a/markdown/dev/reference/macros/vd/en.md b/sites/dev/docs/reference/macros/vd/readme.mdx
similarity index 100%
rename from markdown/dev/reference/macros/vd/en.md
rename to sites/dev/docs/reference/macros/vd/readme.mdx
diff --git a/markdown/dev/reference/measurements/en.md b/sites/dev/docs/reference/measurements/readme.mdx
similarity index 99%
rename from markdown/dev/reference/measurements/en.md
rename to sites/dev/docs/reference/measurements/readme.mdx
index 3b5eaeb6e2e..f5efaada4d4 100644
--- a/markdown/dev/reference/measurements/en.md
+++ b/sites/dev/docs/reference/measurements/readme.mdx
@@ -74,11 +74,11 @@ plugin will add and modify the following measurements.
| `bust` | Bust circumference (`bust` is set to the value of `chest`) |
| `chest` | (`chest` is changed to the value of `highBust`) |
-
+:::tip
##### How to take measurements is documented on FreeSewing.org
For instructions on how to take measurements, please refer to our
maker documentation on FreeSewing.org: https://freesewing.org/docs/measurements/
-
+:::
diff --git a/markdown/dev/reference/packages/models/en.md b/sites/dev/docs/reference/packages/models/readme.mdx
similarity index 100%
rename from markdown/dev/reference/packages/models/en.md
rename to sites/dev/docs/reference/packages/models/readme.mdx
diff --git a/markdown/dev/reference/packages/new-design/en.md b/sites/dev/docs/reference/packages/new-design/readme.mdx
similarity index 96%
rename from markdown/dev/reference/packages/new-design/en.md
rename to sites/dev/docs/reference/packages/new-design/readme.mdx
index d24f5a0f94c..ec059b27687 100644
--- a/markdown/dev/reference/packages/new-design/en.md
+++ b/sites/dev/docs/reference/packages/new-design/readme.mdx
@@ -17,13 +17,13 @@ The package will run an interactive script and install a standalone
development environment which can be used to develop and test a new
FreeSewing design and to generate patterns from that design.
-
+:::note RELATED
Please see our
[Getting Started tutorial](/tutorials/getting-started-linux/dev-setup#stand-alone-development)
for more information about how to set up and start the standalone
development environment.
-
+:::
[1]: https://www.npmjs.com/package/@freesewing/new-design
diff --git a/markdown/dev/reference/packages/prettier-config/en.md b/sites/dev/docs/reference/packages/prettier-config/readme.mdx
similarity index 97%
rename from markdown/dev/reference/packages/prettier-config/en.md
rename to sites/dev/docs/reference/packages/prettier-config/readme.mdx
index ceb49324982..d00d40ee611 100644
--- a/markdown/dev/reference/packages/prettier-config/en.md
+++ b/sites/dev/docs/reference/packages/prettier-config/readme.mdx
@@ -33,12 +33,12 @@ The Prettier options configured by this package:
| trailingComma | "es5" |
| printWidth | 100 |
-
+:::note RELATED
Please see the
[Prettier options documentation](https://prettier.io/docs/en/options.html)
for information about the effects of each option.
-
+:::
[1]: https://www.npmjs.com/package/@freesewing/prettier-config
diff --git a/markdown/dev/reference/packages/react-components/en.md b/sites/dev/docs/reference/packages/react-components/readme.mdx
similarity index 100%
rename from markdown/dev/reference/packages/react-components/en.md
rename to sites/dev/docs/reference/packages/react-components/readme.mdx
diff --git a/markdown/dev/reference/packages/en.md b/sites/dev/docs/reference/packages/readme.mdx
similarity index 100%
rename from markdown/dev/reference/packages/en.md
rename to sites/dev/docs/reference/packages/readme.mdx
diff --git a/markdown/dev/reference/packages/rehype-highlight-lines/en.md b/sites/dev/docs/reference/packages/rehype-highlight-lines/readme.mdx
similarity index 100%
rename from markdown/dev/reference/packages/rehype-highlight-lines/en.md
rename to sites/dev/docs/reference/packages/rehype-highlight-lines/readme.mdx
diff --git a/markdown/dev/reference/packages/rehype-jargon/en.md b/sites/dev/docs/reference/packages/rehype-jargon/readme.mdx
similarity index 93%
rename from markdown/dev/reference/packages/rehype-jargon/en.md
rename to sites/dev/docs/reference/packages/rehype-jargon/readme.mdx
index 416dfffb10c..0cd375a503a 100644
--- a/markdown/dev/reference/packages/rehype-jargon/en.md
+++ b/sites/dev/docs/reference/packages/rehype-jargon/readme.mdx
@@ -73,11 +73,4 @@ against the jargon file.
- If you use HTML in your jargon descriptions, use only inline elements such as adding bold/italic formatting and inserting links.
-
-
-Please see [Using Jargon](/guides/markdown/jargon) for information
-about how Jargon is used in the FreeSewing websites.
-
-
-
[1]: https://www.npmjs.com/package/@freesewing/rehype-jargon
diff --git a/markdown/dev/reference/packages/snapseries/en.md b/sites/dev/docs/reference/packages/snapseries/readme.mdx
similarity index 98%
rename from markdown/dev/reference/packages/snapseries/en.md
rename to sites/dev/docs/reference/packages/snapseries/readme.mdx
index 36957d19933..d969b39b808 100644
--- a/markdown/dev/reference/packages/snapseries/en.md
+++ b/sites/dev/docs/reference/packages/snapseries/readme.mdx
@@ -50,12 +50,12 @@ myOption: {
All measurements are in mm.
-
+:::note RELATED
Please see
[Snapped percentage options](/reference/api/part/config/options/pct/snap)
to learn more about how snapped percentage options are used.
-
+:::
[1]: https://www.npmjs.com/package/@freesewing/snapseries
diff --git a/markdown/dev/reference/plugins/annotations/en.md b/sites/dev/docs/reference/plugins/annotations/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/annotations/en.md
rename to sites/dev/docs/reference/plugins/annotations/readme.mdx
diff --git a/markdown/dev/reference/plugins/bin-pack/en.md b/sites/dev/docs/reference/plugins/bin-pack/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/bin-pack/en.md
rename to sites/dev/docs/reference/plugins/bin-pack/readme.mdx
diff --git a/markdown/dev/reference/plugins/bust/en.md b/sites/dev/docs/reference/plugins/bust/readme.mdx
similarity index 99%
rename from markdown/dev/reference/plugins/bust/en.md
rename to sites/dev/docs/reference/plugins/bust/readme.mdx
index d51b051c741..a0fada46a8a 100644
--- a/markdown/dev/reference/plugins/bust/en.md
+++ b/sites/dev/docs/reference/plugins/bust/readme.mdx
@@ -64,10 +64,10 @@ breasts.
You can see this in practice in our [Carlita][2] design, which extends the
menswear [Carlton][3] design.
-
+:::note RELATED
To learn more about extending a design, see [Part
inheritance](/howtos/code/from/)
-
+:::
### Use when creating gender-neutral designs
diff --git a/markdown/dev/reference/plugins/core/en.md b/sites/dev/docs/reference/plugins/core/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/core/en.md
rename to sites/dev/docs/reference/plugins/core/readme.mdx
diff --git a/markdown/dev/reference/plugins/flip/en.md b/sites/dev/docs/reference/plugins/flip/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/flip/en.md
rename to sites/dev/docs/reference/plugins/flip/readme.mdx
diff --git a/markdown/dev/reference/plugins/gore/en.md b/sites/dev/docs/reference/plugins/gore/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/gore/en.md
rename to sites/dev/docs/reference/plugins/gore/readme.mdx
diff --git a/markdown/dev/reference/plugins/i18n/en.md b/sites/dev/docs/reference/plugins/i18n/readme.mdx
similarity index 90%
rename from markdown/dev/reference/plugins/i18n/en.md
rename to sites/dev/docs/reference/plugins/i18n/readme.mdx
index 2042bcea997..23f962d1dcf 100644
--- a/markdown/dev/reference/plugins/i18n/en.md
+++ b/sites/dev/docs/reference/plugins/i18n/readme.mdx
@@ -28,7 +28,7 @@ import { pluginI18n } from '@freesewing/plugin-i18n'
## Notes
This plugin provides the mechanism for translation but does not come with
-translations itself. For this, you can use our [i18n
+translations itself. For this, you can use our [i18n
package](https://www.npmjs.com/package/@freesewing/i18n).
To add your own translations, you will need to pass data to this plugin
@@ -61,9 +61,4 @@ The data should be in the form of an `Object` structured as such:
}
```
-
-To learn more about using translations in a design, see the
-[Translation guide](/guides/translation/)
-
-
[1]: https://www.npmjs.com/package/@freesewing/plugin-i18n
diff --git a/markdown/dev/reference/plugins/measurements/en.md b/sites/dev/docs/reference/plugins/measurements/readme.mdx
similarity index 98%
rename from markdown/dev/reference/plugins/measurements/en.md
rename to sites/dev/docs/reference/plugins/measurements/readme.mdx
index b1745d86bf0..d9d64bc67e9 100644
--- a/markdown/dev/reference/plugins/measurements/en.md
+++ b/sites/dev/docs/reference/plugins/measurements/readme.mdx
@@ -16,10 +16,10 @@ It will add the following measurements:
- `waistFrontArc` (if both `waist` and `waistBack` are provided)
- `crossSeamBack` (if both `crossSeam` and `crossSeamFront` are provided)
-
+:::note RELATED
For more information about these extra measurements, please see
[Measurements from `plugin-measurements`](/reference/measurements#measurements-from-plugin-measurements)
-
+:::
## Installation
diff --git a/markdown/dev/reference/plugins/mirror/en.md b/sites/dev/docs/reference/plugins/mirror/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/mirror/en.md
rename to sites/dev/docs/reference/plugins/mirror/readme.mdx
diff --git a/markdown/dev/reference/plugins/en.md b/sites/dev/docs/reference/plugins/readme.mdx
similarity index 98%
rename from markdown/dev/reference/plugins/en.md
rename to sites/dev/docs/reference/plugins/readme.mdx
index ebebc241b1e..71a10caa4c9 100644
--- a/markdown/dev/reference/plugins/en.md
+++ b/sites/dev/docs/reference/plugins/readme.mdx
@@ -18,7 +18,7 @@ To import a plugin for use:
import { plugin } from { @freesewing/plugin-gore }
```
-
+:::tip
For convenience, each plugin is exported as several names exports:
@@ -28,7 +28,7 @@ For convenience, each plugin is exported as several names exports:
For example, `@freesewing/plugin-gore` has named exports `plugin`, `pluginGore`, and `gorePlugin` that all are the same thing.
-
+:::
## Plugins we maintain
diff --git a/markdown/dev/reference/plugins/ringsector/en.md b/sites/dev/docs/reference/plugins/ringsector/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/ringsector/en.md
rename to sites/dev/docs/reference/plugins/ringsector/readme.mdx
diff --git a/markdown/dev/reference/plugins/round/en.md b/sites/dev/docs/reference/plugins/round/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/round/en.md
rename to sites/dev/docs/reference/plugins/round/readme.mdx
diff --git a/markdown/dev/reference/plugins/sprinkle/en.md b/sites/dev/docs/reference/plugins/sprinkle/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/sprinkle/en.md
rename to sites/dev/docs/reference/plugins/sprinkle/readme.mdx
diff --git a/markdown/dev/reference/plugins/svgattr/en.md b/sites/dev/docs/reference/plugins/svgattr/readme.mdx
similarity index 98%
rename from markdown/dev/reference/plugins/svgattr/en.md
rename to sites/dev/docs/reference/plugins/svgattr/readme.mdx
index 494560830dd..bcfda68a25d 100644
--- a/markdown/dev/reference/plugins/svgattr/en.md
+++ b/sites/dev/docs/reference/plugins/svgattr/readme.mdx
@@ -28,10 +28,10 @@ import { pluginSvgAttr } from '@freesewing/plugin-svgattr'
// or
import { pluginSvgattr } from '@freesewing/plugin-svgattr'
```
-
+:::tip
For convenience, this plugin is exported
under multiple names with variations of capitalization.
-
+:::
## Notes
diff --git a/markdown/dev/reference/plugins/theme/en.md b/sites/dev/docs/reference/plugins/theme/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/theme/en.md
rename to sites/dev/docs/reference/plugins/theme/readme.mdx
diff --git a/markdown/dev/reference/plugins/timing/en.md b/sites/dev/docs/reference/plugins/timing/readme.mdx
similarity index 99%
rename from markdown/dev/reference/plugins/timing/en.md
rename to sites/dev/docs/reference/plugins/timing/readme.mdx
index 8b97237fe2d..7ac1a10c942 100644
--- a/markdown/dev/reference/plugins/timing/en.md
+++ b/sites/dev/docs/reference/plugins/timing/readme.mdx
@@ -41,7 +41,7 @@ and after the pattern and parts drafting process.
| `timing.parts.[part name].start` | Timestamp for the start of the part drafting process |
| `timing.parts.[part name].took` | Time it took to draft the part |
-
+:::note
Units and types depend on whether the pattern is generated in a browser
or via Node.js.
@@ -55,7 +55,7 @@ start timestamps are in nanoseconds, draft times are in microseconds,
and the values are
[BigInts](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt).
-
+:::
## Examples
diff --git a/markdown/dev/reference/plugins/versionfree-svg/en.md b/sites/dev/docs/reference/plugins/versionfree-svg/readme.mdx
similarity index 100%
rename from markdown/dev/reference/plugins/versionfree-svg/en.md
rename to sites/dev/docs/reference/plugins/versionfree-svg/readme.mdx
diff --git a/markdown/dev/reference/en.md b/sites/dev/docs/reference/readme.mdx
similarity index 100%
rename from markdown/dev/reference/en.md
rename to sites/dev/docs/reference/readme.mdx
diff --git a/markdown/dev/reference/settings/absoluteoptions/en.md b/sites/dev/docs/reference/settings/absoluteoptions/readme.mdx
similarity index 98%
rename from markdown/dev/reference/settings/absoluteoptions/en.md
rename to sites/dev/docs/reference/settings/absoluteoptions/readme.mdx
index ee914f07e42..8fae4a3d683 100644
--- a/markdown/dev/reference/settings/absoluteoptions/en.md
+++ b/sites/dev/docs/reference/settings/absoluteoptions/readme.mdx
@@ -4,7 +4,7 @@ title: absoluteOptions
The `absoluteOptions` setting holds the values for snapped percentage options.
-
+:::tip
The `absoluteOptions` setting is not intended to be set directly.
Instead, using _snapped percentage options_ will automatically cause
@@ -16,7 +16,7 @@ Please see the
[snapped percentage options reference](/reference/api/part/config/options/pct/snap)
for more details.
-
+:::
## Signature
diff --git a/markdown/dev/reference/settings/complete/en.md b/sites/dev/docs/reference/settings/complete/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/complete/en.md
rename to sites/dev/docs/reference/settings/complete/readme.mdx
diff --git a/markdown/dev/reference/settings/embed/en.md b/sites/dev/docs/reference/settings/embed/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/embed/en.md
rename to sites/dev/docs/reference/settings/embed/readme.mdx
diff --git a/markdown/dev/reference/settings/idprefix/en.md b/sites/dev/docs/reference/settings/idprefix/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/idprefix/en.md
rename to sites/dev/docs/reference/settings/idprefix/readme.mdx
diff --git a/markdown/dev/reference/settings/layout/en.md b/sites/dev/docs/reference/settings/layout/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/layout/en.md
rename to sites/dev/docs/reference/settings/layout/readme.mdx
diff --git a/markdown/dev/reference/settings/locale/en.md b/sites/dev/docs/reference/settings/locale/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/locale/en.md
rename to sites/dev/docs/reference/settings/locale/readme.mdx
diff --git a/markdown/dev/reference/settings/margin/en.md b/sites/dev/docs/reference/settings/margin/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/margin/en.md
rename to sites/dev/docs/reference/settings/margin/readme.mdx
diff --git a/markdown/dev/reference/settings/measurements/en.md b/sites/dev/docs/reference/settings/measurements/readme.mdx
similarity index 98%
rename from markdown/dev/reference/settings/measurements/en.md
rename to sites/dev/docs/reference/settings/measurements/readme.mdx
index 6be38b0d1c4..91f909d063b 100644
--- a/markdown/dev/reference/settings/measurements/en.md
+++ b/sites/dev/docs/reference/settings/measurements/readme.mdx
@@ -40,11 +40,11 @@ const pattern = new Aaron({
Measurements should always be specified in millimeter, unless it's an angle
measurement (like `shoulderSlope`) which should be provided in degrees.
-
+:::tip
The `measurements` settings property is used to hold __all__ measurements,
both regular measurements as well as any optional measurements.
(There is no `optionalMeasurements` settings property.)
-
+:::
diff --git a/markdown/dev/reference/settings/only/en.md b/sites/dev/docs/reference/settings/only/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/only/en.md
rename to sites/dev/docs/reference/settings/only/readme.mdx
diff --git a/markdown/dev/reference/settings/options/en.md b/sites/dev/docs/reference/settings/options/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/options/en.md
rename to sites/dev/docs/reference/settings/options/readme.mdx
diff --git a/markdown/dev/reference/settings/paperless/en.md b/sites/dev/docs/reference/settings/paperless/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/paperless/en.md
rename to sites/dev/docs/reference/settings/paperless/readme.mdx
diff --git a/markdown/dev/reference/settings/en.md b/sites/dev/docs/reference/settings/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/en.md
rename to sites/dev/docs/reference/settings/readme.mdx
diff --git a/markdown/dev/reference/settings/sa/en.md b/sites/dev/docs/reference/settings/sa/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/sa/en.md
rename to sites/dev/docs/reference/settings/sa/readme.mdx
diff --git a/markdown/dev/reference/settings/sample/en.md b/sites/dev/docs/reference/settings/sample/readme.mdx
similarity index 97%
rename from markdown/dev/reference/settings/sample/en.md
rename to sites/dev/docs/reference/settings/sample/readme.mdx
index 0d127a52f2c..28a3b901de2 100644
--- a/markdown/dev/reference/settings/sample/en.md
+++ b/sites/dev/docs/reference/settings/sample/readme.mdx
@@ -39,9 +39,9 @@ The `sample` setting object can hold the following properties:
- __measurement__: A measurement name as defined in the pattern config file (only used when `type` is measurement).
- __models__: A plain object of different models where the key is the model name and the value an object with the required measurements.
-
+:::note RELATED
Please see the [`Pattern.sample()`][1] documentation for more information
about pattern sampling.
-
+:::
diff --git a/markdown/dev/reference/settings/scale/en.md b/sites/dev/docs/reference/settings/scale/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/scale/en.md
rename to sites/dev/docs/reference/settings/scale/readme.mdx
diff --git a/markdown/dev/reference/settings/stackprefix/en.md b/sites/dev/docs/reference/settings/stackprefix/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/stackprefix/en.md
rename to sites/dev/docs/reference/settings/stackprefix/readme.mdx
diff --git a/markdown/dev/reference/settings/units/en.md b/sites/dev/docs/reference/settings/units/readme.mdx
similarity index 100%
rename from markdown/dev/reference/settings/units/en.md
rename to sites/dev/docs/reference/settings/units/readme.mdx
diff --git a/markdown/dev/reference/snippets/bnotch/en.md b/sites/dev/docs/reference/snippets/bnotch/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/bnotch/en.md
rename to sites/dev/docs/reference/snippets/bnotch/readme.mdx
diff --git a/markdown/dev/reference/snippets/button/en.md b/sites/dev/docs/reference/snippets/button/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/button/en.md
rename to sites/dev/docs/reference/snippets/button/readme.mdx
diff --git a/markdown/dev/reference/snippets/buttonhole-end/en.md b/sites/dev/docs/reference/snippets/buttonhole-end/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/buttonhole-end/en.md
rename to sites/dev/docs/reference/snippets/buttonhole-end/readme.mdx
diff --git a/markdown/dev/reference/snippets/buttonhole-start/en.md b/sites/dev/docs/reference/snippets/buttonhole-start/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/buttonhole-start/en.md
rename to sites/dev/docs/reference/snippets/buttonhole-start/readme.mdx
diff --git a/markdown/dev/reference/snippets/buttonhole/en.md b/sites/dev/docs/reference/snippets/buttonhole/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/buttonhole/en.md
rename to sites/dev/docs/reference/snippets/buttonhole/readme.mdx
diff --git a/markdown/dev/reference/snippets/eyelet/en.md b/sites/dev/docs/reference/snippets/eyelet/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/eyelet/en.md
rename to sites/dev/docs/reference/snippets/eyelet/readme.mdx
diff --git a/markdown/dev/reference/snippets/logo/en.md b/sites/dev/docs/reference/snippets/logo/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/logo/en.md
rename to sites/dev/docs/reference/snippets/logo/readme.mdx
diff --git a/markdown/dev/reference/snippets/notch/en.md b/sites/dev/docs/reference/snippets/notch/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/notch/en.md
rename to sites/dev/docs/reference/snippets/notch/readme.mdx
diff --git a/markdown/dev/reference/snippets/en.md b/sites/dev/docs/reference/snippets/readme.mdx
similarity index 97%
rename from markdown/dev/reference/snippets/en.md
rename to sites/dev/docs/reference/snippets/readme.mdx
index 4906c944629..541d0574dcc 100644
--- a/markdown/dev/reference/snippets/en.md
+++ b/sites/dev/docs/reference/snippets/readme.mdx
@@ -14,13 +14,13 @@ To place a Snippet at a given point:
const snippet = new Snippet(String 'snippet name', Point anchor)
```
-
+:::note RELATED
See the [Snippet API](/reference/api/snippet)
for more information about how to use Snippets in code.
See [Using Attributes](/howtos/code/attributes)
for information about custom Attributes that can be used with Snippets.
-
+:::
## List of snippets
diff --git a/markdown/dev/reference/snippets/snap-socket/en.md b/sites/dev/docs/reference/snippets/snap-socket/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/snap-socket/en.md
rename to sites/dev/docs/reference/snippets/snap-socket/readme.mdx
diff --git a/markdown/dev/reference/snippets/snap-stud/en.md b/sites/dev/docs/reference/snippets/snap-stud/readme.mdx
similarity index 100%
rename from markdown/dev/reference/snippets/snap-stud/en.md
rename to sites/dev/docs/reference/snippets/snap-stud/readme.mdx
diff --git a/markdown/dev/reference/store-methods/cutlist.addcut/en.md b/sites/dev/docs/reference/store-methods/cutlist.addcut/readme.mdx
similarity index 99%
rename from markdown/dev/reference/store-methods/cutlist.addcut/en.md
rename to sites/dev/docs/reference/store-methods/cutlist.addcut/readme.mdx
index 42844da2102..ae712351b69 100644
--- a/markdown/dev/reference/store-methods/cutlist.addcut/en.md
+++ b/sites/dev/docs/reference/store-methods/cutlist.addcut/readme.mdx
@@ -26,7 +26,7 @@ Pass an object to the `store.cutlist.addCut` method with any of the following ke
| `onBias` | Boolean | false | Should the parts be cut on the bias? |
| `onFold` | Boolean | false | Should the parts be cut on the fold? |
-
+:::note
You can use any `string` you want for your material, but here are some standard ones we provide translations for:
@@ -38,7 +38,7 @@ You can use any `string` you want for your material, but here are some standard
| interfacing | Interfacing |
| ribbing | Ribbing |
-
+:::
#### Example
diff --git a/markdown/dev/reference/store-methods/cutlist.removecut/en.md b/sites/dev/docs/reference/store-methods/cutlist.removecut/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/cutlist.removecut/en.md
rename to sites/dev/docs/reference/store-methods/cutlist.removecut/readme.mdx
diff --git a/markdown/dev/reference/store-methods/cutlist.setcutonfold/en.md b/sites/dev/docs/reference/store-methods/cutlist.setcutonfold/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/cutlist.setcutonfold/en.md
rename to sites/dev/docs/reference/store-methods/cutlist.setcutonfold/readme.mdx
diff --git a/markdown/dev/reference/store-methods/cutlist.setgrain/en.md b/sites/dev/docs/reference/store-methods/cutlist.setgrain/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/cutlist.setgrain/en.md
rename to sites/dev/docs/reference/store-methods/cutlist.setgrain/readme.mdx
diff --git a/markdown/dev/reference/store-methods/flag.error/en.md b/sites/dev/docs/reference/store-methods/flag.error/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/flag.error/en.md
rename to sites/dev/docs/reference/store-methods/flag.error/readme.mdx
diff --git a/markdown/dev/reference/store-methods/flag.fixme/en.md b/sites/dev/docs/reference/store-methods/flag.fixme/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/flag.fixme/en.md
rename to sites/dev/docs/reference/store-methods/flag.fixme/readme.mdx
diff --git a/markdown/dev/reference/store-methods/flag.info/en.md b/sites/dev/docs/reference/store-methods/flag.info/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/flag.info/en.md
rename to sites/dev/docs/reference/store-methods/flag.info/readme.mdx
diff --git a/markdown/dev/reference/store-methods/flag.note/en.md b/sites/dev/docs/reference/store-methods/flag.note/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/flag.note/en.md
rename to sites/dev/docs/reference/store-methods/flag.note/readme.mdx
diff --git a/markdown/dev/reference/store-methods/flag.preset/en.md b/sites/dev/docs/reference/store-methods/flag.preset/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/flag.preset/en.md
rename to sites/dev/docs/reference/store-methods/flag.preset/readme.mdx
diff --git a/markdown/dev/reference/store-methods/flag.tip/en.md b/sites/dev/docs/reference/store-methods/flag.tip/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/flag.tip/en.md
rename to sites/dev/docs/reference/store-methods/flag.tip/readme.mdx
diff --git a/markdown/dev/reference/store-methods/flag.warn/en.md b/sites/dev/docs/reference/store-methods/flag.warn/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/flag.warn/en.md
rename to sites/dev/docs/reference/store-methods/flag.warn/readme.mdx
diff --git a/markdown/dev/reference/store-methods/generatemacroids/en.md b/sites/dev/docs/reference/store-methods/generatemacroids/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/generatemacroids/en.md
rename to sites/dev/docs/reference/store-methods/generatemacroids/readme.mdx
diff --git a/markdown/dev/reference/store-methods/getmacroids/en.md b/sites/dev/docs/reference/store-methods/getmacroids/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/getmacroids/en.md
rename to sites/dev/docs/reference/store-methods/getmacroids/readme.mdx
diff --git a/markdown/dev/reference/store-methods/log.debug/en.md b/sites/dev/docs/reference/store-methods/log.debug/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/log.debug/en.md
rename to sites/dev/docs/reference/store-methods/log.debug/readme.mdx
diff --git a/markdown/dev/reference/store-methods/log.error/en.md b/sites/dev/docs/reference/store-methods/log.error/readme.mdx
similarity index 97%
rename from markdown/dev/reference/store-methods/log.error/en.md
rename to sites/dev/docs/reference/store-methods/log.error/readme.mdx
index f120b41c610..35cbdee4e91 100644
--- a/markdown/dev/reference/store-methods/log.error/en.md
+++ b/sites/dev/docs/reference/store-methods/log.error/readme.mdx
@@ -5,9 +5,9 @@ title: log.error()
This is the logging method for logs of `error` level.
-
+:::note
Logging something at the `error` level will stop FreeSewing from completing the draft of the pattern.
-
+:::
## Signature
diff --git a/markdown/dev/reference/store-methods/log.info/en.md b/sites/dev/docs/reference/store-methods/log.info/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/log.info/en.md
rename to sites/dev/docs/reference/store-methods/log.info/readme.mdx
diff --git a/markdown/dev/reference/store-methods/log.warn/en.md b/sites/dev/docs/reference/store-methods/log.warn/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/log.warn/en.md
rename to sites/dev/docs/reference/store-methods/log.warn/readme.mdx
diff --git a/markdown/dev/reference/store-methods/pack/en.md b/sites/dev/docs/reference/store-methods/pack/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/pack/en.md
rename to sites/dev/docs/reference/store-methods/pack/readme.mdx
diff --git a/markdown/dev/reference/store-methods/en.md b/sites/dev/docs/reference/store-methods/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/en.md
rename to sites/dev/docs/reference/store-methods/readme.mdx
diff --git a/markdown/dev/reference/store-methods/removemacronodes/en.md b/sites/dev/docs/reference/store-methods/removemacronodes/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/removemacronodes/en.md
rename to sites/dev/docs/reference/store-methods/removemacronodes/readme.mdx
diff --git a/markdown/dev/reference/store-methods/storemacroids/en.md b/sites/dev/docs/reference/store-methods/storemacroids/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/storemacroids/en.md
rename to sites/dev/docs/reference/store-methods/storemacroids/readme.mdx
diff --git a/markdown/dev/reference/store-methods/unflag.error/en.md b/sites/dev/docs/reference/store-methods/unflag.error/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/unflag.error/en.md
rename to sites/dev/docs/reference/store-methods/unflag.error/readme.mdx
diff --git a/markdown/dev/reference/store-methods/unflag.fixme/en.md b/sites/dev/docs/reference/store-methods/unflag.fixme/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/unflag.fixme/en.md
rename to sites/dev/docs/reference/store-methods/unflag.fixme/readme.mdx
diff --git a/markdown/dev/reference/store-methods/unflag.info/en.md b/sites/dev/docs/reference/store-methods/unflag.info/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/unflag.info/en.md
rename to sites/dev/docs/reference/store-methods/unflag.info/readme.mdx
diff --git a/markdown/dev/reference/store-methods/unflag.note/en.md b/sites/dev/docs/reference/store-methods/unflag.note/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/unflag.note/en.md
rename to sites/dev/docs/reference/store-methods/unflag.note/readme.mdx
diff --git a/markdown/dev/reference/store-methods/unflag.preset/en.md b/sites/dev/docs/reference/store-methods/unflag.preset/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/unflag.preset/en.md
rename to sites/dev/docs/reference/store-methods/unflag.preset/readme.mdx
diff --git a/markdown/dev/reference/store-methods/unflag.tip/en.md b/sites/dev/docs/reference/store-methods/unflag.tip/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/unflag.tip/en.md
rename to sites/dev/docs/reference/store-methods/unflag.tip/readme.mdx
diff --git a/markdown/dev/reference/store-methods/unflag.warn/en.md b/sites/dev/docs/reference/store-methods/unflag.warn/readme.mdx
similarity index 100%
rename from markdown/dev/reference/store-methods/unflag.warn/en.md
rename to sites/dev/docs/reference/store-methods/unflag.warn/readme.mdx
diff --git a/markdown/dev/training/git/audio/en.md b/sites/dev/docs/training/git/audio/readme.mdx
similarity index 98%
rename from markdown/dev/training/git/audio/en.md
rename to sites/dev/docs/training/git/audio/readme.mdx
index 0a15c4bb22b..fbd91f97b46 100644
--- a/markdown/dev/training/git/audio/en.md
+++ b/sites/dev/docs/training/git/audio/readme.mdx
@@ -13,14 +13,14 @@ This training does not cover everything there is to know about git. Instead,
it aims to make you familiar with git in a way that will give you the
confidence to explore further on your own.
-
+:::note
This is the **audiobook** format, with a total runtime of 01:43:17.
This training is also available as a **[long read][text]** (20k
words) or **[video series][video]**.
-
+:::