1
0
Fork 0
freesewing/packages/freesewing.dev/prebuild/mdx.en.js
2021-12-17 17:51:20 +01:00

3008 lines
No EOL
125 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export default {
"contributors/code-of-conduct": {
"title": "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",
"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",
"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",
"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.",
"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.",
"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.",
"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/",
"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.",
"order": "Express",
"slug": "contributors/terms/express"
},
"contributors/terms/freesewing.dev": {
"title": "freesewing.dev",
"intro": "Our website for developers.",
"order": "freesewing.dev",
"slug": "contributors/terms/freesewing.dev"
},
"contributors/terms/freesewing.org": {
"title": "freesewing.org",
"intro": "Our website for makers.",
"order": "freesewing.org",
"slug": "contributors/terms/freesewing.org"
},
"contributors/terms/freesewing": {
"title": "FreeSewing",
"intro": "FreeSewing refers to the community-driven open source project.",
"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.",
"order": "Frontend",
"slug": "contributors/terms/frontend"
},
"contributors/terms/gatsby": {
"title": "Gatsby",
"intro": "Gatsby is a static-site generator for React.",
"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.",
"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.",
"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.",
"order": "Patron",
"slug": "contributors/terms/patron"
},
"contributors/terms/plugin": {
"title": "Plugin",
"intro": "An extension to FreeSewing core that provides an extra feature of functionality.",
"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.",
"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.",
"order": "React",
"slug": "contributors/terms/react"
},
"contributors/terms/repo": {
"title": "Repo",
"intro": "Short for repository .",
"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.",
"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.",
"order": "Translator",
"slug": "contributors/terms/translator"
},
"contributors/ways-to-contribute/body-ambassador": {
"title": "Body ambassador",
"intro": "Maybe youre 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.",
"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.",
"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.",
"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.",
"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 FreeSewings 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 .",
"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.",
"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",
"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.",
"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 youre 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:",
"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.",
"order": "UI / UX Webdesign",
"slug": "contributors/ways-to-contribute/webdesign"
},
"developers/backend": {
"title": "The freesewing backend",
"intro": "",
"order": "The freesewing backend",
"slug": "developers/backend"
},
"developers/dev": {
"title": "The freesewing.dev website",
"intro": "",
"order": "The freesewing.dev website",
"slug": "developers/dev"
},
"developers": {
"title": "For developers",
"intro": "Welcome to the FreeSewing documentation for developers.",
"order": "1120For developers",
"slug": "developers"
},
"developers/org": {
"title": "The freesewing.org website",
"intro": "",
"order": "The freesewing.org website",
"slug": "developers/org"
},
"developers/svg2pdf": {
"title": "The freesewing on-demand tiler",
"intro": "",
"order": "The freesewing on-demand tiler",
"slug": "developers/svg2pdf"
},
"developers/tiler": {
"title": "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.",
"order": "Content sources",
"slug": "editors/content"
},
"editors": {
"title": "For 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",
"intro": "Blog posts have been migrated to Strapi , a headless CMS system.",
"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",
"order": "Common tasks for editors",
"slug": "editors/howtos"
},
"editors/howtos/frontmatter/about": {
"title": "About 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",
"intro": "Showcase posts have been migrated to Strapi , a headless CMS system.",
"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",
"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",
"slug": "editors/markdown/custom-components/fixme"
},
"editors/markdown/custom-components/hashtag": {
"title": "Hashtag",
"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",
"slug": "editors/markdown/custom-components/note"
},
"editors/markdown/custom-components/readmore": {
"title": "ReadMore",
"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 .",
"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 .",
"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 .",
"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 .",
"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",
"slug": "editors/markdown/custom-components/tip"
},
"editors/markdown/custom-components/warning": {
"title": "Warning",
"intro": "FIXME_no_intro",
"order": "30Warning",
"slug": "editors/markdown/custom-components/warning"
},
"editors/markdown/custom-components/youtube": {
"title": "YouTube",
"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",
"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",
"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",
"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",
"intro": "To make a list, just do as you would in plain text:",
"order": "50Lists",
"slug": "editors/markdown/lists"
},
"editors/markdown/tables": {
"title": "Tables",
"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",
"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",
"intro": "FIXME_no_intro",
"order": "910Style guide",
"slug": "editors/style"
},
"editors/style/typography": {
"title": "Typography",
"intro": "FIXME_no_intro",
"order": "Typography",
"slug": "editors/style/typography"
},
"editors/style/typography/fonts": {
"title": "Fonts",
"intro": "We use three types of fonts:",
"order": "10Fonts",
"slug": "editors/style/typography/fonts"
},
"editors/style/typography/headings": {
"title": "Headings",
"intro": "Headings serve two different purposes:",
"order": "30Headings",
"slug": "editors/style/typography/headings"
},
"editors/style/typography/text": {
"title": "Text 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",
"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",
"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",
"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",
"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",
"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",
"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",
"intro": "Plugins allow you to extend FreeSewing.",
"order": "400Plugin guide",
"slug": "guides/plugins"
},
"guides/plugins/hooks": {
"title": "Hooks",
"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",
"intro": "Plugin structure for macros is similar, with a few changes:",
"order": "90Macros",
"slug": "guides/plugins/macros"
},
"guides/plugins/plugin-structure": {
"title": "Plugin structure",
"intro": "Plugins can do two things:",
"order": "50Plugin structure",
"slug": "guides/plugins/plugin-structure"
},
"guides/plugins/types-of-plugins": {
"title": "Types 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 , thats one mm. When you write 7.8 , thats 7.8mm.",
"order": "40Units",
"slug": "guides/prerequisites/units"
},
"howtos/code/accessing-measurements": {
"title": "Accessing measurements",
"intro": "Measurements are stored in pattern.settings.measurements .",
"order": "Accessing measurements",
"slug": "howtos/code/accessing-measurements"
},
"howtos/code/accessing-options": {
"title": "Accessing user options",
"intro": "Options are stored in pattern.settings.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",
"intro": "SVG is pretty great, but its text handling leaves much to be desired.",
"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:",
"order": "Common code challenges",
"slug": "howtos/code"
},
"howtos/code/extend-pattern": {
"title": "Create a new design based on an 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:",
"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",
"intro": "The example below is from Aaron which inherits from Brian.",
"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",
"intro": "FIXME_no_intro",
"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",
"intro": "The Part.shorthand() method will become your best friend.",
"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:",
"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",
"intro": "Adding multiple snippets at the same time results in a lot of repetitive code.",
"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",
"order": "Setting up your development environment",
"slug": "howtos/dev"
},
"howtos/dev/freesewing-dev": {
"title": "Working on freesewing.dev",
"intro": "To work on freesewing.dev, checkout the repository:",
"order": "Working on freesewing.dev",
"slug": "howtos/dev/freesewing-dev"
},
"howtos/dev/freesewing-org": {
"title": "Working on freesewing.org",
"intro": "To work on freesewing.org, checkout the repository:",
"order": "Working on freesewing.org",
"slug": "howtos/dev/freesewing-org"
},
"howtos": {
"title": "Howtos",
"intro": "FIXME_no_intro",
"order": "1020Howtos",
"slug": "howtos"
},
"reference/api/attributes/add": {
"title": "add()",
"intro": "Adds value to the attribute identified by key .",
"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.",
"order": "clone()",
"slug": "reference/api/attributes/clone"
},
"reference/api/attributes": {
"title": "Attributes",
"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.",
"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.",
"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.",
"order": "remove()",
"slug": "reference/api/attributes/remove"
},
"reference/api/attributes/set": {
"title": "set()",
"intro": "Sets the attribute identified by key to value value .",
"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 ).",
"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.",
"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.",
"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.",
"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.",
"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:",
"order": "edge()",
"slug": "reference/api/path/edge"
},
"reference/api/path": {
"title": "Path",
"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.",
"order": "end()",
"slug": "reference/api/path/end"
},
"reference/api/path/insop": {
"title": "insop()",
"intro": "Injects a Path into the noop with id id .",
"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.",
"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.",
"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.",
"order": "intersectsY()",
"slug": "reference/api/path/intersectsy"
},
"reference/api/path/join": {
"title": "join()",
"intro": "Joins this path with another path.",
"order": "join()",
"slug": "reference/api/path/join"
},
"reference/api/path/length": {
"title": "length()",
"intro": "Returns the length of the path.",
"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.",
"order": "line()",
"slug": "reference/api/path/line"
},
"reference/api/path/move": {
"title": "move()",
"intro": "Moves to a given point without drawing a line.",
"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() .",
"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.",
"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.",
"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.",
"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.",
"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.",
"order": "split",
"slug": "reference/api/path/split"
},
"reference/api/path/start": {
"title": "start()",
"intro": "Returns the Point object at the start of the path.",
"order": "start()",
"slug": "reference/api/path/start"
},
"reference/api/path/translate": {
"title": "translate()",
"intro": "Returns a path with a translate transform applied.",
"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.",
"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.",
"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.",
"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.",
"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.",
"order": "Point.dy()",
"slug": "reference/api/point/dy"
},
"reference/api/point": {
"title": "Point",
"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.",
"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 .",
"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.",
"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.",
"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.",
"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.",
"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 .",
"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 .",
"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.",
"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 .",
"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.",
"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.",
"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.",
"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.",
"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.",
"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.",
"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.",
"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.",
"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.",
"order": "curvesIntersect()",
"slug": "reference/api/utils/curvesintersect"
},
"reference/api/utils/deg2rad": {
"title": "deg2rad()",
"intro": "Returns the degrees you pass to it as radians.",
"order": "deg2rad()",
"slug": "reference/api/utils/deg2rad"
},
"reference/api/utils": {
"title": "Utils",
"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.",
"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`.",
"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 .",
"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 .",
"order": "pointOnLine()",
"slug": "reference/api/utils/pointonline"
},
"reference/api/utils/rad2deg": {
"title": "rad2deg()",
"intro": "Returns the radians you pass to it as degrees.",
"order": "rad2deg()",
"slug": "reference/api/utils/rad2deg"
},
"reference/api/utils/round": {
"title": "round()",
"intro": "Rounds a value to two decimals. For example:",
"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.",
"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.",
"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",
"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:",
"order": "Models",
"slug": "reference/backend/models"
},
"reference/backend/oauth": {
"title": "Oauth",
"intro": "On success:",
"order": "Oauth",
"slug": "reference/backend/oauth"
},
"reference/backend/recipes": {
"title": "Recipes",
"intro": "On success:",
"order": "Recipes",
"slug": "reference/backend/recipes"
},
"reference/backend/signup": {
"title": "Sign up",
"intro": "On success:",
"order": "Sign up",
"slug": "reference/backend/signup"
},
"reference/backend/users": {
"title": "Users",
"intro": "On success:",
"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.",
"order": "dependencies",
"slug": "reference/config/dependencies"
},
"reference/config": {
"title": "Pattern configuration file",
"intro": "A pattern configuration file exports a default object with the following properties:",
"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.",
"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.",
"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.",
"order": "measurements",
"slug": "reference/config/measurements"
},
"reference/config/name": {
"title": "name",
"intro": "A string with the name of your pattern.",
"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.",
"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:",
"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:",
"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.",
"order": "degrees",
"slug": "reference/config/options/degrees"
},
"reference/config/options": {
"title": "options",
"intro": "Options come in 6 varities:",
"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.",
"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.",
"order": "millimeter",
"slug": "reference/config/options/millimeter"
},
"reference/config/options/percentage": {
"title": "percentage",
"intro": "Percentage options are the bread and butter of freesewing.",
"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.",
"order": "parts",
"slug": "reference/config/parts"
},
"reference/config/version": {
"title": "version",
"intro": "The version of your pattern.",
"order": "version",
"slug": "reference/config/version"
},
"reference/designs": {
"title": "Designs",
"intro": "We have a growing number of designs (sewing patterns).",
"order": "Designs",
"slug": "reference/designs"
},
"reference": {
"title": "Reference",
"intro": "FIXME_no_intro",
"order": "1040Reference",
"slug": "reference"
},
"reference/hooks": {
"title": "Hooks API",
"intro": "A is a lifecycle event.",
"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.",
"order": "insertText",
"slug": "reference/hooks/inserttext"
},
"reference/hooks/postdraft": {
"title": "postDraft",
"intro": "The postDraft hook runs just after your pattern is drafted.",
"order": "postDraft",
"slug": "reference/hooks/postdraft"
},
"reference/hooks/postrender": {
"title": "postRender",
"intro": "The postRender hook is triggered after the SVG is rendered.",
"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.",
"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.",
"order": "preRender",
"slug": "reference/hooks/prerender"
},
"reference/hooks/presample": {
"title": "preSample",
"intro": "The preSample hook runs just before your pattern is sampled.",
"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 .",
"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 .",
"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 .",
"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 .",
"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 .",
"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 .",
"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 .",
"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 .",
"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 .",
"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 .",
"order": "vd",
"slug": "reference/macros/vd"
},
"reference/packages/aaron": {
"title": "@freesewing/aaron",
"intro": "FIXME_no_intro",
"order": "@freesewing/aaron",
"slug": "reference/packages/aaron"
},
"reference/packages/benjamin": {
"title": "@freesewing/benjamin",
"intro": "FIXME_no_intro",
"order": "@freesewing/benjamin",
"slug": "reference/packages/benjamin"
},
"reference/packages/bent": {
"title": "@freesewing/bent",
"intro": "FIXME_no_intro",
"order": "@freesewing/bent",
"slug": "reference/packages/bent"
},
"reference/packages/breanna": {
"title": "@freesewing/breanna",
"intro": "FIXME_no_intro",
"order": "@freesewing/breanna",
"slug": "reference/packages/breanna"
},
"reference/packages/brian": {
"title": "@freesewing/brian",
"intro": "FIXME_no_intro",
"order": "@freesewing/brian",
"slug": "reference/packages/brian"
},
"reference/packages/bruce": {
"title": "@freesewing/bruce",
"intro": "FIXME_no_intro",
"order": "@freesewing/bruce",
"slug": "reference/packages/bruce"
},
"reference/packages/carlita": {
"title": "@freesewing/carlita",
"intro": "FIXME_no_intro",
"order": "@freesewing/carlita",
"slug": "reference/packages/carlita"
},
"reference/packages/carlton": {
"title": "@freesewing/carlton",
"intro": "FIXME_no_intro",
"order": "@freesewing/carlton",
"slug": "reference/packages/carlton"
},
"reference/packages/cathrin": {
"title": "@freesewing/cathrin",
"intro": "FIXME_no_intro",
"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.",
"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.",
"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:",
"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.",
"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.",
"order": "Linedrawing",
"slug": "reference/packages/components/linedrawing"
},
"reference/packages/components/logo": {
"title": "Logo",
"intro": "The Logo component renders the FreeSewing 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.",
"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.",
"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.",
"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:",
"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.",
"order": "@freesewing/css-theme",
"slug": "reference/packages/css-theme"
},
"reference/packages": {
"title": "Packages",
"intro": "FreeSewing publishes the following JavaScript packages on NPM :",
"order": "Packages",
"slug": "reference/packages"
},
"reference/packages/examples": {
"title": "@freesewing/examples",
"intro": "This pattern holds examples used throughout the documentation. Examples like this one:",
"order": "@freesewing/examples",
"slug": "reference/packages/examples"
},
"reference/packages/florence": {
"title": "@freesewing/florence",
"intro": "FIXME_no_intro",
"order": "@freesewing/florence",
"slug": "reference/packages/florence"
},
"reference/packages/florent": {
"title": "@freesewing/florent",
"intro": "FIXME_no_intro",
"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 .",
"order": "gatsby-remark-jargon",
"slug": "reference/packages/gatsby-remark-jargon"
},
"reference/packages/holmes": {
"title": "@freesewing/holmes",
"intro": "FIXME_no_intro",
"order": "@freesewing/holmes",
"slug": "reference/packages/holmes"
},
"reference/packages/huey": {
"title": "@freesewing/huey",
"intro": "FIXME_no_intro",
"order": "@freesewing/huey",
"slug": "reference/packages/huey"
},
"reference/packages/hugo": {
"title": "@freesewing/hugo",
"intro": "FIXME_no_intro",
"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.",
"order": "@freesewing/i18n",
"slug": "reference/packages/i18n"
},
"reference/packages/jaeger": {
"title": "@freesewing/jaeger",
"intro": "FIXME_no_intro",
"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.",
"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.",
"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.",
"order": "@freesewing/pattern-info",
"slug": "reference/packages/pattern-info"
},
"reference/packages/penelope": {
"title": "@freesewing/penelope",
"intro": "FIXME_no_intro",
"order": "@freesewing/penelope",
"slug": "reference/packages/penelope"
},
"reference/packages/plugin-bundle": {
"title": "@freesewing/plugin-bundle",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-bundle",
"slug": "reference/packages/plugin-bundle"
},
"reference/packages/plugin-bust": {
"title": "@freesewing/plugin-bust",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-bust",
"slug": "reference/packages/plugin-bust"
},
"reference/packages/plugin-buttons": {
"title": "@freesewing/plugin-buttons",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-buttons",
"slug": "reference/packages/plugin-buttons"
},
"reference/packages/plugin-cutonfold": {
"title": "@freesewing/plugin-cutonfold",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-cutonfold",
"slug": "reference/packages/plugin-cutonfold"
},
"reference/packages/plugin-dimension": {
"title": "@freesewing/plugin-dimension",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-dimension",
"slug": "reference/packages/plugin-dimension"
},
"reference/packages/plugin-flip": {
"title": "@freesewing/plugin-flip",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-flip",
"slug": "reference/packages/plugin-flip"
},
"reference/packages/plugin-gore": {
"title": "@freesewing/plugin-gore",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-gore",
"slug": "reference/packages/plugin-gore"
},
"reference/packages/plugin-grainline": {
"title": "@freesewing/plugin-grainline",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-grainline",
"slug": "reference/packages/plugin-grainline"
},
"reference/packages/plugin-i18n": {
"title": "@freesewing/plugin-i18n",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-i18n",
"slug": "reference/packages/plugin-i18n"
},
"reference/packages/plugin-logo": {
"title": "@freesewing/plugin-logo",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-logo",
"slug": "reference/packages/plugin-logo"
},
"reference/packages/plugin-round": {
"title": "@freesewing/plugin-round",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-round",
"slug": "reference/packages/plugin-round"
},
"reference/packages/plugin-scalebox": {
"title": "@freesewing/plugin-scalebox",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-scalebox",
"slug": "reference/packages/plugin-scalebox"
},
"reference/packages/plugin-sprinkle": {
"title": "@freesewing/plugin-sprinkle",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-sprinkle",
"slug": "reference/packages/plugin-sprinkle"
},
"reference/packages/plugin-svgattr": {
"title": "@freesewing/plugin-svgattr",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-svgattr",
"slug": "reference/packages/plugin-svgattr"
},
"reference/packages/plugin-theme": {
"title": "@freesewing/plugin-theme",
"intro": "FIXME_no_intro",
"order": "@freesewing/plugin-theme",
"slug": "reference/packages/plugin-theme"
},
"reference/packages/plugin-title": {
"title": "@freesewing/plugin-title",
"intro": "FIXME_no_intro",
"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.",
"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.",
"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",
"order": "@freesewing/sandy",
"slug": "reference/packages/sandy"
},
"reference/packages/shin": {
"title": "@freesewing/shin",
"intro": "FIXME_no_intro",
"order": "@freesewing/shin",
"slug": "reference/packages/shin"
},
"reference/packages/simon": {
"title": "@freesewing/simon",
"intro": "FIXME_no_intro",
"order": "@freesewing/simon",
"slug": "reference/packages/simon"
},
"reference/packages/simone": {
"title": "@freesewing/simone",
"intro": "FIXME_no_intro",
"order": "@freesewing/simone",
"slug": "reference/packages/simone"
},
"reference/packages/sven": {
"title": "@freesewing/sven",
"intro": "FIXME_no_intro",
"order": "@freesewing/sven",
"slug": "reference/packages/sven"
},
"reference/packages/tamiko": {
"title": "@freesewing/tamiko",
"intro": "FIXME_no_intro",
"order": "@freesewing/tamiko",
"slug": "reference/packages/tamiko"
},
"reference/packages/theo": {
"title": "@freesewing/theo",
"intro": "FIXME_no_intro",
"order": "@freesewing/theo",
"slug": "reference/packages/theo"
},
"reference/packages/trayvon": {
"title": "@freesewing/trayvon",
"intro": "FIXME_no_intro",
"order": "@freesewing/trayvon",
"slug": "reference/packages/trayvon"
},
"reference/packages/tutorial": {
"title": "@freesewing/tutorial",
"intro": "FIXME_no_intro",
"order": "@freesewing/tutorial",
"slug": "reference/packages/tutorial"
},
"reference/packages/utils": {
"title": "@freesewing/utils",
"intro": "A collection of utilities shared between different FreeSewing projects.",
"order": "@freesewing/utils",
"slug": "reference/packages/utils"
},
"reference/packages/wahid": {
"title": "@freesewing/wahid",
"intro": "FIXME_no_intro",
"order": "@freesewing/wahid",
"slug": "reference/packages/wahid"
},
"reference/packages/waralee": {
"title": "@freesewing/waralee",
"intro": "FIXME_no_intro",
"order": "@freesewing/waralee",
"slug": "reference/packages/waralee"
},
"reference/plugins/bartack": {
"title": "bartack",
"intro": " ",
"order": "bartack",
"slug": "reference/plugins/bartack"
},
"reference/plugins/bundle": {
"title": "bundle",
"intro": " ",
"order": "bundle",
"slug": "reference/plugins/bundle"
},
"reference/plugins/bust": {
"title": "bust",
"intro": " ",
"order": "bust",
"slug": "reference/plugins/bust"
},
"reference/plugins/buttons": {
"title": "buttons",
"intro": " ",
"order": "buttons",
"slug": "reference/plugins/buttons"
},
"reference/plugins/cutonfold": {
"title": "cutonfold",
"intro": " ",
"order": "cutonfold",
"slug": "reference/plugins/cutonfold"
},
"reference/plugins/dimension": {
"title": "dimension",
"intro": " ",
"order": "dimension",
"slug": "reference/plugins/dimension"
},
"reference/plugins": {
"title": "Plugins",
"intro": "The following FreeSewing plugins are available:",
"order": "Plugins",
"slug": "reference/plugins"
},
"reference/plugins/flip": {
"title": "flip",
"intro": " ",
"order": "flip",
"slug": "reference/plugins/flip"
},
"reference/plugins/grainline": {
"title": "grainline",
"intro": " ",
"order": "grainline",
"slug": "reference/plugins/grainline"
},
"reference/plugins/i18n": {
"title": "i18n",
"intro": " ",
"order": "i18n",
"slug": "reference/plugins/i18n"
},
"reference/plugins/logo": {
"title": "logo",
"intro": " ",
"order": "logo",
"slug": "reference/plugins/logo"
},
"reference/plugins/mirror": {
"title": "mirror",
"intro": " ",
"order": "mirror",
"slug": "reference/plugins/mirror"
},
"reference/plugins/round": {
"title": "round",
"intro": " ",
"order": "round",
"slug": "reference/plugins/round"
},
"reference/plugins/scalebox": {
"title": "scalebox",
"intro": " ",
"order": "scalebox",
"slug": "reference/plugins/scalebox"
},
"reference/plugins/sprinkle": {
"title": "sprinkle",
"intro": " ",
"order": "sprinkle",
"slug": "reference/plugins/sprinkle"
},
"reference/plugins/svgattr": {
"title": "svgattr",
"intro": " ",
"order": "svgattr",
"slug": "reference/plugins/svgattr"
},
"reference/plugins/theme": {
"title": "theme",
"intro": " ",
"order": "theme",
"slug": "reference/plugins/theme"
},
"reference/plugins/title": {
"title": "title",
"intro": " ",
"order": "title",
"slug": "reference/plugins/title"
},
"reference/repos/backend": {
"title": "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",
"intro": "FreeSewing uses the following 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.",
"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.",
"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.",
"order": "embed",
"slug": "reference/settings/embed"
},
"reference/settings": {
"title": "Settings",
"intro": "Settings are what the user passes to your pattern at run-time.",
"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- ).",
"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.",
"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:",
"order": "margin",
"slug": "reference/settings/margin"
},
"reference/settings/measurements": {
"title": "measurements",
"intro": "The measurements to draft for. The pattern configuration lists all required 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.",
"order": "only",
"slug": "reference/settings/only"
},
"reference/settings/options": {
"title": "options",
"intro": "The pattern options as specified in the pattern configuration.",
"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 .",
"order": "paperless",
"slug": "reference/settings/paperless"
},
"reference/settings/sa": {
"title": "sa",
"intro": "The seam allowance in mm.",
"order": "sa",
"slug": "reference/settings/sa"
},
"reference/settings/units": {
"title": "units",
"intro": "Either metric (the default) or imperial .",
"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",
"intro": "Snippets are provided by plugins. Follow the links below for more info on and an example of a specific snippet:",
"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.",
"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.",
"order": "snap-stud",
"slug": "reference/snippets/snap-stud"
},
"translators/empty": {
"title": " ",
"intro": "This page was intentionally left blank.",
"order": " ",
"slug": "translators/empty"
},
"translators": {
"title": "For translators",
"intro": "Freesewing is proudly multilingual. We currently support 5 languges:",
"order": "1140For translators",
"slug": "translators"
},
"tutorials": {
"title": "Tutorials",
"intro": "FIXME_no_intro",
"order": "1010Tutorials",
"slug": "tutorials"
},
"tutorials/getting-started-linux/create-freesewing-pattern": {
"title": "Setting 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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"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",
"intro": "Much like garments themselves, patterns are made up of .",
"order": "120Your first part",
"slug": "tutorials/pattern-design/your-first-part"
}
}