diff --git a/packages/freesewing.dev/package.json b/packages/freesewing.dev/package.json index 69582a1b915..0f71e468b3a 100644 --- a/packages/freesewing.dev/package.json +++ b/packages/freesewing.dev/package.json @@ -16,16 +16,17 @@ "@mdx-js/react": "^2.0.0-rc.2", "@mdx-js/runtime": "next", "daisyui": "^1.16.2", - "lodash.orderby": "^4.6.0", "next": "latest", "react-swipeable": "^6.2.0", + "lodash.orderby": "^4.6.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", "remark-gfm": "^3.0.1", "remark-jargon": "^2.19.5" }, "devDependencies": { "autoprefixer": "^10.4.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", + "js-yaml": "^4.1.0", "postcss": "^8.4.4", "tailwindcss": "^3.0.1" } diff --git a/packages/freesewing.dev/prebuild/mdx.en.js b/packages/freesewing.dev/prebuild/mdx.en.js index 36d75a53b61..8f88cd23d47 100644 --- a/packages/freesewing.dev/prebuild/mdx.en.js +++ b/packages/freesewing.dev/prebuild/mdx.en.js @@ -1,2541 +1,3008 @@ export default { "contributors/code-of-conduct": { "title": "Code of Conduct", - "for": "contributors", - "icons": [ - "face", - "heart" - ], - "about": "FreeSewing's code of conduct is based on the [contributor covenant](https://www.contributor-covenant.org/)\n", - "intro": "Upholding our Code of Conduct is a requirement for all FreeSewing contributors", - "slug": "contributors/code-of-conduct", - "order": "Code of Conduct" + "intro": "", + "order": "Code of Conduct", + "slug": "contributors/code-of-conduct" }, "contributors/code-of-conduct/enforcement-guidelines/correction": { + "title": "Correction", + "intro": "Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.", + "order": "10Correction", "slug": "contributors/code-of-conduct/enforcement-guidelines/correction" }, "contributors/code-of-conduct/enforcement-guidelines": { + "title": "Enforcement Guidelines", + "intro": "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:", + "order": "60Enforcement Guidelines", "slug": "contributors/code-of-conduct/enforcement-guidelines" }, "contributors/code-of-conduct/enforcement-guidelines/permanent-ban": { + "title": "Permanent ban", + "intro": "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.", + "order": "40Permanent ban", "slug": "contributors/code-of-conduct/enforcement-guidelines/permanent-ban" }, "contributors/code-of-conduct/enforcement-guidelines/temporary-ban": { + "title": "Temporary ban", + "intro": "A serious violation of community standards, including sustained inappropriate behavior.", + "order": "30Temporary ban", "slug": "contributors/code-of-conduct/enforcement-guidelines/temporary-ban" }, "contributors/code-of-conduct/enforcement-guidelines/warning": { "title": "Warning", - "order": "20Warning", "intro": "A violation through a single incident or series of actions.", + "order": "20Warning", "slug": "contributors/code-of-conduct/enforcement-guidelines/warning" }, "contributors/code-of-conduct/enforcement-responsibilities": { + "title": "Enforcement responsibilities", + "intro": "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.", + "order": "30Enforcement responsibilities", "slug": "contributors/code-of-conduct/enforcement-responsibilities" }, "contributors/code-of-conduct/enforcement": { + "title": "Enforcement", + "intro": "Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement:", + "order": "50Enforcement", "slug": "contributors/code-of-conduct/enforcement" }, "contributors/code-of-conduct/our-pledge": { + "title": "Our pledge", + "intro": "We as members, contributors, and leaders of the FreeSewing community pledge to make participation in our community a harassment-free experience for everyone.", + "order": "10Our pledge", "slug": "contributors/code-of-conduct/our-pledge" }, "contributors/code-of-conduct/our-standards": { "title": "Our standards", - "order": "20Our standards", "intro": "Examples of behavior that contributes to a positive environment for our community include:", + "order": "20Our standards", "slug": "contributors/code-of-conduct/our-standards" }, "contributors/code-of-conduct/scope": { + "title": "Scope", + "intro": "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.", + "order": "40Scope", "slug": "contributors/code-of-conduct/scope" }, "contributors": { "title": "For contributors", - "order": "1110For contributors", "intro": "Thank you for being part of our community, and for wanting to contribute! ❤️", + "order": "1110For contributors", "slug": "contributors" }, "contributors/help": { + "title": "Where to get help", + "intro": "Our chatrooms on Discord are the best place to ask questions or share your feedback.", + "order": "Where to get help", "slug": "contributors/help" }, "contributors/terms/backend": { "title": "Backend", "intro": "The FreeSewing backend handles all user data for freesewing.org.", - "slug": "contributors/terms/backend", - "order": "Backend" + "order": "Backend", + "slug": "contributors/terms/backend" }, "contributors/terms/commit": { "title": "Commit", "intro": "A commit is made every time somebody published an update to our source code.", - "slug": "contributors/terms/commit", - "order": "Commit" + "order": "Commit", + "slug": "contributors/terms/commit" }, "contributors/terms/contributor-call": { + "title": "Contributor call (fscc)", + "intro": "The FreeSewing Contributor Call (fscc) is a bi-weekly conference call/zoom meeting with the FreeSewing contributors.", + "order": "Contributor call (fscc)", "slug": "contributors/terms/contributor-call" }, "contributors/terms/contributor": { + "title": "Contributor", + "intro": "Anybody who contributes to FreeSewing in a material way. Either with code contributions, or community building, or pattern design, and so on.", + "order": "Contributor", "slug": "contributors/terms/contributor" }, "contributors/terms/design-pattern": { + "title": "Design/Pattern", + "intro": "The terms and somewhat overlap and their exact meaning depends on the context.", + "order": "Design/Pattern", "slug": "contributors/terms/design-pattern" }, "contributors/terms/developer": { "title": "Developer", "intro": "Anybody who works with software code or wants to learn to do so.", - "slug": "contributors/terms/developer", - "order": "Developer" + "order": "Developer", + "slug": "contributors/terms/developer" }, "contributors/terms/discord": { "title": "Discord", "intro": "The name of our chat provider that powers our chat at https://discord.freesewing.org/", - "slug": "contributors/terms/discord", - "order": "Discord" + "order": "Discord", + "slug": "contributors/terms/discord" }, "contributors/terms/editor": { + "title": "Editor", + "intro": "A person who contributs to/with content. Either by writing blog posts or documentation, or posts for social media. But it can also be video editing or making illustrations.", + "order": "Editor", "slug": "contributors/terms/editor" }, "contributors/terms": { + "title": "Terminology", + "intro": "Below is a list of terms you may come across when working with FreeSewing with a link to a brief description:", + "order": "Terminology", "slug": "contributors/terms" }, "contributors/terms/express": { "title": "Express", "intro": "Express is a web framework for NodeJS.", - "slug": "contributors/terms/express", - "order": "Express" + "order": "Express", + "slug": "contributors/terms/express" }, "contributors/terms/freesewing.dev": { "title": "freesewing.dev", "intro": "Our website for developers.", - "slug": "contributors/terms/freesewing.dev", - "order": "freesewing.dev" + "order": "freesewing.dev", + "slug": "contributors/terms/freesewing.dev" }, "contributors/terms/freesewing.org": { "title": "freesewing.org", "intro": "Our website for makers.", - "slug": "contributors/terms/freesewing.org", - "order": "freesewing.org" + "order": "freesewing.org", + "slug": "contributors/terms/freesewing.org" }, "contributors/terms/freesewing": { "title": "FreeSewing", "intro": "FreeSewing refers to the community-driven open source project.", - "slug": "contributors/terms/freesewing", - "order": "FreeSewing" + "order": "FreeSewing", + "slug": "contributors/terms/freesewing" }, "contributors/terms/frontend": { "title": "Frontend", "intro": "A user-facing interface. Can refer to one of our websites, or our development environment.", - "slug": "contributors/terms/frontend", - "order": "Frontend" + "order": "Frontend", + "slug": "contributors/terms/frontend" }, "contributors/terms/gatsby": { "title": "Gatsby", "intro": "Gatsby is a static-site generator for React.", - "slug": "contributors/terms/gatsby", - "order": "Gatsby" + "order": "Gatsby", + "slug": "contributors/terms/gatsby" }, "contributors/terms/i18n": { + "title": "i18n", + "intro": "Short for . Within the context of FreeSewing, this mostly means translation, but can also relate to other internationalisation concerns such as the type of units to use, or paper sizes, and so on.", + "order": "i18n", "slug": "contributors/terms/i18n" }, "contributors/terms/issue": { + "title": "Issue", + "intro": "An issue is a sort of support ticket. It can be a bug report, a feature request, a question or problem report.", + "order": "Issue", "slug": "contributors/terms/issue" }, "contributors/terms/javascript": { + "title": "Javascript", + "intro": "The programming language in which FreeSewing is written. It can run in your browser, as well as outside of it with Node JS.", + "order": "Javascript", "slug": "contributors/terms/javascript" }, "contributors/terms/made-to-measure": { "title": "Made-to-measure", "intro": "Made to someone's (body) measurements, rather than based on specific sizes.", - "slug": "contributors/terms/made-to-measure", - "order": "Made-to-measure" + "order": "Made-to-measure", + "slug": "contributors/terms/made-to-measure" }, "contributors/terms/markdown": { + "title": "Markdown", + "intro": "A plain text markup format that is easy to read for computers and humans alike. It's a way to write things in plain text, yet make them look pretty in HTML.", + "order": "Markdown", "slug": "contributors/terms/markdown" }, "contributors/terms/monorepo": { + "title": "Monorepo", + "intro": "A monorepo is an organisational approach to software development where rather than having a multitude of repositories, a number of different software pieces are bundled together in a single repository.", + "order": "Monorepo", "slug": "contributors/terms/monorepo" }, "contributors/terms/node": { "title": "Node", "intro": "Node (or NodeJS) is a Javascript runtime that allows to use the language outside the browser.", - "slug": "contributors/terms/node", - "order": "Node" + "order": "Node", + "slug": "contributors/terms/node" }, "contributors/terms/parametric-pattern-design": { + "title": "Parametric pattern design", + "intro": "A design approach whereby sewing patterns are contructed based on parameters, and can adapt automatically when those parameters change.", + "order": "Parametric pattern design", "slug": "contributors/terms/parametric-pattern-design" }, "contributors/terms/patron": { "title": "Patron", "intro": "A person who supports FreeSewing financially.", - "slug": "contributors/terms/patron", - "order": "Patron" + "order": "Patron", + "slug": "contributors/terms/patron" }, "contributors/terms/plugin": { "title": "Plugin", "intro": "An extension to FreeSewing core that provides an extra feature of functionality.", - "slug": "contributors/terms/plugin", - "order": "Plugin" + "order": "Plugin", + "slug": "contributors/terms/plugin" }, "contributors/terms/pull-request": { "title": "Pull request", "intro": "A pull request is a proposal to commit changes to a repository.", - "slug": "contributors/terms/pull-request", - "order": "Pull request" + "order": "Pull request", + "slug": "contributors/terms/pull-request" }, "contributors/terms/react": { "title": "React", "intro": "React is a Javascript framework to build user interfaces on the web.", - "slug": "contributors/terms/react", - "order": "React" + "order": "React", + "slug": "contributors/terms/react" }, "contributors/terms/repo": { "title": "Repo", "intro": "Short for repository .", - "slug": "contributors/terms/repo", - "order": "Repo" + "order": "Repo", + "slug": "contributors/terms/repo" }, "contributors/terms/repository": { "title": "Repository", "intro": "We develop our software collaboratively, and all code is available in Github in so-called repositories.", - "slug": "contributors/terms/repository", - "order": "Repository" + "order": "Repository", + "slug": "contributors/terms/repository" }, "contributors/terms/tiler": { + "title": "Tiler", + "intro": "The FreeSewing tiler is responsible for taking a pattern and splitting it into different pages so it can be printed.", + "order": "Tiler", "slug": "contributors/terms/tiler" }, "contributors/terms/translator": { "title": "Translator", "intro": "Somebody who helps with our i18n efforts by translating from English to other languages.", - "slug": "contributors/terms/translator", - "order": "Translator" + "order": "Translator", + "slug": "contributors/terms/translator" }, "contributors/ways-to-contribute/body-ambassador": { + "title": "Body ambassador", + "intro": "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.", + "order": "Body ambassador", "slug": "contributors/ways-to-contribute/body-ambassador" }, "contributors/ways-to-contribute/community-building": { + "title": "Community building", + "intro": "The FreeSewing community resides on Discord . Just being there to answer questions and chat with other people is a valuable part of community building.", + "order": "Community building", "slug": "contributors/ways-to-contribute/community-building" }, "contributors/ways-to-contribute/design-patterns": { "title": "Design sewing patterns", "intro": "Everybody wants us to add more patterns. But somebody has to design them.", - "slug": "contributors/ways-to-contribute/design-patterns", - "order": "Design sewing patterns" + "order": "Design sewing patterns", + "slug": "contributors/ways-to-contribute/design-patterns" }, "contributors/ways-to-contribute/develop-patterns": { + "title": "Develop sewing patterns", + "intro": "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.", + "order": "Develop sewing patterns", "slug": "contributors/ways-to-contribute/develop-patterns" }, "contributors/ways-to-contribute/devops": { + "title": "Devops", + "intro": "We have use a lot of automation from Github actions to automated deployment on Netlify. We also have some Ansible playbooks to run maintenance tasks.", + "order": "Devops", "slug": "contributors/ways-to-contribute/devops" }, "contributors/ways-to-contribute": { + "title": "Ways to contribute", + "intro": "Unsure where to begin contributing to FreeSewing? can take on many shapes and forms. There's certainly a way that works well for you.", + "order": "Ways to contribute", "slug": "contributors/ways-to-contribute" }, "contributors/ways-to-contribute/illustrations": { + "title": "Make illustrations", + "intro": "Our documentation can always use some more/better illustrations to help people figure out how to make our patterns into garments.", + "order": "Make illustrations", "slug": "contributors/ways-to-contribute/illustrations" }, "contributors/ways-to-contribute/language-ambassador": { + "title": "Language ambassador", + "intro": "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.", + "order": "Language ambassador", "slug": "contributors/ways-to-contribute/language-ambassador" }, "contributors/ways-to-contribute/pattern-ambassador": { "title": "Pattern ambassador", "intro": "You could take charge of a specific FreeSewing design/pattern.", - "slug": "contributors/ways-to-contribute/pattern-ambassador", - "order": "Pattern ambassador" + "order": "Pattern ambassador", + "slug": "contributors/ways-to-contribute/pattern-ambassador" }, "contributors/ways-to-contribute/pattern-testing": { "title": "Pattern testing", "intro": "You could make (a muslin for) our patterns prior to release to make sure everything is ok.", - "slug": "contributors/ways-to-contribute/pattern-testing", - "order": "Pattern testing" + "order": "Pattern testing", + "slug": "contributors/ways-to-contribute/pattern-testing" }, "contributors/ways-to-contribute/project-management": { "title": "Project management", "intro": "There's a lot going on within the FreeSewing project and it's easy to forget about something.", - "slug": "contributors/ways-to-contribute/project-management", - "order": "Project management" + "order": "Project management", + "slug": "contributors/ways-to-contribute/project-management" }, "contributors/ways-to-contribute/proofreading": { + "title": "Proofreading", + "intro": "You could check the original English text of 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.", + "order": "Proofreading", "slug": "contributors/ways-to-contribute/proofreading" }, "contributors/ways-to-contribute/report-bugs": { + "title": "Report bugs", + "intro": "Bugs are tracked as GitHub issues . Create an issue in our monorepo if you've found one.", + "order": "Report bugs", "slug": "contributors/ways-to-contribute/report-bugs" }, "contributors/ways-to-contribute/showcase-our-patterns": { "title": "Showcase our patterns", "intro": "Anytime somebody has made one of our patterns, we like to showcase it on freesewing.org .", - "slug": "contributors/ways-to-contribute/showcase-our-patterns", - "order": "Showcase our patterns" + "order": "Showcase our patterns", + "slug": "contributors/ways-to-contribute/showcase-our-patterns" }, "contributors/ways-to-contribute/technical-writing/code": { "title": "Writing for freesewing.dev", "intro": "You could write documentation for freesewing.dev, our developers website.", - "slug": "contributors/ways-to-contribute/technical-writing/code", - "order": "Writing for freesewing.dev" + "order": "Writing for freesewing.dev", + "slug": "contributors/ways-to-contribute/technical-writing/code" }, "contributors/ways-to-contribute/technical-writing": { "title": "Technical writing", "intro": "FIXME_no_intro", - "slug": "contributors/ways-to-contribute/technical-writing", - "order": "Technical writing" + "order": "Technical writing", + "slug": "contributors/ways-to-contribute/technical-writing" }, "contributors/ways-to-contribute/technical-writing/patterns": { "title": "Writing for freesewing.org", "intro": "You could write documentation for freesewing.org, our makers website.", - "slug": "contributors/ways-to-contribute/technical-writing/patterns", - "order": "Writing for freesewing.org" + "order": "Writing for freesewing.org", + "slug": "contributors/ways-to-contribute/technical-writing/patterns" }, "contributors/ways-to-contribute/translation": { + "title": "Translation", + "intro": "You could translate FreeSewing into one of its additional languages (French, German, Dutch, Spanish). Or if you’re ambitious, add a new one.", + "order": "Translation", "slug": "contributors/ways-to-contribute/translation" }, "contributors/ways-to-contribute/triage-issues": { "title": "Triage issues", "intro": "Triaging issues is a great way to get involved in FreeSewing. You can do tasks such as:", - "slug": "contributors/ways-to-contribute/triage-issues", - "order": "Triage issues" + "order": "Triage issues", + "slug": "contributors/ways-to-contribute/triage-issues" }, "contributors/ways-to-contribute/webdesign": { "title": "UI / UX Webdesign", "intro": "You could help us make our website and tools pretty and improve the user experience.", - "slug": "contributors/ways-to-contribute/webdesign", - "order": "UI / UX Webdesign" + "order": "UI / UX Webdesign", + "slug": "contributors/ways-to-contribute/webdesign" }, "developers/backend": { "title": "The freesewing backend", - "intro": "Under construction", - "slug": "developers/backend", - "order": "The freesewing backend" + "intro": "", + "order": "The freesewing backend", + "slug": "developers/backend" }, "developers/dev": { "title": "The freesewing.dev website", - "intro": "Under construction", - "slug": "developers/dev", - "order": "The freesewing.dev website" + "intro": "", + "order": "The freesewing.dev website", + "slug": "developers/dev" }, "developers": { "title": "For developers", - "order": "1120For developers", "intro": "Welcome to the FreeSewing documentation for developers.", + "order": "1120For developers", "slug": "developers" }, "developers/org": { "title": "The freesewing.org website", - "intro": "Under construction", - "slug": "developers/org", - "order": "The freesewing.org website" + "intro": "", + "order": "The freesewing.org website", + "slug": "developers/org" }, "developers/svg2pdf": { "title": "The freesewing on-demand tiler", - "intro": "Under construction", - "slug": "developers/svg2pdf", - "order": "The freesewing on-demand tiler" + "intro": "", + "order": "The freesewing on-demand tiler", + "slug": "developers/svg2pdf" }, "developers/tiler": { "title": "Our tile command line tool", - "intro": "Under construction", - "slug": "developers/tiler", - "order": "Our tile command line tool" + "intro": "", + "order": "Our tile command line tool", + "slug": "developers/tiler" }, "editors/content": { "title": "Content sources", "intro": "As an editor, you need to know where you can find/edit what type of content.", - "slug": "editors/content", - "order": "Content sources" + "order": "Content sources", + "slug": "editors/content" }, "editors": { "title": "For editors", - "order": "1130For editors", "intro": "Content is king, and as an content is your baby.", + "order": "1130For editors", "slug": "editors" }, "editors/howtos/blogpost": { "title": "Adding a blog post", - "for": "editors", "intro": "Blog posts have been migrated to Strapi , a headless CMS system.", - "slug": "editors/howtos/blogpost", - "order": "Adding a blog post" + "order": "Adding a blog post", + "slug": "editors/howtos/blogpost" }, "editors/howtos": { "title": "Common tasks for editors", "intro": "Below is a list of commons tasks for editors", - "slug": "editors/howtos", - "order": "Common tasks for editors" + "order": "Common tasks for editors", + "slug": "editors/howtos" }, "editors/howtos/frontmatter/about": { "title": "About frontmatter", - "order": "10About frontmatter", "intro": "Frontmatter is a way to add metadata to markdown documents.", + "order": "10About frontmatter", "slug": "editors/howtos/frontmatter/about" }, "editors/howtos/frontmatter": { + "title": "Working with frontmatter", + "intro": "Frontmatter is a way to add metadata to markdown documents. It is used extensively on freesewing.org and freesewing.dev alike.", + "order": "Working with frontmatter", "slug": "editors/howtos/frontmatter" }, "editors/howtos/frontmatter/lists": { + "title": "Lists or arrays", + "intro": "Values are typically text or numbers, but you can also make it a list or array. There's two types of syntax for this:", + "order": "30Lists or arrays", "slug": "editors/howtos/frontmatter/lists" }, "editors/howtos/frontmatter/multi-line": { + "title": "Mult-line text", + "intro": "To add multi-line text in frontmatter, use a | character, and prefix the lines by spaces:", + "order": "40Mult-line text", "slug": "editors/howtos/frontmatter/multi-line" }, "editors/howtos/frontmatter/structure": { + "title": "Structure", + "intro": "Frontmatter is made up of key: value pairs. The value must be quoted if you use a : in it to avoid problems parsing the key values:", + "order": "20Structure", "slug": "editors/howtos/frontmatter/structure" }, "editors/howtos/showcase": { "title": "Adding a showcase on freesewing.org", - "for": "editors", "intro": "Showcase posts have been migrated to Strapi , a headless CMS system.", - "slug": "editors/howtos/showcase", - "order": "Adding a showcase on freesewing.org" + "order": "Adding a showcase on freesewing.org", + "slug": "editors/howtos/showcase" }, "editors/markdown/code-blocks": { + "title": "Code and code blocks", + "intro": "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.", + "order": "80Code and code blocks", "slug": "editors/markdown/code-blocks" }, "editors/markdown/custom-components": { "title": "Custom components", - "order": "90Custom components", "intro": "The way we render markdown on our websites is through the use of MDX . This allows us to extend Markdown with our own so-called .", + "order": "90Custom components", "slug": "editors/markdown/custom-components" }, "editors/markdown/custom-components/example": { + "title": "Example", + "intro": "Embeds an example -- a part of our example pattern that is used to illustrate the core API documentation.", + "order": "90Example", "slug": "editors/markdown/custom-components/example" }, "editors/markdown/custom-components/fixme": { "title": "Fixme", + "intro": "FIXME_no_intro", "order": "40Fixme", - "intro": "I indicate that something needs work or improvement", "slug": "editors/markdown/custom-components/fixme" }, "editors/markdown/custom-components/hashtag": { "title": "Hashtag", - "order": "60Hashtag", "intro": "Typically used on our community pages:", + "order": "60Hashtag", "slug": "editors/markdown/custom-components/hashtag" }, "editors/markdown/custom-components/note": { "title": "Note", + "intro": "FIXME_no_intro", "order": "10Note", - "intro": "I point out things", "slug": "editors/markdown/custom-components/note" }, "editors/markdown/custom-components/readmore": { "title": "ReadMore", - "order": "70ReadMore", "intro": "This component will list child pages of the current page.", + "order": "70ReadMore", "slug": "editors/markdown/custom-components/readmore" }, "editors/markdown/custom-components/readmore/example-1": { "title": "Example page 1", "intro": "This page is here to illustrate the use of the .", - "slug": "editors/markdown/custom-components/readmore/example-1", - "order": "Example page 1" + "order": "Example page 1", + "slug": "editors/markdown/custom-components/readmore/example-1" }, "editors/markdown/custom-components/readmore/example-2": { "title": "Example page 2", "intro": "This page is here to illustrate the use of the .", - "slug": "editors/markdown/custom-components/readmore/example-2", - "order": "Example page 2" + "order": "Example page 2", + "slug": "editors/markdown/custom-components/readmore/example-2" }, "editors/markdown/custom-components/readmore/example-2/sub-example-2-1": { "title": "Sub-example page 1", "intro": "This page is here to illustrate the use of the .", - "slug": "editors/markdown/custom-components/readmore/example-2/sub-example-2-1", - "order": "Sub-example page 1" + "order": "Sub-example page 1", + "slug": "editors/markdown/custom-components/readmore/example-2/sub-example-2-1" }, "editors/markdown/custom-components/readmore/example-2/sub-example-2-2": { "title": "Sub-example page 2", "intro": "This page is here to illustrate the use of the .", - "slug": "editors/markdown/custom-components/readmore/example-2/sub-example-2-2", - "order": "Sub-example page 2" + "order": "Sub-example page 2", + "slug": "editors/markdown/custom-components/readmore/example-2/sub-example-2-2" }, "editors/markdown/custom-components/tip": { "title": "Tip", + "intro": "FIXME_no_intro", "order": "20Tip", - "intro": "I give great advice", "slug": "editors/markdown/custom-components/tip" }, "editors/markdown/custom-components/warning": { "title": "Warning", + "intro": "FIXME_no_intro", "order": "30Warning", - "intro": "Ignore me at your own peril", "slug": "editors/markdown/custom-components/warning" }, "editors/markdown/custom-components/youtube": { "title": "YouTube", - "order": "50YouTube", "intro": "This components will embed videos and playlists responsively.", + "order": "50YouTube", "slug": "editors/markdown/custom-components/youtube" }, "editors/markdown": { + "title": "Markdown guide", + "intro": "Markdown is a lightweight markup language with plain text formatting syntax. It is designed to be easily readable by humans, and computers alike.", + "order": "900Markdown guide", "slug": "editors/markdown" }, "editors/markdown/headings": { "title": "Headings", - "order": "40Headings", "intro": "Prefix your line with a number of # characters to determine the header level.", + "order": "40Headings", "slug": "editors/markdown/headings" }, "editors/markdown/images": { + "title": "Images", + "intro": "Images are like links, just prefix them with an exclamation mark. The part between square brackets is the image caption or alt-text.", + "order": "70Images", "slug": "editors/markdown/images" }, "editors/markdown/italic-and-bold": { "title": "Italics and bold", - "order": "30Italics and bold", "intro": "You can make text or by wrapping it in 1 or 2 asterisk respectively:", + "order": "30Italics and bold", "slug": "editors/markdown/italic-and-bold" }, "editors/markdown/line-breaks": { + "title": "Line breaks", + "intro": "If you want to force a linebreak, but not a new paragraph, simply leave 2 spaces at the end of the line.", + "order": "20Line breaks", "slug": "editors/markdown/line-breaks" }, "editors/markdown/links": { "title": "Links", - "order": "60Links", "intro": "Links combine square brackets for the link text with round brackets for the destination.", + "order": "60Links", "slug": "editors/markdown/links" }, "editors/markdown/lists": { "title": "Lists", - "order": "50Lists", "intro": "To make a list, just do as you would in plain text:", + "order": "50Lists", "slug": "editors/markdown/lists" }, "editors/markdown/tables": { "title": "Tables", - "order": "70Tables", "intro": "If you need them, you can create tables too, using a structure as shown below:", + "order": "70Tables", "slug": "editors/markdown/tables" }, "editors/markdown/text-and-paragraphs": { "title": "Text and paragraphs", - "order": "10Text and paragraphs", "intro": "For the most part, you can just write as you would in any other format.", + "order": "10Text and paragraphs", "slug": "editors/markdown/text-and-paragraphs" }, "editors/style/colors": { + "title": "Colors", + "intro": "We use open color for our color scheme. Our default white is gray-0 , our default black is gray-9 and we use violet for links.", + "order": "Colors", "slug": "editors/style/colors" }, "editors/style": { "title": "Style guide", - "order": "910Style guide", "intro": "FIXME_no_intro", + "order": "910Style guide", "slug": "editors/style" }, "editors/style/typography": { "title": "Typography", "intro": "FIXME_no_intro", - "slug": "editors/style/typography", - "order": "Typography" + "order": "Typography", + "slug": "editors/style/typography" }, "editors/style/typography/fonts": { "title": "Fonts", - "order": "10Fonts", "intro": "We use three types of fonts:", + "order": "10Fonts", "slug": "editors/style/typography/fonts" }, "editors/style/typography/headings": { "title": "Headings", - "order": "30Headings", "intro": "Headings serve two different purposes:", + "order": "30Headings", "slug": "editors/style/typography/headings" }, "editors/style/typography/text": { "title": "Text and paragraphs", - "order": "20Text and paragraphs", "intro": "Text is one of the most important things on the website, so we try to make it look good.", + "order": "20Text and paragraphs", "slug": "editors/style/typography/text" }, "guides/best-practices": { "title": "Design guide", - "order": "300Design guide", - "for": "developers", - "icons": [ - "thumbup", - "pattern" - ], - "about": "There's often many different ways to do things. Learn about our conventions and best practices", - "goals": [ - "Re-using measurement and options names", - "Re-using CSS classes", - "Respecting draft settings", - "Using percentage options where possible", - "Using translation keys for text", - "Constructing paths counter-clockwise" - ], "intro": "Here is a list of best practices when designing patterns:", + "order": "300Design guide", "slug": "guides/best-practices" }, "guides/best-practices/go-counter-clockwise": { + "title": "Construct paths counter-clockwise", + "intro": "Construct your paths counter-clockwise. You have to pick a direction anyway, and going counter-clockwise is a bit of a convention.", + "order": "70Construct paths counter-clockwise", "slug": "guides/best-practices/go-counter-clockwise" }, "guides/best-practices/respect-draft-settings": { + "title": "Respect draft settings", + "intro": "Apart from the pattern options that you configure for your pattern, all FreeSewing patterns have a set of draft settings that can be tweaked by the user.", + "order": "40Respect draft settings", "slug": "guides/best-practices/respect-draft-settings" }, "guides/best-practices/reuse-css-classes": { + "title": "Re-use CSS classes", + "intro": "While you can style your pattern however you want, try to re-use the CSS class names that are in use in our default theme plugin .", + "order": "30Re-use CSS classes", "slug": "guides/best-practices/reuse-css-classes" }, "guides/best-practices/reuse-measurements": { + "title": "Re-use measurements", + "intro": "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.", + "order": "10Re-use measurements", "slug": "guides/best-practices/reuse-measurements" }, "guides/best-practices/reuse-options": { "title": "Re-use options", - "order": "20Re-use options", "intro": "The same arguments for re-using measurements are also (somewhat) true for options.", + "order": "20Re-use options", "slug": "guides/best-practices/reuse-options" }, "guides/best-practices/use-percentages": { "title": "Use percentage options where possible", - "order": "50Use percentage options where possible", "intro": "When designing patterns, you should refrain from using absolute values.", + "order": "50Use percentage options where possible", "slug": "guides/best-practices/use-percentages" }, "guides/best-practices/use-translation-keys": { "title": "Use translation keys, not text", - "order": "60Use translation keys, not text", "intro": "Don't insert literal text in your patterns. Instead, insert a key that can then be translated.", + "order": "60Use translation keys, not text", "slug": "guides/best-practices/use-translation-keys" }, "guides": { "title": "Guides", - "order": "1020Guides", "intro": "FIXME_no_intro", + "order": "1020Guides", "slug": "guides" }, "guides/patterns/config": { + "title": "Configuration", + "intro": "A pattern's configuration is created by the pattern designer and details a number of important things about the pattern, like:", + "order": "60Configuration", "slug": "guides/patterns/config" }, "guides/patterns": { + "title": "Pattern guide", + "intro": "This illustration is a good starting point to gain a better understanding of the structure of a FreeSewing pattern:", + "order": "200Pattern guide", "slug": "guides/patterns" }, "guides/patterns/parts": { + "title": "Parts", + "intro": "Parts are a container for the points, paths, and snippets of (a part of) your pattern. They are also re-usable by other patterns, which makes them a powerful tool to build a pattern library.", + "order": "40Parts", "slug": "guides/patterns/parts" }, "guides/patterns/paths": { + "title": "Paths", + "intro": "Paths are the lines and curves that make up your pattern.", + "order": "20Paths", "slug": "guides/patterns/paths" }, "guides/patterns/pattern": { + "title": "Pattern", + "intro": "Last but not least, we've arrived at the level of the pattern itself. The pattern is a container that holds all your parts, along with the configuration and the store.", + "order": "80Pattern", "slug": "guides/patterns/pattern" }, "guides/patterns/points": { + "title": "Points", + "intro": "Developing a pattern with FreeSewing is similar to doing it on paper. But instead of using a pencil and paper, you'll be writing code.", + "order": "10Points", "slug": "guides/patterns/points" }, "guides/patterns/snippets": { + "title": "Snippets", + "intro": "Snippets are little embellishments you can use and re-use on your pattern. They are typically used for things like logos or buttons.", + "order": "20Snippets", "slug": "guides/patterns/snippets" }, "guides/patterns/store": { + "title": "Store", + "intro": "The store provides key-value storage that is shared across your pattern.", + "order": "70Store", "slug": "guides/patterns/store" }, "guides/plugins/conditionally-loading-build-time-plugins": { "title": "Conditionally loading build-time plugins", - "order": "30Conditionally loading build-time plugins", "intro": "You can choose to load your build-time plugin conditionally based on run-time data.", + "order": "30Conditionally loading build-time plugins", "slug": "guides/plugins/conditionally-loading-build-time-plugins" }, "guides/plugins": { "title": "Plugin guide", - "order": "400Plugin guide", - "icons": [ - "logo", - "plugin" - ], - "for": "developers", - "about": "This guide shows you everything you need to know to understand plugins in FreeSewing, and create your own.\n", - "goals": [ - "Know about build-time plugins vs run-time plugins", - "Understanding plugin structure", - "Hooks and how to use them", - "Using hooks without a plugin", - "Using macros" - ], "intro": "Plugins allow you to extend FreeSewing.", + "order": "400Plugin guide", "slug": "guides/plugins" }, "guides/plugins/hooks": { "title": "Hooks", - "order": "60Hooks", "intro": "A is a lifecycle event. The available hooks are:", + "order": "60Hooks", "slug": "guides/plugins/hooks" }, "guides/plugins/loading-build-time-plugins": { + "title": "Loading build-time plugins", + "intro": "Build-time plugins are loaded at build time, by passing them to the freesewing.Design constructor:", + "order": "20Loading build-time plugins", "slug": "guides/plugins/loading-build-time-plugins" }, "guides/plugins/loading-run-time-plugins": { + "title": "Loading run-time plugins", + "intro": "Run-time plugin are loaded at run time, by passing them to the use method of an instatiated pattern. That method is chainable, so if you have multiple plugins you can just chain them together:", + "order": "40Loading run-time plugins", "slug": "guides/plugins/loading-run-time-plugins" }, "guides/plugins/macros": { "title": "Macros", - "order": "90Macros", "intro": "Plugin structure for macros is similar, with a few changes:", + "order": "90Macros", "slug": "guides/plugins/macros" }, "guides/plugins/plugin-structure": { "title": "Plugin structure", - "order": "50Plugin structure", "intro": "Plugins can do two things:", + "order": "50Plugin structure", "slug": "guides/plugins/plugin-structure" }, "guides/plugins/types-of-plugins": { "title": "Types of plugins", - "order": "10Types of plugins", "intro": "Plugins come in two flavours:", + "order": "10Types of plugins", "slug": "guides/plugins/types-of-plugins" }, "guides/plugins/using-hooks-more-than-once": { + "title": "Using hooks more than once", + "intro": "What if you want to attach more than one method to a hook? You could spread them over seperate plugins, but there's a better way.", + "order": "80Using hooks more than once", "slug": "guides/plugins/using-hooks-more-than-once" }, "guides/plugins/using-hooks-without-plugin": { + "title": "Using hooks without a plugin", + "intro": "You can attach a method to a hook at run-time without the need for a plugin using the Pattern.on() method.", + "order": "85Using hooks without a plugin", "slug": "guides/plugins/using-hooks-without-plugin" }, "guides/plugins/using-hooks": { + "title": "Using hooks", + "intro": "For each hook, your plugin should provide a method that takes the relevant data as its first argument. If data was passed when the hook was loaded, you will receive that as the second object.", + "order": "70Using hooks", "slug": "guides/plugins/using-hooks" }, "guides/prerequisites/bezier-curves": { + "title": "Bézier curves", + "intro": "While lines on computers are easy to store with a start and end point, curves require more information.", + "order": "50Bézier curves", "slug": "guides/prerequisites/bezier-curves" }, "guides/prerequisites/coordinate-system": { + "title": "Coordinate system", + "intro": "In FreeSewing -- and in SVG -- coordinates are like text in a book. You start at the top on the left side, and going to the right and downwards means going ahead.", + "order": "30Coordinate system", "slug": "guides/prerequisites/coordinate-system" }, "guides/prerequisites": { + "title": "Prerequisites", + "intro": "Here's a few things that, once you get them, will make it easier to understand what FreeSewing is doing, and how it's doing it.", + "order": "100Prerequisites", "slug": "guides/prerequisites" }, "guides/prerequisites/parametric-pattern-design": { + "title": "Parametric pattern design", + "intro": "The FreeSewing core library is a toolbox for ; Using parameters or variables to manipulate the outcome of a given design.", + "order": "10Parametric pattern design", "slug": "guides/prerequisites/parametric-pattern-design" }, "guides/prerequisites/svg": { + "title": "SVG", + "intro": "Patterns are rendered as SVG — short for Scalable Vector Graphics — an XML-based vector image format and an open standard.", + "order": "20SVG", "slug": "guides/prerequisites/svg" }, "guides/prerequisites/units": { + "title": "Units", + "intro": "Internally, freesewing uses millimeter. When you write 1 , that’s one mm. When you write 7.8 , that’s 7.8mm.", + "order": "40Units", "slug": "guides/prerequisites/units" }, "howtos/code/accessing-measurements": { "title": "Accessing measurements", - "for": "developers", - "about": "Shows you how to access user measurements from inside your pattern", "intro": "Measurements are stored in pattern.settings.measurements .", - "slug": "howtos/code/accessing-measurements", - "order": "Accessing measurements" + "order": "Accessing measurements", + "slug": "howtos/code/accessing-measurements" }, "howtos/code/accessing-options": { "title": "Accessing user options", - "for": "developers", - "about": "Shows you how to access user options from inside your pattern", "intro": "Options are stored in pattern.settings.options .", - "slug": "howtos/code/accessing-options", - "order": "Accessing user options" + "order": "Accessing user options", + "slug": "howtos/code/accessing-options" }, "howtos/code/adding-instructions": { + "title": "Add instructions to your design", + "intro": "Adding instructions to your pattern is a matter of adding text. The tricky part is to make sure your text can be translated.", + "order": "Add instructions to your design", "slug": "howtos/code/adding-instructions" }, "howtos/code/adding-parts": { + "title": "Adding pattern parts", + "intro": "Since the patterns parts are listed in the configuration file , freesewing knows about all the parts that belong to your pattern.", + "order": "Adding pattern parts", "slug": "howtos/code/adding-parts" }, "howtos/code/adding-paths": { + "title": "Adding paths", + "intro": "After using the shorthand call, Path contains the path constructor, while paths is a reference to part.paths , which is where you should store your paths.", + "order": "Adding paths", "slug": "howtos/code/adding-paths" }, "howtos/code/adding-points": { + "title": "Adding points", + "intro": "After using the shorthand call, Point contains the point constructor, while points is a reference to part.points , which is where you should store your points.", + "order": "Adding points", "slug": "howtos/code/adding-points" }, "howtos/code/adding-snippets": { + "title": "Adding snippets", + "intro": "After using the shorthand call, Snippet contains the path constructor, while snippets is a reference to part.snippets , which is where you should store your paths.", + "order": "Adding snippets", "slug": "howtos/code/adding-snippets" }, "howtos/code/adding-text": { "title": "Adding text", - "for": "developers", - "about": "Shows you how to add text to your pattern", "intro": "SVG is pretty great, but its text handling leaves much to be desired.", - "slug": "howtos/code/adding-text", - "order": "Adding text" + "order": "Adding text", + "slug": "howtos/code/adding-text" }, "howtos/code/attributes": { + "title": "Using attributes", + "intro": "Points, Paths, and Snippets all have attributes that you can use to influence how they behave.", + "order": "Using attributes", "slug": "howtos/code/attributes" }, "howtos/code/create-new-design": { + "title": "Creating a new pattern design", + "intro": "To create a new pattern, call new freesewing.Design() . It takes your pattern configuration, and any plugins you want to load as parameters.", + "order": "Creating a new pattern design", "slug": "howtos/code/create-new-design" }, "howtos/code/dependencies": { + "title": "Part dependencies", + "intro": "Part dependencies are set in the pattern configuration , and control the order in which parts are drawn. FreeSewing will make sure that before drafting a part, it will first draft all its dependencies.", + "order": "Part dependencies", "slug": "howtos/code/dependencies" }, "howtos/code/drawing-circles": { + "title": "Drawing circles", + "intro": "Real circles are rarely used in pattern design, and they are not part of the SVG path specification, but rather a different SVG element.", + "order": "Drawing circles", "slug": "howtos/code/drawing-circles" }, "howtos/code": { "title": "Common code challenges", "intro": "Below is a list of examples of how to implement common tasks in code:", - "slug": "howtos/code", - "order": "Common code challenges" + "order": "Common code challenges", + "slug": "howtos/code" }, "howtos/code/extend-pattern": { "title": "Create a new design based on an existing design", - "for": "developers", - "about": "Shows how to create a variation of a pre-existing design", "intro": "To be able to extend existing patterns, you will have to access them on your local machine. There are two ways to do this:", - "slug": "howtos/code/extend-pattern", - "order": "Create a new design based on an existing design" + "order": "Create a new design based on an existing design", + "slug": "howtos/code/extend-pattern" }, "howtos/code/hide-paths": { "title": "Hide paths from an inherited part", - "for": "developers", - "about": "When you inherit a part, it comes with a bunch of paths. Here'show to hide them", "intro": "The example below is from Aaron which inherits from Brian.", - "slug": "howtos/code/hide-paths", - "order": "Hide paths from an inherited part" + "order": "Hide paths from an inherited part", + "slug": "howtos/code/hide-paths" }, "howtos/code/inheritance": { + "title": "Design inheritance", + "intro": "If your pattern is based on, or extending, another pattern (some of) your pattern parts will need to be drafted by the parent pattern.", + "order": "Design inheritance", "slug": "howtos/code/inheritance" }, "howtos/code/inject": { + "title": "Part inheritance", + "intro": "Part inheritance within your own pattern is handled via the inject settings in the pattern configuration . Here is a simple example:", + "order": "Part inheritance", "slug": "howtos/code/inject" }, "howtos/code/macros": { + "title": "Using macros", + "intro": "Macros are a way to facilitate pattern design by bundling a bunch of individual actions into a little routine.", + "order": "Using macros", "slug": "howtos/code/macros" }, "howtos/code/remove-paths": { "title": "Remove paths from an inherited part", - "for": "developers", - "about": "When you inherit a part, it comes with a bunch of paths. Here'show to remove them", "intro": "FIXME_no_intro", - "slug": "howtos/code/remove-paths", - "order": "Remove paths from an inherited part" + "order": "Remove paths from an inherited part", + "slug": "howtos/code/remove-paths" }, "howtos/code/shared-dimensions": { + "title": "Share dimensions between pattern parts", + "intro": "When you have different pattern parts that look similar -- like the front and back of a garment -- you may find that there's a lot of dimensions shared between them.", + "order": "Share dimensions between pattern parts", "slug": "howtos/code/shared-dimensions" }, "howtos/code/shorthand": { "title": "Using shorthand", - "for": "developers", - "about": "Shows you how to use our shorthand method and notation", "intro": "The Part.shorthand() method will become your best friend.", - "slug": "howtos/code/shorthand", - "order": "Using shorthand" + "order": "Using shorthand", + "slug": "howtos/code/shorthand" }, "howtos/code/store": { + "title": "Sharing data between parts", + "intro": "Sometimes, you'll want to access data from one part into another part. For example, you may store the length of the armhole in your front and back parts, and then read that value when drafting the sleeve so you can verify the sleeve fits the armhole.", + "order": "Sharing data between parts", "slug": "howtos/code/store" }, "howtos/code/storing-path-length": { + "title": "Storing the seam length to use in another part", + "intro": "Often when designing patterns, we need to which means to make sure that two parts that need to be joined together are the same distance.", + "order": "Storing the seam length to use in another part", "slug": "howtos/code/storing-path-length" }, "howtos/design": { "title": "Common design challenges", "intro": "Below is a list of examples of how to implement common design challenges in code:", - "slug": "howtos/design", - "order": "Common design challenges" + "order": "Common design challenges", + "slug": "howtos/design" }, "howtos/design/fit-sleeve": { + "title": "Adapt the sleevecap length to fit the armhole", + "intro": "Fitting the sleevecap to the armhole means that we need to make sure the length of the seams match. A similar challenge is to fit the collar to the neck opening and so on.", + "order": "Adapt the sleevecap length to fit the armhole", "slug": "howtos/design/fit-sleeve" }, "howtos/design/seam-allowance": { + "title": "Add seam allowance and/or hem allowance", + "intro": "Adding seam allowance is something that has to happen in every pattern. We might also have a hem where we need to add more seam allowance, or hem allowance.", + "order": "Add seam allowance and/or hem allowance", "slug": "howtos/design/seam-allowance" }, "howtos/design/slash-spread": { + "title": "Slash and spread", + "intro": "When we a pattern, we cut out a triangle, and then rotate it around the tip of the triangle.", + "order": "Slash and spread", "slug": "howtos/design/slash-spread" }, "howtos/design/sprinkle-snippets": { "title": "Add several of the same snippets with the sprinkle macro", - "for": "developers", - "about": "Adding multiple snippets doesn't need to be a chore with this handy macro", "intro": "Adding multiple snippets at the same time results in a lot of repetitive code.", - "slug": "howtos/design/sprinkle-snippets", - "order": "Add several of the same snippets with the sprinkle macro" + "order": "Add several of the same snippets with the sprinkle macro", + "slug": "howtos/design/sprinkle-snippets" }, "howtos/dev": { "title": "Setting up your development environment", "intro": "FIXME_no_intro", - "slug": "howtos/dev", - "order": "Setting up your development environment" + "order": "Setting up your development environment", + "slug": "howtos/dev" }, "howtos/dev/freesewing-dev": { "title": "Working on freesewing.dev", - "for": "developers", - "about": "Shows you how to setup your development environment to work on freesewing.dev, our website for developers", "intro": "To work on freesewing.dev, checkout the repository:", - "slug": "howtos/dev/freesewing-dev", - "order": "Working on freesewing.dev" + "order": "Working on freesewing.dev", + "slug": "howtos/dev/freesewing-dev" }, "howtos/dev/freesewing-org": { "title": "Working on freesewing.org", - "for": "developers", - "about": "Shows you how to setup your development environment to work on freesewing.org, our website for makers", "intro": "To work on freesewing.org, checkout the repository:", - "slug": "howtos/dev/freesewing-org", - "order": "Working on freesewing.org" + "order": "Working on freesewing.org", + "slug": "howtos/dev/freesewing-org" }, "howtos": { "title": "Howtos", - "order": "1020Howtos", "intro": "FIXME_no_intro", + "order": "1020Howtos", "slug": "howtos" }, "reference/api/attributes/add": { "title": "add()", "intro": "Adds value to the attribute identified by key .", - "slug": "reference/api/attributes/add", - "order": "add()" + "order": "add()", + "slug": "reference/api/attributes/add" }, "reference/api/attributes/clone": { "title": "clone()", "intro": "Returns a new Attributes object that is a deep copy of this one.", - "slug": "reference/api/attributes/clone", - "order": "clone()" + "order": "clone()", + "slug": "reference/api/attributes/clone" }, "reference/api/attributes": { "title": "Attributes", - "order": "40Attributes", "intro": "Attributes is an object that holds attributes for a variety of other objects.", + "order": "40Attributes", "slug": "reference/api/attributes" }, "reference/api/attributes/get": { "title": "get()", "intro": "Will return the value of attribute stored under key , or false if it's not set.", - "slug": "reference/api/attributes/get", - "order": "get()" + "order": "get()", + "slug": "reference/api/attributes/get" }, "reference/api/attributes/getasarray": { "title": "getAsArray()", "intro": "Will return an array with the value of attribute stored under key , or false if it's not set.", - "slug": "reference/api/attributes/getasarray", - "order": "getAsArray()" + "order": "getAsArray()", + "slug": "reference/api/attributes/getasarray" }, "reference/api/attributes/remove": { "title": "remove()", "intro": "Removes the attribute values under key and returns the Attributes object.", - "slug": "reference/api/attributes/remove", - "order": "remove()" + "order": "remove()", + "slug": "reference/api/attributes/remove" }, "reference/api/attributes/set": { "title": "set()", "intro": "Sets the attribute identified by key to value value .", - "slug": "reference/api/attributes/set", - "order": "set()" + "order": "set()", + "slug": "reference/api/attributes/set" }, "reference/api/attributes/setifunset": { "title": "setIfUnset()", "intro": "Sets the attribute identified by key to value value but only if it's currently unset ( undefined ).", - "slug": "reference/api/attributes/setifunset", - "order": "setIfUnset()" + "order": "setIfUnset()", + "slug": "reference/api/attributes/setifunset" }, "reference/api/design": { + "title": "Design", + "intro": "The Design object in FreeSewing's core library serves a single purpose: To instantiate new pattern designs.", + "order": "10Design", "slug": "reference/api/design" }, "reference/api": { + "title": "Core API", + "intro": "This is the documentation for FreeSewing's core library, published as @freesewing/core on NPM. 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.", + "order": "Core API", "slug": "reference/api" }, "reference/api/part": { + "title": "Part", + "intro": "The Part object in FreeSewing's core library holds all data and logic of a pattern part. A pattern part is what holds the actual information about points and paths, and multiple parts together typically make up a pattern.", + "order": "20Part", "slug": "reference/api/part" }, "reference/api/part/getid": { + "title": "Part.getId()", + "intro": "A part's getId() method will return an integer the can be used as an ID Points/Paths/Snippets. This method will ensure the ID is unique be keeping an internal record of the ID that have been used. It is typically used when programatically adding points, paths, or snippets.", + "order": "Part.getId()", "slug": "reference/api/part/getid" }, "reference/api/part/raise/debug": { + "title": "Part.raise.debug()", + "intro": "A part's raise.debug() method will log a debug-level event. Debug events are typically used to pass information to pattern developers so that can troubleshoot issues with the pattern.", + "order": "Part.raise.debug()", "slug": "reference/api/part/raise/debug" }, "reference/api/part/raise": { + "title": "Part raise methods", + "intro": "A part's different raise methods are used to bring information to the attention of the user, or developer. You can think of them as logging methods the register data.", + "order": "Part raise methods", "slug": "reference/api/part/raise" }, "reference/api/part/raise/error": { + "title": "Part.raise.error()", + "intro": "A part's raise.error() method will log a error-level event. Unlike other raised events which have no side-effects, if there is one or more events of type error , the pattern will not be completed. In other words, you should only use this when end up in a situation you cannot recover from. If not, raise a warning .", + "order": "Part.raise.error()", "slug": "reference/api/part/raise/error" }, "reference/api/part/raise/info": { + "title": "Part.raise.info()", + "intro": "A part's raise.info() method will log a ingo-level event. Info events are typically used to pass information to users that is informative to them.", + "order": "Part.raise.info()", "slug": "reference/api/part/raise/info" }, "reference/api/part/raise/warning": { + "title": "Part.raise.warning()", + "intro": "A part's raise.warning() method will log a warning-level event. Warning events are typically used to pass information to pattern developers so that can troubleshoot issues with the pattern, or users to warn them that something is sub-optimal.", + "order": "Part.raise.warning()", "slug": "reference/api/part/raise/warning" }, "reference/api/part/shorthand": { + "title": "Part.shorthand()", + "intro": "A part's shorthand() method provides easy access to a number of internal objects and properties. It does so be returning an object that contains all you need to draft your pattern parts. It is typically combined with object destructuring to pull out those properties you need.", + "order": "Part.shorthand()", "slug": "reference/api/part/shorthand" }, "reference/api/part/units": { + "title": "Part.units()", + "intro": "A part's units() method will formats a float you pass it, which should represent a value in mm, into the units requested by the user. The returned value is to be used in presentation only, as it will be a string that includes the user's units.", + "order": "Part.units()", "slug": "reference/api/part/units" }, "reference/api/path/_curve": { + "title": "_curve()", + "intro": "Draws a cubic Bezier curve from the current position via two control points to a given endpoint. However, the start control point is identical to the start point.", + "order": "_curve()", "slug": "reference/api/path/_curve" }, "reference/api/path/attr": { "title": "attr()", "intro": "This Path.attr() method calls this.attributes.add() under the hood, but returns the Path object.", - "slug": "reference/api/path/attr", - "order": "attr()" + "order": "attr()", + "slug": "reference/api/path/attr" }, "reference/api/path/clone": { "title": "clone()", "intro": "Returns a new Path that is a deep copy of this path.", - "slug": "reference/api/path/clone", - "order": "clone()" + "order": "clone()", + "slug": "reference/api/path/clone" }, "reference/api/path/close": { "title": "close()", "intro": "Closes a path by drawing a straight line from the current position to the path's start.", - "slug": "reference/api/path/close", - "order": "close()" + "order": "close()", + "slug": "reference/api/path/close" }, "reference/api/path/curve": { "title": "curve()", "intro": "Draws a cubic Bezier curve from the current position via two control points to a given endpoint.", - "slug": "reference/api/path/curve", - "order": "curve()" + "order": "curve()", + "slug": "reference/api/path/curve" }, "reference/api/path/curve_": { + "title": "curve_()", + "intro": "Draws a cubic Bezier curve from the current position via two control points to a given endpoint. However, the end control point is identical to the end point.", + "order": "curve_()", "slug": "reference/api/path/curve_" }, "reference/api/path/divide": { + "title": "divide()", + "intro": "Breaks a path apart in an array of atomic paths. An atomic path is a path that can't be divided further and is always made up of one move + one drawing operation.", + "order": "divide()", "slug": "reference/api/path/divide" }, "reference/api/path/edge": { "title": "edge()", "intro": "Returns the Point object at the edge of the path you specify. Edge must be one of:", - "slug": "reference/api/path/edge", - "order": "edge()" + "order": "edge()", + "slug": "reference/api/path/edge" }, "reference/api/path": { "title": "Path", - "order": "30Path", "intro": "A path represents an SVG path; The lines and curves on our pattern.", + "order": "30Path", "slug": "reference/api/path" }, "reference/api/path/end": { "title": "end()", "intro": "Returns the Point object at the end of the path.", - "slug": "reference/api/path/end", - "order": "end()" + "order": "end()", + "slug": "reference/api/path/end" }, "reference/api/path/insop": { "title": "insop()", "intro": "Injects a Path into the noop with id id .", - "slug": "reference/api/path/insop", - "order": "insop()" + "order": "insop()", + "slug": "reference/api/path/insop" }, "reference/api/path/intersects": { "title": "intersects()", "intro": "Returns the Point object(s) where the path intersects with a path you pass it.", - "slug": "reference/api/path/intersects", - "order": "intersects()" + "order": "intersects()", + "slug": "reference/api/path/intersects" }, "reference/api/path/intersectsx": { "title": "intersectsX()", "intro": "Returns the Point object(s) where the path intersects with a given X-value.", - "slug": "reference/api/path/intersectsx", - "order": "intersectsX()" + "order": "intersectsX()", + "slug": "reference/api/path/intersectsx" }, "reference/api/path/intersectsy": { "title": "intersectsY()", "intro": "Returns the Point object(s) where the path intersects with a given Y-value.", - "slug": "reference/api/path/intersectsy", - "order": "intersectsY()" + "order": "intersectsY()", + "slug": "reference/api/path/intersectsy" }, "reference/api/path/join": { "title": "join()", "intro": "Joins this path with another path.", - "slug": "reference/api/path/join", - "order": "join()" + "order": "join()", + "slug": "reference/api/path/join" }, "reference/api/path/length": { "title": "length()", "intro": "Returns the length of the path.", - "slug": "reference/api/path/length", - "order": "length()" + "order": "length()", + "slug": "reference/api/path/length" }, "reference/api/path/line": { "title": "line()", "intro": "Draws a straight line from the current position to a given point.", - "slug": "reference/api/path/line", - "order": "line()" + "order": "line()", + "slug": "reference/api/path/line" }, "reference/api/path/move": { "title": "move()", "intro": "Moves to a given point without drawing a line.", - "slug": "reference/api/path/move", - "order": "move()" + "order": "move()", + "slug": "reference/api/path/move" }, "reference/api/path/noop": { "title": "noop()", "intro": "Adds a placeholder path opertion. A noop operation does nothing, but is intended to be replaced later with Path.insop() .", - "slug": "reference/api/path/noop", - "order": "noop()" + "order": "noop()", + "slug": "reference/api/path/noop" }, "reference/api/path/offset": { "title": "offset()", "intro": "Returns a new Path that is offset by distance from the original path.", - "slug": "reference/api/path/offset", - "order": "offset()" + "order": "offset()", + "slug": "reference/api/path/offset" }, "reference/api/path/reverse": { "title": "reverse()", "intro": "Returns a path that is the reversed version of this path. As in, start becomes end, and end becomes start.", - "slug": "reference/api/path/reverse", - "order": "reverse()" + "order": "reverse()", + "slug": "reference/api/path/reverse" }, "reference/api/path/setrender": { + "title": "setRender()", + "intro": "This is a chainable method to sets the path.render property. If you set it to false your path will not be rendered.", + "order": "setRender()", "slug": "reference/api/path/setrender" }, "reference/api/path/shiftalong": { "title": "shiftAlong()", "intro": "Returns a point that lies at distance travelled along the path.", - "slug": "reference/api/path/shiftalong", - "order": "shiftAlong()" + "order": "shiftAlong()", + "slug": "reference/api/path/shiftalong" }, "reference/api/path/shiftfractionalong": { "title": "shiftFractionAlong()", "intro": "Returns a point that lies at fraction of the length of the path travelled along the path.", - "slug": "reference/api/path/shiftfractionalong", - "order": "shiftFractionAlong()" + "order": "shiftFractionAlong()", + "slug": "reference/api/path/shiftfractionalong" }, "reference/api/path/split": { "title": "split", "intro": "Splits a path in two halves, on a point along that path that you pass it.", - "slug": "reference/api/path/split", - "order": "split" + "order": "split", + "slug": "reference/api/path/split" }, "reference/api/path/start": { "title": "start()", "intro": "Returns the Point object at the start of the path.", - "slug": "reference/api/path/start", - "order": "start()" + "order": "start()", + "slug": "reference/api/path/start" }, "reference/api/path/translate": { "title": "translate()", "intro": "Returns a path with a translate transform applied.", - "slug": "reference/api/path/translate", - "order": "translate()" + "order": "translate()", + "slug": "reference/api/path/translate" }, "reference/api/path/trim": { "title": "trim()", "intro": "Returns a new Path that is this path with overlapping parts removed.", - "slug": "reference/api/path/trim", - "order": "trim()" + "order": "trim()", + "slug": "reference/api/path/trim" }, "reference/api/pattern/draft": { + "title": "Pattern.draft()", + "intro": "A pattern's draft() method will draft all the different pattern parts 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.", + "order": "Pattern.draft()", "slug": "reference/api/pattern/draft" }, "reference/api/pattern": { + "title": "Pattern", + "intro": "The Pattern object in FreeSewing's core library holds all data and logic of a pattern. It is the parametric blueprint that when instantiated with a user's measurements and objects will generated a made-to-measure pattern.", + "order": "15Pattern", "slug": "reference/api/pattern" }, "reference/api/pattern/getrenderprops": { + "title": "Pattern.getRenderProps()", + "intro": "A pattern's getRenderProps() method will return a set of properties that allow the pattern to be rendered be an external renderer such as a React component. It should only be called after calling Pattern.draft() .", + "order": "Pattern.getRenderProps()", "slug": "reference/api/pattern/getrenderprops" }, "reference/api/pattern/on": { + "title": "Pattern.on()", + "intro": "A pattern's on() method allows you to attach a function to one of the pattern's lifecycle 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.", + "order": "Pattern.on()", "slug": "reference/api/pattern/on" }, "reference/api/pattern/render": { + "title": "Pattern.render()", + "intro": "A pattern's render() method will render the pattern to SVG and return the SVG as a string. It should only ever be called after calling Pattern.draft() first.", + "order": "Pattern.render()", "slug": "reference/api/pattern/render" }, "reference/api/pattern/sample": { + "title": "Pattern.sample()", + "intro": "A pattern's sample() method will the pattern which means to draft it in different iterations while adjusting the input settings. Under the hood, this method will call one of Pattern.sampleOption() , Pattern.sampleMeasurement() , or Pattern.sampleModels() to sample an option, a measurement, or a set of measurements respectively.", + "order": "Pattern.sample()", "slug": "reference/api/pattern/sample" }, "reference/api/pattern/samplemeasurement": { + "title": "Pattern.sampleMeasurement()", + "intro": "A pattern's sampleMeasurement() method will a given measurement, which means to draft it in different iterations while adjusting the input value of the given measurement. In practice, it will draft 10 iterations of the pattern while adapting the measurement between 90% and 110% of its original value.", + "order": "Pattern.sampleMeasurement()", "slug": "reference/api/pattern/samplemeasurement" }, "reference/api/pattern/samplemodels": { + "title": "Pattern.sampleModels()", + "intro": "A pattern's sampleModels() method will a pattern for a list of models you pass to it. It will draft different iterations of the pattern, using the measurements for each model you pass to it.", + "order": "Pattern.sampleModels()", "slug": "reference/api/pattern/samplemodels" }, "reference/api/pattern/sampleoption": { + "title": "Pattern.sampleOption()", + "intro": "A pattern's sampleOption() method will a given option, which means to draft it in different iterations while adjusting the input value of the given option. The practical implementation varies based on the type of option :", + "order": "Pattern.sampleOption()", "slug": "reference/api/pattern/sampleoption" }, "reference/api/pattern/use": { + "title": "Pattern.use()", + "intro": "A pattern's use() method will load a FreeSewing plugin. Plugins are a way to extend a pattern's functionality, and can be loaded both at build-time and at run-time. This method only applies to run-time plugins. For more details, refer to the plugin guide .", + "order": "Pattern.use()", "slug": "reference/api/pattern/use" }, "reference/api/point/angle": { + "title": "Point.angle()", + "intro": "A point's angle() method returns the angle (in degrees) between this point and the point passed into the method. An angle of 0° points to the right, and the angle increases counterclockwise.", + "order": "Point.angle()", "slug": "reference/api/point/angle" }, "reference/api/point/attr": { + "title": "Point.attr()", + "intro": "Adds an attribute to the point, and returns the original point. Setting the third parameter to true will replace the value of the attribute instead of adding it.", + "order": "Point.attr()", "slug": "reference/api/point/attr" }, "reference/api/point/clone": { "title": "Point.clone()", "intro": "Returns a new Point with the same coordinates and attributes as the original point.", - "slug": "reference/api/point/clone", - "order": "Point.clone()" + "order": "Point.clone()", + "slug": "reference/api/point/clone" }, "reference/api/point/copy": { + "title": "Point.copy()", + "intro": "A point's copy() method returns a new point with the same coordinates as the original point. This method does copy any attributes the original point may have.", + "order": "Point.copy()", "slug": "reference/api/point/copy" }, "reference/api/point/dist": { "title": "Point.dist()", "intro": "A point's dist() method returns the distance (in mm) between this point and the point you pass it.", - "slug": "reference/api/point/dist", - "order": "Point.dist()" + "order": "Point.dist()", + "slug": "reference/api/point/dist" }, "reference/api/point/dx": { "title": "Point.dx()", "intro": "A point's dx() method returns the delta (in mm) along the X-axis between this point and the point you pass it.", - "slug": "reference/api/point/dx", - "order": "Point.dx()" + "order": "Point.dx()", + "slug": "reference/api/point/dx" }, "reference/api/point/dy": { "title": "Point.dy()", "intro": "A point's dy() method returns the delta (in mm) along the Y-axis between this point and the point you pass it.", - "slug": "reference/api/point/dy", - "order": "Point.dy()" + "order": "Point.dy()", + "slug": "reference/api/point/dy" }, "reference/api/point": { "title": "Point", - "order": "25Point", "intro": "A Point object represents a point on a 2D plane with an X and Y axis.", + "order": "25Point", "slug": "reference/api/point" }, "reference/api/point/flipx": { + "title": "Point.flipX()", + "intro": "A point's flipX() method returns a new Point that mirrors the original point around the X-value of the point you pass it. If you do not pass in a point, it will default to mirroring around an X-value of zero.", + "order": "Point.flipX()", "slug": "reference/api/point/flipx" }, "reference/api/point/flipy": { + "title": "Point.flipY()", + "intro": "A point's flipY() method returns a new Point that mirrors the original point around the Y-value of the point you pass it. If you do not pass in a point, it will default to mirroring around an Y-value of zero.", + "order": "Point.flipY()", "slug": "reference/api/point/flipy" }, "reference/api/point/rotate": { + "title": "Point.rotate()", + "intro": "A point's rotate() method returns a new Point that has been rotated by angle degrees around the point ( center ) that you pass it.", + "order": "Point.rotate()", "slug": "reference/api/point/rotate" }, "reference/api/point/shift": { + "title": "Point.shift()", + "intro": "Returns a new Point that is distance (mm) away in the direction of angle (degrees). An angle of 0° points to the right, and the angle increases counterclockwise.", + "order": "Point.shift()", "slug": "reference/api/point/shift" }, "reference/api/point/shiftfractiontowards": { + "title": "Point.shiftFractionTowards()", + "intro": "Returns a new Point that is shifted towards the target by a fraction of the distance between this point and the target.", + "order": "Point.shiftFractionTowards()", "slug": "reference/api/point/shiftfractiontowards" }, "reference/api/point/shiftoutwards": { "title": "Point.shiftOutwards()", "intro": "Returns a new Point that is shifted distance (mm) beyond the target in the direction of the target point.", - "slug": "reference/api/point/shiftoutwards", - "order": "Point.shiftOutwards()" + "order": "Point.shiftOutwards()", + "slug": "reference/api/point/shiftoutwards" }, "reference/api/point/shifttowards": { "title": "Point.shiftTowards()", "intro": "Returns a new Point that is shifted distance (mm) in the direction of the target .", - "slug": "reference/api/point/shifttowards", - "order": "Point.shiftTowards()" + "order": "Point.shiftTowards()", + "slug": "reference/api/point/shifttowards" }, "reference/api/point/sitson": { "title": "Point.sitsOn()", "intro": "Returns true if this point has the same coordinates as the point you pass to it.", - "slug": "reference/api/point/sitson", - "order": "Point.sitsOn()" + "order": "Point.sitsOn()", + "slug": "reference/api/point/sitson" }, "reference/api/point/sitsroughlyon": { "title": "Point.sitsRoughlyOn()", "intro": "Returns true if this point has roughly (rounded to the nearest millimeter) the same coordinates as the one you pass to it.", - "slug": "reference/api/point/sitsroughlyon", - "order": "Point.sitsRoughlyOn()" + "order": "Point.sitsRoughlyOn()", + "slug": "reference/api/point/sitsroughlyon" }, "reference/api/point/translate": { "title": "Point.translate()", "intro": "Returns a new Point with a translate transform applied.", - "slug": "reference/api/point/translate", - "order": "Point.translate()" + "order": "Point.translate()", + "slug": "reference/api/point/translate" }, "reference/api/snippet/attr": { + "title": "attr()", + "intro": "This Snippet.attr() method calls Attributes.add() under the hood, but returns the Snippet object. This allows you to chain different calls together.", + "order": "attr()", "slug": "reference/api/snippet/attr" }, "reference/api/snippet/clone": { "title": "clone()", "intro": "Returns a new Snippets object that is a deep copy of this one.", - "slug": "reference/api/snippet/clone", - "order": "clone()" + "order": "clone()", + "slug": "reference/api/snippet/clone" }, "reference/api/snippet": { + "title": "Snippet", + "intro": "A snippet is a reuseable bit of markup for your pattern. They are added to the SVG defs section, and rendered with the SVG use tag.", + "order": "35Snippet", "slug": "reference/api/snippet" }, "reference/api/store": { + "title": "Store", + "intro": "The object holds a simple key/value store with methods for storing and retrieving information. A single store per pattern is shared by all pattern parts.", + "order": "70Store", "slug": "reference/api/store" }, "reference/api/store/get": { "title": "get()", "intro": "Returnes the value stored under key .", - "slug": "reference/api/store/get", - "order": "get()" + "order": "get()", + "slug": "reference/api/store/get" }, "reference/api/store/set": { "title": "set()", "intro": "Stores the value of value in the store under key key .", - "slug": "reference/api/store/set", - "order": "set()" + "order": "set()", + "slug": "reference/api/store/set" }, "reference/api/store/setifunset": { + "title": "setIfUnset", + "intro": "Stores the value of value in the store under key key , but only if that key does not already hold a value.", + "order": "setIfUnset", "slug": "reference/api/store/setifunset" }, "reference/api/svg/attributes": { "title": "attributes", "intro": "An Attributes instance that controls the attributes of the SVG tag.", - "slug": "reference/api/svg/attributes", - "order": "attributes" + "order": "attributes", + "slug": "reference/api/svg/attributes" }, "reference/api/svg/defs": { + "title": "defs", + "intro": "A string that will be rendered as the defs section of the SVG document.", + "order": "defs", "slug": "reference/api/svg/defs" }, "reference/api/svg": { + "title": "Svg", + "intro": "The Svg object in FreeSewing's core library represents an SVG document. It is not directly exposed, but it is available as the svg attribute of a Pattern object . While the methods exposed by this object are only used internally, its attributes are useful for situations where you want to develop a plugin, or use a custom layout:", + "order": "80Svg", "slug": "reference/api/svg" }, "reference/api/svg/head": { + "title": "head", + "intro": "A string that combines the style , script , and defs sections and an opening tag for an SVG group.", + "order": "head", "slug": "reference/api/svg/head" }, "reference/api/svg/layout": { + "title": "layout", + "intro": "An object that holds rendered SVG for all parts, and a list of their transforms. It is structured as follows:", + "order": "layout", "slug": "reference/api/svg/layout" }, "reference/api/svg/pattern": { "title": "pattern", "intro": "A reference to the Pattern object .", - "slug": "reference/api/svg/pattern", - "order": "pattern" + "order": "pattern", + "slug": "reference/api/svg/pattern" }, "reference/api/svg/prefix": { "title": "prefix", "intro": "A string that will be rendered before the opening SVG tag.", - "slug": "reference/api/svg/prefix", - "order": "prefix" + "order": "prefix", + "slug": "reference/api/svg/prefix" }, "reference/api/svg/script": { "title": "script", "intro": "A string that will be rendered as the script section of the SVG document.", - "slug": "reference/api/svg/script", - "order": "script" + "order": "script", + "slug": "reference/api/svg/script" }, "reference/api/svg/style": { "title": "style", "intro": "A string that will be rendered as the style section of the SVG document.", - "slug": "reference/api/svg/style", - "order": "style" + "order": "style", + "slug": "reference/api/svg/style" }, "reference/api/svg/tail": { "title": "tail", "intro": "A string that closes both the group opened by Pattern.svg.head and the SVG tag.", - "slug": "reference/api/svg/tail", - "order": "tail" + "order": "tail", + "slug": "reference/api/svg/tail" }, "reference/api/utils/beamintersectscircle": { "title": "beamIntersectsCircle()", "intro": "Finds the intersection between an endless line through points point1 and point2 and a circle with its center at point center and a radius of radius mm.", - "slug": "reference/api/utils/beamintersectscircle", - "order": "beamIntersectsCircle()" + "order": "beamIntersectsCircle()", + "slug": "reference/api/utils/beamintersectscircle" }, "reference/api/utils/beamintersectsx": { + "title": "beamIntersectsX()", + "intro": "Finds the intersection between an endless line and a given X-value. Returns a Point object for the intersection, or false there is no intersection.", + "order": "beamIntersectsX()", "slug": "reference/api/utils/beamintersectsx" }, "reference/api/utils/beamintersectsy": { + "title": "beamIntersectsY()", + "intro": "Finds the intersection between an endless line and a given Y-value. Returns a Point object for the intersection, or false there is no intersection.", + "order": "beamIntersectsY()", "slug": "reference/api/utils/beamintersectsy" }, "reference/api/utils/beamsintersect": { + "title": "beamsIntersect()", + "intro": "Finds the intersection between two endless lines (beams). Returns a Point object for the intersection, or false if the lines don't intersect.", + "order": "beamsIntersect()", "slug": "reference/api/utils/beamsintersect" }, "reference/api/utils/circlesintersect": { "title": "circlesIntersect()", "intro": "Finds the intersections between two circles described by their center point and radius.", - "slug": "reference/api/utils/circlesintersect", - "order": "circlesIntersect()" + "order": "circlesIntersect()", + "slug": "reference/api/utils/circlesintersect" }, "reference/api/utils/curveintersectsx": { "title": "curveIntersectsX()", "intro": "Finds the point(s) where a curve intersects a given X-value.", - "slug": "reference/api/utils/curveintersectsx", - "order": "curveIntersectsX()" + "order": "curveIntersectsX()", + "slug": "reference/api/utils/curveintersectsx" }, "reference/api/utils/curveintersectsy": { "title": "curveIntersectsY()", "intro": "Finds the point(s) where a curve intersects a given Y-value.", - "slug": "reference/api/utils/curveintersectsy", - "order": "curveIntersectsY()" + "order": "curveIntersectsY()", + "slug": "reference/api/utils/curveintersectsy" }, "reference/api/utils/curvesintersect": { "title": "curvesIntersect()", "intro": "Finds the intersections between two curves described by 4 points each.", - "slug": "reference/api/utils/curvesintersect", - "order": "curvesIntersect()" + "order": "curvesIntersect()", + "slug": "reference/api/utils/curvesintersect" }, "reference/api/utils/deg2rad": { "title": "deg2rad()", "intro": "Returns the degrees you pass to it as radians.", - "slug": "reference/api/utils/deg2rad", - "order": "deg2rad()" + "order": "deg2rad()", + "slug": "reference/api/utils/deg2rad" }, "reference/api/utils": { "title": "Utils", - "order": "95Utils", "intro": "The Utils object provides the following utility methods to facilitate your work:", + "order": "95Utils", "slug": "reference/api/utils" }, "reference/api/utils/lineintersectscircle": { "title": "lineIntersectsCircle()", "intro": "Finds the intersection between a line segment from point from to point to and a circle with its center at point center and a radius of radius mm.", - "slug": "reference/api/utils/lineintersectscircle", - "order": "lineIntersectsCircle()" + "order": "lineIntersectsCircle()", + "slug": "reference/api/utils/lineintersectscircle" }, "reference/api/utils/lineintersectscurve": { "title": "lineIntersectsCurve()", "intro": "Finds the intersection between a line segment from point from to point to and a curve described by points start , cp1 , cp2, and end`.", - "slug": "reference/api/utils/lineintersectscurve", - "order": "lineIntersectsCurve()" + "order": "lineIntersectsCurve()", + "slug": "reference/api/utils/lineintersectscurve" }, "reference/api/utils/linesintersect": { + "title": "linesIntersect()", + "intro": "Finds the intersection between two line segments. Returns a Point object for the intersection, or false if the lines don't intersect.", + "order": "linesIntersect()", "slug": "reference/api/utils/linesintersect" }, "reference/api/utils/pointonbeam": { + "title": "pointOnBeam()", + "intro": "Returns true if the point check lies on the endless line that goes through point1 and point2 . The fourth parameter controls the precision. Lower numbers make the check less precise.", + "order": "pointOnBeam()", "slug": "reference/api/utils/pointonbeam" }, "reference/api/utils/pointoncurve": { "title": "pointOnCurve()", "intro": "Returns true if the point check lies on a curve described by points start , cp1 , cp2 , and end .", - "slug": "reference/api/utils/pointoncurve", - "order": "pointOnCurve()" + "order": "pointOnCurve()", + "slug": "reference/api/utils/pointoncurve" }, "reference/api/utils/pointonline": { "title": "pointOnLine()", "intro": "Returns true if the point check lies on a line segment from point from to point to .", - "slug": "reference/api/utils/pointonline", - "order": "pointOnLine()" + "order": "pointOnLine()", + "slug": "reference/api/utils/pointonline" }, "reference/api/utils/rad2deg": { "title": "rad2deg()", "intro": "Returns the radians you pass to it as degrees.", - "slug": "reference/api/utils/rad2deg", - "order": "rad2deg()" + "order": "rad2deg()", + "slug": "reference/api/utils/rad2deg" }, "reference/api/utils/round": { "title": "round()", "intro": "Rounds a value to two decimals. For example:", - "slug": "reference/api/utils/round", - "order": "round()" + "order": "round()", + "slug": "reference/api/utils/round" }, "reference/api/utils/stretchtoscale": { "title": "stretchToScale()", "intro": "The way people measure stretch intuitively is different from the way we handle stretch in code.", - "slug": "reference/api/utils/stretchtoscale", - "order": "stretchToScale()" + "order": "stretchToScale()", + "slug": "reference/api/utils/stretchtoscale" }, "reference/api/utils/units": { "title": "units()", "intro": "Converts the units value you pass it into a formatted string for the format you pass it.", - "slug": "reference/api/utils/units", - "order": "units()" + "order": "units()", + "slug": "reference/api/utils/units" }, "reference/backend/account": { + "title": "Account", + "intro": "On success: The account data On failure:", + "order": "Account", "slug": "reference/backend/account" }, "reference/backend": { "title": "Backend API", - "for": "developers", - "about": "Documentation for our backend REST API", - "intro": "This documentation is outdated", - "slug": "reference/backend", - "order": "Backend API" + "intro": "", + "order": "Backend API", + "slug": "reference/backend" }, "reference/backend/login": { + "title": "Log in", + "intro": "On success: The account data On failure:", + "order": "Log in", "slug": "reference/backend/login" }, "reference/backend/models": { "title": "Models", "intro": "On success:", - "slug": "reference/backend/models", - "order": "Models" + "order": "Models", + "slug": "reference/backend/models" }, "reference/backend/oauth": { "title": "Oauth", "intro": "On success:", - "slug": "reference/backend/oauth", - "order": "Oauth" + "order": "Oauth", + "slug": "reference/backend/oauth" }, "reference/backend/recipes": { "title": "Recipes", "intro": "On success:", - "slug": "reference/backend/recipes", - "order": "Recipes" + "order": "Recipes", + "slug": "reference/backend/recipes" }, "reference/backend/signup": { "title": "Sign up", "intro": "On success:", - "slug": "reference/backend/signup", - "order": "Sign up" + "order": "Sign up", + "slug": "reference/backend/signup" }, "reference/backend/users": { "title": "Users", "intro": "On success:", - "slug": "reference/backend/users", - "order": "Users" + "order": "Users", + "slug": "reference/backend/users" }, "reference/config/dependencies": { "title": "dependencies", "intro": "An object of key - value pairs that controls the order in which pattern parts will get drafted.", - "slug": "reference/config/dependencies", - "order": "dependencies" + "order": "dependencies", + "slug": "reference/config/dependencies" }, "reference/config": { "title": "Pattern configuration file", - "for": "developers", - "about": "Reference documentation for the pattern configuration file", "intro": "A pattern configuration file exports a default object with the following properties:", - "slug": "reference/config", - "order": "Pattern configuration file" + "order": "Pattern configuration file", + "slug": "reference/config" }, "reference/config/hide": { "title": "hide", "intro": "An array that lists pattern parts that should be hidden by default.", - "slug": "reference/config/hide", - "order": "hide" + "order": "hide", + "slug": "reference/config/hide" }, "reference/config/inject": { "title": "inject", "intro": "An object of key/value pairs of parts. The value part will be injected in the key part.", - "slug": "reference/config/inject", - "order": "inject" + "order": "inject", + "slug": "reference/config/inject" }, "reference/config/measurements": { "title": "measurements", "intro": "An array with the names of the measurements required to draft this pattern.", - "slug": "reference/config/measurements", - "order": "measurements" + "order": "measurements", + "slug": "reference/config/measurements" }, "reference/config/name": { "title": "name", "intro": "A string with the name of your pattern.", - "slug": "reference/config/name", - "order": "name" + "order": "name", + "slug": "reference/config/name" }, "reference/config/optionalmeasurements": { "title": "optionalMeasurements", "intro": "An array with the names of optional measurements that can be used to draft this pattern.", - "slug": "reference/config/optionalmeasurements", - "order": "optionalMeasurements" + "order": "optionalMeasurements", + "slug": "reference/config/optionalmeasurements" }, "reference/config/options/boolean": { "title": "boolean", "intro": "If your option is either true or false , or or or or , you can use a boolean:", - "slug": "reference/config/options/boolean", - "order": "boolean" + "order": "boolean", + "slug": "reference/config/options/boolean" }, "reference/config/options/constant": { "title": "constant", "intro": "If your option is a scalar value (like a string or a number), it will be treated as a constant:", - "slug": "reference/config/options/constant", - "order": "constant" + "order": "constant", + "slug": "reference/config/options/constant" }, "reference/config/options/counter": { + "title": "counter", + "intro": "For a given number of things, use a counter. Counters are for integers only. Things like number of buttons and so on.", + "order": "counter", "slug": "reference/config/options/counter" }, "reference/config/options/degrees": { "title": "degrees", "intro": "For angles, use degrees.", - "slug": "reference/config/options/degrees", - "order": "degrees" + "order": "degrees", + "slug": "reference/config/options/degrees" }, "reference/config/options": { "title": "options", "intro": "Options come in 6 varities:", - "slug": "reference/config/options", - "order": "options" + "order": "options", + "slug": "reference/config/options" }, "reference/config/options/list": { "title": "list", "intro": "Use a list option when you want to offer an array of choices.", - "slug": "reference/config/options/list", - "order": "list" + "order": "list", + "slug": "reference/config/options/list" }, "reference/config/options/millimeter": { "title": "millimeter", "intro": "While we recommend using percentages where possible, sometimes that doesn't make sense.", - "slug": "reference/config/options/millimeter", - "order": "millimeter" + "order": "millimeter", + "slug": "reference/config/options/millimeter" }, "reference/config/options/percentage": { "title": "percentage", "intro": "Percentage options are the bread and butter of freesewing.", - "slug": "reference/config/options/percentage", - "order": "percentage" + "order": "percentage", + "slug": "reference/config/options/percentage" }, "reference/config/parts": { "title": "parts", "intro": "An array that lists your (additional) pattern parts. The name must be the key the pattern.parts object.", - "slug": "reference/config/parts", - "order": "parts" + "order": "parts", + "slug": "reference/config/parts" }, "reference/config/version": { "title": "version", "intro": "The version of your pattern.", - "slug": "reference/config/version", - "order": "version" + "order": "version", + "slug": "reference/config/version" }, "reference/designs": { "title": "Designs", - "for": "contributors", - "about": "Complete list of FreeSewing designs that we've put out", "intro": "We have a growing number of designs (sewing patterns).", - "slug": "reference/designs", - "order": "Designs" + "order": "Designs", + "slug": "reference/designs" }, "reference": { "title": "Reference", - "order": "1040Reference", "intro": "FIXME_no_intro", + "order": "1040Reference", "slug": "reference" }, "reference/hooks": { "title": "Hooks API", - "for": "developers", - "about": "Documents the available lifecycle hooks in Core and how to use them", "intro": "A is a lifecycle event.", - "slug": "reference/hooks", - "order": "Hooks API" + "order": "Hooks API", + "slug": "reference/hooks" }, "reference/hooks/inserttext": { "title": "insertText", "intro": "The insertText hook is called when text is about to be inserted during rendering.", - "slug": "reference/hooks/inserttext", - "order": "insertText" + "order": "insertText", + "slug": "reference/hooks/inserttext" }, "reference/hooks/postdraft": { "title": "postDraft", "intro": "The postDraft hook runs just after your pattern is drafted.", - "slug": "reference/hooks/postdraft", - "order": "postDraft" + "order": "postDraft", + "slug": "reference/hooks/postdraft" }, "reference/hooks/postrender": { "title": "postRender", "intro": "The postRender hook is triggered after the SVG is rendered.", - "slug": "reference/hooks/postrender", - "order": "postRender" + "order": "postRender", + "slug": "reference/hooks/postrender" }, "reference/hooks/postsample": { + "title": "postSample", + "intro": "The postSample hook runs just after your pattern is sampled. Your plugin will receive the Pattern object.", + "order": "postSample", "slug": "reference/hooks/postsample" }, "reference/hooks/predraft": { "title": "preDraft", "intro": "The preDraft hook runs just before your pattern is drafted.", - "slug": "reference/hooks/predraft", - "order": "preDraft" + "order": "preDraft", + "slug": "reference/hooks/predraft" }, "reference/hooks/prerender": { "title": "preRender", "intro": "The preRender hook is triggered just before your pattern is rendered to SVG.", - "slug": "reference/hooks/prerender", - "order": "preRender" + "order": "preRender", + "slug": "reference/hooks/prerender" }, "reference/hooks/presample": { "title": "preSample", "intro": "The preSample hook runs just before your pattern is sampled.", - "slug": "reference/hooks/presample", - "order": "preSample" + "order": "preSample", + "slug": "reference/hooks/presample" }, "reference/macros/bartack": { + "title": "bartack", + "intro": "The bartack macro allows you to add a marker to your sewing pattern. It is provided by the bartack plugin .", + "order": "bartack", "slug": "reference/macros/bartack" }, "reference/macros/bartackalong": { + "title": "bartackAlong", + "intro": "The bartackAlong macro allows you to add a marker to your sewing pattern. More specifically, a bartack along a path. It is provided by the bartack plugin .", + "order": "bartackAlong", "slug": "reference/macros/bartackalong" }, "reference/macros/bartackfractionalong": { + "title": "bartackFractionAlong", + "intro": "The bartackFractionAlong macro allows you to add a marker to your sewing pattern. More specifically, a bartack along a fraction of a path. It is provided by the bartack plugin .", + "order": "bartackFractionAlong", "slug": "reference/macros/bartackfractionalong" }, "reference/macros/cutonfold": { "title": "cutonfold", "intro": "The cutonfold macro adds a indicator to your pattern. It is provided by the cutonfold plugin .", - "slug": "reference/macros/cutonfold", - "order": "cutonfold" + "order": "cutonfold", + "slug": "reference/macros/cutonfold" }, "reference/macros": { + "title": "Macros", + "intro": "Macros are a way to combine different operations into a single command, and are typically provided by plugins.", + "order": "Macros", "slug": "reference/macros" }, "reference/macros/flip": { "title": "flip", "intro": "The flip macro flips (mirrors) an entire part vertically around the Y-axis. It takes no arguments, and is provided by the flip plugin .", - "slug": "reference/macros/flip", - "order": "flip" + "order": "flip", + "slug": "reference/macros/flip" }, "reference/macros/grainline": { "title": "grainline", "intro": "The grainline macro adds a indicator to your pattern. It is provided by the grainline plugin .", - "slug": "reference/macros/grainline", - "order": "grainline" + "order": "grainline", + "slug": "reference/macros/grainline" }, "reference/macros/hd": { "title": "hd", "intro": "The hd macro adds a to your pattern. It is provided by the dimension plugin .", - "slug": "reference/macros/hd", - "order": "hd" + "order": "hd", + "slug": "reference/macros/hd" }, "reference/macros/ld": { "title": "ld", "intro": "The ld macro adds a to your pattern. It is provided by the dimension plugin .", - "slug": "reference/macros/ld", - "order": "ld" + "order": "ld", + "slug": "reference/macros/ld" }, "reference/macros/miniscale": { + "title": "miniscale", + "intro": "The miniscale macro adds a mini to your pattern. This box allows users to verify their pattern is printed to scale.", + "order": "miniscale", "slug": "reference/macros/miniscale" }, "reference/macros/mirror": { + "title": "mirror", + "intro": "The mirror macro allows you to mirror points and/or paths around a mirror line. It is provided by the mirror plugin .", + "order": "mirror", "slug": "reference/macros/mirror" }, "reference/macros/pd": { "title": "pd", "intro": "The pd macro adds a to your pattern, indicating the length of a path. It is provided by the dimension plugin .", - "slug": "reference/macros/pd", - "order": "pd" + "order": "pd", + "slug": "reference/macros/pd" }, "reference/macros/rmad": { + "title": "rmad", + "intro": "The rmad macro removes all dimensions with the exception of those that were created with a custom ID. It is provided by the dimension plugin .", + "order": "rmad", "slug": "reference/macros/rmad" }, "reference/macros/rmd": { + "title": "rmd", + "intro": "The rmd macro removes a dimension. It is provided by the dimension plugin .", + "order": "rmd", "slug": "reference/macros/rmd" }, "reference/macros/round": { "title": "round", "intro": "The round macro rounds a corner. It is provided by the round plugin .", - "slug": "reference/macros/round", - "order": "round" + "order": "round", + "slug": "reference/macros/round" }, "reference/macros/scalebox": { + "title": "scalebox", + "intro": "The scalebox macro adds a to your pattern. This box allows users to verify their pattern is printed to scale.", + "order": "scalebox", "slug": "reference/macros/scalebox" }, "reference/macros/sprinkle": { "title": "sprinkle", "intro": "The sprinkle macro facilitates adding snippets to your pattern in bulk. It is by the sprinkle plugin .", - "slug": "reference/macros/sprinkle", - "order": "sprinkle" + "order": "sprinkle", + "slug": "reference/macros/sprinkle" }, "reference/macros/title": { "title": "title", "intro": "The title macro adds a title to a pattern part. It is provided by the title plugin .", - "slug": "reference/macros/title", - "order": "title" + "order": "title", + "slug": "reference/macros/title" }, "reference/macros/vd": { "title": "vd", "intro": "The vd macro adds a to your pattern. It is provided by the dimension plugin .", - "slug": "reference/macros/vd", - "order": "vd" + "order": "vd", + "slug": "reference/macros/vd" }, "reference/packages/aaron": { "title": "@freesewing/aaron", "intro": "FIXME_no_intro", - "slug": "reference/packages/aaron", - "order": "@freesewing/aaron" + "order": "@freesewing/aaron", + "slug": "reference/packages/aaron" }, "reference/packages/benjamin": { "title": "@freesewing/benjamin", "intro": "FIXME_no_intro", - "slug": "reference/packages/benjamin", - "order": "@freesewing/benjamin" + "order": "@freesewing/benjamin", + "slug": "reference/packages/benjamin" }, "reference/packages/bent": { "title": "@freesewing/bent", "intro": "FIXME_no_intro", - "slug": "reference/packages/bent", - "order": "@freesewing/bent" + "order": "@freesewing/bent", + "slug": "reference/packages/bent" }, "reference/packages/breanna": { "title": "@freesewing/breanna", "intro": "FIXME_no_intro", - "slug": "reference/packages/breanna", - "order": "@freesewing/breanna" + "order": "@freesewing/breanna", + "slug": "reference/packages/breanna" }, "reference/packages/brian": { "title": "@freesewing/brian", "intro": "FIXME_no_intro", - "slug": "reference/packages/brian", - "order": "@freesewing/brian" + "order": "@freesewing/brian", + "slug": "reference/packages/brian" }, "reference/packages/bruce": { "title": "@freesewing/bruce", "intro": "FIXME_no_intro", - "slug": "reference/packages/bruce", - "order": "@freesewing/bruce" + "order": "@freesewing/bruce", + "slug": "reference/packages/bruce" }, "reference/packages/carlita": { "title": "@freesewing/carlita", "intro": "FIXME_no_intro", - "slug": "reference/packages/carlita", - "order": "@freesewing/carlita" + "order": "@freesewing/carlita", + "slug": "reference/packages/carlita" }, "reference/packages/carlton": { "title": "@freesewing/carlton", "intro": "FIXME_no_intro", - "slug": "reference/packages/carlton", - "order": "@freesewing/carlton" + "order": "@freesewing/carlton", + "slug": "reference/packages/carlton" }, "reference/packages/cathrin": { "title": "@freesewing/cathrin", "intro": "FIXME_no_intro", - "slug": "reference/packages/cathrin", - "order": "@freesewing/cathrin" + "order": "@freesewing/cathrin", + "slug": "reference/packages/cathrin" }, "reference/packages/components/blockquote": { + "title": "Blockquote", + "intro": "The Blockquote component is a base blockquote that can be styled in a number of different ways via the type prop which can be set to:", + "order": "Blockquote", "slug": "reference/packages/components/blockquote" }, "reference/packages/components/draft": { "title": "Draft", "intro": "The Draft component renders a FreeSewing pattern in the browser as SVG.", - "slug": "reference/packages/components/draft", - "order": "Draft" + "order": "Draft", + "slug": "reference/packages/components/draft" }, "reference/packages/components/draftconfgurator": { + "title": "DraftConfigurator", + "intro": "The DraftConfigurator provides the user interface for configuring a draft. It is a rather complex component, that is used both for the freesewing.org website as for our development environment.", + "order": "DraftConfigurator", "slug": "reference/packages/components/draftconfgurator" }, "reference/packages/components/emblem": { "title": "Emblem", "intro": "The Emblem component renders the freesewing word in the top-left of our navigation bar.", - "slug": "reference/packages/components/emblem", - "order": "Emblem" + "order": "Emblem", + "slug": "reference/packages/components/emblem" }, "reference/packages/components": { "title": "@freesewing/components", "intro": "This is a collection for React components for FreeSewing's websites:", - "slug": "reference/packages/components", - "order": "@freesewing/components" + "order": "@freesewing/components", + "slug": "reference/packages/components" }, "reference/packages/components/example": { + "title": "Example", + "intro": "The Example component renders the examples pattern. It is used throughout our developer documentation.", + "order": "Example", "slug": "reference/packages/components/example" }, "reference/packages/components/footer": { "title": "Footer", "intro": "The Footer component is the shared footer we use on our websites.", - "slug": "reference/packages/components/footer", - "order": "Footer" + "order": "Footer", + "slug": "reference/packages/components/footer" }, "reference/packages/components/icon": { + "title": "Icon", + "intro": "The Icon component renders a couple of icons that we use, but are not available in the standard material icon set .", + "order": "Icon", "slug": "reference/packages/components/icon" }, "reference/packages/components/linedrawing": { "title": "Linedrawing", "intro": "The Linedrawing component renders linedrawings for the FreeSewing patterns.", - "slug": "reference/packages/components/linedrawing", - "order": "Linedrawing" + "order": "Linedrawing", + "slug": "reference/packages/components/linedrawing" }, "reference/packages/components/logo": { "title": "Logo", "intro": "The Logo component renders the FreeSewing logo.", - "slug": "reference/packages/components/logo", - "order": "Logo" + "order": "Logo", + "slug": "reference/packages/components/logo" }, "reference/packages/components/navbar": { "title": "Navbar", "intro": "The Navbar component is the shared navigation bar we use at the top of our websites.", - "slug": "reference/packages/components/navbar", - "order": "Navbar" + "order": "Navbar", + "slug": "reference/packages/components/navbar" }, "reference/packages/components/render": { + "title": "Render", + "intro": "The Render component is componet that renders a FreeSewing pattern. It's an alternative to rendering patterns as SVG, allowing for more interactive use of our patterns in your frontend.", + "order": "Render", "slug": "reference/packages/components/render" }, "reference/packages/components/robot": { + "title": "Robot", + "intro": "The Robot component renders the FreeSewing robot. It takes a pose prop that should be one of the following:", + "order": "Robot", "slug": "reference/packages/components/robot" }, "reference/packages/components/sampleconfigurator": { + "title": "SampleConfigurator", + "intro": "The SampleConfigurator provides the user interface for configuring sampling of a pattern. It is used in our development environment.", + "order": "SampleConfigurator", "slug": "reference/packages/components/sampleconfigurator" }, "reference/packages/components/spinner": { "title": "Spinner", "intro": "The Spinner component renders a loading indicator with the FreeSewing logo.", - "slug": "reference/packages/components/spinner", - "order": "Spinner" + "order": "Spinner", + "slug": "reference/packages/components/spinner" }, "reference/packages/components/withgist": { + "title": "WithGist", + "intro": "The WithGist component is a higher order component that adds management of a gist to your component. A gist is almost the same as a recipe, that is, it stores all the data required to draft your pattern.", + "order": "WithGist", "slug": "reference/packages/components/withgist" }, "reference/packages/components/withlanguage": { + "title": "WithLanguage", + "intro": "The WithLanguage component is a higher order component that is used to inject the react-intl context into your component.", + "order": "WithLanguage", "slug": "reference/packages/components/withlanguage" }, "reference/packages/components/withstorage": { + "title": "WithStorage", + "intro": "The WithStorage component is a higher order component that adds saving to and reading from (the browser's) local storage to your component.", + "order": "WithStorage", "slug": "reference/packages/components/withstorage" }, "reference/packages/components/workbench": { + "title": "Workbench", + "intro": "The Workbench component provides the FreeSewing development environment. It is a rather complex component, that is used as the entrypoint component for our development environment.", + "order": "Workbench", "slug": "reference/packages/components/workbench" }, "reference/packages/core": { "title": "@freesewing/core", "intro": "This is the main FreeSewing library.", - "slug": "reference/packages/core", - "order": "@freesewing/core" + "order": "@freesewing/core", + "slug": "reference/packages/core" }, "reference/packages/create-freesewing-pattern": { "title": "create-freesewing-pattern", "intro": "This is an npm initializer package to jump-start your FreeSewing pattern designs with:", - "slug": "reference/packages/create-freesewing-pattern", - "order": "create-freesewing-pattern" + "order": "create-freesewing-pattern", + "slug": "reference/packages/create-freesewing-pattern" }, "reference/packages/css-theme": { "title": "@freesewing/css-theme", "intro": "This is the CSS that's used on FreeSewing's websites.", - "slug": "reference/packages/css-theme", - "order": "@freesewing/css-theme" + "order": "@freesewing/css-theme", + "slug": "reference/packages/css-theme" }, "reference/packages": { "title": "Packages", - "for": "developers", - "about": "Complete list of all the packages we publish on NPM", "intro": "FreeSewing publishes the following JavaScript packages on NPM :", - "slug": "reference/packages", - "order": "Packages" + "order": "Packages", + "slug": "reference/packages" }, "reference/packages/examples": { "title": "@freesewing/examples", "intro": "This pattern holds examples used throughout the documentation. Examples like this one:", - "slug": "reference/packages/examples", - "order": "@freesewing/examples" + "order": "@freesewing/examples", + "slug": "reference/packages/examples" }, "reference/packages/florence": { "title": "@freesewing/florence", "intro": "FIXME_no_intro", - "slug": "reference/packages/florence", - "order": "@freesewing/florence" + "order": "@freesewing/florence", + "slug": "reference/packages/florence" }, "reference/packages/florent": { "title": "@freesewing/florent", "intro": "FIXME_no_intro", - "slug": "reference/packages/florent", - "order": "@freesewing/florent" + "order": "@freesewing/florent", + "slug": "reference/packages/florent" }, "reference/packages/gatsby-remark-jargon": { "title": "gatsby-remark-jargon", "intro": "This is a Gatsby plugin that wraps our remark-jargon plugin for Remark .", - "slug": "reference/packages/gatsby-remark-jargon", - "order": "gatsby-remark-jargon" + "order": "gatsby-remark-jargon", + "slug": "reference/packages/gatsby-remark-jargon" }, "reference/packages/holmes": { "title": "@freesewing/holmes", "intro": "FIXME_no_intro", - "slug": "reference/packages/holmes", - "order": "@freesewing/holmes" + "order": "@freesewing/holmes", + "slug": "reference/packages/holmes" }, "reference/packages/huey": { "title": "@freesewing/huey", "intro": "FIXME_no_intro", - "slug": "reference/packages/huey", - "order": "@freesewing/huey" + "order": "@freesewing/huey", + "slug": "reference/packages/huey" }, "reference/packages/hugo": { "title": "@freesewing/hugo", "intro": "FIXME_no_intro", - "slug": "reference/packages/hugo", - "order": "@freesewing/hugo" + "order": "@freesewing/hugo", + "slug": "reference/packages/hugo" }, "reference/packages/i18n": { "title": "@freesewing/i18n", "intro": "These are the string translations for FreeSewing's websites and patterns.", - "slug": "reference/packages/i18n", - "order": "@freesewing/i18n" + "order": "@freesewing/i18n", + "slug": "reference/packages/i18n" }, "reference/packages/jaeger": { "title": "@freesewing/jaeger", "intro": "FIXME_no_intro", - "slug": "reference/packages/jaeger", - "order": "@freesewing/jaeger" + "order": "@freesewing/jaeger", + "slug": "reference/packages/jaeger" }, "reference/packages/models": { "title": "@freesewing/models", "intro": "This package provides a set of standard-sized measurements to test your patterns with.", - "slug": "reference/packages/models", - "order": "@freesewing/models" + "order": "@freesewing/models", + "slug": "reference/packages/models" }, "reference/packages/mui-theme": { "title": "@freesewing/mui-theme", "intro": "This is the Material-ui theme that's used on FreeSewing's websites.", - "slug": "reference/packages/mui-theme", - "order": "@freesewing/mui-theme" + "order": "@freesewing/mui-theme", + "slug": "reference/packages/mui-theme" }, "reference/packages/pattern-info": { "title": "@freesewing/pattern-info", "intro": "This package provides information about FreeSewing patterns.", - "slug": "reference/packages/pattern-info", - "order": "@freesewing/pattern-info" + "order": "@freesewing/pattern-info", + "slug": "reference/packages/pattern-info" }, "reference/packages/penelope": { "title": "@freesewing/penelope", "intro": "FIXME_no_intro", - "slug": "reference/packages/penelope", - "order": "@freesewing/penelope" + "order": "@freesewing/penelope", + "slug": "reference/packages/penelope" }, "reference/packages/plugin-bundle": { "title": "@freesewing/plugin-bundle", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-bundle", - "order": "@freesewing/plugin-bundle" + "order": "@freesewing/plugin-bundle", + "slug": "reference/packages/plugin-bundle" }, "reference/packages/plugin-bust": { "title": "@freesewing/plugin-bust", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-bust", - "order": "@freesewing/plugin-bust" + "order": "@freesewing/plugin-bust", + "slug": "reference/packages/plugin-bust" }, "reference/packages/plugin-buttons": { "title": "@freesewing/plugin-buttons", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-buttons", - "order": "@freesewing/plugin-buttons" + "order": "@freesewing/plugin-buttons", + "slug": "reference/packages/plugin-buttons" }, "reference/packages/plugin-cutonfold": { "title": "@freesewing/plugin-cutonfold", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-cutonfold", - "order": "@freesewing/plugin-cutonfold" + "order": "@freesewing/plugin-cutonfold", + "slug": "reference/packages/plugin-cutonfold" }, "reference/packages/plugin-dimension": { "title": "@freesewing/plugin-dimension", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-dimension", - "order": "@freesewing/plugin-dimension" + "order": "@freesewing/plugin-dimension", + "slug": "reference/packages/plugin-dimension" }, "reference/packages/plugin-flip": { "title": "@freesewing/plugin-flip", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-flip", - "order": "@freesewing/plugin-flip" + "order": "@freesewing/plugin-flip", + "slug": "reference/packages/plugin-flip" }, "reference/packages/plugin-gore": { "title": "@freesewing/plugin-gore", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-gore", - "order": "@freesewing/plugin-gore" + "order": "@freesewing/plugin-gore", + "slug": "reference/packages/plugin-gore" }, "reference/packages/plugin-grainline": { "title": "@freesewing/plugin-grainline", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-grainline", - "order": "@freesewing/plugin-grainline" + "order": "@freesewing/plugin-grainline", + "slug": "reference/packages/plugin-grainline" }, "reference/packages/plugin-i18n": { "title": "@freesewing/plugin-i18n", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-i18n", - "order": "@freesewing/plugin-i18n" + "order": "@freesewing/plugin-i18n", + "slug": "reference/packages/plugin-i18n" }, "reference/packages/plugin-logo": { "title": "@freesewing/plugin-logo", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-logo", - "order": "@freesewing/plugin-logo" + "order": "@freesewing/plugin-logo", + "slug": "reference/packages/plugin-logo" }, "reference/packages/plugin-round": { "title": "@freesewing/plugin-round", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-round", - "order": "@freesewing/plugin-round" + "order": "@freesewing/plugin-round", + "slug": "reference/packages/plugin-round" }, "reference/packages/plugin-scalebox": { "title": "@freesewing/plugin-scalebox", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-scalebox", - "order": "@freesewing/plugin-scalebox" + "order": "@freesewing/plugin-scalebox", + "slug": "reference/packages/plugin-scalebox" }, "reference/packages/plugin-sprinkle": { "title": "@freesewing/plugin-sprinkle", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-sprinkle", - "order": "@freesewing/plugin-sprinkle" + "order": "@freesewing/plugin-sprinkle", + "slug": "reference/packages/plugin-sprinkle" }, "reference/packages/plugin-svgattr": { "title": "@freesewing/plugin-svgattr", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-svgattr", - "order": "@freesewing/plugin-svgattr" + "order": "@freesewing/plugin-svgattr", + "slug": "reference/packages/plugin-svgattr" }, "reference/packages/plugin-theme": { "title": "@freesewing/plugin-theme", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-theme", - "order": "@freesewing/plugin-theme" + "order": "@freesewing/plugin-theme", + "slug": "reference/packages/plugin-theme" }, "reference/packages/plugin-title": { "title": "@freesewing/plugin-title", "intro": "FIXME_no_intro", - "slug": "reference/packages/plugin-title", - "order": "@freesewing/plugin-title" + "order": "@freesewing/plugin-title", + "slug": "reference/packages/plugin-title" }, "reference/packages/prettier-config": { "title": "@freesewing/prettier-config", "intro": "This is FreeSewing's Prettier configuration, to be shared across projects.", - "slug": "reference/packages/prettier-config", - "order": "@freesewing/prettier-config" + "order": "@freesewing/prettier-config", + "slug": "reference/packages/prettier-config" }, "reference/packages/remark-jargon": { "title": "remark-jargon", "intro": "This is a Remark plugin for jargon terms.", - "slug": "reference/packages/remark-jargon", - "order": "remark-jargon" + "order": "remark-jargon", + "slug": "reference/packages/remark-jargon" }, "reference/packages/rendertest": { + "title": "@freesewing/rendertest", + "intro": "This pattern is used to test (y)our FreeSewing renderer/themes with. Below is sample output for this pattern:", + "order": "@freesewing/rendertest", "slug": "reference/packages/rendertest" }, "reference/packages/sandy": { "title": "@freesewing/sandy", "intro": "FIXME_no_intro", - "slug": "reference/packages/sandy", - "order": "@freesewing/sandy" + "order": "@freesewing/sandy", + "slug": "reference/packages/sandy" }, "reference/packages/shin": { "title": "@freesewing/shin", "intro": "FIXME_no_intro", - "slug": "reference/packages/shin", - "order": "@freesewing/shin" + "order": "@freesewing/shin", + "slug": "reference/packages/shin" }, "reference/packages/simon": { "title": "@freesewing/simon", "intro": "FIXME_no_intro", - "slug": "reference/packages/simon", - "order": "@freesewing/simon" + "order": "@freesewing/simon", + "slug": "reference/packages/simon" }, "reference/packages/simone": { "title": "@freesewing/simone", "intro": "FIXME_no_intro", - "slug": "reference/packages/simone", - "order": "@freesewing/simone" + "order": "@freesewing/simone", + "slug": "reference/packages/simone" }, "reference/packages/sven": { "title": "@freesewing/sven", "intro": "FIXME_no_intro", - "slug": "reference/packages/sven", - "order": "@freesewing/sven" + "order": "@freesewing/sven", + "slug": "reference/packages/sven" }, "reference/packages/tamiko": { "title": "@freesewing/tamiko", "intro": "FIXME_no_intro", - "slug": "reference/packages/tamiko", - "order": "@freesewing/tamiko" + "order": "@freesewing/tamiko", + "slug": "reference/packages/tamiko" }, "reference/packages/theo": { "title": "@freesewing/theo", "intro": "FIXME_no_intro", - "slug": "reference/packages/theo", - "order": "@freesewing/theo" + "order": "@freesewing/theo", + "slug": "reference/packages/theo" }, "reference/packages/trayvon": { "title": "@freesewing/trayvon", "intro": "FIXME_no_intro", - "slug": "reference/packages/trayvon", - "order": "@freesewing/trayvon" + "order": "@freesewing/trayvon", + "slug": "reference/packages/trayvon" }, "reference/packages/tutorial": { "title": "@freesewing/tutorial", "intro": "FIXME_no_intro", - "slug": "reference/packages/tutorial", - "order": "@freesewing/tutorial" + "order": "@freesewing/tutorial", + "slug": "reference/packages/tutorial" }, "reference/packages/utils": { "title": "@freesewing/utils", "intro": "A collection of utilities shared between different FreeSewing projects.", - "slug": "reference/packages/utils", - "order": "@freesewing/utils" + "order": "@freesewing/utils", + "slug": "reference/packages/utils" }, "reference/packages/wahid": { "title": "@freesewing/wahid", "intro": "FIXME_no_intro", - "slug": "reference/packages/wahid", - "order": "@freesewing/wahid" + "order": "@freesewing/wahid", + "slug": "reference/packages/wahid" }, "reference/packages/waralee": { "title": "@freesewing/waralee", "intro": "FIXME_no_intro", - "slug": "reference/packages/waralee", - "order": "@freesewing/waralee" + "order": "@freesewing/waralee", + "slug": "reference/packages/waralee" }, "reference/plugins/bartack": { "title": "bartack", "intro": " ", - "slug": "reference/plugins/bartack", - "order": "bartack" + "order": "bartack", + "slug": "reference/plugins/bartack" }, "reference/plugins/bundle": { "title": "bundle", "intro": " ", - "slug": "reference/plugins/bundle", - "order": "bundle" + "order": "bundle", + "slug": "reference/plugins/bundle" }, "reference/plugins/bust": { "title": "bust", "intro": " ", - "slug": "reference/plugins/bust", - "order": "bust" + "order": "bust", + "slug": "reference/plugins/bust" }, "reference/plugins/buttons": { "title": "buttons", "intro": " ", - "slug": "reference/plugins/buttons", - "order": "buttons" + "order": "buttons", + "slug": "reference/plugins/buttons" }, "reference/plugins/cutonfold": { "title": "cutonfold", "intro": " ", - "slug": "reference/plugins/cutonfold", - "order": "cutonfold" + "order": "cutonfold", + "slug": "reference/plugins/cutonfold" }, "reference/plugins/dimension": { "title": "dimension", "intro": " ", - "slug": "reference/plugins/dimension", - "order": "dimension" + "order": "dimension", + "slug": "reference/plugins/dimension" }, "reference/plugins": { "title": "Plugins", - "for": "developers", - "about": "Complete list of all the plugins available for FreeSewing core", "intro": "The following FreeSewing plugins are available:", - "slug": "reference/plugins", - "order": "Plugins" + "order": "Plugins", + "slug": "reference/plugins" }, "reference/plugins/flip": { "title": "flip", "intro": " ", - "slug": "reference/plugins/flip", - "order": "flip" + "order": "flip", + "slug": "reference/plugins/flip" }, "reference/plugins/grainline": { "title": "grainline", "intro": " ", - "slug": "reference/plugins/grainline", - "order": "grainline" + "order": "grainline", + "slug": "reference/plugins/grainline" }, "reference/plugins/i18n": { "title": "i18n", "intro": " ", - "slug": "reference/plugins/i18n", - "order": "i18n" + "order": "i18n", + "slug": "reference/plugins/i18n" }, "reference/plugins/logo": { "title": "logo", "intro": " ", - "slug": "reference/plugins/logo", - "order": "logo" + "order": "logo", + "slug": "reference/plugins/logo" }, "reference/plugins/mirror": { "title": "mirror", "intro": " ", - "slug": "reference/plugins/mirror", - "order": "mirror" + "order": "mirror", + "slug": "reference/plugins/mirror" }, "reference/plugins/round": { "title": "round", "intro": " ", - "slug": "reference/plugins/round", - "order": "round" + "order": "round", + "slug": "reference/plugins/round" }, "reference/plugins/scalebox": { "title": "scalebox", "intro": " ", - "slug": "reference/plugins/scalebox", - "order": "scalebox" + "order": "scalebox", + "slug": "reference/plugins/scalebox" }, "reference/plugins/sprinkle": { "title": "sprinkle", "intro": " ", - "slug": "reference/plugins/sprinkle", - "order": "sprinkle" + "order": "sprinkle", + "slug": "reference/plugins/sprinkle" }, "reference/plugins/svgattr": { "title": "svgattr", "intro": " ", - "slug": "reference/plugins/svgattr", - "order": "svgattr" + "order": "svgattr", + "slug": "reference/plugins/svgattr" }, "reference/plugins/theme": { "title": "theme", "intro": " ", - "slug": "reference/plugins/theme", - "order": "theme" + "order": "theme", + "slug": "reference/plugins/theme" }, "reference/plugins/title": { "title": "title", "intro": " ", - "slug": "reference/plugins/title", - "order": "title" + "order": "title", + "slug": "reference/plugins/title" }, "reference/repos/backend": { "title": "backend", - "intro": "See also: The backend API reference", - "slug": "reference/repos/backend", - "order": "backend" + "intro": "Our backend is a REST API built with Express , using MongoDB as our database.", + "order": "backend", + "slug": "reference/repos/backend" }, "reference/repos": { "title": "Repositories", - "for": "contributors", - "about": "Complete list of all FreeSewing software repositories", "intro": "FreeSewing uses the following repositories:", - "slug": "reference/repos", - "order": "Repositories" + "order": "Repositories", + "slug": "reference/repos" }, "reference/repos/freesewing.dev": { + "title": "freesewing.dev", + "intro": "This is the source code for FreeSewing.dev , our developer documentation site, and the site you are browsing right now.", + "order": "freesewing.dev", "slug": "reference/repos/freesewing.dev" }, "reference/repos/freesewing.org": { "title": "freesewing.org", "intro": "This is the source code for FreeSewing.org , our main website.", - "slug": "reference/repos/freesewing.org", - "order": "freesewing.org" + "order": "freesewing.org", + "slug": "reference/repos/freesewing.org" }, "reference/repos/freesewing": { + "title": "freesewing", + "intro": "This is a monorepo holding all our NPM packages . We use Lerna and Yarn workspaces to manage the repo.", + "order": "freesewing", "slug": "reference/repos/freesewing" }, "reference/repos/svgtopdf": { + "title": "svgtopdf", + "intro": "This is a Node.js app using Express that turns SVGs into (tiled) PDFs.", + "order": "svgtopdf", "slug": "reference/repos/svgtopdf" }, "reference/repos/tile": { "title": "tile", "intro": "This is a PostScript tiler, a command line utility written in C.", - "slug": "reference/repos/tile", - "order": "tile" + "order": "tile", + "slug": "reference/repos/tile" }, "reference/settings/complete": { + "title": "complete", + "intro": "Set this to false to draft a base outline of the pattern, rather than a fully detailed pattern. This has different uses, such as generating patterns to be cut out with a laser cutter.", + "order": "complete", "slug": "reference/settings/complete" }, "reference/settings/embed": { "title": "embed", "intro": "Set to true to make SVG output suitable for embedding in a web page.", - "slug": "reference/settings/embed", - "order": "embed" + "order": "embed", + "slug": "reference/settings/embed" }, "reference/settings": { "title": "Settings", - "for": "developers", - "about": "Documents all the settings your pattern can receive, including the pattern options, measurmeents, and design options", "intro": "Settings are what the user passes to your pattern at run-time.", - "slug": "reference/settings", - "order": "Settings" + "order": "Settings", + "slug": "reference/settings" }, "reference/settings/idprefix": { "title": "idPrefix", "intro": "Prefixes all IDs in the SVG with the string you pass it. (defaults to fs- ).", - "slug": "reference/settings/idprefix", - "order": "idPrefix" + "order": "idPrefix", + "slug": "reference/settings/idprefix" }, "reference/settings/layout": { + "title": "layout", + "intro": "Allows you to control the way pattern parts are laid out on the pattern. There are 3 scenarios:", + "order": "layout", "slug": "reference/settings/layout" }, "reference/settings/locale": { "title": "locale", "intro": "A 2-letter language code that indicates what language the user wants.", - "slug": "reference/settings/locale", - "order": "locale" + "order": "locale", + "slug": "reference/settings/locale" }, "reference/settings/margin": { "title": "margin", "intro": "Allows you to specify a part margin (in mm). The default is 2mm. Each part will have this margin applied. This means that:", - "slug": "reference/settings/margin", - "order": "margin" + "order": "margin", + "slug": "reference/settings/margin" }, "reference/settings/measurements": { "title": "measurements", "intro": "The measurements to draft for. The pattern configuration lists all required measurements.", - "slug": "reference/settings/measurements", - "order": "measurements" + "order": "measurements", + "slug": "reference/settings/measurements" }, "reference/settings/only": { "title": "only", "intro": "Allows you to specify one or more parts to draft/render, rather than the entire pattern.", - "slug": "reference/settings/only", - "order": "only" + "order": "only", + "slug": "reference/settings/only" }, "reference/settings/options": { "title": "options", "intro": "The pattern options as specified in the pattern configuration.", - "slug": "reference/settings/options", - "order": "options" + "order": "options", + "slug": "reference/settings/options" }, "reference/settings/paperless": { "title": "paperless", "intro": "Set this to true to draft a paperless pattern. The default is false .", - "slug": "reference/settings/paperless", - "order": "paperless" + "order": "paperless", + "slug": "reference/settings/paperless" }, "reference/settings/sa": { "title": "sa", "intro": "The seam allowance in mm.", - "slug": "reference/settings/sa", - "order": "sa" + "order": "sa", + "slug": "reference/settings/sa" }, "reference/settings/units": { "title": "units", "intro": "Either metric (the default) or imperial .", - "slug": "reference/settings/units", - "order": "units" + "order": "units", + "slug": "reference/settings/units" }, "reference/snippets/bnotch": { + "title": "bnotch", + "intro": "The bnotch snippet is intended for notches at the back, or when you need an alternative to the default notch .", + "order": "bnotch", "slug": "reference/snippets/bnotch" }, "reference/snippets/button": { + "title": "button", + "intro": "The button snippet is used to mark button placement and is provided by plugin-buttons .", + "order": "button", "slug": "reference/snippets/button" }, "reference/snippets/buttonhole-end": { + "title": "buttonhole-end", + "intro": "The buttonhole-end snippet is used to mark buttonhole placement and is provided by plugin-buttons .", + "order": "buttonhole-end", "slug": "reference/snippets/buttonhole-end" }, "reference/snippets/buttonhole-start": { + "title": "buttonhole-start", + "intro": "The buttonhole-start snippet is used to mark buttonhole placement and is provided by plugin-buttons .", + "order": "buttonhole-start", "slug": "reference/snippets/buttonhole-start" }, "reference/snippets/buttonhole": { + "title": "buttonhole", + "intro": "The buttonhole snippet is used to mark buttonhole placement and is provided by plugin-buttons .", + "order": "buttonhole", "slug": "reference/snippets/buttonhole" }, "reference/snippets": { "title": "Snippets", - "for": "developers", - "about": "Complete list of all the available snippets", "intro": "Snippets are provided by plugins. Follow the links below for more info on and an example of a specific snippet:", - "slug": "reference/snippets", - "order": "Snippets" + "order": "Snippets", + "slug": "reference/snippets" }, "reference/snippets/logo": { + "title": "logo", + "intro": "The logo snippet inserts the FreeSewing logo. It is provided by plugin-logo .", + "order": "logo", "slug": "reference/snippets/logo" }, "reference/snippets/notch": { + "title": "notch", + "intro": "The notch snippet is intended for notches and is provided by plugin-theme .", + "order": "notch", "slug": "reference/snippets/notch" }, "reference/snippets/snap-socket": { "title": "snap-socket", "intro": "The snap-socket snippet is used to mark the socket part of a snap button.", - "slug": "reference/snippets/snap-socket", - "order": "snap-socket" + "order": "snap-socket", + "slug": "reference/snippets/snap-socket" }, "reference/snippets/snap-stud": { "title": "snap-stud", "intro": "The snap-stud snippet is used to mark the stud part of a snap button.", - "slug": "reference/snippets/snap-stud", - "order": "snap-stud" + "order": "snap-stud", + "slug": "reference/snippets/snap-stud" }, "translators/empty": { "title": " ", "intro": "This page was intentionally left blank.", - "slug": "translators/empty", - "order": " " + "order": " ", + "slug": "translators/empty" }, "translators": { "title": "For translators", - "order": "1140For translators", "intro": "Freesewing is proudly multilingual. We currently support 5 languges:", + "order": "1140For translators", "slug": "translators" }, "tutorials": { "title": "Tutorials", - "order": "1010Tutorials", "intro": "FIXME_no_intro", + "order": "1010Tutorials", "slug": "tutorials" }, "tutorials/getting-started-linux/create-freesewing-pattern": { "title": "Setting up the FreeSewing development environment", - "order": "40Setting up the FreeSewing development environment", "intro": "FreeSewing provides a development environment to help you design and develop patterns.", + "order": "40Setting up the FreeSewing development environment", "slug": "tutorials/getting-started-linux/create-freesewing-pattern" }, "tutorials/getting-started-linux": { + "title": "Getting started on Linux", + "intro": "In this tutorial, we will setup Node JS and initialize the FreeSewing development environment on a Linux system.", + "order": "10Getting started on Linux", "slug": "tutorials/getting-started-linux" }, "tutorials/getting-started-linux/installing-node": { "title": "Installing Node", - "order": "20Installing Node", "intro": "Now we will use nvm to install Node JS. Run the following command:", + "order": "20Installing Node", "slug": "tutorials/getting-started-linux/installing-node" }, "tutorials/getting-started-linux/installing-nvm": { "title": "Installing nvm", - "order": "10Installing nvm", "intro": "FreeSewing is built with Node.js , a JavaScript runtime.", + "order": "10Installing nvm", "slug": "tutorials/getting-started-linux/installing-nvm" }, "tutorials/getting-started-linux/node-versions": { + "title": "Using a different Node version", + "intro": "Now that you've got Node setup, we can start setting up the FreeSewing development environment.", + "order": "30Using a different Node version", "slug": "tutorials/getting-started-linux/node-versions" }, "tutorials/getting-started-linux/start-development-environment": { + "title": "Start the development environment", + "intro": "You will have a new folder that has the name you picked for your pattern. If you chose test , you will have a test folder. If you chose banana , you'll have a banana folder.", + "order": "50Start the development environment", "slug": "tutorials/getting-started-linux/start-development-environment" }, "tutorials/getting-started-mac/create-freesewing-pattern": { "title": "Setting up the FreeSewing development environment", - "order": "50Setting up the FreeSewing development environment", "intro": "FreeSewing provides a development environment to help you design and develop patterns.", + "order": "50Setting up the FreeSewing development environment", "slug": "tutorials/getting-started-mac/create-freesewing-pattern" }, "tutorials/getting-started-mac": { + "title": "Getting started on Mac", + "intro": "In this tutorial, we will setup Node JS and initialize the FreeSewing development environment on a Mac system running OS X.", + "order": "20Getting started on Mac", "slug": "tutorials/getting-started-mac" }, "tutorials/getting-started-mac/installing-node": { "title": "Installing Node", - "order": "30Installing Node", "intro": "Now we will use nvm to install Node JS. Run the following command:", + "order": "30Installing Node", "slug": "tutorials/getting-started-mac/installing-node" }, "tutorials/getting-started-mac/installing-nvm": { "title": "Installing nvm", - "order": "20Installing nvm", "intro": "FreeSewing is built with Node.js , a JavaScript runtime.", + "order": "20Installing nvm", "slug": "tutorials/getting-started-mac/installing-nvm" }, "tutorials/getting-started-mac/installing-xcode": { + "title": "Installing the Xcode command line tools", + "intro": "Before we can get started, we need some basic tools for development. They are bundled in the so let's install that first.", + "order": "10Installing the Xcode command line tools", "slug": "tutorials/getting-started-mac/installing-xcode" }, "tutorials/getting-started-mac/node-versions": { + "title": "Using a different Node version", + "intro": "Now that you've got Node setup, we can start setting up the FreeSewing development environment.", + "order": "40Using a different Node version", "slug": "tutorials/getting-started-mac/node-versions" }, "tutorials/getting-started-mac/start-development-environment": { + "title": "Start the development environment", + "intro": "You will have a new folder that has the name you picked for your pattern. If you chose test , you will have a test folder. If you chose banana , you'll have a banana folder.", + "order": "60Start the development environment", "slug": "tutorials/getting-started-mac/start-development-environment" }, "tutorials/getting-started-windows": { "title": "Getting started on Windows", - "order": "30Getting started on Windows", - "for": "developers", - "icons": [ - "start", - "windows" - ], - "about": "You'll learn how to setup Node JS on a Windows system, \nas well as initialize the FreeSewing development environment.\n", - "goals": [ - "Install Node JS using nvm", - "Chosing a Node version to use", - "Initializing the FreeSewing development environment", - "Starting the FreeSewing development environment" - ], "intro": "If you already have a working WSL environment and VSCode Remote configured you can follow the getting started on Linux guide or skip ahead to Setting up the FreeSewing development environment (WSL) . If not, the following process is very similar but has some differences to avoid quirks specific to this environment.", + "order": "30Getting started on Windows", "slug": "tutorials/getting-started-windows" }, "tutorials/pattern-design/adding-measurements": { + "title": "Adding measurements", + "intro": "FreeSewing is all about sewing patterns; we are going to draft our pattern according to the measurements provided to us.", + "order": "130Adding measurements", "slug": "tutorials/pattern-design/adding-measurements" }, "tutorials/pattern-design/adding-options": { + "title": "Adding options", + "intro": "You know what your bib should look like, and you have the measurement to work with. But there's still a number of choices you have to make:", + "order": "140Adding options", "slug": "tutorials/pattern-design/adding-options" }, "tutorials/pattern-design/avoiding-overlap": { + "title": "Avoiding overlap", + "intro": "While you've only drawn the end of one strap, it's pretty obvious they overlap. Which is a big no-no in sewing patterns, so you're going to have to address that.", + "order": "220Avoiding overlap", "slug": "tutorials/pattern-design/avoiding-overlap" }, "tutorials/pattern-design/completing-the-neck-opening": { + "title": "Completing the neck opening", + "intro": "We've constructed the perfectly sized quarter neck, and we're going to use this to create our complete neck path by flipping and mirroring it.", + "order": "180Completing the neck opening", "slug": "tutorials/pattern-design/completing-the-neck-opening" }, "tutorials/pattern-design/completing-your-pattern": { "title": "Completing your pattern", - "order": "260Completing your pattern", "intro": "When we started out, we said a good part boilerplate looks like this:", + "order": "260Completing your pattern", "slug": "tutorials/pattern-design/completing-your-pattern" }, "tutorials/pattern-design/conclusion": { + "title": "Conclusion", + "intro": "Congratulations, you have created your first pattern. And while it's arguably rather simple, you have learned a bunch of things along the way. Let's list some of the things you've learned:", + "order": "280Conclusion", "slug": "tutorials/pattern-design/conclusion" }, "tutorials/pattern-design/constructing-the-neck-opening": { + "title": "Constructing the neck opening", + "intro": "Your goal is to construct a slightly oval neck opening that has a circumference that is the head measurements multiplied by the neckRatio option.", + "order": "160Constructing the neck opening", "slug": "tutorials/pattern-design/constructing-the-neck-opening" }, "tutorials/pattern-design/create-freesewing-pattern": { "title": "Setting up the development environment", + "intro": "Open a terminal and enter the following command:", "order": "100Setting up the development environment", - "intro": "If you already set up the FreeSewing development environment and created a pattern, you can use that pattern and skip these steps. You can move on to Your first part .", "slug": "tutorials/pattern-design/create-freesewing-pattern" }, "tutorials/pattern-design/creating-the-closure": { + "title": "Creating the closure", + "intro": "Things are starting to look good, but we can't fit the bib over the baby's head like this. So we must create a closure. We'll let the straps overlap at the end, and put in a snap.", + "order": "210Creating the closure", "slug": "tutorials/pattern-design/creating-the-closure" }, "tutorials/pattern-design/drawing-the-bib-outline": { "title": "Drawing the bib outline", - "order": "190Drawing the bib outline", "intro": "With our neck opening in place, let's draw the basic outline of our bib:", + "order": "190Drawing the bib outline", "slug": "tutorials/pattern-design/drawing-the-bib-outline" }, "tutorials/pattern-design/drawing-the-straps": { + "title": "Drawing the straps", + "intro": "All we have to do now is flip a bunch of points on the other side, and create one single path that follows our bib outline.", + "order": "230Drawing the straps", "slug": "tutorials/pattern-design/drawing-the-straps" }, "tutorials/pattern-design": { + "title": "Pattern design tutorial", + "intro": "Welcome to the FreeSewing tutorial, where you'll learn how to create a made-to-measure sewing pattern, start to finish.", + "order": "50Pattern design tutorial", "slug": "tutorials/pattern-design" }, "tutorials/pattern-design/fitting-the-neck-opening": { "title": "Fitting the neck opening", - "order": "170Fitting the neck opening", "intro": "Here's how we'll make sure the neck opening is :", + "order": "170Fitting the neck opening", "slug": "tutorials/pattern-design/fitting-the-neck-opening" }, "tutorials/pattern-design/paperless-bib": { "title": "Making your pattern paperless", - "order": "270Making your pattern paperless", "intro": "Users can request paperless patterns by setting the paperless setting to true .", + "order": "270Making your pattern paperless", "slug": "tutorials/pattern-design/paperless-bib" }, "tutorials/pattern-design/part-structure": { + "title": "Structure of a part", + "intro": "Let's get rid of the example box first. Open src/bib.js and make sure it looks like this:", + "order": "150Structure of a part", "slug": "tutorials/pattern-design/part-structure" }, "tutorials/pattern-design/rounding-the-corners": { "title": "Rounding the corners", - "order": "240Rounding the corners", "intro": "We already know how to round corners, let the round macro do it:", + "order": "240Rounding the corners", "slug": "tutorials/pattern-design/rounding-the-corners" }, "tutorials/pattern-design/shaping-the-straps": { + "title": "Shaping the straps", + "intro": "Our straps should follow the neck opening, which isn't that hard to do. We just need to keep the control points of our curves at similar proportions. Which means, halfway between the start of the curve, and the corner of our rectangle.", + "order": "200Shaping the straps", "slug": "tutorials/pattern-design/shaping-the-straps" }, "tutorials/pattern-design/testing-your-pattern": { + "title": "Testing your pattern", + "intro": "With the basic outline of your pattern ready, now would be a good time to test it to see how well it adapts to different measurements, and the range of options we provided.", + "order": "250Testing your pattern", "slug": "tutorials/pattern-design/testing-your-pattern" }, "tutorials/pattern-design/your-first-part": { "title": "Your first part", - "order": "120Your first part", "intro": "Much like garments themselves, patterns are made up of .", + "order": "120Your first part", "slug": "tutorials/pattern-design/your-first-part" } } \ No newline at end of file diff --git a/packages/freesewing.dev/prebuild/navigation.js b/packages/freesewing.dev/prebuild/navigation.js index f28018d9b30..6a7358724c4 100644 --- a/packages/freesewing.dev/prebuild/navigation.js +++ b/packages/freesewing.dev/prebuild/navigation.js @@ -1,1637 +1,1347 @@ export default { "en": { "contributors": { - "_title": "For contributors", - "_linktitle": "For contributors", - "_slug": "contributors", - "_order": "1110For contributors", - "_children": { - "contributors/help": "contributors/help", - "contributors/terms": "contributors/terms", - "contributors/ways-to-contribute": "contributors/ways-to-contribute" - }, + "__title": "For contributors", + "__linktitle": "For contributors", + "__slug": "contributors", + "__order": "1110For contributors", "help": { - "_slug": "contributors/help", - "_children": {} + "__title": "Where to get help", + "__linktitle": "Where to get help", + "__slug": "contributors/help", + "__order": "Where to get help" }, "terms": { - "_slug": "contributors/terms", - "_children": { - "Express": "contributors/terms/express", - "freesewing.dev": "contributors/terms/freesewing.dev", - "freesewing.org": "contributors/terms/freesewing.org", - "FreeSewing": "contributors/terms/freesewing", - "Frontend": "contributors/terms/frontend", - "Gatsby": "contributors/terms/gatsby", - "contributors/terms/i18n": "contributors/terms/i18n", - "contributors/terms/issue": "contributors/terms/issue", - "contributors/terms/javascript": "contributors/terms/javascript", - "Made-to-measure": "contributors/terms/made-to-measure", - "contributors/terms/markdown": "contributors/terms/markdown", - "contributors/terms/monorepo": "contributors/terms/monorepo", - "Node": "contributors/terms/node", - "contributors/terms/parametric-pattern-design": "contributors/terms/parametric-pattern-design", - "Patron": "contributors/terms/patron", - "Plugin": "contributors/terms/plugin", - "Pull request": "contributors/terms/pull-request", - "React": "contributors/terms/react", - "Repo": "contributors/terms/repo", - "Repository": "contributors/terms/repository", - "contributors/terms/tiler": "contributors/terms/tiler", - "Translator": "contributors/terms/translator" - }, + "__title": "Terminology", + "__linktitle": "Terminology", + "__slug": "contributors/terms", + "__order": "Terminology", "express": { - "_title": "Express", - "_linktitle": "Express", - "_slug": "contributors/terms/express", - "_order": "Express", - "_children": {} + "__title": "Express", + "__linktitle": "Express", + "__slug": "contributors/terms/express", + "__order": "Express" }, "freesewing.dev": { - "_title": "freesewing.dev", - "_linktitle": "freesewing.dev", - "_slug": "contributors/terms/freesewing.dev", - "_order": "freesewing.dev", - "_children": {} + "__title": "freesewing.dev", + "__linktitle": "freesewing.dev", + "__slug": "contributors/terms/freesewing.dev", + "__order": "freesewing.dev" }, "freesewing.org": { - "_title": "freesewing.org", - "_linktitle": "freesewing.org", - "_slug": "contributors/terms/freesewing.org", - "_order": "freesewing.org", - "_children": {} + "__title": "freesewing.org", + "__linktitle": "freesewing.org", + "__slug": "contributors/terms/freesewing.org", + "__order": "freesewing.org" }, "freesewing": { - "_title": "FreeSewing", - "_linktitle": "FreeSewing", - "_slug": "contributors/terms/freesewing", - "_order": "FreeSewing", - "_children": {} + "__title": "FreeSewing", + "__linktitle": "FreeSewing", + "__slug": "contributors/terms/freesewing", + "__order": "FreeSewing" }, "frontend": { - "_title": "Frontend", - "_linktitle": "Frontend", - "_slug": "contributors/terms/frontend", - "_order": "Frontend", - "_children": {} + "__title": "Frontend", + "__linktitle": "Frontend", + "__slug": "contributors/terms/frontend", + "__order": "Frontend" }, "gatsby": { - "_title": "Gatsby", - "_linktitle": "Gatsby", - "_slug": "contributors/terms/gatsby", - "_order": "Gatsby", - "_children": {} + "__title": "Gatsby", + "__linktitle": "Gatsby", + "__slug": "contributors/terms/gatsby", + "__order": "Gatsby" }, "i18n": { - "_slug": "contributors/terms/i18n", - "_children": {} + "__title": "i18n", + "__linktitle": "i18n", + "__slug": "contributors/terms/i18n", + "__order": "i18n" }, "issue": { - "_slug": "contributors/terms/issue", - "_children": {} + "__title": "Issue", + "__linktitle": "Issue", + "__slug": "contributors/terms/issue", + "__order": "Issue" }, "javascript": { - "_slug": "contributors/terms/javascript", - "_children": {} + "__title": "Javascript", + "__linktitle": "Javascript", + "__slug": "contributors/terms/javascript", + "__order": "Javascript" }, "made-to-measure": { - "_title": "Made-to-measure", - "_linktitle": "Made-to-measure", - "_slug": "contributors/terms/made-to-measure", - "_order": "Made-to-measure", - "_children": {} + "__title": "Made-to-measure", + "__linktitle": "Made-to-measure", + "__slug": "contributors/terms/made-to-measure", + "__order": "Made-to-measure" }, "markdown": { - "_slug": "contributors/terms/markdown", - "_children": {} + "__title": "Markdown", + "__linktitle": "Markdown", + "__slug": "contributors/terms/markdown", + "__order": "Markdown" }, "monorepo": { - "_slug": "contributors/terms/monorepo", - "_children": {} + "__title": "Monorepo", + "__linktitle": "Monorepo", + "__slug": "contributors/terms/monorepo", + "__order": "Monorepo" }, "node": { - "_title": "Node", - "_linktitle": "Node", - "_slug": "contributors/terms/node", - "_order": "Node", - "_children": {} + "__title": "Node", + "__linktitle": "Node", + "__slug": "contributors/terms/node", + "__order": "Node" }, "parametric-pattern-design": { - "_slug": "contributors/terms/parametric-pattern-design", - "_children": {} + "__title": "Parametric pattern design", + "__linktitle": "Parametric pattern design", + "__slug": "contributors/terms/parametric-pattern-design", + "__order": "Parametric pattern design" }, "patron": { - "_title": "Patron", - "_linktitle": "Patron", - "_slug": "contributors/terms/patron", - "_order": "Patron", - "_children": {} + "__title": "Patron", + "__linktitle": "Patron", + "__slug": "contributors/terms/patron", + "__order": "Patron" }, "plugin": { - "_title": "Plugin", - "_linktitle": "Plugin", - "_slug": "contributors/terms/plugin", - "_order": "Plugin", - "_children": {} + "__title": "Plugin", + "__linktitle": "Plugin", + "__slug": "contributors/terms/plugin", + "__order": "Plugin" }, "pull-request": { - "_title": "Pull request", - "_linktitle": "Pull request", - "_slug": "contributors/terms/pull-request", - "_order": "Pull request", - "_children": {} + "__title": "Pull request", + "__linktitle": "Pull request", + "__slug": "contributors/terms/pull-request", + "__order": "Pull request" }, "react": { - "_title": "React", - "_linktitle": "React", - "_slug": "contributors/terms/react", - "_order": "React", - "_children": {} + "__title": "React", + "__linktitle": "React", + "__slug": "contributors/terms/react", + "__order": "React" }, "repo": { - "_title": "Repo", - "_linktitle": "Repo", - "_slug": "contributors/terms/repo", - "_order": "Repo", - "_children": {} + "__title": "Repo", + "__linktitle": "Repo", + "__slug": "contributors/terms/repo", + "__order": "Repo" }, "repository": { - "_title": "Repository", - "_linktitle": "Repository", - "_slug": "contributors/terms/repository", - "_order": "Repository", - "_children": {} + "__title": "Repository", + "__linktitle": "Repository", + "__slug": "contributors/terms/repository", + "__order": "Repository" }, "tiler": { - "_slug": "contributors/terms/tiler", - "_children": {} + "__title": "Tiler", + "__linktitle": "Tiler", + "__slug": "contributors/terms/tiler", + "__order": "Tiler" }, "translator": { - "_title": "Translator", - "_linktitle": "Translator", - "_slug": "contributors/terms/translator", - "_order": "Translator", - "_children": {} + "__title": "Translator", + "__linktitle": "Translator", + "__slug": "contributors/terms/translator", + "__order": "Translator" } }, "ways-to-contribute": { - "_slug": "contributors/ways-to-contribute", - "_children": { - "contributors/ways-to-contribute/illustrations": "contributors/ways-to-contribute/illustrations", - "contributors/ways-to-contribute/language-ambassador": "contributors/ways-to-contribute/language-ambassador", - "Pattern ambassador": "contributors/ways-to-contribute/pattern-ambassador", - "Pattern testing": "contributors/ways-to-contribute/pattern-testing", - "Project management": "contributors/ways-to-contribute/project-management", - "contributors/ways-to-contribute/proofreading": "contributors/ways-to-contribute/proofreading", - "contributors/ways-to-contribute/report-bugs": "contributors/ways-to-contribute/report-bugs", - "Showcase our patterns": "contributors/ways-to-contribute/showcase-our-patterns", - "Technical writing": "contributors/ways-to-contribute/technical-writing", - "contributors/ways-to-contribute/translation": "contributors/ways-to-contribute/translation", - "Triage issues": "contributors/ways-to-contribute/triage-issues", - "UI / UX Webdesign": "contributors/ways-to-contribute/webdesign" - }, + "__title": "Ways to contribute", + "__linktitle": "Ways to contribute", + "__slug": "contributors/ways-to-contribute", + "__order": "Ways to contribute", "illustrations": { - "_slug": "contributors/ways-to-contribute/illustrations", - "_children": {} + "__title": "Make illustrations", + "__linktitle": "Make illustrations", + "__slug": "contributors/ways-to-contribute/illustrations", + "__order": "Make illustrations" }, "language-ambassador": { - "_slug": "contributors/ways-to-contribute/language-ambassador", - "_children": {} + "__title": "Language ambassador", + "__linktitle": "Language ambassador", + "__slug": "contributors/ways-to-contribute/language-ambassador", + "__order": "Language ambassador" }, "pattern-ambassador": { - "_title": "Pattern ambassador", - "_linktitle": "Pattern ambassador", - "_slug": "contributors/ways-to-contribute/pattern-ambassador", - "_order": "Pattern ambassador", - "_children": {} + "__title": "Pattern ambassador", + "__linktitle": "Pattern ambassador", + "__slug": "contributors/ways-to-contribute/pattern-ambassador", + "__order": "Pattern ambassador" }, "pattern-testing": { - "_title": "Pattern testing", - "_linktitle": "Pattern testing", - "_slug": "contributors/ways-to-contribute/pattern-testing", - "_order": "Pattern testing", - "_children": {} + "__title": "Pattern testing", + "__linktitle": "Pattern testing", + "__slug": "contributors/ways-to-contribute/pattern-testing", + "__order": "Pattern testing" }, "project-management": { - "_title": "Project management", - "_linktitle": "Project management", - "_slug": "contributors/ways-to-contribute/project-management", - "_order": "Project management", - "_children": {} + "__title": "Project management", + "__linktitle": "Project management", + "__slug": "contributors/ways-to-contribute/project-management", + "__order": "Project management" }, "proofreading": { - "_slug": "contributors/ways-to-contribute/proofreading", - "_children": {} + "__title": "Proofreading", + "__linktitle": "Proofreading", + "__slug": "contributors/ways-to-contribute/proofreading", + "__order": "Proofreading" }, "report-bugs": { - "_slug": "contributors/ways-to-contribute/report-bugs", - "_children": {} + "__title": "Report bugs", + "__linktitle": "Report bugs", + "__slug": "contributors/ways-to-contribute/report-bugs", + "__order": "Report bugs" }, "showcase-our-patterns": { - "_title": "Showcase our patterns", - "_linktitle": "Showcase our patterns", - "_slug": "contributors/ways-to-contribute/showcase-our-patterns", - "_order": "Showcase our patterns", - "_children": {} + "__title": "Showcase our patterns", + "__linktitle": "Showcase our patterns", + "__slug": "contributors/ways-to-contribute/showcase-our-patterns", + "__order": "Showcase our patterns" }, "technical-writing": { - "_title": "Technical writing", - "_linktitle": "Technical writing", - "_slug": "contributors/ways-to-contribute/technical-writing", - "_order": "Technical writing", - "_children": { - "Writing for freesewing.org": "contributors/ways-to-contribute/technical-writing/patterns" - }, + "__title": "Technical writing", + "__linktitle": "Technical writing", + "__slug": "contributors/ways-to-contribute/technical-writing", + "__order": "Technical writing", "patterns": { - "_title": "Writing for freesewing.org", - "_linktitle": "Writing for freesewing.org", - "_slug": "contributors/ways-to-contribute/technical-writing/patterns", - "_order": "Writing for freesewing.org", - "_children": {} + "__title": "Writing for freesewing.org", + "__linktitle": "Writing for freesewing.org", + "__slug": "contributors/ways-to-contribute/technical-writing/patterns", + "__order": "Writing for freesewing.org" } }, "translation": { - "_slug": "contributors/ways-to-contribute/translation", - "_children": {} + "__title": "Translation", + "__linktitle": "Translation", + "__slug": "contributors/ways-to-contribute/translation", + "__order": "Translation" }, "triage-issues": { - "_title": "Triage issues", - "_linktitle": "Triage issues", - "_slug": "contributors/ways-to-contribute/triage-issues", - "_order": "Triage issues", - "_children": {} + "__title": "Triage issues", + "__linktitle": "Triage issues", + "__slug": "contributors/ways-to-contribute/triage-issues", + "__order": "Triage issues" }, "webdesign": { - "_title": "UI / UX Webdesign", - "_linktitle": "UI / UX Webdesign", - "_slug": "contributors/ways-to-contribute/webdesign", - "_order": "UI / UX Webdesign", - "_children": {} + "__title": "UI / UX Webdesign", + "__linktitle": "UI / UX Webdesign", + "__slug": "contributors/ways-to-contribute/webdesign", + "__order": "UI / UX Webdesign" } } }, - "_children": { - "1110For contributors": "contributors", - "1120For developers": "developers", - "1130For editors": "editors", - "1020Guides": "guides", - "1020Howtos": "howtos", - "1040Reference": "reference", - "1140For translators": "translators", - "1010Tutorials": "tutorials" - }, "developers": { - "_title": "For developers", - "_linktitle": "For developers", - "_slug": "developers", - "_order": "1120For developers", - "_children": { - "The freesewing.org website": "developers/org", - "The freesewing on-demand tiler": "developers/svg2pdf", - "Our tile command line tool": "developers/tiler" - }, + "__title": "For developers", + "__linktitle": "For developers", + "__slug": "developers", + "__order": "1120For developers", "org": { - "_title": "The freesewing.org website", - "_linktitle": "The freesewing.org website", - "_slug": "developers/org", - "_order": "The freesewing.org website", - "_children": {} + "__title": "The freesewing.org website", + "__linktitle": "The freesewing.org website", + "__slug": "developers/org", + "__order": "The freesewing.org website" }, "svg2pdf": { - "_title": "The freesewing on-demand tiler", - "_linktitle": "The freesewing on-demand tiler", - "_slug": "developers/svg2pdf", - "_order": "The freesewing on-demand tiler", - "_children": {} + "__title": "The freesewing on-demand tiler", + "__linktitle": "The freesewing on-demand tiler", + "__slug": "developers/svg2pdf", + "__order": "The freesewing on-demand tiler" }, "tiler": { - "_title": "Our tile command line tool", - "_linktitle": "Our tile command line tool", - "_slug": "developers/tiler", - "_order": "Our tile command line tool", - "_children": {} + "__title": "Our tile command line tool", + "__linktitle": "Our tile command line tool", + "__slug": "developers/tiler", + "__order": "Our tile command line tool" } }, "editors": { - "_title": "For editors", - "_linktitle": "For editors", - "_slug": "editors", - "_order": "1130For editors", - "_children": { - "Common tasks for editors": "editors/howtos", - "editors/markdown": "editors/markdown", - "910Style guide": "editors/style" - }, + "__title": "For editors", + "__linktitle": "For editors", + "__slug": "editors", + "__order": "1130For editors", "howtos": { - "_title": "Common tasks for editors", - "_linktitle": "Common tasks for editors", - "_slug": "editors/howtos", - "_order": "Common tasks for editors", - "_children": { - "editors/howtos/frontmatter": "editors/howtos/frontmatter", - "Adding a showcase on freesewing.org": "editors/howtos/showcase" - }, + "__title": "Common tasks for editors", + "__linktitle": "Common tasks for editors", + "__slug": "editors/howtos", + "__order": "Common tasks for editors", "frontmatter": { - "_slug": "editors/howtos/frontmatter", - "_children": { - "editors/howtos/frontmatter/lists": "editors/howtos/frontmatter/lists", - "editors/howtos/frontmatter/multi-line": "editors/howtos/frontmatter/multi-line", - "editors/howtos/frontmatter/structure": "editors/howtos/frontmatter/structure" - }, + "__title": "Working with frontmatter", + "__linktitle": "Working with frontmatter", + "__slug": "editors/howtos/frontmatter", + "__order": "Working with frontmatter", "lists": { - "_slug": "editors/howtos/frontmatter/lists", - "_children": {} + "__title": "Lists or arrays", + "__linktitle": "Lists or arrays", + "__slug": "editors/howtos/frontmatter/lists", + "__order": "30Lists or arrays" }, "multi-line": { - "_slug": "editors/howtos/frontmatter/multi-line", - "_children": {} + "__title": "Mult-line text", + "__linktitle": "Mult-line text", + "__slug": "editors/howtos/frontmatter/multi-line", + "__order": "40Mult-line text" }, "structure": { - "_slug": "editors/howtos/frontmatter/structure", - "_children": {} + "__title": "Structure", + "__linktitle": "Structure", + "__slug": "editors/howtos/frontmatter/structure", + "__order": "20Structure" } }, "showcase": { - "_title": "Adding a showcase on freesewing.org", - "_linktitle": "Adding a showcase on freesewing.org", - "_slug": "editors/howtos/showcase", - "_order": "Adding a showcase on freesewing.org", - "_children": {} + "__title": "Adding a showcase on freesewing.org", + "__linktitle": "Adding a showcase on freesewing.org", + "__slug": "editors/howtos/showcase", + "__order": "Adding a showcase on freesewing.org" } }, "markdown": { - "_slug": "editors/markdown", - "_children": { - "40Headings": "editors/markdown/headings", - "editors/markdown/images": "editors/markdown/images", - "30Italics and bold": "editors/markdown/italic-and-bold", - "editors/markdown/line-breaks": "editors/markdown/line-breaks", - "60Links": "editors/markdown/links", - "50Lists": "editors/markdown/lists", - "70Tables": "editors/markdown/tables", - "10Text and paragraphs": "editors/markdown/text-and-paragraphs" - }, + "__title": "Markdown guide", + "__linktitle": "Markdown guide", + "__slug": "editors/markdown", + "__order": "900Markdown guide", "headings": { - "_title": "Headings", - "_linktitle": "Headings", - "_slug": "editors/markdown/headings", - "_order": "40Headings", - "_children": {} + "__title": "Headings", + "__linktitle": "Headings", + "__slug": "editors/markdown/headings", + "__order": "40Headings" }, "images": { - "_slug": "editors/markdown/images", - "_children": {} + "__title": "Images", + "__linktitle": "Images", + "__slug": "editors/markdown/images", + "__order": "70Images" }, "italic-and-bold": { - "_title": "Italics and bold", - "_linktitle": "Italics and bold", - "_slug": "editors/markdown/italic-and-bold", - "_order": "30Italics and bold", - "_children": {} + "__title": "Italics and bold", + "__linktitle": "Italics and bold", + "__slug": "editors/markdown/italic-and-bold", + "__order": "30Italics and bold" }, "line-breaks": { - "_slug": "editors/markdown/line-breaks", - "_children": {} + "__title": "Line breaks", + "__linktitle": "Line breaks", + "__slug": "editors/markdown/line-breaks", + "__order": "20Line breaks" }, "links": { - "_title": "Links", - "_linktitle": "Links", - "_slug": "editors/markdown/links", - "_order": "60Links", - "_children": {} + "__title": "Links", + "__linktitle": "Links", + "__slug": "editors/markdown/links", + "__order": "60Links" }, "lists": { - "_title": "Lists", - "_linktitle": "Lists", - "_slug": "editors/markdown/lists", - "_order": "50Lists", - "_children": {} + "__title": "Lists", + "__linktitle": "Lists", + "__slug": "editors/markdown/lists", + "__order": "50Lists" }, "tables": { - "_title": "Tables", - "_linktitle": "Tables", - "_slug": "editors/markdown/tables", - "_order": "70Tables", - "_children": {} + "__title": "Tables", + "__linktitle": "Tables", + "__slug": "editors/markdown/tables", + "__order": "70Tables" }, "text-and-paragraphs": { - "_title": "Text and paragraphs", - "_linktitle": "Text and paragraphs", - "_slug": "editors/markdown/text-and-paragraphs", - "_order": "10Text and paragraphs", - "_children": {} + "__title": "Text and paragraphs", + "__linktitle": "Text and paragraphs", + "__slug": "editors/markdown/text-and-paragraphs", + "__order": "10Text and paragraphs" } }, "style": { - "_title": "Style guide", - "_linktitle": "Style guide", - "_slug": "editors/style", - "_order": "910Style guide", - "_children": { - "Typography": "editors/style/typography" - }, + "__title": "Style guide", + "__linktitle": "Style guide", + "__slug": "editors/style", + "__order": "910Style guide", "typography": { - "_title": "Typography", - "_linktitle": "Typography", - "_slug": "editors/style/typography", - "_order": "Typography", - "_children": { - "10Fonts": "editors/style/typography/fonts", - "30Headings": "editors/style/typography/headings", - "20Text and paragraphs": "editors/style/typography/text" - }, + "__title": "Typography", + "__linktitle": "Typography", + "__slug": "editors/style/typography", + "__order": "Typography", "fonts": { - "_title": "Fonts", - "_linktitle": "Fonts", - "_slug": "editors/style/typography/fonts", - "_order": "10Fonts", - "_children": {} + "__title": "Fonts", + "__linktitle": "Fonts", + "__slug": "editors/style/typography/fonts", + "__order": "10Fonts" }, "headings": { - "_title": "Headings", - "_linktitle": "Headings", - "_slug": "editors/style/typography/headings", - "_order": "30Headings", - "_children": {} + "__title": "Headings", + "__linktitle": "Headings", + "__slug": "editors/style/typography/headings", + "__order": "30Headings" }, "text": { - "_title": "Text and paragraphs", - "_linktitle": "Text and paragraphs", - "_slug": "editors/style/typography/text", - "_order": "20Text and paragraphs", - "_children": {} + "__title": "Text and paragraphs", + "__linktitle": "Text and paragraphs", + "__slug": "editors/style/typography/text", + "__order": "20Text and paragraphs" } } } }, "guides": { - "_title": "Guides", - "_linktitle": "Guides", - "_slug": "guides", - "_order": "1020Guides", - "_children": { - "guides/patterns": "guides/patterns", - "400Plugin guide": "guides/plugins", - "guides/prerequisites": "guides/prerequisites" - }, + "__title": "Guides", + "__linktitle": "Guides", + "__slug": "guides", + "__order": "1020Guides", "patterns": { - "_slug": "guides/patterns", - "_children": { - "guides/patterns/parts": "guides/patterns/parts", - "guides/patterns/paths": "guides/patterns/paths", - "guides/patterns/pattern": "guides/patterns/pattern", - "guides/patterns/points": "guides/patterns/points", - "guides/patterns/snippets": "guides/patterns/snippets", - "guides/patterns/store": "guides/patterns/store" - }, + "__title": "Pattern guide", + "__linktitle": "Pattern guide", + "__slug": "guides/patterns", + "__order": "200Pattern guide", "parts": { - "_slug": "guides/patterns/parts", - "_children": {} + "__title": "Parts", + "__linktitle": "Parts", + "__slug": "guides/patterns/parts", + "__order": "40Parts" }, "paths": { - "_slug": "guides/patterns/paths", - "_children": {} + "__title": "Paths", + "__linktitle": "Paths", + "__slug": "guides/patterns/paths", + "__order": "20Paths" }, "pattern": { - "_slug": "guides/patterns/pattern", - "_children": {} + "__title": "Pattern", + "__linktitle": "Pattern", + "__slug": "guides/patterns/pattern", + "__order": "80Pattern" }, "points": { - "_slug": "guides/patterns/points", - "_children": {} + "__title": "Points", + "__linktitle": "Points", + "__slug": "guides/patterns/points", + "__order": "10Points" }, "snippets": { - "_slug": "guides/patterns/snippets", - "_children": {} + "__title": "Snippets", + "__linktitle": "Snippets", + "__slug": "guides/patterns/snippets", + "__order": "20Snippets" }, "store": { - "_slug": "guides/patterns/store", - "_children": {} + "__title": "Store", + "__linktitle": "Store", + "__slug": "guides/patterns/store", + "__order": "70Store" } }, "plugins": { - "_title": "Plugin guide", - "_linktitle": "Plugin guide", - "_slug": "guides/plugins", - "_order": "400Plugin guide", - "_children": { - "60Hooks": "guides/plugins/hooks", - "guides/plugins/loading-build-time-plugins": "guides/plugins/loading-build-time-plugins", - "guides/plugins/loading-run-time-plugins": "guides/plugins/loading-run-time-plugins", - "90Macros": "guides/plugins/macros", - "50Plugin structure": "guides/plugins/plugin-structure", - "10Types of plugins": "guides/plugins/types-of-plugins", - "guides/plugins/using-hooks-more-than-once": "guides/plugins/using-hooks-more-than-once", - "guides/plugins/using-hooks-without-plugin": "guides/plugins/using-hooks-without-plugin", - "guides/plugins/using-hooks": "guides/plugins/using-hooks" - }, + "__title": "Plugin guide", + "__linktitle": "Plugin guide", + "__slug": "guides/plugins", + "__order": "400Plugin guide", "hooks": { - "_title": "Hooks", - "_linktitle": "Hooks", - "_slug": "guides/plugins/hooks", - "_order": "60Hooks", - "_children": {} + "__title": "Hooks", + "__linktitle": "Hooks", + "__slug": "guides/plugins/hooks", + "__order": "60Hooks" }, "loading-build-time-plugins": { - "_slug": "guides/plugins/loading-build-time-plugins", - "_children": {} + "__title": "Loading build-time plugins", + "__linktitle": "Loading build-time plugins", + "__slug": "guides/plugins/loading-build-time-plugins", + "__order": "20Loading build-time plugins" }, "loading-run-time-plugins": { - "_slug": "guides/plugins/loading-run-time-plugins", - "_children": {} + "__title": "Loading run-time plugins", + "__linktitle": "Loading run-time plugins", + "__slug": "guides/plugins/loading-run-time-plugins", + "__order": "40Loading run-time plugins" }, "macros": { - "_title": "Macros", - "_linktitle": "Macros", - "_slug": "guides/plugins/macros", - "_order": "90Macros", - "_children": {} + "__title": "Macros", + "__linktitle": "Macros", + "__slug": "guides/plugins/macros", + "__order": "90Macros" }, "plugin-structure": { - "_title": "Plugin structure", - "_linktitle": "Plugin structure", - "_slug": "guides/plugins/plugin-structure", - "_order": "50Plugin structure", - "_children": {} + "__title": "Plugin structure", + "__linktitle": "Plugin structure", + "__slug": "guides/plugins/plugin-structure", + "__order": "50Plugin structure" }, "types-of-plugins": { - "_title": "Types of plugins", - "_linktitle": "Types of plugins", - "_slug": "guides/plugins/types-of-plugins", - "_order": "10Types of plugins", - "_children": {} + "__title": "Types of plugins", + "__linktitle": "Types of plugins", + "__slug": "guides/plugins/types-of-plugins", + "__order": "10Types of plugins" }, "using-hooks-more-than-once": { - "_slug": "guides/plugins/using-hooks-more-than-once", - "_children": {} + "__title": "Using hooks more than once", + "__linktitle": "Using hooks more than once", + "__slug": "guides/plugins/using-hooks-more-than-once", + "__order": "80Using hooks more than once" }, "using-hooks-without-plugin": { - "_slug": "guides/plugins/using-hooks-without-plugin", - "_children": {} + "__title": "Using hooks without a plugin", + "__linktitle": "Using hooks without a plugin", + "__slug": "guides/plugins/using-hooks-without-plugin", + "__order": "85Using hooks without a plugin" }, "using-hooks": { - "_slug": "guides/plugins/using-hooks", - "_children": {} + "__title": "Using hooks", + "__linktitle": "Using hooks", + "__slug": "guides/plugins/using-hooks", + "__order": "70Using hooks" } }, "prerequisites": { - "_slug": "guides/prerequisites", - "_children": { - "guides/prerequisites/parametric-pattern-design": "guides/prerequisites/parametric-pattern-design", - "guides/prerequisites/svg": "guides/prerequisites/svg", - "guides/prerequisites/units": "guides/prerequisites/units" - }, + "__title": "Prerequisites", + "__linktitle": "Prerequisites", + "__slug": "guides/prerequisites", + "__order": "100Prerequisites", "parametric-pattern-design": { - "_slug": "guides/prerequisites/parametric-pattern-design", - "_children": {} + "__title": "Parametric pattern design", + "__linktitle": "Parametric pattern design", + "__slug": "guides/prerequisites/parametric-pattern-design", + "__order": "10Parametric pattern design" }, "svg": { - "_slug": "guides/prerequisites/svg", - "_children": {} + "__title": "SVG", + "__linktitle": "SVG", + "__slug": "guides/prerequisites/svg", + "__order": "20SVG" }, "units": { - "_slug": "guides/prerequisites/units", - "_children": {} + "__title": "Units", + "__linktitle": "Units", + "__slug": "guides/prerequisites/units", + "__order": "40Units" } } }, "howtos": { - "_title": "Howtos", - "_linktitle": "Howtos", - "_slug": "howtos", - "_order": "1020Howtos", - "_children": {} + "__title": "Howtos", + "__linktitle": "Howtos", + "__slug": "howtos", + "__order": "1020Howtos" }, "reference": { - "_title": "Reference", - "_linktitle": "Reference", - "_slug": "reference", - "_order": "1040Reference", - "_children": { - "Hooks API": "reference/hooks", - "reference/macros": "reference/macros", - "Packages": "reference/packages", - "Plugins": "reference/plugins", - "Repositories": "reference/repos", - "Settings": "reference/settings", - "Snippets": "reference/snippets" - }, + "__title": "Reference", + "__linktitle": "Reference", + "__slug": "reference", + "__order": "1040Reference", "hooks": { - "_title": "Hooks API", - "_linktitle": "Hooks API", - "_slug": "reference/hooks", - "_order": "Hooks API", - "_children": { - "insertText": "reference/hooks/inserttext", - "postDraft": "reference/hooks/postdraft", - "postRender": "reference/hooks/postrender", - "reference/hooks/postsample": "reference/hooks/postsample", - "preDraft": "reference/hooks/predraft", - "preRender": "reference/hooks/prerender", - "preSample": "reference/hooks/presample" - }, + "__title": "Hooks API", + "__linktitle": "Hooks API", + "__slug": "reference/hooks", + "__order": "Hooks API", "inserttext": { - "_title": "insertText", - "_linktitle": "insertText", - "_slug": "reference/hooks/inserttext", - "_order": "insertText", - "_children": {} + "__title": "insertText", + "__linktitle": "insertText", + "__slug": "reference/hooks/inserttext", + "__order": "insertText" }, "postdraft": { - "_title": "postDraft", - "_linktitle": "postDraft", - "_slug": "reference/hooks/postdraft", - "_order": "postDraft", - "_children": {} + "__title": "postDraft", + "__linktitle": "postDraft", + "__slug": "reference/hooks/postdraft", + "__order": "postDraft" }, "postrender": { - "_title": "postRender", - "_linktitle": "postRender", - "_slug": "reference/hooks/postrender", - "_order": "postRender", - "_children": {} + "__title": "postRender", + "__linktitle": "postRender", + "__slug": "reference/hooks/postrender", + "__order": "postRender" }, "postsample": { - "_slug": "reference/hooks/postsample", - "_children": {} + "__title": "postSample", + "__linktitle": "postSample", + "__slug": "reference/hooks/postsample", + "__order": "postSample" }, "predraft": { - "_title": "preDraft", - "_linktitle": "preDraft", - "_slug": "reference/hooks/predraft", - "_order": "preDraft", - "_children": {} + "__title": "preDraft", + "__linktitle": "preDraft", + "__slug": "reference/hooks/predraft", + "__order": "preDraft" }, "prerender": { - "_title": "preRender", - "_linktitle": "preRender", - "_slug": "reference/hooks/prerender", - "_order": "preRender", - "_children": {} + "__title": "preRender", + "__linktitle": "preRender", + "__slug": "reference/hooks/prerender", + "__order": "preRender" }, "presample": { - "_title": "preSample", - "_linktitle": "preSample", - "_slug": "reference/hooks/presample", - "_order": "preSample", - "_children": {} + "__title": "preSample", + "__linktitle": "preSample", + "__slug": "reference/hooks/presample", + "__order": "preSample" } }, "macros": { - "_slug": "reference/macros", - "_children": { - "flip": "reference/macros/flip", - "grainline": "reference/macros/grainline", - "hd": "reference/macros/hd", - "ld": "reference/macros/ld", - "reference/macros/miniscale": "reference/macros/miniscale", - "reference/macros/mirror": "reference/macros/mirror", - "pd": "reference/macros/pd", - "reference/macros/rmad": "reference/macros/rmad", - "reference/macros/rmd": "reference/macros/rmd", - "round": "reference/macros/round", - "reference/macros/scalebox": "reference/macros/scalebox", - "sprinkle": "reference/macros/sprinkle", - "title": "reference/macros/title", - "vd": "reference/macros/vd" - }, + "__title": "Macros", + "__linktitle": "Macros", + "__slug": "reference/macros", + "__order": "Macros", "flip": { - "_title": "flip", - "_linktitle": "flip", - "_slug": "reference/macros/flip", - "_order": "flip", - "_children": {} + "__title": "flip", + "__linktitle": "flip", + "__slug": "reference/macros/flip", + "__order": "flip" }, "grainline": { - "_title": "grainline", - "_linktitle": "grainline", - "_slug": "reference/macros/grainline", - "_order": "grainline", - "_children": {} + "__title": "grainline", + "__linktitle": "grainline", + "__slug": "reference/macros/grainline", + "__order": "grainline" }, "hd": { - "_title": "hd", - "_linktitle": "hd", - "_slug": "reference/macros/hd", - "_order": "hd", - "_children": {} + "__title": "hd", + "__linktitle": "hd", + "__slug": "reference/macros/hd", + "__order": "hd" }, "ld": { - "_title": "ld", - "_linktitle": "ld", - "_slug": "reference/macros/ld", - "_order": "ld", - "_children": {} + "__title": "ld", + "__linktitle": "ld", + "__slug": "reference/macros/ld", + "__order": "ld" }, "miniscale": { - "_slug": "reference/macros/miniscale", - "_children": {} + "__title": "miniscale", + "__linktitle": "miniscale", + "__slug": "reference/macros/miniscale", + "__order": "miniscale" }, "mirror": { - "_slug": "reference/macros/mirror", - "_children": {} + "__title": "mirror", + "__linktitle": "mirror", + "__slug": "reference/macros/mirror", + "__order": "mirror" }, "pd": { - "_title": "pd", - "_linktitle": "pd", - "_slug": "reference/macros/pd", - "_order": "pd", - "_children": {} + "__title": "pd", + "__linktitle": "pd", + "__slug": "reference/macros/pd", + "__order": "pd" }, "rmad": { - "_slug": "reference/macros/rmad", - "_children": {} + "__title": "rmad", + "__linktitle": "rmad", + "__slug": "reference/macros/rmad", + "__order": "rmad" }, "rmd": { - "_slug": "reference/macros/rmd", - "_children": {} + "__title": "rmd", + "__linktitle": "rmd", + "__slug": "reference/macros/rmd", + "__order": "rmd" }, "round": { - "_title": "round", - "_linktitle": "round", - "_slug": "reference/macros/round", - "_order": "round", - "_children": {} + "__title": "round", + "__linktitle": "round", + "__slug": "reference/macros/round", + "__order": "round" }, "scalebox": { - "_slug": "reference/macros/scalebox", - "_children": {} + "__title": "scalebox", + "__linktitle": "scalebox", + "__slug": "reference/macros/scalebox", + "__order": "scalebox" }, "sprinkle": { - "_title": "sprinkle", - "_linktitle": "sprinkle", - "_slug": "reference/macros/sprinkle", - "_order": "sprinkle", - "_children": {} + "__title": "sprinkle", + "__linktitle": "sprinkle", + "__slug": "reference/macros/sprinkle", + "__order": "sprinkle" }, "title": { - "_title": "title", - "_linktitle": "title", - "_slug": "reference/macros/title", - "_order": "title", - "_children": {} + "__title": "title", + "__linktitle": "title", + "__slug": "reference/macros/title", + "__order": "title" }, "vd": { - "_title": "vd", - "_linktitle": "vd", - "_slug": "reference/macros/vd", - "_order": "vd", - "_children": {} + "__title": "vd", + "__linktitle": "vd", + "__slug": "reference/macros/vd", + "__order": "vd" } }, "packages": { - "_title": "Packages", - "_linktitle": "Packages", - "_slug": "reference/packages", - "_order": "Packages", - "_children": { - "@freesewing/examples": "reference/packages/examples", - "@freesewing/florence": "reference/packages/florence", - "@freesewing/florent": "reference/packages/florent", - "gatsby-remark-jargon": "reference/packages/gatsby-remark-jargon", - "@freesewing/holmes": "reference/packages/holmes", - "@freesewing/huey": "reference/packages/huey", - "@freesewing/hugo": "reference/packages/hugo", - "@freesewing/i18n": "reference/packages/i18n", - "@freesewing/jaeger": "reference/packages/jaeger", - "@freesewing/models": "reference/packages/models", - "@freesewing/mui-theme": "reference/packages/mui-theme", - "@freesewing/pattern-info": "reference/packages/pattern-info", - "@freesewing/penelope": "reference/packages/penelope", - "@freesewing/plugin-bundle": "reference/packages/plugin-bundle", - "@freesewing/plugin-bust": "reference/packages/plugin-bust", - "@freesewing/plugin-buttons": "reference/packages/plugin-buttons", - "@freesewing/plugin-cutonfold": "reference/packages/plugin-cutonfold", - "@freesewing/plugin-dimension": "reference/packages/plugin-dimension", - "@freesewing/plugin-flip": "reference/packages/plugin-flip", - "@freesewing/plugin-gore": "reference/packages/plugin-gore", - "@freesewing/plugin-grainline": "reference/packages/plugin-grainline", - "@freesewing/plugin-i18n": "reference/packages/plugin-i18n", - "@freesewing/plugin-logo": "reference/packages/plugin-logo", - "@freesewing/plugin-round": "reference/packages/plugin-round", - "@freesewing/plugin-scalebox": "reference/packages/plugin-scalebox", - "@freesewing/plugin-sprinkle": "reference/packages/plugin-sprinkle", - "@freesewing/plugin-svgattr": "reference/packages/plugin-svgattr", - "@freesewing/plugin-theme": "reference/packages/plugin-theme", - "@freesewing/plugin-title": "reference/packages/plugin-title", - "@freesewing/prettier-config": "reference/packages/prettier-config", - "remark-jargon": "reference/packages/remark-jargon", - "reference/packages/rendertest": "reference/packages/rendertest", - "@freesewing/sandy": "reference/packages/sandy", - "@freesewing/shin": "reference/packages/shin", - "@freesewing/simon": "reference/packages/simon", - "@freesewing/simone": "reference/packages/simone", - "@freesewing/sven": "reference/packages/sven", - "@freesewing/tamiko": "reference/packages/tamiko", - "@freesewing/theo": "reference/packages/theo", - "@freesewing/trayvon": "reference/packages/trayvon", - "@freesewing/tutorial": "reference/packages/tutorial", - "@freesewing/utils": "reference/packages/utils", - "@freesewing/wahid": "reference/packages/wahid", - "@freesewing/waralee": "reference/packages/waralee" - }, + "__title": "Packages", + "__linktitle": "Packages", + "__slug": "reference/packages", + "__order": "Packages", "examples": { - "_title": "@freesewing/examples", - "_linktitle": "@freesewing/examples", - "_slug": "reference/packages/examples", - "_order": "@freesewing/examples", - "_children": {} + "__title": "@freesewing/examples", + "__linktitle": "@freesewing/examples", + "__slug": "reference/packages/examples", + "__order": "@freesewing/examples" }, "florence": { - "_title": "@freesewing/florence", - "_linktitle": "@freesewing/florence", - "_slug": "reference/packages/florence", - "_order": "@freesewing/florence", - "_children": {} + "__title": "@freesewing/florence", + "__linktitle": "@freesewing/florence", + "__slug": "reference/packages/florence", + "__order": "@freesewing/florence" }, "florent": { - "_title": "@freesewing/florent", - "_linktitle": "@freesewing/florent", - "_slug": "reference/packages/florent", - "_order": "@freesewing/florent", - "_children": {} + "__title": "@freesewing/florent", + "__linktitle": "@freesewing/florent", + "__slug": "reference/packages/florent", + "__order": "@freesewing/florent" }, "gatsby-remark-jargon": { - "_title": "gatsby-remark-jargon", - "_linktitle": "gatsby-remark-jargon", - "_slug": "reference/packages/gatsby-remark-jargon", - "_order": "gatsby-remark-jargon", - "_children": {} + "__title": "gatsby-remark-jargon", + "__linktitle": "gatsby-remark-jargon", + "__slug": "reference/packages/gatsby-remark-jargon", + "__order": "gatsby-remark-jargon" }, "holmes": { - "_title": "@freesewing/holmes", - "_linktitle": "@freesewing/holmes", - "_slug": "reference/packages/holmes", - "_order": "@freesewing/holmes", - "_children": {} + "__title": "@freesewing/holmes", + "__linktitle": "@freesewing/holmes", + "__slug": "reference/packages/holmes", + "__order": "@freesewing/holmes" }, "huey": { - "_title": "@freesewing/huey", - "_linktitle": "@freesewing/huey", - "_slug": "reference/packages/huey", - "_order": "@freesewing/huey", - "_children": {} + "__title": "@freesewing/huey", + "__linktitle": "@freesewing/huey", + "__slug": "reference/packages/huey", + "__order": "@freesewing/huey" }, "hugo": { - "_title": "@freesewing/hugo", - "_linktitle": "@freesewing/hugo", - "_slug": "reference/packages/hugo", - "_order": "@freesewing/hugo", - "_children": {} + "__title": "@freesewing/hugo", + "__linktitle": "@freesewing/hugo", + "__slug": "reference/packages/hugo", + "__order": "@freesewing/hugo" }, "i18n": { - "_title": "@freesewing/i18n", - "_linktitle": "@freesewing/i18n", - "_slug": "reference/packages/i18n", - "_order": "@freesewing/i18n", - "_children": {} + "__title": "@freesewing/i18n", + "__linktitle": "@freesewing/i18n", + "__slug": "reference/packages/i18n", + "__order": "@freesewing/i18n" }, "jaeger": { - "_title": "@freesewing/jaeger", - "_linktitle": "@freesewing/jaeger", - "_slug": "reference/packages/jaeger", - "_order": "@freesewing/jaeger", - "_children": {} + "__title": "@freesewing/jaeger", + "__linktitle": "@freesewing/jaeger", + "__slug": "reference/packages/jaeger", + "__order": "@freesewing/jaeger" }, "models": { - "_title": "@freesewing/models", - "_linktitle": "@freesewing/models", - "_slug": "reference/packages/models", - "_order": "@freesewing/models", - "_children": {} + "__title": "@freesewing/models", + "__linktitle": "@freesewing/models", + "__slug": "reference/packages/models", + "__order": "@freesewing/models" }, "mui-theme": { - "_title": "@freesewing/mui-theme", - "_linktitle": "@freesewing/mui-theme", - "_slug": "reference/packages/mui-theme", - "_order": "@freesewing/mui-theme", - "_children": {} + "__title": "@freesewing/mui-theme", + "__linktitle": "@freesewing/mui-theme", + "__slug": "reference/packages/mui-theme", + "__order": "@freesewing/mui-theme" }, "pattern-info": { - "_title": "@freesewing/pattern-info", - "_linktitle": "@freesewing/pattern-info", - "_slug": "reference/packages/pattern-info", - "_order": "@freesewing/pattern-info", - "_children": {} + "__title": "@freesewing/pattern-info", + "__linktitle": "@freesewing/pattern-info", + "__slug": "reference/packages/pattern-info", + "__order": "@freesewing/pattern-info" }, "penelope": { - "_title": "@freesewing/penelope", - "_linktitle": "@freesewing/penelope", - "_slug": "reference/packages/penelope", - "_order": "@freesewing/penelope", - "_children": {} + "__title": "@freesewing/penelope", + "__linktitle": "@freesewing/penelope", + "__slug": "reference/packages/penelope", + "__order": "@freesewing/penelope" }, "plugin-bundle": { - "_title": "@freesewing/plugin-bundle", - "_linktitle": "@freesewing/plugin-bundle", - "_slug": "reference/packages/plugin-bundle", - "_order": "@freesewing/plugin-bundle", - "_children": {} + "__title": "@freesewing/plugin-bundle", + "__linktitle": "@freesewing/plugin-bundle", + "__slug": "reference/packages/plugin-bundle", + "__order": "@freesewing/plugin-bundle" }, "plugin-bust": { - "_title": "@freesewing/plugin-bust", - "_linktitle": "@freesewing/plugin-bust", - "_slug": "reference/packages/plugin-bust", - "_order": "@freesewing/plugin-bust", - "_children": {} + "__title": "@freesewing/plugin-bust", + "__linktitle": "@freesewing/plugin-bust", + "__slug": "reference/packages/plugin-bust", + "__order": "@freesewing/plugin-bust" }, "plugin-buttons": { - "_title": "@freesewing/plugin-buttons", - "_linktitle": "@freesewing/plugin-buttons", - "_slug": "reference/packages/plugin-buttons", - "_order": "@freesewing/plugin-buttons", - "_children": {} + "__title": "@freesewing/plugin-buttons", + "__linktitle": "@freesewing/plugin-buttons", + "__slug": "reference/packages/plugin-buttons", + "__order": "@freesewing/plugin-buttons" }, "plugin-cutonfold": { - "_title": "@freesewing/plugin-cutonfold", - "_linktitle": "@freesewing/plugin-cutonfold", - "_slug": "reference/packages/plugin-cutonfold", - "_order": "@freesewing/plugin-cutonfold", - "_children": {} + "__title": "@freesewing/plugin-cutonfold", + "__linktitle": "@freesewing/plugin-cutonfold", + "__slug": "reference/packages/plugin-cutonfold", + "__order": "@freesewing/plugin-cutonfold" }, "plugin-dimension": { - "_title": "@freesewing/plugin-dimension", - "_linktitle": "@freesewing/plugin-dimension", - "_slug": "reference/packages/plugin-dimension", - "_order": "@freesewing/plugin-dimension", - "_children": {} + "__title": "@freesewing/plugin-dimension", + "__linktitle": "@freesewing/plugin-dimension", + "__slug": "reference/packages/plugin-dimension", + "__order": "@freesewing/plugin-dimension" }, "plugin-flip": { - "_title": "@freesewing/plugin-flip", - "_linktitle": "@freesewing/plugin-flip", - "_slug": "reference/packages/plugin-flip", - "_order": "@freesewing/plugin-flip", - "_children": {} + "__title": "@freesewing/plugin-flip", + "__linktitle": "@freesewing/plugin-flip", + "__slug": "reference/packages/plugin-flip", + "__order": "@freesewing/plugin-flip" }, "plugin-gore": { - "_title": "@freesewing/plugin-gore", - "_linktitle": "@freesewing/plugin-gore", - "_slug": "reference/packages/plugin-gore", - "_order": "@freesewing/plugin-gore", - "_children": {} + "__title": "@freesewing/plugin-gore", + "__linktitle": "@freesewing/plugin-gore", + "__slug": "reference/packages/plugin-gore", + "__order": "@freesewing/plugin-gore" }, "plugin-grainline": { - "_title": "@freesewing/plugin-grainline", - "_linktitle": "@freesewing/plugin-grainline", - "_slug": "reference/packages/plugin-grainline", - "_order": "@freesewing/plugin-grainline", - "_children": {} + "__title": "@freesewing/plugin-grainline", + "__linktitle": "@freesewing/plugin-grainline", + "__slug": "reference/packages/plugin-grainline", + "__order": "@freesewing/plugin-grainline" }, "plugin-i18n": { - "_title": "@freesewing/plugin-i18n", - "_linktitle": "@freesewing/plugin-i18n", - "_slug": "reference/packages/plugin-i18n", - "_order": "@freesewing/plugin-i18n", - "_children": {} + "__title": "@freesewing/plugin-i18n", + "__linktitle": "@freesewing/plugin-i18n", + "__slug": "reference/packages/plugin-i18n", + "__order": "@freesewing/plugin-i18n" }, "plugin-logo": { - "_title": "@freesewing/plugin-logo", - "_linktitle": "@freesewing/plugin-logo", - "_slug": "reference/packages/plugin-logo", - "_order": "@freesewing/plugin-logo", - "_children": {} + "__title": "@freesewing/plugin-logo", + "__linktitle": "@freesewing/plugin-logo", + "__slug": "reference/packages/plugin-logo", + "__order": "@freesewing/plugin-logo" }, "plugin-round": { - "_title": "@freesewing/plugin-round", - "_linktitle": "@freesewing/plugin-round", - "_slug": "reference/packages/plugin-round", - "_order": "@freesewing/plugin-round", - "_children": {} + "__title": "@freesewing/plugin-round", + "__linktitle": "@freesewing/plugin-round", + "__slug": "reference/packages/plugin-round", + "__order": "@freesewing/plugin-round" }, "plugin-scalebox": { - "_title": "@freesewing/plugin-scalebox", - "_linktitle": "@freesewing/plugin-scalebox", - "_slug": "reference/packages/plugin-scalebox", - "_order": "@freesewing/plugin-scalebox", - "_children": {} + "__title": "@freesewing/plugin-scalebox", + "__linktitle": "@freesewing/plugin-scalebox", + "__slug": "reference/packages/plugin-scalebox", + "__order": "@freesewing/plugin-scalebox" }, "plugin-sprinkle": { - "_title": "@freesewing/plugin-sprinkle", - "_linktitle": "@freesewing/plugin-sprinkle", - "_slug": "reference/packages/plugin-sprinkle", - "_order": "@freesewing/plugin-sprinkle", - "_children": {} + "__title": "@freesewing/plugin-sprinkle", + "__linktitle": "@freesewing/plugin-sprinkle", + "__slug": "reference/packages/plugin-sprinkle", + "__order": "@freesewing/plugin-sprinkle" }, "plugin-svgattr": { - "_title": "@freesewing/plugin-svgattr", - "_linktitle": "@freesewing/plugin-svgattr", - "_slug": "reference/packages/plugin-svgattr", - "_order": "@freesewing/plugin-svgattr", - "_children": {} + "__title": "@freesewing/plugin-svgattr", + "__linktitle": "@freesewing/plugin-svgattr", + "__slug": "reference/packages/plugin-svgattr", + "__order": "@freesewing/plugin-svgattr" }, "plugin-theme": { - "_title": "@freesewing/plugin-theme", - "_linktitle": "@freesewing/plugin-theme", - "_slug": "reference/packages/plugin-theme", - "_order": "@freesewing/plugin-theme", - "_children": {} + "__title": "@freesewing/plugin-theme", + "__linktitle": "@freesewing/plugin-theme", + "__slug": "reference/packages/plugin-theme", + "__order": "@freesewing/plugin-theme" }, "plugin-title": { - "_title": "@freesewing/plugin-title", - "_linktitle": "@freesewing/plugin-title", - "_slug": "reference/packages/plugin-title", - "_order": "@freesewing/plugin-title", - "_children": {} + "__title": "@freesewing/plugin-title", + "__linktitle": "@freesewing/plugin-title", + "__slug": "reference/packages/plugin-title", + "__order": "@freesewing/plugin-title" }, "prettier-config": { - "_title": "@freesewing/prettier-config", - "_linktitle": "@freesewing/prettier-config", - "_slug": "reference/packages/prettier-config", - "_order": "@freesewing/prettier-config", - "_children": {} + "__title": "@freesewing/prettier-config", + "__linktitle": "@freesewing/prettier-config", + "__slug": "reference/packages/prettier-config", + "__order": "@freesewing/prettier-config" }, "remark-jargon": { - "_title": "remark-jargon", - "_linktitle": "remark-jargon", - "_slug": "reference/packages/remark-jargon", - "_order": "remark-jargon", - "_children": {} + "__title": "remark-jargon", + "__linktitle": "remark-jargon", + "__slug": "reference/packages/remark-jargon", + "__order": "remark-jargon" }, "rendertest": { - "_slug": "reference/packages/rendertest", - "_children": {} + "__title": "@freesewing/rendertest", + "__linktitle": "@freesewing/rendertest", + "__slug": "reference/packages/rendertest", + "__order": "@freesewing/rendertest" }, "sandy": { - "_title": "@freesewing/sandy", - "_linktitle": "@freesewing/sandy", - "_slug": "reference/packages/sandy", - "_order": "@freesewing/sandy", - "_children": {} + "__title": "@freesewing/sandy", + "__linktitle": "@freesewing/sandy", + "__slug": "reference/packages/sandy", + "__order": "@freesewing/sandy" }, "shin": { - "_title": "@freesewing/shin", - "_linktitle": "@freesewing/shin", - "_slug": "reference/packages/shin", - "_order": "@freesewing/shin", - "_children": {} + "__title": "@freesewing/shin", + "__linktitle": "@freesewing/shin", + "__slug": "reference/packages/shin", + "__order": "@freesewing/shin" }, "simon": { - "_title": "@freesewing/simon", - "_linktitle": "@freesewing/simon", - "_slug": "reference/packages/simon", - "_order": "@freesewing/simon", - "_children": {} + "__title": "@freesewing/simon", + "__linktitle": "@freesewing/simon", + "__slug": "reference/packages/simon", + "__order": "@freesewing/simon" }, "simone": { - "_title": "@freesewing/simone", - "_linktitle": "@freesewing/simone", - "_slug": "reference/packages/simone", - "_order": "@freesewing/simone", - "_children": {} + "__title": "@freesewing/simone", + "__linktitle": "@freesewing/simone", + "__slug": "reference/packages/simone", + "__order": "@freesewing/simone" }, "sven": { - "_title": "@freesewing/sven", - "_linktitle": "@freesewing/sven", - "_slug": "reference/packages/sven", - "_order": "@freesewing/sven", - "_children": {} + "__title": "@freesewing/sven", + "__linktitle": "@freesewing/sven", + "__slug": "reference/packages/sven", + "__order": "@freesewing/sven" }, "tamiko": { - "_title": "@freesewing/tamiko", - "_linktitle": "@freesewing/tamiko", - "_slug": "reference/packages/tamiko", - "_order": "@freesewing/tamiko", - "_children": {} + "__title": "@freesewing/tamiko", + "__linktitle": "@freesewing/tamiko", + "__slug": "reference/packages/tamiko", + "__order": "@freesewing/tamiko" }, "theo": { - "_title": "@freesewing/theo", - "_linktitle": "@freesewing/theo", - "_slug": "reference/packages/theo", - "_order": "@freesewing/theo", - "_children": {} + "__title": "@freesewing/theo", + "__linktitle": "@freesewing/theo", + "__slug": "reference/packages/theo", + "__order": "@freesewing/theo" }, "trayvon": { - "_title": "@freesewing/trayvon", - "_linktitle": "@freesewing/trayvon", - "_slug": "reference/packages/trayvon", - "_order": "@freesewing/trayvon", - "_children": {} + "__title": "@freesewing/trayvon", + "__linktitle": "@freesewing/trayvon", + "__slug": "reference/packages/trayvon", + "__order": "@freesewing/trayvon" }, "tutorial": { - "_title": "@freesewing/tutorial", - "_linktitle": "@freesewing/tutorial", - "_slug": "reference/packages/tutorial", - "_order": "@freesewing/tutorial", - "_children": {} + "__title": "@freesewing/tutorial", + "__linktitle": "@freesewing/tutorial", + "__slug": "reference/packages/tutorial", + "__order": "@freesewing/tutorial" }, "utils": { - "_title": "@freesewing/utils", - "_linktitle": "@freesewing/utils", - "_slug": "reference/packages/utils", - "_order": "@freesewing/utils", - "_children": {} + "__title": "@freesewing/utils", + "__linktitle": "@freesewing/utils", + "__slug": "reference/packages/utils", + "__order": "@freesewing/utils" }, "wahid": { - "_title": "@freesewing/wahid", - "_linktitle": "@freesewing/wahid", - "_slug": "reference/packages/wahid", - "_order": "@freesewing/wahid", - "_children": {} + "__title": "@freesewing/wahid", + "__linktitle": "@freesewing/wahid", + "__slug": "reference/packages/wahid", + "__order": "@freesewing/wahid" }, "waralee": { - "_title": "@freesewing/waralee", - "_linktitle": "@freesewing/waralee", - "_slug": "reference/packages/waralee", - "_order": "@freesewing/waralee", - "_children": {} + "__title": "@freesewing/waralee", + "__linktitle": "@freesewing/waralee", + "__slug": "reference/packages/waralee", + "__order": "@freesewing/waralee" } }, "plugins": { - "_title": "Plugins", - "_linktitle": "Plugins", - "_slug": "reference/plugins", - "_order": "Plugins", - "_children": { - "flip": "reference/plugins/flip", - "grainline": "reference/plugins/grainline", - "i18n": "reference/plugins/i18n", - "logo": "reference/plugins/logo", - "mirror": "reference/plugins/mirror", - "round": "reference/plugins/round", - "scalebox": "reference/plugins/scalebox", - "sprinkle": "reference/plugins/sprinkle", - "svgattr": "reference/plugins/svgattr", - "theme": "reference/plugins/theme", - "title": "reference/plugins/title" - }, + "__title": "Plugins", + "__linktitle": "Plugins", + "__slug": "reference/plugins", + "__order": "Plugins", "flip": { - "_title": "flip", - "_linktitle": "flip", - "_slug": "reference/plugins/flip", - "_order": "flip", - "_children": {} + "__title": "flip", + "__linktitle": "flip", + "__slug": "reference/plugins/flip", + "__order": "flip" }, "grainline": { - "_title": "grainline", - "_linktitle": "grainline", - "_slug": "reference/plugins/grainline", - "_order": "grainline", - "_children": {} + "__title": "grainline", + "__linktitle": "grainline", + "__slug": "reference/plugins/grainline", + "__order": "grainline" }, "i18n": { - "_title": "i18n", - "_linktitle": "i18n", - "_slug": "reference/plugins/i18n", - "_order": "i18n", - "_children": {} + "__title": "i18n", + "__linktitle": "i18n", + "__slug": "reference/plugins/i18n", + "__order": "i18n" }, "logo": { - "_title": "logo", - "_linktitle": "logo", - "_slug": "reference/plugins/logo", - "_order": "logo", - "_children": {} + "__title": "logo", + "__linktitle": "logo", + "__slug": "reference/plugins/logo", + "__order": "logo" }, "mirror": { - "_title": "mirror", - "_linktitle": "mirror", - "_slug": "reference/plugins/mirror", - "_order": "mirror", - "_children": {} + "__title": "mirror", + "__linktitle": "mirror", + "__slug": "reference/plugins/mirror", + "__order": "mirror" }, "round": { - "_title": "round", - "_linktitle": "round", - "_slug": "reference/plugins/round", - "_order": "round", - "_children": {} + "__title": "round", + "__linktitle": "round", + "__slug": "reference/plugins/round", + "__order": "round" }, "scalebox": { - "_title": "scalebox", - "_linktitle": "scalebox", - "_slug": "reference/plugins/scalebox", - "_order": "scalebox", - "_children": {} + "__title": "scalebox", + "__linktitle": "scalebox", + "__slug": "reference/plugins/scalebox", + "__order": "scalebox" }, "sprinkle": { - "_title": "sprinkle", - "_linktitle": "sprinkle", - "_slug": "reference/plugins/sprinkle", - "_order": "sprinkle", - "_children": {} + "__title": "sprinkle", + "__linktitle": "sprinkle", + "__slug": "reference/plugins/sprinkle", + "__order": "sprinkle" }, "svgattr": { - "_title": "svgattr", - "_linktitle": "svgattr", - "_slug": "reference/plugins/svgattr", - "_order": "svgattr", - "_children": {} + "__title": "svgattr", + "__linktitle": "svgattr", + "__slug": "reference/plugins/svgattr", + "__order": "svgattr" }, "theme": { - "_title": "theme", - "_linktitle": "theme", - "_slug": "reference/plugins/theme", - "_order": "theme", - "_children": {} + "__title": "theme", + "__linktitle": "theme", + "__slug": "reference/plugins/theme", + "__order": "theme" }, "title": { - "_title": "title", - "_linktitle": "title", - "_slug": "reference/plugins/title", - "_order": "title", - "_children": {} + "__title": "title", + "__linktitle": "title", + "__slug": "reference/plugins/title", + "__order": "title" } }, "repos": { - "_title": "Repositories", - "_linktitle": "Repositories", - "_slug": "reference/repos", - "_order": "Repositories", - "_children": { - "reference/repos/freesewing.dev": "reference/repos/freesewing.dev", - "freesewing.org": "reference/repos/freesewing.org", - "reference/repos/freesewing": "reference/repos/freesewing", - "reference/repos/svgtopdf": "reference/repos/svgtopdf", - "tile": "reference/repos/tile" - }, + "__title": "Repositories", + "__linktitle": "Repositories", + "__slug": "reference/repos", + "__order": "Repositories", "freesewing.dev": { - "_slug": "reference/repos/freesewing.dev", - "_children": {} + "__title": "freesewing.dev", + "__linktitle": "freesewing.dev", + "__slug": "reference/repos/freesewing.dev", + "__order": "freesewing.dev" }, "freesewing.org": { - "_title": "freesewing.org", - "_linktitle": "freesewing.org", - "_slug": "reference/repos/freesewing.org", - "_order": "freesewing.org", - "_children": {} + "__title": "freesewing.org", + "__linktitle": "freesewing.org", + "__slug": "reference/repos/freesewing.org", + "__order": "freesewing.org" }, "freesewing": { - "_slug": "reference/repos/freesewing", - "_children": {} + "__title": "freesewing", + "__linktitle": "freesewing", + "__slug": "reference/repos/freesewing", + "__order": "freesewing" }, "svgtopdf": { - "_slug": "reference/repos/svgtopdf", - "_children": {} + "__title": "svgtopdf", + "__linktitle": "svgtopdf", + "__slug": "reference/repos/svgtopdf", + "__order": "svgtopdf" }, "tile": { - "_title": "tile", - "_linktitle": "tile", - "_slug": "reference/repos/tile", - "_order": "tile", - "_children": {} + "__title": "tile", + "__linktitle": "tile", + "__slug": "reference/repos/tile", + "__order": "tile" } }, "settings": { - "_title": "Settings", - "_linktitle": "Settings", - "_slug": "reference/settings", - "_order": "Settings", - "_children": { - "idPrefix": "reference/settings/idprefix", - "reference/settings/layout": "reference/settings/layout", - "locale": "reference/settings/locale", - "margin": "reference/settings/margin", - "measurements": "reference/settings/measurements", - "only": "reference/settings/only", - "options": "reference/settings/options", - "paperless": "reference/settings/paperless", - "sa": "reference/settings/sa", - "units": "reference/settings/units" - }, + "__title": "Settings", + "__linktitle": "Settings", + "__slug": "reference/settings", + "__order": "Settings", "idprefix": { - "_title": "idPrefix", - "_linktitle": "idPrefix", - "_slug": "reference/settings/idprefix", - "_order": "idPrefix", - "_children": {} + "__title": "idPrefix", + "__linktitle": "idPrefix", + "__slug": "reference/settings/idprefix", + "__order": "idPrefix" }, "layout": { - "_slug": "reference/settings/layout", - "_children": {} + "__title": "layout", + "__linktitle": "layout", + "__slug": "reference/settings/layout", + "__order": "layout" }, "locale": { - "_title": "locale", - "_linktitle": "locale", - "_slug": "reference/settings/locale", - "_order": "locale", - "_children": {} + "__title": "locale", + "__linktitle": "locale", + "__slug": "reference/settings/locale", + "__order": "locale" }, "margin": { - "_title": "margin", - "_linktitle": "margin", - "_slug": "reference/settings/margin", - "_order": "margin", - "_children": {} + "__title": "margin", + "__linktitle": "margin", + "__slug": "reference/settings/margin", + "__order": "margin" }, "measurements": { - "_title": "measurements", - "_linktitle": "measurements", - "_slug": "reference/settings/measurements", - "_order": "measurements", - "_children": {} + "__title": "measurements", + "__linktitle": "measurements", + "__slug": "reference/settings/measurements", + "__order": "measurements" }, "only": { - "_title": "only", - "_linktitle": "only", - "_slug": "reference/settings/only", - "_order": "only", - "_children": {} + "__title": "only", + "__linktitle": "only", + "__slug": "reference/settings/only", + "__order": "only" }, "options": { - "_title": "options", - "_linktitle": "options", - "_slug": "reference/settings/options", - "_order": "options", - "_children": {} + "__title": "options", + "__linktitle": "options", + "__slug": "reference/settings/options", + "__order": "options" }, "paperless": { - "_title": "paperless", - "_linktitle": "paperless", - "_slug": "reference/settings/paperless", - "_order": "paperless", - "_children": {} + "__title": "paperless", + "__linktitle": "paperless", + "__slug": "reference/settings/paperless", + "__order": "paperless" }, "sa": { - "_title": "sa", - "_linktitle": "sa", - "_slug": "reference/settings/sa", - "_order": "sa", - "_children": {} + "__title": "sa", + "__linktitle": "sa", + "__slug": "reference/settings/sa", + "__order": "sa" }, "units": { - "_title": "units", - "_linktitle": "units", - "_slug": "reference/settings/units", - "_order": "units", - "_children": {} + "__title": "units", + "__linktitle": "units", + "__slug": "reference/settings/units", + "__order": "units" } }, "snippets": { - "_title": "Snippets", - "_linktitle": "Snippets", - "_slug": "reference/snippets", - "_order": "Snippets", - "_children": { - "reference/snippets/logo": "reference/snippets/logo", - "reference/snippets/notch": "reference/snippets/notch", - "snap-socket": "reference/snippets/snap-socket", - "snap-stud": "reference/snippets/snap-stud" - }, + "__title": "Snippets", + "__linktitle": "Snippets", + "__slug": "reference/snippets", + "__order": "Snippets", "logo": { - "_slug": "reference/snippets/logo", - "_children": {} + "__title": "logo", + "__linktitle": "logo", + "__slug": "reference/snippets/logo", + "__order": "logo" }, "notch": { - "_slug": "reference/snippets/notch", - "_children": {} + "__title": "notch", + "__linktitle": "notch", + "__slug": "reference/snippets/notch", + "__order": "notch" }, "snap-socket": { - "_title": "snap-socket", - "_linktitle": "snap-socket", - "_slug": "reference/snippets/snap-socket", - "_order": "snap-socket", - "_children": {} + "__title": "snap-socket", + "__linktitle": "snap-socket", + "__slug": "reference/snippets/snap-socket", + "__order": "snap-socket" }, "snap-stud": { - "_title": "snap-stud", - "_linktitle": "snap-stud", - "_slug": "reference/snippets/snap-stud", - "_order": "snap-stud", - "_children": {} + "__title": "snap-stud", + "__linktitle": "snap-stud", + "__slug": "reference/snippets/snap-stud", + "__order": "snap-stud" } } }, "translators": { - "_title": "For translators", - "_linktitle": "For translators", - "_slug": "translators", - "_order": "1140For translators", - "_children": {} + "__title": "For translators", + "__linktitle": "For translators", + "__slug": "translators", + "__order": "1140For translators" }, "tutorials": { - "_title": "Tutorials", - "_linktitle": "Tutorials", - "_slug": "tutorials", - "_order": "1010Tutorials", - "_children": { - "tutorials/getting-started-linux": "tutorials/getting-started-linux", - "tutorials/getting-started-mac": "tutorials/getting-started-mac", - "30Getting started on Windows": "tutorials/getting-started-windows", - "tutorials/pattern-design": "tutorials/pattern-design" - }, + "__title": "Tutorials", + "__linktitle": "Tutorials", + "__slug": "tutorials", + "__order": "1010Tutorials", "getting-started-linux": { - "_slug": "tutorials/getting-started-linux", - "_children": { - "20Installing Node": "tutorials/getting-started-linux/installing-node", - "10Installing nvm": "tutorials/getting-started-linux/installing-nvm", - "tutorials/getting-started-linux/node-versions": "tutorials/getting-started-linux/node-versions", - "tutorials/getting-started-linux/start-development-environment": "tutorials/getting-started-linux/start-development-environment" - }, + "__title": "Getting started on Linux", + "__linktitle": "Getting started on Linux", + "__slug": "tutorials/getting-started-linux", + "__order": "10Getting started on Linux", "installing-node": { - "_title": "Installing Node", - "_linktitle": "Installing Node", - "_slug": "tutorials/getting-started-linux/installing-node", - "_order": "20Installing Node", - "_children": {} + "__title": "Installing Node", + "__linktitle": "Installing Node", + "__slug": "tutorials/getting-started-linux/installing-node", + "__order": "20Installing Node" }, "installing-nvm": { - "_title": "Installing nvm", - "_linktitle": "Installing nvm", - "_slug": "tutorials/getting-started-linux/installing-nvm", - "_order": "10Installing nvm", - "_children": {} + "__title": "Installing nvm", + "__linktitle": "Installing nvm", + "__slug": "tutorials/getting-started-linux/installing-nvm", + "__order": "10Installing nvm" }, "node-versions": { - "_slug": "tutorials/getting-started-linux/node-versions", - "_children": {} + "__title": "Using a different Node version", + "__linktitle": "Using a different Node version", + "__slug": "tutorials/getting-started-linux/node-versions", + "__order": "30Using a different Node version" }, "start-development-environment": { - "_slug": "tutorials/getting-started-linux/start-development-environment", - "_children": {} + "__title": "Start the development environment", + "__linktitle": "Start the development environment", + "__slug": "tutorials/getting-started-linux/start-development-environment", + "__order": "50Start the development environment" } }, "getting-started-mac": { - "_slug": "tutorials/getting-started-mac", - "_children": { - "30Installing Node": "tutorials/getting-started-mac/installing-node", - "20Installing nvm": "tutorials/getting-started-mac/installing-nvm", - "tutorials/getting-started-mac/installing-xcode": "tutorials/getting-started-mac/installing-xcode", - "tutorials/getting-started-mac/node-versions": "tutorials/getting-started-mac/node-versions", - "tutorials/getting-started-mac/start-development-environment": "tutorials/getting-started-mac/start-development-environment" - }, + "__title": "Getting started on Mac", + "__linktitle": "Getting started on Mac", + "__slug": "tutorials/getting-started-mac", + "__order": "20Getting started on Mac", "installing-node": { - "_title": "Installing Node", - "_linktitle": "Installing Node", - "_slug": "tutorials/getting-started-mac/installing-node", - "_order": "30Installing Node", - "_children": {} + "__title": "Installing Node", + "__linktitle": "Installing Node", + "__slug": "tutorials/getting-started-mac/installing-node", + "__order": "30Installing Node" }, "installing-nvm": { - "_title": "Installing nvm", - "_linktitle": "Installing nvm", - "_slug": "tutorials/getting-started-mac/installing-nvm", - "_order": "20Installing nvm", - "_children": {} + "__title": "Installing nvm", + "__linktitle": "Installing nvm", + "__slug": "tutorials/getting-started-mac/installing-nvm", + "__order": "20Installing nvm" }, "installing-xcode": { - "_slug": "tutorials/getting-started-mac/installing-xcode", - "_children": {} + "__title": "Installing the Xcode command line tools", + "__linktitle": "Installing the Xcode command line tools", + "__slug": "tutorials/getting-started-mac/installing-xcode", + "__order": "10Installing the Xcode command line tools" }, "node-versions": { - "_slug": "tutorials/getting-started-mac/node-versions", - "_children": {} + "__title": "Using a different Node version", + "__linktitle": "Using a different Node version", + "__slug": "tutorials/getting-started-mac/node-versions", + "__order": "40Using a different Node version" }, "start-development-environment": { - "_slug": "tutorials/getting-started-mac/start-development-environment", - "_children": {} + "__title": "Start the development environment", + "__linktitle": "Start the development environment", + "__slug": "tutorials/getting-started-mac/start-development-environment", + "__order": "60Start the development environment" } }, "getting-started-windows": { - "_title": "Getting started on Windows", - "_linktitle": "Getting started on Windows", - "_slug": "tutorials/getting-started-windows", - "_order": "30Getting started on Windows", - "_children": {} + "__title": "Getting started on Windows", + "__linktitle": "Getting started on Windows", + "__slug": "tutorials/getting-started-windows", + "__order": "30Getting started on Windows" }, "pattern-design": { - "_slug": "tutorials/pattern-design", - "_children": { - "170Fitting the neck opening": "tutorials/pattern-design/fitting-the-neck-opening", - "270Making your pattern paperless": "tutorials/pattern-design/paperless-bib", - "tutorials/pattern-design/part-structure": "tutorials/pattern-design/part-structure", - "240Rounding the corners": "tutorials/pattern-design/rounding-the-corners", - "tutorials/pattern-design/shaping-the-straps": "tutorials/pattern-design/shaping-the-straps", - "tutorials/pattern-design/testing-your-pattern": "tutorials/pattern-design/testing-your-pattern", - "120Your first part": "tutorials/pattern-design/your-first-part" - }, + "__title": "Pattern design tutorial", + "__linktitle": "Pattern design tutorial", + "__slug": "tutorials/pattern-design", + "__order": "50Pattern design tutorial", "fitting-the-neck-opening": { - "_title": "Fitting the neck opening", - "_linktitle": "Fitting the neck opening", - "_slug": "tutorials/pattern-design/fitting-the-neck-opening", - "_order": "170Fitting the neck opening", - "_children": {} + "__title": "Fitting the neck opening", + "__linktitle": "Fitting the neck opening", + "__slug": "tutorials/pattern-design/fitting-the-neck-opening", + "__order": "170Fitting the neck opening" }, "paperless-bib": { - "_title": "Making your pattern paperless", - "_linktitle": "Making your pattern paperless", - "_slug": "tutorials/pattern-design/paperless-bib", - "_order": "270Making your pattern paperless", - "_children": {} + "__title": "Making your pattern paperless", + "__linktitle": "Making your pattern paperless", + "__slug": "tutorials/pattern-design/paperless-bib", + "__order": "270Making your pattern paperless" }, "part-structure": { - "_slug": "tutorials/pattern-design/part-structure", - "_children": {} + "__title": "Structure of a part", + "__linktitle": "Structure of a part", + "__slug": "tutorials/pattern-design/part-structure", + "__order": "150Structure of a part" }, "rounding-the-corners": { - "_title": "Rounding the corners", - "_linktitle": "Rounding the corners", - "_slug": "tutorials/pattern-design/rounding-the-corners", - "_order": "240Rounding the corners", - "_children": {} + "__title": "Rounding the corners", + "__linktitle": "Rounding the corners", + "__slug": "tutorials/pattern-design/rounding-the-corners", + "__order": "240Rounding the corners" }, "shaping-the-straps": { - "_slug": "tutorials/pattern-design/shaping-the-straps", - "_children": {} + "__title": "Shaping the straps", + "__linktitle": "Shaping the straps", + "__slug": "tutorials/pattern-design/shaping-the-straps", + "__order": "200Shaping the straps" }, "testing-your-pattern": { - "_slug": "tutorials/pattern-design/testing-your-pattern", - "_children": {} + "__title": "Testing your pattern", + "__linktitle": "Testing your pattern", + "__slug": "tutorials/pattern-design/testing-your-pattern", + "__order": "250Testing your pattern" }, "your-first-part": { - "_title": "Your first part", - "_linktitle": "Your first part", - "_slug": "tutorials/pattern-design/your-first-part", - "_order": "120Your first part", - "_children": {} + "__title": "Your first part", + "__linktitle": "Your first part", + "__slug": "tutorials/pattern-design/your-first-part", + "__order": "120Your first part" } } }, "blog": { - "_title": "blog", - "_linktitle": "blog", - "_slug": "blog", - "_order": "blog", - "_children": { - "2021-07-04blog/welcome-to-our-dev-blog": "blog/welcome-to-our-dev-blog", - "2021-07-05blog/project-2022": "blog/project-2022", - "2021-07-06blog/tailwind-css-project-2022": "blog/tailwind-css-project-2022", - "2021-07-07blog/daisyui-components-themes": "blog/daisyui-components-themes", - "2021-07-08blog/shared-frontend-code-monorepo": "blog/shared-frontend-code-monorepo", - "2021-07-09blog/improved-search-keyboard": "blog/improved-search-keyboard", - "2021-07-10blog/strapi-headless-cms": "blog/strapi-headless-cms", - "2021-07-15blog/layout-blocks-overview": "blog/layout-blocks-overview", - "2021-07-16blog/freesewing-v3-seems-inevitable": "blog/freesewing-v3-seems-inevitable", - "2021-08-26blog/migration-to-strapi": "blog/migration-to-strapi", - "2021-08-27blog/pattern-docs-option-sampling": "blog/pattern-docs-option-sampling" + "__title": "blog", + "__linktitle": "blog", + "__slug": "blog", + "__order": "blog", + "welcome-to-our-dev-blog": { + "__title": "Welcome to FreeSewing's development blog", + "__linktitle": "Welcome to our dev blog", + "__slug": "blog/welcome-to-our-dev-blog", + "__order": 1663992 }, - "blog": { - "welcome-to-our-dev-blog": { - "_title": "Welcome to FreeSewing's development blog", - "_linktitle": "Welcome to our dev blog", - "_slug": "blog/welcome-to-our-dev-blog", - "_order": 1663992, - "_children": {} - }, - "project-2022": { - "_title": "Project 2022: Giving FreeSewing a new face", - "_linktitle": "Announcing projet 2022", - "_slug": "blog/project-2022", - "_order": 1663128, - "_children": {} - }, - "tailwind-css-project-2022": { - "_title": "Taming CSS complexity with TailwindCSS", - "_linktitle": "Tailwind CSS in project 2022", - "_slug": "blog/tailwind-css-project-2022", - "_order": 1662264, - "_children": {} - }, - "daisyui-components-themes": { - "_title": "Once more without MaterialUI: DaisyUI for CSS components and themes", - "_linktitle": "Components and themes with DaisyUI", - "_slug": "blog/daisyui-components-themes", - "_order": 1661400, - "_children": {} - }, - "shared-frontend-code-monorepo": { - "_title": "Better code sharing by bringing frontend code into our monorepo", - "_linktitle": "Sharing frontend code in our monorepo", - "_slug": "blog/shared-frontend-code-monorepo", - "_order": 1660536, - "_children": {} - }, - "improved-search-keyboard": { - "_title": "Improved search with keyboard bindings", - "_linktitle": "Improved search with keyboard bindings", - "_slug": "blog/improved-search-keyboard", - "_order": 1659672, - "_children": {} - }, - "strapi-headless-cms": { - "_title": "Strapi as headless CMS", - "_linktitle": "Strapi as headless CMS", - "_slug": "blog/strapi-headless-cms", - "_order": 1658808, - "_children": {} - }, - "layout-blocks-overview": { - "_title": "A quick tour of the main layout blocks", - "_linktitle": "Main layout blocks", - "_slug": "blog/layout-blocks-overview", - "_order": 1654488, - "_children": {} - }, - "freesewing-v3-seems-inevitable": { - "_title": "Better tree-shaking means breaking changes; FreeSewing v3 now seems inevitable", - "_linktitle": "FreeSewing v3 seems inevitable", - "_slug": "blog/freesewing-v3-seems-inevitable", - "_order": 1653624, - "_children": {} - }, - "migration-to-strapi": { - "_title": "We migrated to strapi and moved our markdown content into our monorepo", - "_linktitle": "Migration to Strapi", - "_slug": "blog/migration-to-strapi", - "_order": 1618200, - "_children": {} - }, - "pattern-docs-option-sampling": { - "_title": "Auto-generated images showing option impact to improve documentation for pattern options", - "_linktitle": "Sampling pattern options for bettter docs", - "_slug": "blog/pattern-docs-option-sampling", - "_order": 1617336, - "_children": {} - } + "project-2022": { + "__title": "Project 2022: Giving FreeSewing a new face", + "__linktitle": "Announcing projet 2022", + "__slug": "blog/project-2022", + "__order": 1663128 + }, + "tailwind-css-project-2022": { + "__title": "Taming CSS complexity with TailwindCSS", + "__linktitle": "Tailwind CSS in project 2022", + "__slug": "blog/tailwind-css-project-2022", + "__order": 1662264 + }, + "daisyui-components-themes": { + "__title": "Once more without MaterialUI: DaisyUI for CSS components and themes", + "__linktitle": "Components and themes with DaisyUI", + "__slug": "blog/daisyui-components-themes", + "__order": 1661400 + }, + "shared-frontend-code-monorepo": { + "__title": "Better code sharing by bringing frontend code into our monorepo", + "__linktitle": "Sharing frontend code in our monorepo", + "__slug": "blog/shared-frontend-code-monorepo", + "__order": 1660536 + }, + "improved-search-keyboard": { + "__title": "Improved search with keyboard bindings", + "__linktitle": "Improved search with keyboard bindings", + "__slug": "blog/improved-search-keyboard", + "__order": 1659672 + }, + "strapi-headless-cms": { + "__title": "Strapi as headless CMS", + "__linktitle": "Strapi as headless CMS", + "__slug": "blog/strapi-headless-cms", + "__order": 1658808 + }, + "layout-blocks-overview": { + "__title": "A quick tour of the main layout blocks", + "__linktitle": "Main layout blocks", + "__slug": "blog/layout-blocks-overview", + "__order": 1654488 + }, + "freesewing-v3-seems-inevitable": { + "__title": "Better tree-shaking means breaking changes; FreeSewing v3 now seems inevitable", + "__linktitle": "FreeSewing v3 seems inevitable", + "__slug": "blog/freesewing-v3-seems-inevitable", + "__order": 1653624 + }, + "migration-to-strapi": { + "__title": "We migrated to strapi and moved our markdown content into our monorepo", + "__linktitle": "Migration to Strapi", + "__slug": "blog/migration-to-strapi", + "__order": 1618200 + }, + "pattern-docs-option-sampling": { + "__title": "Auto-generated images showing option impact to improve documentation for pattern options", + "__linktitle": "Sampling pattern options for bettter docs", + "__slug": "blog/pattern-docs-option-sampling", + "__order": 1617336 } } } diff --git a/packages/freesewing.dev/prebuild/strapi.blog.en.js b/packages/freesewing.dev/prebuild/strapi.blog.en.js index 52e9e06b851..3018f76ca0d 100644 --- a/packages/freesewing.dev/prebuild/strapi.blog.en.js +++ b/packages/freesewing.dev/prebuild/strapi.blog.en.js @@ -1,5 +1,5 @@ export const posts = { - "blog/welcome-to-our-dev-blog": { + "welcome-to-our-dev-blog": { "dev": true, "localizations": [], "_id": "60eaceb44f0f4957dbc9d64b", @@ -86,7 +86,7 @@ export const posts = { "id": "60eaceb44f0f4957dbc9d64b", "intro": "The internet is plastered with abandoned or dormant blogs, so starting another one is perhaps madness, but hear me out:" }, - "blog/project-2022": { + "project-2022": { "dev": true, "localizations": [], "_id": "60eb151cdb32b45d5c4d6d96", @@ -173,7 +173,7 @@ export const posts = { "id": "60eb151cdb32b45d5c4d6d96", "intro": "During my summer break I wanted to look into migrating the FreeSewing websites (freesewing.org and freesewing.dev) from GatbsyJS to NextJS ." }, - "blog/tailwind-css-project-2022": { + "tailwind-css-project-2022": { "dev": true, "localizations": [], "_id": "60eb1836db32b45d5c4d6d99", @@ -260,7 +260,7 @@ export const posts = { "id": "60eb1836db32b45d5c4d6d99", "intro": "Building a website that is supposed to do something essentially boils down to two things:" }, - "blog/daisyui-components-themes": { + "daisyui-components-themes": { "dev": true, "localizations": [], "_id": "60eb1d41db32b45d5c4d6d9c", @@ -347,7 +347,7 @@ export const posts = { "id": "60eb1d41db32b45d5c4d6d9c", "intro": "Since we're changing pretty much everything in project 2022 anyway, we might as well try to reduce our bundle size by removing our dependency on Material UI , the React component framework that implements Google's material design." }, - "blog/shared-frontend-code-monorepo": { + "shared-frontend-code-monorepo": { "dev": true, "localizations": [], "_id": "60eb237cdb32b45d5c4d6d9f", @@ -434,7 +434,7 @@ export const posts = { "id": "60eb237cdb32b45d5c4d6d9f", "intro": "Up until now, our websites each live in their own repository. This makes sharing code and content somewhat more involved, and situation that we currently handle as follows:" }, - "blog/improved-search-keyboard": { + "improved-search-keyboard": { "dev": true, "localizations": [], "_id": "60eb2759db32b45d5c4d6da2", @@ -521,7 +521,7 @@ export const posts = { "id": "60eb2759db32b45d5c4d6da2", "intro": "Since we've got a ton of documentation, good search is a crucial aspect of our websites." }, - "blog/strapi-headless-cms": { + "strapi-headless-cms": { "dev": true, "localizations": [], "_id": "60eb2e11db32b45d5c4d6da5", @@ -608,7 +608,7 @@ export const posts = { "id": "60eb2e11db32b45d5c4d6da5", "intro": "As things are now, all of FreeSewing's content is contained in our markdown repository ." }, - "blog/layout-blocks-overview": { + "layout-blocks-overview": { "dev": true, "localizations": [], "_id": "60f0616ddb32b45d5c4d6dac", @@ -695,7 +695,7 @@ export const posts = { "id": "60f0616ddb32b45d5c4d6dac", "intro": "I wanted to do a quick write-up of the main layout blocks of our websites. So let's have a look:" }, - "blog/freesewing-v3-seems-inevitable": { + "freesewing-v3-seems-inevitable": { "dev": true, "localizations": [], "_id": "60f2e2ef2f81c03239366844", @@ -793,7 +793,7 @@ export const posts = { "id": "60f2e2ef2f81c03239366844", "intro": "I just made a bunch of breaking changes in @freesewing/i18n and it made me realize that if/when we get around to merging my work back into our monorepo, there's going to be too many changes not to bump the major version." }, - "blog/migration-to-strapi": { + "migration-to-strapi": { "dev": true, "localizations": [], "_id": "612785b5fca7f36c6a727a6b", @@ -890,7 +890,7 @@ export const posts = { "id": "612785b5fca7f36c6a727a6b", "intro": "Effective immediately, all blog and showcase posts on freesewing.org are backed by our Strapi instance , rather than our markdown repository . That markdown repository has been archived, and the markdown content that are not blog or showcase posts (predominantly documentation) has been moved into our monorepo ." }, - "blog/pattern-docs-option-sampling": { + "pattern-docs-option-sampling": { "dev": true, "localizations": [], "_id": "6128ccacfca7f36c6a727a70", diff --git a/packages/freesewing.shared/components/navigation/primary.js b/packages/freesewing.shared/components/navigation/primary.js index b44e8ca9b22..f1aaf4d735d 100644 --- a/packages/freesewing.shared/components/navigation/primary.js +++ b/packages/freesewing.shared/components/navigation/primary.js @@ -4,12 +4,84 @@ import nav from 'site/prebuild/navigation.js' import Link from 'next/link' import orderBy from 'lodash.orderby' +// TODO: Clean this up after restructuring markdown content +const hide = ['contributors', 'developers', 'editors', 'translators'] + +// Don't show children for blog and showcase posts const keepClosed = ['blog', 'showcase', ] -const linkClasses = {className: 'hover:text-underline color-primary'} +// TODO: For now we force tailwind to pickup these styles +// At some point this should 'just work' though, but let's not worry about it now +const force =
+// Component for the collapse toggle +const Chevron = ({w=8, m=1}) => -const TopLevel = ({ icon, title, nav, current }) => ( +// Helper method to filter out the real children +const currentChildren = current => Object.values(current) + .filter(entry => (typeof entry === 'object')) + +// Component that renders a sublevel of navigation +const SubLevel = ({ nodes={} }) => ( +