export default { "contributors/code-of-conduct": { "title": "Code of Conduct", "for": "contributors", "icons": [ "face", "heart" ], "about": "FreeSewing's code of conduct is based on the [contributor covenant](https://www.contributor-covenant.org/)\n", "intro": "Upholding our Code of Conduct is a requirement for all FreeSewing contributors", "slug": "contributors/code-of-conduct", "order": "Code of Conduct" }, "contributors/code-of-conduct/enforcement-guidelines/correction": { "slug": "contributors/code-of-conduct/enforcement-guidelines/correction" }, "contributors/code-of-conduct/enforcement-guidelines": { "slug": "contributors/code-of-conduct/enforcement-guidelines" }, "contributors/code-of-conduct/enforcement-guidelines/permanent-ban": { "slug": "contributors/code-of-conduct/enforcement-guidelines/permanent-ban" }, "contributors/code-of-conduct/enforcement-guidelines/temporary-ban": { "slug": "contributors/code-of-conduct/enforcement-guidelines/temporary-ban" }, "contributors/code-of-conduct/enforcement-guidelines/warning": { "title": "Warning", "order": "20Warning", "intro": "A violation through a single incident or series of actions.", "slug": "contributors/code-of-conduct/enforcement-guidelines/warning" }, "contributors/code-of-conduct/enforcement-responsibilities": { "slug": "contributors/code-of-conduct/enforcement-responsibilities" }, "contributors/code-of-conduct/enforcement": { "slug": "contributors/code-of-conduct/enforcement" }, "contributors/code-of-conduct/our-pledge": { "slug": "contributors/code-of-conduct/our-pledge" }, "contributors/code-of-conduct/our-standards": { "title": "Our standards", "order": "20Our standards", "intro": "Examples of behavior that contributes to a positive environment for our community include:", "slug": "contributors/code-of-conduct/our-standards" }, "contributors/code-of-conduct/scope": { "slug": "contributors/code-of-conduct/scope" }, "contributors": { "title": "For contributors", "order": "1110For contributors", "intro": "Thank you for being part of our community, and for wanting to contribute! ❤️", "slug": "contributors" }, "contributors/help": { "slug": "contributors/help" }, "contributors/terms/backend": { "title": "Backend", "intro": "The FreeSewing backend handles all user data for freesewing.org.", "slug": "contributors/terms/backend", "order": "Backend" }, "contributors/terms/commit": { "title": "Commit", "intro": "A commit is made every time somebody published an update to our source code.", "slug": "contributors/terms/commit", "order": "Commit" }, "contributors/terms/contributor-call": { "slug": "contributors/terms/contributor-call" }, "contributors/terms/contributor": { "slug": "contributors/terms/contributor" }, "contributors/terms/design-pattern": { "slug": "contributors/terms/design-pattern" }, "contributors/terms/developer": { "title": "Developer", "intro": "Anybody who works with software code or wants to learn to do so.", "slug": "contributors/terms/developer", "order": "Developer" }, "contributors/terms/discord": { "title": "Discord", "intro": "The name of our chat provider that powers our chat at https://discord.freesewing.org/", "slug": "contributors/terms/discord", "order": "Discord" }, "contributors/terms/editor": { "slug": "contributors/terms/editor" }, "contributors/terms": { "slug": "contributors/terms" }, "contributors/terms/express": { "title": "Express", "intro": "Express is a web framework for NodeJS.", "slug": "contributors/terms/express", "order": "Express" }, "contributors/terms/freesewing.dev": { "title": "freesewing.dev", "intro": "Our website for developers.", "slug": "contributors/terms/freesewing.dev", "order": "freesewing.dev" }, "contributors/terms/freesewing.org": { "title": "freesewing.org", "intro": "Our website for makers.", "slug": "contributors/terms/freesewing.org", "order": "freesewing.org" }, "contributors/terms/freesewing": { "title": "FreeSewing", "intro": "FreeSewing refers to the community-driven open source project.", "slug": "contributors/terms/freesewing", "order": "FreeSewing" }, "contributors/terms/frontend": { "title": "Frontend", "intro": "A user-facing interface. Can refer to one of our websites, or our development environment.", "slug": "contributors/terms/frontend", "order": "Frontend" }, "contributors/terms/gatsby": { "title": "Gatsby", "intro": "Gatsby is a static-site generator for React.", "slug": "contributors/terms/gatsby", "order": "Gatsby" }, "contributors/terms/i18n": { "slug": "contributors/terms/i18n" }, "contributors/terms/issue": { "slug": "contributors/terms/issue" }, "contributors/terms/javascript": { "slug": "contributors/terms/javascript" }, "contributors/terms/made-to-measure": { "title": "Made-to-measure", "intro": "Made to someone's (body) measurements, rather than based on specific sizes.", "slug": "contributors/terms/made-to-measure", "order": "Made-to-measure" }, "contributors/terms/markdown": { "slug": "contributors/terms/markdown" }, "contributors/terms/monorepo": { "slug": "contributors/terms/monorepo" }, "contributors/terms/node": { "title": "Node", "intro": "Node (or NodeJS) is a Javascript runtime that allows to use the language outside the browser.", "slug": "contributors/terms/node", "order": "Node" }, "contributors/terms/parametric-pattern-design": { "slug": "contributors/terms/parametric-pattern-design" }, "contributors/terms/patron": { "title": "Patron", "intro": "A person who supports FreeSewing financially.", "slug": "contributors/terms/patron", "order": "Patron" }, "contributors/terms/plugin": { "title": "Plugin", "intro": "An extension to FreeSewing core that provides an extra feature of functionality.", "slug": "contributors/terms/plugin", "order": "Plugin" }, "contributors/terms/pull-request": { "title": "Pull request", "intro": "A pull request is a proposal to commit changes to a repository.", "slug": "contributors/terms/pull-request", "order": "Pull request" }, "contributors/terms/react": { "title": "React", "intro": "React is a Javascript framework to build user interfaces on the web.", "slug": "contributors/terms/react", "order": "React" }, "contributors/terms/repo": { "title": "Repo", "intro": "Short for repository .", "slug": "contributors/terms/repo", "order": "Repo" }, "contributors/terms/repository": { "title": "Repository", "intro": "We develop our software collaboratively, and all code is available in Github in so-called repositories.", "slug": "contributors/terms/repository", "order": "Repository" }, "contributors/terms/tiler": { "slug": "contributors/terms/tiler" }, "contributors/terms/translator": { "title": "Translator", "intro": "Somebody who helps with our i18n efforts by translating from English to other languages.", "slug": "contributors/terms/translator", "order": "Translator" }, "contributors/ways-to-contribute/body-ambassador": { "slug": "contributors/ways-to-contribute/body-ambassador" }, "contributors/ways-to-contribute/community-building": { "slug": "contributors/ways-to-contribute/community-building" }, "contributors/ways-to-contribute/design-patterns": { "title": "Design sewing patterns", "intro": "Everybody wants us to add more patterns. But somebody has to design them.", "slug": "contributors/ways-to-contribute/design-patterns", "order": "Design sewing patterns" }, "contributors/ways-to-contribute/develop-patterns": { "slug": "contributors/ways-to-contribute/develop-patterns" }, "contributors/ways-to-contribute/devops": { "slug": "contributors/ways-to-contribute/devops" }, "contributors/ways-to-contribute": { "slug": "contributors/ways-to-contribute" }, "contributors/ways-to-contribute/illustrations": { "slug": "contributors/ways-to-contribute/illustrations" }, "contributors/ways-to-contribute/language-ambassador": { "slug": "contributors/ways-to-contribute/language-ambassador" }, "contributors/ways-to-contribute/pattern-ambassador": { "title": "Pattern ambassador", "intro": "You could take charge of a specific FreeSewing design/pattern.", "slug": "contributors/ways-to-contribute/pattern-ambassador", "order": "Pattern ambassador" }, "contributors/ways-to-contribute/pattern-testing": { "title": "Pattern testing", "intro": "You could make (a muslin for) our patterns prior to release to make sure everything is ok.", "slug": "contributors/ways-to-contribute/pattern-testing", "order": "Pattern testing" }, "contributors/ways-to-contribute/project-management": { "title": "Project management", "intro": "There's a lot going on within the FreeSewing project and it's easy to forget about something.", "slug": "contributors/ways-to-contribute/project-management", "order": "Project management" }, "contributors/ways-to-contribute/proofreading": { "slug": "contributors/ways-to-contribute/proofreading" }, "contributors/ways-to-contribute/report-bugs": { "slug": "contributors/ways-to-contribute/report-bugs" }, "contributors/ways-to-contribute/showcase-our-patterns": { "title": "Showcase our patterns", "intro": "Anytime somebody has made one of our patterns, we like to showcase it on freesewing.org .", "slug": "contributors/ways-to-contribute/showcase-our-patterns", "order": "Showcase our patterns" }, "contributors/ways-to-contribute/technical-writing/code": { "title": "Writing for freesewing.dev", "intro": "You could write documentation for freesewing.dev, our developers website.", "slug": "contributors/ways-to-contribute/technical-writing/code", "order": "Writing for freesewing.dev" }, "contributors/ways-to-contribute/technical-writing": { "title": "Technical writing", "intro": "FIXME_no_intro", "slug": "contributors/ways-to-contribute/technical-writing", "order": "Technical writing" }, "contributors/ways-to-contribute/technical-writing/patterns": { "title": "Writing for freesewing.org", "intro": "You could write documentation for freesewing.org, our makers website.", "slug": "contributors/ways-to-contribute/technical-writing/patterns", "order": "Writing for freesewing.org" }, "contributors/ways-to-contribute/translation": { "slug": "contributors/ways-to-contribute/translation" }, "contributors/ways-to-contribute/triage-issues": { "title": "Triage issues", "intro": "Triaging issues is a great way to get involved in FreeSewing. You can do tasks such as:", "slug": "contributors/ways-to-contribute/triage-issues", "order": "Triage issues" }, "contributors/ways-to-contribute/webdesign": { "title": "UI / UX Webdesign", "intro": "You could help us make our website and tools pretty and improve the user experience.", "slug": "contributors/ways-to-contribute/webdesign", "order": "UI / UX Webdesign" }, "developers/backend": { "title": "The freesewing backend", "intro": "Under construction", "slug": "developers/backend", "order": "The freesewing backend" }, "developers/dev": { "title": "The freesewing.dev website", "intro": "Under construction", "slug": "developers/dev", "order": "The freesewing.dev website" }, "developers": { "title": "For developers", "order": "1120For developers", "intro": "Welcome to the FreeSewing documentation for developers.", "slug": "developers" }, "developers/org": { "title": "The freesewing.org website", "intro": "Under construction", "slug": "developers/org", "order": "The freesewing.org website" }, "developers/svg2pdf": { "title": "The freesewing on-demand tiler", "intro": "Under construction", "slug": "developers/svg2pdf", "order": "The freesewing on-demand tiler" }, "developers/tiler": { "title": "Our tile command line tool", "intro": "Under construction", "slug": "developers/tiler", "order": "Our tile command line tool" }, "editors/content": { "title": "Content sources", "intro": "As an editor, you need to know where you can find/edit what type of content.", "slug": "editors/content", "order": "Content sources" }, "editors": { "title": "For editors", "order": "1130For editors", "intro": "Content is king, and as an content is your baby.", "slug": "editors" }, "editors/howtos/blogpost": { "title": "Adding a blog post", "for": "editors", "intro": "Blog posts have been migrated to Strapi , a headless CMS system.", "slug": "editors/howtos/blogpost", "order": "Adding a blog post" }, "editors/howtos": { "title": "Common tasks for editors", "intro": "Below is a list of commons tasks for editors", "slug": "editors/howtos", "order": "Common tasks for editors" }, "editors/howtos/frontmatter/about": { "title": "About frontmatter", "order": "10About frontmatter", "intro": "Frontmatter is a way to add metadata to markdown documents.", "slug": "editors/howtos/frontmatter/about" }, "editors/howtos/frontmatter": { "slug": "editors/howtos/frontmatter" }, "editors/howtos/frontmatter/lists": { "slug": "editors/howtos/frontmatter/lists" }, "editors/howtos/frontmatter/multi-line": { "slug": "editors/howtos/frontmatter/multi-line" }, "editors/howtos/frontmatter/structure": { "slug": "editors/howtos/frontmatter/structure" }, "editors/howtos/showcase": { "title": "Adding a showcase on freesewing.org", "for": "editors", "intro": "Showcase posts have been migrated to Strapi , a headless CMS system.", "slug": "editors/howtos/showcase", "order": "Adding a showcase on freesewing.org" }, "editors/markdown/code-blocks": { "slug": "editors/markdown/code-blocks" }, "editors/markdown/custom-components": { "title": "Custom components", "order": "90Custom components", "intro": "The way we render markdown on our websites is through the use of MDX . This allows us to extend Markdown with our own so-called .", "slug": "editors/markdown/custom-components" }, "editors/markdown/custom-components/example": { "slug": "editors/markdown/custom-components/example" }, "editors/markdown/custom-components/fixme": { "title": "Fixme", "order": "40Fixme", "intro": "I indicate that something needs work or improvement", "slug": "editors/markdown/custom-components/fixme" }, "editors/markdown/custom-components/hashtag": { "title": "Hashtag", "order": "60Hashtag", "intro": "Typically used on our community pages:", "slug": "editors/markdown/custom-components/hashtag" }, "editors/markdown/custom-components/note": { "title": "Note", "order": "10Note", "intro": "I point out things", "slug": "editors/markdown/custom-components/note" }, "editors/markdown/custom-components/readmore": { "title": "ReadMore", "order": "70ReadMore", "intro": "This component will list child pages of the current page.", "slug": "editors/markdown/custom-components/readmore" }, "editors/markdown/custom-components/readmore/example-1": { "title": "Example page 1", "intro": "This page is here to illustrate the use of the .", "slug": "editors/markdown/custom-components/readmore/example-1", "order": "Example page 1" }, "editors/markdown/custom-components/readmore/example-2": { "title": "Example page 2", "intro": "This page is here to illustrate the use of the .", "slug": "editors/markdown/custom-components/readmore/example-2", "order": "Example page 2" }, "editors/markdown/custom-components/readmore/example-2/sub-example-2-1": { "title": "Sub-example page 1", "intro": "This page is here to illustrate the use of the .", "slug": "editors/markdown/custom-components/readmore/example-2/sub-example-2-1", "order": "Sub-example page 1" }, "editors/markdown/custom-components/readmore/example-2/sub-example-2-2": { "title": "Sub-example page 2", "intro": "This page is here to illustrate the use of the .", "slug": "editors/markdown/custom-components/readmore/example-2/sub-example-2-2", "order": "Sub-example page 2" }, "editors/markdown/custom-components/tip": { "title": "Tip", "order": "20Tip", "intro": "I give great advice", "slug": "editors/markdown/custom-components/tip" }, "editors/markdown/custom-components/warning": { "title": "Warning", "order": "30Warning", "intro": "Ignore me at your own peril", "slug": "editors/markdown/custom-components/warning" }, "editors/markdown/custom-components/youtube": { "title": "YouTube", "order": "50YouTube", "intro": "This components will embed videos and playlists responsively.", "slug": "editors/markdown/custom-components/youtube" }, "editors/markdown": { "slug": "editors/markdown" }, "editors/markdown/headings": { "title": "Headings", "order": "40Headings", "intro": "Prefix your line with a number of # characters to determine the header level.", "slug": "editors/markdown/headings" }, "editors/markdown/images": { "slug": "editors/markdown/images" }, "editors/markdown/italic-and-bold": { "title": "Italics and bold", "order": "30Italics and bold", "intro": "You can make text or by wrapping it in 1 or 2 asterisk respectively:", "slug": "editors/markdown/italic-and-bold" }, "editors/markdown/line-breaks": { "slug": "editors/markdown/line-breaks" }, "editors/markdown/links": { "title": "Links", "order": "60Links", "intro": "Links combine square brackets for the link text with round brackets for the destination.", "slug": "editors/markdown/links" }, "editors/markdown/lists": { "title": "Lists", "order": "50Lists", "intro": "To make a list, just do as you would in plain text:", "slug": "editors/markdown/lists" }, "editors/markdown/tables": { "title": "Tables", "order": "70Tables", "intro": "If you need them, you can create tables too, using a structure as shown below:", "slug": "editors/markdown/tables" }, "editors/markdown/text-and-paragraphs": { "title": "Text and paragraphs", "order": "10Text and paragraphs", "intro": "For the most part, you can just write as you would in any other format.", "slug": "editors/markdown/text-and-paragraphs" }, "editors/style/colors": { "slug": "editors/style/colors" }, "editors/style": { "title": "Style guide", "order": "910Style guide", "intro": "FIXME_no_intro", "slug": "editors/style" }, "editors/style/typography": { "title": "Typography", "intro": "FIXME_no_intro", "slug": "editors/style/typography", "order": "Typography" }, "editors/style/typography/fonts": { "title": "Fonts", "order": "10Fonts", "intro": "We use three types of fonts:", "slug": "editors/style/typography/fonts" }, "editors/style/typography/headings": { "title": "Headings", "order": "30Headings", "intro": "Headings serve two different purposes:", "slug": "editors/style/typography/headings" }, "editors/style/typography/text": { "title": "Text and paragraphs", "order": "20Text and paragraphs", "intro": "Text is one of the most important things on the website, so we try to make it look good.", "slug": "editors/style/typography/text" }, "guides/best-practices": { "title": "Design guide", "order": "300Design guide", "for": "developers", "icons": [ "thumbup", "pattern" ], "about": "There's often many different ways to do things. Learn about our conventions and best practices", "goals": [ "Re-using measurement and options names", "Re-using CSS classes", "Respecting draft settings", "Using percentage options where possible", "Using translation keys for text", "Constructing paths counter-clockwise" ], "intro": "Here is a list of best practices when designing patterns:", "slug": "guides/best-practices" }, "guides/best-practices/go-counter-clockwise": { "slug": "guides/best-practices/go-counter-clockwise" }, "guides/best-practices/respect-draft-settings": { "slug": "guides/best-practices/respect-draft-settings" }, "guides/best-practices/reuse-css-classes": { "slug": "guides/best-practices/reuse-css-classes" }, "guides/best-practices/reuse-measurements": { "slug": "guides/best-practices/reuse-measurements" }, "guides/best-practices/reuse-options": { "title": "Re-use options", "order": "20Re-use options", "intro": "The same arguments for re-using measurements are also (somewhat) true for options.", "slug": "guides/best-practices/reuse-options" }, "guides/best-practices/use-percentages": { "title": "Use percentage options where possible", "order": "50Use percentage options where possible", "intro": "When designing patterns, you should refrain from using absolute values.", "slug": "guides/best-practices/use-percentages" }, "guides/best-practices/use-translation-keys": { "title": "Use translation keys, not text", "order": "60Use translation keys, not text", "intro": "Don't insert literal text in your patterns. Instead, insert a key that can then be translated.", "slug": "guides/best-practices/use-translation-keys" }, "guides": { "title": "Guides", "order": "1020Guides", "intro": "FIXME_no_intro", "slug": "guides" }, "guides/patterns/config": { "slug": "guides/patterns/config" }, "guides/patterns": { "slug": "guides/patterns" }, "guides/patterns/parts": { "slug": "guides/patterns/parts" }, "guides/patterns/paths": { "slug": "guides/patterns/paths" }, "guides/patterns/pattern": { "slug": "guides/patterns/pattern" }, "guides/patterns/points": { "slug": "guides/patterns/points" }, "guides/patterns/snippets": { "slug": "guides/patterns/snippets" }, "guides/patterns/store": { "slug": "guides/patterns/store" }, "guides/plugins/conditionally-loading-build-time-plugins": { "title": "Conditionally loading build-time plugins", "order": "30Conditionally loading build-time plugins", "intro": "You can choose to load your build-time plugin conditionally based on run-time data.", "slug": "guides/plugins/conditionally-loading-build-time-plugins" }, "guides/plugins": { "title": "Plugin guide", "order": "400Plugin guide", "icons": [ "logo", "plugin" ], "for": "developers", "about": "This guide shows you everything you need to know to understand plugins in FreeSewing, and create your own.\n", "goals": [ "Know about build-time plugins vs run-time plugins", "Understanding plugin structure", "Hooks and how to use them", "Using hooks without a plugin", "Using macros" ], "intro": "Plugins allow you to extend FreeSewing.", "slug": "guides/plugins" }, "guides/plugins/hooks": { "title": "Hooks", "order": "60Hooks", "intro": "A is a lifecycle event. The available hooks are:", "slug": "guides/plugins/hooks" }, "guides/plugins/loading-build-time-plugins": { "slug": "guides/plugins/loading-build-time-plugins" }, "guides/plugins/loading-run-time-plugins": { "slug": "guides/plugins/loading-run-time-plugins" }, "guides/plugins/macros": { "title": "Macros", "order": "90Macros", "intro": "Plugin structure for macros is similar, with a few changes:", "slug": "guides/plugins/macros" }, "guides/plugins/plugin-structure": { "title": "Plugin structure", "order": "50Plugin structure", "intro": "Plugins can do two things:", "slug": "guides/plugins/plugin-structure" }, "guides/plugins/types-of-plugins": { "title": "Types of plugins", "order": "10Types of plugins", "intro": "Plugins come in two flavours:", "slug": "guides/plugins/types-of-plugins" }, "guides/plugins/using-hooks-more-than-once": { "slug": "guides/plugins/using-hooks-more-than-once" }, "guides/plugins/using-hooks-without-plugin": { "slug": "guides/plugins/using-hooks-without-plugin" }, "guides/plugins/using-hooks": { "slug": "guides/plugins/using-hooks" }, "guides/prerequisites/bezier-curves": { "slug": "guides/prerequisites/bezier-curves" }, "guides/prerequisites/coordinate-system": { "slug": "guides/prerequisites/coordinate-system" }, "guides/prerequisites": { "slug": "guides/prerequisites" }, "guides/prerequisites/parametric-pattern-design": { "slug": "guides/prerequisites/parametric-pattern-design" }, "guides/prerequisites/svg": { "slug": "guides/prerequisites/svg" }, "guides/prerequisites/units": { "slug": "guides/prerequisites/units" }, "howtos/code/accessing-measurements": { "title": "Accessing measurements", "for": "developers", "about": "Shows you how to access user measurements from inside your pattern", "intro": "Measurements are stored in pattern.settings.measurements .", "slug": "howtos/code/accessing-measurements", "order": "Accessing measurements" }, "howtos/code/accessing-options": { "title": "Accessing user options", "for": "developers", "about": "Shows you how to access user options from inside your pattern", "intro": "Options are stored in pattern.settings.options .", "slug": "howtos/code/accessing-options", "order": "Accessing user options" }, "howtos/code/adding-instructions": { "slug": "howtos/code/adding-instructions" }, "howtos/code/adding-parts": { "slug": "howtos/code/adding-parts" }, "howtos/code/adding-paths": { "slug": "howtos/code/adding-paths" }, "howtos/code/adding-points": { "slug": "howtos/code/adding-points" }, "howtos/code/adding-snippets": { "slug": "howtos/code/adding-snippets" }, "howtos/code/adding-text": { "title": "Adding text", "for": "developers", "about": "Shows you how to add text to your pattern", "intro": "SVG is pretty great, but its text handling leaves much to be desired.", "slug": "howtos/code/adding-text", "order": "Adding text" }, "howtos/code/attributes": { "slug": "howtos/code/attributes" }, "howtos/code/create-new-design": { "slug": "howtos/code/create-new-design" }, "howtos/code/dependencies": { "slug": "howtos/code/dependencies" }, "howtos/code/drawing-circles": { "slug": "howtos/code/drawing-circles" }, "howtos/code": { "title": "Common code challenges", "intro": "Below is a list of examples of how to implement common tasks in code:", "slug": "howtos/code", "order": "Common code challenges" }, "howtos/code/extend-pattern": { "title": "Create a new design based on an existing design", "for": "developers", "about": "Shows how to create a variation of a pre-existing design", "intro": "To be able to extend existing patterns, you will have to access them on your local machine. There are two ways to do this:", "slug": "howtos/code/extend-pattern", "order": "Create a new design based on an existing design" }, "howtos/code/hide-paths": { "title": "Hide paths from an inherited part", "for": "developers", "about": "When you inherit a part, it comes with a bunch of paths. Here'show to hide them", "intro": "The example below is from Aaron which inherits from Brian.", "slug": "howtos/code/hide-paths", "order": "Hide paths from an inherited part" }, "howtos/code/inheritance": { "slug": "howtos/code/inheritance" }, "howtos/code/inject": { "slug": "howtos/code/inject" }, "howtos/code/macros": { "slug": "howtos/code/macros" }, "howtos/code/remove-paths": { "title": "Remove paths from an inherited part", "for": "developers", "about": "When you inherit a part, it comes with a bunch of paths. Here'show to remove them", "intro": "FIXME_no_intro", "slug": "howtos/code/remove-paths", "order": "Remove paths from an inherited part" }, "howtos/code/shared-dimensions": { "slug": "howtos/code/shared-dimensions" }, "howtos/code/shorthand": { "title": "Using shorthand", "for": "developers", "about": "Shows you how to use our shorthand method and notation", "intro": "The Part.shorthand() method will become your best friend.", "slug": "howtos/code/shorthand", "order": "Using shorthand" }, "howtos/code/store": { "slug": "howtos/code/store" }, "howtos/code/storing-path-length": { "slug": "howtos/code/storing-path-length" }, "howtos/design": { "title": "Common design challenges", "intro": "Below is a list of examples of how to implement common design challenges in code:", "slug": "howtos/design", "order": "Common design challenges" }, "howtos/design/fit-sleeve": { "slug": "howtos/design/fit-sleeve" }, "howtos/design/seam-allowance": { "slug": "howtos/design/seam-allowance" }, "howtos/design/slash-spread": { "slug": "howtos/design/slash-spread" }, "howtos/design/sprinkle-snippets": { "title": "Add several of the same snippets with the sprinkle macro", "for": "developers", "about": "Adding multiple snippets doesn't need to be a chore with this handy macro", "intro": "Adding multiple snippets at the same time results in a lot of repetitive code.", "slug": "howtos/design/sprinkle-snippets", "order": "Add several of the same snippets with the sprinkle macro" }, "howtos/dev": { "title": "Setting up your development environment", "intro": "FIXME_no_intro", "slug": "howtos/dev", "order": "Setting up your development environment" }, "howtos/dev/freesewing-dev": { "title": "Working on freesewing.dev", "for": "developers", "about": "Shows you how to setup your development environment to work on freesewing.dev, our website for developers", "intro": "To work on freesewing.dev, checkout the repository:", "slug": "howtos/dev/freesewing-dev", "order": "Working on freesewing.dev" }, "howtos/dev/freesewing-org": { "title": "Working on freesewing.org", "for": "developers", "about": "Shows you how to setup your development environment to work on freesewing.org, our website for makers", "intro": "To work on freesewing.org, checkout the repository:", "slug": "howtos/dev/freesewing-org", "order": "Working on freesewing.org" }, "howtos": { "title": "Howtos", "order": "1020Howtos", "intro": "FIXME_no_intro", "slug": "howtos" }, "reference/api/attributes/add": { "title": "add()", "intro": "Adds value to the attribute identified by key .", "slug": "reference/api/attributes/add", "order": "add()" }, "reference/api/attributes/clone": { "title": "clone()", "intro": "Returns a new Attributes object that is a deep copy of this one.", "slug": "reference/api/attributes/clone", "order": "clone()" }, "reference/api/attributes": { "title": "Attributes", "order": "40Attributes", "intro": "Attributes is an object that holds attributes for a variety of other objects.", "slug": "reference/api/attributes" }, "reference/api/attributes/get": { "title": "get()", "intro": "Will return the value of attribute stored under key , or false if it's not set.", "slug": "reference/api/attributes/get", "order": "get()" }, "reference/api/attributes/getasarray": { "title": "getAsArray()", "intro": "Will return an array with the value of attribute stored under key , or false if it's not set.", "slug": "reference/api/attributes/getasarray", "order": "getAsArray()" }, "reference/api/attributes/remove": { "title": "remove()", "intro": "Removes the attribute values under key and returns the Attributes object.", "slug": "reference/api/attributes/remove", "order": "remove()" }, "reference/api/attributes/set": { "title": "set()", "intro": "Sets the attribute identified by key to value value .", "slug": "reference/api/attributes/set", "order": "set()" }, "reference/api/attributes/setifunset": { "title": "setIfUnset()", "intro": "Sets the attribute identified by key to value value but only if it's currently unset ( undefined ).", "slug": "reference/api/attributes/setifunset", "order": "setIfUnset()" }, "reference/api/design": { "slug": "reference/api/design" }, "reference/api": { "slug": "reference/api" }, "reference/api/part": { "slug": "reference/api/part" }, "reference/api/part/getid": { "slug": "reference/api/part/getid" }, "reference/api/part/raise/debug": { "slug": "reference/api/part/raise/debug" }, "reference/api/part/raise": { "slug": "reference/api/part/raise" }, "reference/api/part/raise/error": { "slug": "reference/api/part/raise/error" }, "reference/api/part/raise/info": { "slug": "reference/api/part/raise/info" }, "reference/api/part/raise/warning": { "slug": "reference/api/part/raise/warning" }, "reference/api/part/shorthand": { "slug": "reference/api/part/shorthand" }, "reference/api/part/units": { "slug": "reference/api/part/units" }, "reference/api/path/_curve": { "slug": "reference/api/path/_curve" }, "reference/api/path/attr": { "title": "attr()", "intro": "This Path.attr() method calls this.attributes.add() under the hood, but returns the Path object.", "slug": "reference/api/path/attr", "order": "attr()" }, "reference/api/path/clone": { "title": "clone()", "intro": "Returns a new Path that is a deep copy of this path.", "slug": "reference/api/path/clone", "order": "clone()" }, "reference/api/path/close": { "title": "close()", "intro": "Closes a path by drawing a straight line from the current position to the path's start.", "slug": "reference/api/path/close", "order": "close()" }, "reference/api/path/curve": { "title": "curve()", "intro": "Draws a cubic Bezier curve from the current position via two control points to a given endpoint.", "slug": "reference/api/path/curve", "order": "curve()" }, "reference/api/path/curve_": { "slug": "reference/api/path/curve_" }, "reference/api/path/divide": { "slug": "reference/api/path/divide" }, "reference/api/path/edge": { "title": "edge()", "intro": "Returns the Point object at the edge of the path you specify. Edge must be one of:", "slug": "reference/api/path/edge", "order": "edge()" }, "reference/api/path": { "title": "Path", "order": "30Path", "intro": "A path represents an SVG path; The lines and curves on our pattern.", "slug": "reference/api/path" }, "reference/api/path/end": { "title": "end()", "intro": "Returns the Point object at the end of the path.", "slug": "reference/api/path/end", "order": "end()" }, "reference/api/path/insop": { "title": "insop()", "intro": "Injects a Path into the noop with id id .", "slug": "reference/api/path/insop", "order": "insop()" }, "reference/api/path/intersects": { "title": "intersects()", "intro": "Returns the Point object(s) where the path intersects with a path you pass it.", "slug": "reference/api/path/intersects", "order": "intersects()" }, "reference/api/path/intersectsx": { "title": "intersectsX()", "intro": "Returns the Point object(s) where the path intersects with a given X-value.", "slug": "reference/api/path/intersectsx", "order": "intersectsX()" }, "reference/api/path/intersectsy": { "title": "intersectsY()", "intro": "Returns the Point object(s) where the path intersects with a given Y-value.", "slug": "reference/api/path/intersectsy", "order": "intersectsY()" }, "reference/api/path/join": { "title": "join()", "intro": "Joins this path with another path.", "slug": "reference/api/path/join", "order": "join()" }, "reference/api/path/length": { "title": "length()", "intro": "Returns the length of the path.", "slug": "reference/api/path/length", "order": "length()" }, "reference/api/path/line": { "title": "line()", "intro": "Draws a straight line from the current position to a given point.", "slug": "reference/api/path/line", "order": "line()" }, "reference/api/path/move": { "title": "move()", "intro": "Moves to a given point without drawing a line.", "slug": "reference/api/path/move", "order": "move()" }, "reference/api/path/noop": { "title": "noop()", "intro": "Adds a placeholder path opertion. A noop operation does nothing, but is intended to be replaced later with Path.insop() .", "slug": "reference/api/path/noop", "order": "noop()" }, "reference/api/path/offset": { "title": "offset()", "intro": "Returns a new Path that is offset by distance from the original path.", "slug": "reference/api/path/offset", "order": "offset()" }, "reference/api/path/reverse": { "title": "reverse()", "intro": "Returns a path that is the reversed version of this path. As in, start becomes end, and end becomes start.", "slug": "reference/api/path/reverse", "order": "reverse()" }, "reference/api/path/setrender": { "slug": "reference/api/path/setrender" }, "reference/api/path/shiftalong": { "title": "shiftAlong()", "intro": "Returns a point that lies at distance travelled along the path.", "slug": "reference/api/path/shiftalong", "order": "shiftAlong()" }, "reference/api/path/shiftfractionalong": { "title": "shiftFractionAlong()", "intro": "Returns a point that lies at fraction of the length of the path travelled along the path.", "slug": "reference/api/path/shiftfractionalong", "order": "shiftFractionAlong()" }, "reference/api/path/split": { "title": "split", "intro": "Splits a path in two halves, on a point along that path that you pass it.", "slug": "reference/api/path/split", "order": "split" }, "reference/api/path/start": { "title": "start()", "intro": "Returns the Point object at the start of the path.", "slug": "reference/api/path/start", "order": "start()" }, "reference/api/path/translate": { "title": "translate()", "intro": "Returns a path with a translate transform applied.", "slug": "reference/api/path/translate", "order": "translate()" }, "reference/api/path/trim": { "title": "trim()", "intro": "Returns a new Path that is this path with overlapping parts removed.", "slug": "reference/api/path/trim", "order": "trim()" }, "reference/api/pattern/draft": { "slug": "reference/api/pattern/draft" }, "reference/api/pattern": { "slug": "reference/api/pattern" }, "reference/api/pattern/getrenderprops": { "slug": "reference/api/pattern/getrenderprops" }, "reference/api/pattern/on": { "slug": "reference/api/pattern/on" }, "reference/api/pattern/render": { "slug": "reference/api/pattern/render" }, "reference/api/pattern/sample": { "slug": "reference/api/pattern/sample" }, "reference/api/pattern/samplemeasurement": { "slug": "reference/api/pattern/samplemeasurement" }, "reference/api/pattern/samplemodels": { "slug": "reference/api/pattern/samplemodels" }, "reference/api/pattern/sampleoption": { "slug": "reference/api/pattern/sampleoption" }, "reference/api/pattern/use": { "slug": "reference/api/pattern/use" }, "reference/api/point/angle": { "slug": "reference/api/point/angle" }, "reference/api/point/attr": { "slug": "reference/api/point/attr" }, "reference/api/point/clone": { "title": "Point.clone()", "intro": "Returns a new Point with the same coordinates and attributes as the original point.", "slug": "reference/api/point/clone", "order": "Point.clone()" }, "reference/api/point/copy": { "slug": "reference/api/point/copy" }, "reference/api/point/dist": { "title": "Point.dist()", "intro": "A point's dist() method returns the distance (in mm) between this point and the point you pass it.", "slug": "reference/api/point/dist", "order": "Point.dist()" }, "reference/api/point/dx": { "title": "Point.dx()", "intro": "A point's dx() method returns the delta (in mm) along the X-axis between this point and the point you pass it.", "slug": "reference/api/point/dx", "order": "Point.dx()" }, "reference/api/point/dy": { "title": "Point.dy()", "intro": "A point's dy() method returns the delta (in mm) along the Y-axis between this point and the point you pass it.", "slug": "reference/api/point/dy", "order": "Point.dy()" }, "reference/api/point": { "title": "Point", "order": "25Point", "intro": "A Point object represents a point on a 2D plane with an X and Y axis.", "slug": "reference/api/point" }, "reference/api/point/flipx": { "slug": "reference/api/point/flipx" }, "reference/api/point/flipy": { "slug": "reference/api/point/flipy" }, "reference/api/point/rotate": { "slug": "reference/api/point/rotate" }, "reference/api/point/shift": { "slug": "reference/api/point/shift" }, "reference/api/point/shiftfractiontowards": { "slug": "reference/api/point/shiftfractiontowards" }, "reference/api/point/shiftoutwards": { "title": "Point.shiftOutwards()", "intro": "Returns a new Point that is shifted distance (mm) beyond the target in the direction of the target point.", "slug": "reference/api/point/shiftoutwards", "order": "Point.shiftOutwards()" }, "reference/api/point/shifttowards": { "title": "Point.shiftTowards()", "intro": "Returns a new Point that is shifted distance (mm) in the direction of the target .", "slug": "reference/api/point/shifttowards", "order": "Point.shiftTowards()" }, "reference/api/point/sitson": { "title": "Point.sitsOn()", "intro": "Returns true if this point has the same coordinates as the point you pass to it.", "slug": "reference/api/point/sitson", "order": "Point.sitsOn()" }, "reference/api/point/sitsroughlyon": { "title": "Point.sitsRoughlyOn()", "intro": "Returns true if this point has roughly (rounded to the nearest millimeter) the same coordinates as the one you pass to it.", "slug": "reference/api/point/sitsroughlyon", "order": "Point.sitsRoughlyOn()" }, "reference/api/point/translate": { "title": "Point.translate()", "intro": "Returns a new Point with a translate transform applied.", "slug": "reference/api/point/translate", "order": "Point.translate()" }, "reference/api/snippet/attr": { "slug": "reference/api/snippet/attr" }, "reference/api/snippet/clone": { "title": "clone()", "intro": "Returns a new Snippets object that is a deep copy of this one.", "slug": "reference/api/snippet/clone", "order": "clone()" }, "reference/api/snippet": { "slug": "reference/api/snippet" }, "reference/api/store": { "slug": "reference/api/store" }, "reference/api/store/get": { "title": "get()", "intro": "Returnes the value stored under key .", "slug": "reference/api/store/get", "order": "get()" }, "reference/api/store/set": { "title": "set()", "intro": "Stores the value of value in the store under key key .", "slug": "reference/api/store/set", "order": "set()" }, "reference/api/store/setifunset": { "slug": "reference/api/store/setifunset" }, "reference/api/svg/attributes": { "title": "attributes", "intro": "An Attributes instance that controls the attributes of the SVG tag.", "slug": "reference/api/svg/attributes", "order": "attributes" }, "reference/api/svg/defs": { "slug": "reference/api/svg/defs" }, "reference/api/svg": { "slug": "reference/api/svg" }, "reference/api/svg/head": { "slug": "reference/api/svg/head" }, "reference/api/svg/layout": { "slug": "reference/api/svg/layout" }, "reference/api/svg/pattern": { "title": "pattern", "intro": "A reference to the Pattern object .", "slug": "reference/api/svg/pattern", "order": "pattern" }, "reference/api/svg/prefix": { "title": "prefix", "intro": "A string that will be rendered before the opening SVG tag.", "slug": "reference/api/svg/prefix", "order": "prefix" }, "reference/api/svg/script": { "title": "script", "intro": "A string that will be rendered as the script section of the SVG document.", "slug": "reference/api/svg/script", "order": "script" }, "reference/api/svg/style": { "title": "style", "intro": "A string that will be rendered as the style section of the SVG document.", "slug": "reference/api/svg/style", "order": "style" }, "reference/api/svg/tail": { "title": "tail", "intro": "A string that closes both the group opened by Pattern.svg.head and the SVG tag.", "slug": "reference/api/svg/tail", "order": "tail" }, "reference/api/utils/beamintersectscircle": { "title": "beamIntersectsCircle()", "intro": "Finds the intersection between an endless line through points point1 and point2 and a circle with its center at point center and a radius of radius mm.", "slug": "reference/api/utils/beamintersectscircle", "order": "beamIntersectsCircle()" }, "reference/api/utils/beamintersectsx": { "slug": "reference/api/utils/beamintersectsx" }, "reference/api/utils/beamintersectsy": { "slug": "reference/api/utils/beamintersectsy" }, "reference/api/utils/beamsintersect": { "slug": "reference/api/utils/beamsintersect" }, "reference/api/utils/circlesintersect": { "title": "circlesIntersect()", "intro": "Finds the intersections between two circles described by their center point and radius.", "slug": "reference/api/utils/circlesintersect", "order": "circlesIntersect()" }, "reference/api/utils/curveintersectsx": { "title": "curveIntersectsX()", "intro": "Finds the point(s) where a curve intersects a given X-value.", "slug": "reference/api/utils/curveintersectsx", "order": "curveIntersectsX()" }, "reference/api/utils/curveintersectsy": { "title": "curveIntersectsY()", "intro": "Finds the point(s) where a curve intersects a given Y-value.", "slug": "reference/api/utils/curveintersectsy", "order": "curveIntersectsY()" }, "reference/api/utils/curvesintersect": { "title": "curvesIntersect()", "intro": "Finds the intersections between two curves described by 4 points each.", "slug": "reference/api/utils/curvesintersect", "order": "curvesIntersect()" }, "reference/api/utils/deg2rad": { "title": "deg2rad()", "intro": "Returns the degrees you pass to it as radians.", "slug": "reference/api/utils/deg2rad", "order": "deg2rad()" }, "reference/api/utils": { "title": "Utils", "order": "95Utils", "intro": "The Utils object provides the following utility methods to facilitate your work:", "slug": "reference/api/utils" }, "reference/api/utils/lineintersectscircle": { "title": "lineIntersectsCircle()", "intro": "Finds the intersection between a line segment from point from to point to and a circle with its center at point center and a radius of radius mm.", "slug": "reference/api/utils/lineintersectscircle", "order": "lineIntersectsCircle()" }, "reference/api/utils/lineintersectscurve": { "title": "lineIntersectsCurve()", "intro": "Finds the intersection between a line segment from point from to point to and a curve described by points start , cp1 , cp2, and end`.", "slug": "reference/api/utils/lineintersectscurve", "order": "lineIntersectsCurve()" }, "reference/api/utils/linesintersect": { "slug": "reference/api/utils/linesintersect" }, "reference/api/utils/pointonbeam": { "slug": "reference/api/utils/pointonbeam" }, "reference/api/utils/pointoncurve": { "title": "pointOnCurve()", "intro": "Returns true if the point check lies on a curve described by points start , cp1 , cp2 , and end .", "slug": "reference/api/utils/pointoncurve", "order": "pointOnCurve()" }, "reference/api/utils/pointonline": { "title": "pointOnLine()", "intro": "Returns true if the point check lies on a line segment from point from to point to .", "slug": "reference/api/utils/pointonline", "order": "pointOnLine()" }, "reference/api/utils/rad2deg": { "title": "rad2deg()", "intro": "Returns the radians you pass to it as degrees.", "slug": "reference/api/utils/rad2deg", "order": "rad2deg()" }, "reference/api/utils/round": { "title": "round()", "intro": "Rounds a value to two decimals. For example:", "slug": "reference/api/utils/round", "order": "round()" }, "reference/api/utils/stretchtoscale": { "title": "stretchToScale()", "intro": "The way people measure stretch intuitively is different from the way we handle stretch in code.", "slug": "reference/api/utils/stretchtoscale", "order": "stretchToScale()" }, "reference/api/utils/units": { "title": "units()", "intro": "Converts the units value you pass it into a formatted string for the format you pass it.", "slug": "reference/api/utils/units", "order": "units()" }, "reference/backend/account": { "slug": "reference/backend/account" }, "reference/backend": { "title": "Backend API", "for": "developers", "about": "Documentation for our backend REST API", "intro": "This documentation is outdated", "slug": "reference/backend", "order": "Backend API" }, "reference/backend/login": { "slug": "reference/backend/login" }, "reference/backend/models": { "title": "Models", "intro": "On success:", "slug": "reference/backend/models", "order": "Models" }, "reference/backend/oauth": { "title": "Oauth", "intro": "On success:", "slug": "reference/backend/oauth", "order": "Oauth" }, "reference/backend/recipes": { "title": "Recipes", "intro": "On success:", "slug": "reference/backend/recipes", "order": "Recipes" }, "reference/backend/signup": { "title": "Sign up", "intro": "On success:", "slug": "reference/backend/signup", "order": "Sign up" }, "reference/backend/users": { "title": "Users", "intro": "On success:", "slug": "reference/backend/users", "order": "Users" }, "reference/config/dependencies": { "title": "dependencies", "intro": "An object of key - value pairs that controls the order in which pattern parts will get drafted.", "slug": "reference/config/dependencies", "order": "dependencies" }, "reference/config": { "title": "Pattern configuration file", "for": "developers", "about": "Reference documentation for the pattern configuration file", "intro": "A pattern configuration file exports a default object with the following properties:", "slug": "reference/config", "order": "Pattern configuration file" }, "reference/config/hide": { "title": "hide", "intro": "An array that lists pattern parts that should be hidden by default.", "slug": "reference/config/hide", "order": "hide" }, "reference/config/inject": { "title": "inject", "intro": "An object of key/value pairs of parts. The value part will be injected in the key part.", "slug": "reference/config/inject", "order": "inject" }, "reference/config/measurements": { "title": "measurements", "intro": "An array with the names of the measurements required to draft this pattern.", "slug": "reference/config/measurements", "order": "measurements" }, "reference/config/name": { "title": "name", "intro": "A string with the name of your pattern.", "slug": "reference/config/name", "order": "name" }, "reference/config/optionalmeasurements": { "title": "optionalMeasurements", "intro": "An array with the names of optional measurements that can be used to draft this pattern.", "slug": "reference/config/optionalmeasurements", "order": "optionalMeasurements" }, "reference/config/options/boolean": { "title": "boolean", "intro": "If your option is either true or false , or or or or , you can use a boolean:", "slug": "reference/config/options/boolean", "order": "boolean" }, "reference/config/options/constant": { "title": "constant", "intro": "If your option is a scalar value (like a string or a number), it will be treated as a constant:", "slug": "reference/config/options/constant", "order": "constant" }, "reference/config/options/counter": { "slug": "reference/config/options/counter" }, "reference/config/options/degrees": { "title": "degrees", "intro": "For angles, use degrees.", "slug": "reference/config/options/degrees", "order": "degrees" }, "reference/config/options": { "title": "options", "intro": "Options come in 6 varities:", "slug": "reference/config/options", "order": "options" }, "reference/config/options/list": { "title": "list", "intro": "Use a list option when you want to offer an array of choices.", "slug": "reference/config/options/list", "order": "list" }, "reference/config/options/millimeter": { "title": "millimeter", "intro": "While we recommend using percentages where possible, sometimes that doesn't make sense.", "slug": "reference/config/options/millimeter", "order": "millimeter" }, "reference/config/options/percentage": { "title": "percentage", "intro": "Percentage options are the bread and butter of freesewing.", "slug": "reference/config/options/percentage", "order": "percentage" }, "reference/config/parts": { "title": "parts", "intro": "An array that lists your (additional) pattern parts. The name must be the key the pattern.parts object.", "slug": "reference/config/parts", "order": "parts" }, "reference/config/version": { "title": "version", "intro": "The version of your pattern.", "slug": "reference/config/version", "order": "version" }, "reference/designs": { "title": "Designs", "for": "contributors", "about": "Complete list of FreeSewing designs that we've put out", "intro": "We have a growing number of designs (sewing patterns).", "slug": "reference/designs", "order": "Designs" }, "reference": { "title": "Reference", "order": "1040Reference", "intro": "FIXME_no_intro", "slug": "reference" }, "reference/hooks": { "title": "Hooks API", "for": "developers", "about": "Documents the available lifecycle hooks in Core and how to use them", "intro": "A is a lifecycle event.", "slug": "reference/hooks", "order": "Hooks API" }, "reference/hooks/inserttext": { "title": "insertText", "intro": "The insertText hook is called when text is about to be inserted during rendering.", "slug": "reference/hooks/inserttext", "order": "insertText" }, "reference/hooks/postdraft": { "title": "postDraft", "intro": "The postDraft hook runs just after your pattern is drafted.", "slug": "reference/hooks/postdraft", "order": "postDraft" }, "reference/hooks/postrender": { "title": "postRender", "intro": "The postRender hook is triggered after the SVG is rendered.", "slug": "reference/hooks/postrender", "order": "postRender" }, "reference/hooks/postsample": { "slug": "reference/hooks/postsample" }, "reference/hooks/predraft": { "title": "preDraft", "intro": "The preDraft hook runs just before your pattern is drafted.", "slug": "reference/hooks/predraft", "order": "preDraft" }, "reference/hooks/prerender": { "title": "preRender", "intro": "The preRender hook is triggered just before your pattern is rendered to SVG.", "slug": "reference/hooks/prerender", "order": "preRender" }, "reference/hooks/presample": { "title": "preSample", "intro": "The preSample hook runs just before your pattern is sampled.", "slug": "reference/hooks/presample", "order": "preSample" }, "reference/macros/bartack": { "slug": "reference/macros/bartack" }, "reference/macros/bartackalong": { "slug": "reference/macros/bartackalong" }, "reference/macros/bartackfractionalong": { "slug": "reference/macros/bartackfractionalong" }, "reference/macros/cutonfold": { "title": "cutonfold", "intro": "The cutonfold macro adds a indicator to your pattern. It is provided by the cutonfold plugin .", "slug": "reference/macros/cutonfold", "order": "cutonfold" }, "reference/macros": { "slug": "reference/macros" }, "reference/macros/flip": { "title": "flip", "intro": "The flip macro flips (mirrors) an entire part vertically around the Y-axis. It takes no arguments, and is provided by the flip plugin .", "slug": "reference/macros/flip", "order": "flip" }, "reference/macros/grainline": { "title": "grainline", "intro": "The grainline macro adds a indicator to your pattern. It is provided by the grainline plugin .", "slug": "reference/macros/grainline", "order": "grainline" }, "reference/macros/hd": { "title": "hd", "intro": "The hd macro adds a to your pattern. It is provided by the dimension plugin .", "slug": "reference/macros/hd", "order": "hd" }, "reference/macros/ld": { "title": "ld", "intro": "The ld macro adds a to your pattern. It is provided by the dimension plugin .", "slug": "reference/macros/ld", "order": "ld" }, "reference/macros/miniscale": { "slug": "reference/macros/miniscale" }, "reference/macros/mirror": { "slug": "reference/macros/mirror" }, "reference/macros/pd": { "title": "pd", "intro": "The pd macro adds a to your pattern, indicating the length of a path. It is provided by the dimension plugin .", "slug": "reference/macros/pd", "order": "pd" }, "reference/macros/rmad": { "slug": "reference/macros/rmad" }, "reference/macros/rmd": { "slug": "reference/macros/rmd" }, "reference/macros/round": { "title": "round", "intro": "The round macro rounds a corner. It is provided by the round plugin .", "slug": "reference/macros/round", "order": "round" }, "reference/macros/scalebox": { "slug": "reference/macros/scalebox" }, "reference/macros/sprinkle": { "title": "sprinkle", "intro": "The sprinkle macro facilitates adding snippets to your pattern in bulk. It is by the sprinkle plugin .", "slug": "reference/macros/sprinkle", "order": "sprinkle" }, "reference/macros/title": { "title": "title", "intro": "The title macro adds a title to a pattern part. It is provided by the title plugin .", "slug": "reference/macros/title", "order": "title" }, "reference/macros/vd": { "title": "vd", "intro": "The vd macro adds a to your pattern. It is provided by the dimension plugin .", "slug": "reference/macros/vd", "order": "vd" }, "reference/packages/aaron": { "title": "@freesewing/aaron", "intro": "FIXME_no_intro", "slug": "reference/packages/aaron", "order": "@freesewing/aaron" }, "reference/packages/benjamin": { "title": "@freesewing/benjamin", "intro": "FIXME_no_intro", "slug": "reference/packages/benjamin", "order": "@freesewing/benjamin" }, "reference/packages/bent": { "title": "@freesewing/bent", "intro": "FIXME_no_intro", "slug": "reference/packages/bent", "order": "@freesewing/bent" }, "reference/packages/breanna": { "title": "@freesewing/breanna", "intro": "FIXME_no_intro", "slug": "reference/packages/breanna", "order": "@freesewing/breanna" }, "reference/packages/brian": { "title": "@freesewing/brian", "intro": "FIXME_no_intro", "slug": "reference/packages/brian", "order": "@freesewing/brian" }, "reference/packages/bruce": { "title": "@freesewing/bruce", "intro": "FIXME_no_intro", "slug": "reference/packages/bruce", "order": "@freesewing/bruce" }, "reference/packages/carlita": { "title": "@freesewing/carlita", "intro": "FIXME_no_intro", "slug": "reference/packages/carlita", "order": "@freesewing/carlita" }, "reference/packages/carlton": { "title": "@freesewing/carlton", "intro": "FIXME_no_intro", "slug": "reference/packages/carlton", "order": "@freesewing/carlton" }, "reference/packages/cathrin": { "title": "@freesewing/cathrin", "intro": "FIXME_no_intro", "slug": "reference/packages/cathrin", "order": "@freesewing/cathrin" }, "reference/packages/components/blockquote": { "slug": "reference/packages/components/blockquote" }, "reference/packages/components/draft": { "title": "Draft", "intro": "The Draft component renders a FreeSewing pattern in the browser as SVG.", "slug": "reference/packages/components/draft", "order": "Draft" }, "reference/packages/components/draftconfgurator": { "slug": "reference/packages/components/draftconfgurator" }, "reference/packages/components/emblem": { "title": "Emblem", "intro": "The Emblem component renders the freesewing word in the top-left of our navigation bar.", "slug": "reference/packages/components/emblem", "order": "Emblem" }, "reference/packages/components": { "title": "@freesewing/components", "intro": "This is a collection for React components for FreeSewing's websites:", "slug": "reference/packages/components", "order": "@freesewing/components" }, "reference/packages/components/example": { "slug": "reference/packages/components/example" }, "reference/packages/components/footer": { "title": "Footer", "intro": "The Footer component is the shared footer we use on our websites.", "slug": "reference/packages/components/footer", "order": "Footer" }, "reference/packages/components/icon": { "slug": "reference/packages/components/icon" }, "reference/packages/components/linedrawing": { "title": "Linedrawing", "intro": "The Linedrawing component renders linedrawings for the FreeSewing patterns.", "slug": "reference/packages/components/linedrawing", "order": "Linedrawing" }, "reference/packages/components/logo": { "title": "Logo", "intro": "The Logo component renders the FreeSewing logo.", "slug": "reference/packages/components/logo", "order": "Logo" }, "reference/packages/components/navbar": { "title": "Navbar", "intro": "The Navbar component is the shared navigation bar we use at the top of our websites.", "slug": "reference/packages/components/navbar", "order": "Navbar" }, "reference/packages/components/render": { "slug": "reference/packages/components/render" }, "reference/packages/components/robot": { "slug": "reference/packages/components/robot" }, "reference/packages/components/sampleconfigurator": { "slug": "reference/packages/components/sampleconfigurator" }, "reference/packages/components/spinner": { "title": "Spinner", "intro": "The Spinner component renders a loading indicator with the FreeSewing logo.", "slug": "reference/packages/components/spinner", "order": "Spinner" }, "reference/packages/components/withgist": { "slug": "reference/packages/components/withgist" }, "reference/packages/components/withlanguage": { "slug": "reference/packages/components/withlanguage" }, "reference/packages/components/withstorage": { "slug": "reference/packages/components/withstorage" }, "reference/packages/components/workbench": { "slug": "reference/packages/components/workbench" }, "reference/packages/core": { "title": "@freesewing/core", "intro": "This is the main FreeSewing library.", "slug": "reference/packages/core", "order": "@freesewing/core" }, "reference/packages/create-freesewing-pattern": { "title": "create-freesewing-pattern", "intro": "This is an npm initializer package to jump-start your FreeSewing pattern designs with:", "slug": "reference/packages/create-freesewing-pattern", "order": "create-freesewing-pattern" }, "reference/packages/css-theme": { "title": "@freesewing/css-theme", "intro": "This is the CSS that's used on FreeSewing's websites.", "slug": "reference/packages/css-theme", "order": "@freesewing/css-theme" }, "reference/packages": { "title": "Packages", "for": "developers", "about": "Complete list of all the packages we publish on NPM", "intro": "FreeSewing publishes the following JavaScript packages on NPM :", "slug": "reference/packages", "order": "Packages" }, "reference/packages/examples": { "title": "@freesewing/examples", "intro": "This pattern holds examples used throughout the documentation. Examples like this one:", "slug": "reference/packages/examples", "order": "@freesewing/examples" }, "reference/packages/florence": { "title": "@freesewing/florence", "intro": "FIXME_no_intro", "slug": "reference/packages/florence", "order": "@freesewing/florence" }, "reference/packages/florent": { "title": "@freesewing/florent", "intro": "FIXME_no_intro", "slug": "reference/packages/florent", "order": "@freesewing/florent" }, "reference/packages/gatsby-remark-jargon": { "title": "gatsby-remark-jargon", "intro": "This is a Gatsby plugin that wraps our remark-jargon plugin for Remark .", "slug": "reference/packages/gatsby-remark-jargon", "order": "gatsby-remark-jargon" }, "reference/packages/holmes": { "title": "@freesewing/holmes", "intro": "FIXME_no_intro", "slug": "reference/packages/holmes", "order": "@freesewing/holmes" }, "reference/packages/huey": { "title": "@freesewing/huey", "intro": "FIXME_no_intro", "slug": "reference/packages/huey", "order": "@freesewing/huey" }, "reference/packages/hugo": { "title": "@freesewing/hugo", "intro": "FIXME_no_intro", "slug": "reference/packages/hugo", "order": "@freesewing/hugo" }, "reference/packages/i18n": { "title": "@freesewing/i18n", "intro": "These are the string translations for FreeSewing's websites and patterns.", "slug": "reference/packages/i18n", "order": "@freesewing/i18n" }, "reference/packages/jaeger": { "title": "@freesewing/jaeger", "intro": "FIXME_no_intro", "slug": "reference/packages/jaeger", "order": "@freesewing/jaeger" }, "reference/packages/models": { "title": "@freesewing/models", "intro": "This package provides a set of standard-sized measurements to test your patterns with.", "slug": "reference/packages/models", "order": "@freesewing/models" }, "reference/packages/mui-theme": { "title": "@freesewing/mui-theme", "intro": "This is the Material-ui theme that's used on FreeSewing's websites.", "slug": "reference/packages/mui-theme", "order": "@freesewing/mui-theme" }, "reference/packages/pattern-info": { "title": "@freesewing/pattern-info", "intro": "This package provides information about FreeSewing patterns.", "slug": "reference/packages/pattern-info", "order": "@freesewing/pattern-info" }, "reference/packages/penelope": { "title": "@freesewing/penelope", "intro": "FIXME_no_intro", "slug": "reference/packages/penelope", "order": "@freesewing/penelope" }, "reference/packages/plugin-bundle": { "title": "@freesewing/plugin-bundle", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-bundle", "order": "@freesewing/plugin-bundle" }, "reference/packages/plugin-bust": { "title": "@freesewing/plugin-bust", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-bust", "order": "@freesewing/plugin-bust" }, "reference/packages/plugin-buttons": { "title": "@freesewing/plugin-buttons", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-buttons", "order": "@freesewing/plugin-buttons" }, "reference/packages/plugin-cutonfold": { "title": "@freesewing/plugin-cutonfold", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-cutonfold", "order": "@freesewing/plugin-cutonfold" }, "reference/packages/plugin-dimension": { "title": "@freesewing/plugin-dimension", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-dimension", "order": "@freesewing/plugin-dimension" }, "reference/packages/plugin-flip": { "title": "@freesewing/plugin-flip", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-flip", "order": "@freesewing/plugin-flip" }, "reference/packages/plugin-gore": { "title": "@freesewing/plugin-gore", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-gore", "order": "@freesewing/plugin-gore" }, "reference/packages/plugin-grainline": { "title": "@freesewing/plugin-grainline", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-grainline", "order": "@freesewing/plugin-grainline" }, "reference/packages/plugin-i18n": { "title": "@freesewing/plugin-i18n", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-i18n", "order": "@freesewing/plugin-i18n" }, "reference/packages/plugin-logo": { "title": "@freesewing/plugin-logo", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-logo", "order": "@freesewing/plugin-logo" }, "reference/packages/plugin-round": { "title": "@freesewing/plugin-round", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-round", "order": "@freesewing/plugin-round" }, "reference/packages/plugin-scalebox": { "title": "@freesewing/plugin-scalebox", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-scalebox", "order": "@freesewing/plugin-scalebox" }, "reference/packages/plugin-sprinkle": { "title": "@freesewing/plugin-sprinkle", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-sprinkle", "order": "@freesewing/plugin-sprinkle" }, "reference/packages/plugin-svgattr": { "title": "@freesewing/plugin-svgattr", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-svgattr", "order": "@freesewing/plugin-svgattr" }, "reference/packages/plugin-theme": { "title": "@freesewing/plugin-theme", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-theme", "order": "@freesewing/plugin-theme" }, "reference/packages/plugin-title": { "title": "@freesewing/plugin-title", "intro": "FIXME_no_intro", "slug": "reference/packages/plugin-title", "order": "@freesewing/plugin-title" }, "reference/packages/prettier-config": { "title": "@freesewing/prettier-config", "intro": "This is FreeSewing's Prettier configuration, to be shared across projects.", "slug": "reference/packages/prettier-config", "order": "@freesewing/prettier-config" }, "reference/packages/remark-jargon": { "title": "remark-jargon", "intro": "This is a Remark plugin for jargon terms.", "slug": "reference/packages/remark-jargon", "order": "remark-jargon" }, "reference/packages/rendertest": { "slug": "reference/packages/rendertest" }, "reference/packages/sandy": { "title": "@freesewing/sandy", "intro": "FIXME_no_intro", "slug": "reference/packages/sandy", "order": "@freesewing/sandy" }, "reference/packages/shin": { "title": "@freesewing/shin", "intro": "FIXME_no_intro", "slug": "reference/packages/shin", "order": "@freesewing/shin" }, "reference/packages/simon": { "title": "@freesewing/simon", "intro": "FIXME_no_intro", "slug": "reference/packages/simon", "order": "@freesewing/simon" }, "reference/packages/simone": { "title": "@freesewing/simone", "intro": "FIXME_no_intro", "slug": "reference/packages/simone", "order": "@freesewing/simone" }, "reference/packages/sven": { "title": "@freesewing/sven", "intro": "FIXME_no_intro", "slug": "reference/packages/sven", "order": "@freesewing/sven" }, "reference/packages/tamiko": { "title": "@freesewing/tamiko", "intro": "FIXME_no_intro", "slug": "reference/packages/tamiko", "order": "@freesewing/tamiko" }, "reference/packages/theo": { "title": "@freesewing/theo", "intro": "FIXME_no_intro", "slug": "reference/packages/theo", "order": "@freesewing/theo" }, "reference/packages/trayvon": { "title": "@freesewing/trayvon", "intro": "FIXME_no_intro", "slug": "reference/packages/trayvon", "order": "@freesewing/trayvon" }, "reference/packages/tutorial": { "title": "@freesewing/tutorial", "intro": "FIXME_no_intro", "slug": "reference/packages/tutorial", "order": "@freesewing/tutorial" }, "reference/packages/utils": { "title": "@freesewing/utils", "intro": "A collection of utilities shared between different FreeSewing projects.", "slug": "reference/packages/utils", "order": "@freesewing/utils" }, "reference/packages/wahid": { "title": "@freesewing/wahid", "intro": "FIXME_no_intro", "slug": "reference/packages/wahid", "order": "@freesewing/wahid" }, "reference/packages/waralee": { "title": "@freesewing/waralee", "intro": "FIXME_no_intro", "slug": "reference/packages/waralee", "order": "@freesewing/waralee" }, "reference/plugins/bartack": { "title": "bartack", "intro": " ", "slug": "reference/plugins/bartack", "order": "bartack" }, "reference/plugins/bundle": { "title": "bundle", "intro": " ", "slug": "reference/plugins/bundle", "order": "bundle" }, "reference/plugins/bust": { "title": "bust", "intro": " ", "slug": "reference/plugins/bust", "order": "bust" }, "reference/plugins/buttons": { "title": "buttons", "intro": " ", "slug": "reference/plugins/buttons", "order": "buttons" }, "reference/plugins/cutonfold": { "title": "cutonfold", "intro": " ", "slug": "reference/plugins/cutonfold", "order": "cutonfold" }, "reference/plugins/dimension": { "title": "dimension", "intro": " ", "slug": "reference/plugins/dimension", "order": "dimension" }, "reference/plugins": { "title": "Plugins", "for": "developers", "about": "Complete list of all the plugins available for FreeSewing core", "intro": "The following FreeSewing plugins are available:", "slug": "reference/plugins", "order": "Plugins" }, "reference/plugins/flip": { "title": "flip", "intro": " ", "slug": "reference/plugins/flip", "order": "flip" }, "reference/plugins/grainline": { "title": "grainline", "intro": " ", "slug": "reference/plugins/grainline", "order": "grainline" }, "reference/plugins/i18n": { "title": "i18n", "intro": " ", "slug": "reference/plugins/i18n", "order": "i18n" }, "reference/plugins/logo": { "title": "logo", "intro": " ", "slug": "reference/plugins/logo", "order": "logo" }, "reference/plugins/mirror": { "title": "mirror", "intro": " ", "slug": "reference/plugins/mirror", "order": "mirror" }, "reference/plugins/round": { "title": "round", "intro": " ", "slug": "reference/plugins/round", "order": "round" }, "reference/plugins/scalebox": { "title": "scalebox", "intro": " ", "slug": "reference/plugins/scalebox", "order": "scalebox" }, "reference/plugins/sprinkle": { "title": "sprinkle", "intro": " ", "slug": "reference/plugins/sprinkle", "order": "sprinkle" }, "reference/plugins/svgattr": { "title": "svgattr", "intro": " ", "slug": "reference/plugins/svgattr", "order": "svgattr" }, "reference/plugins/theme": { "title": "theme", "intro": " ", "slug": "reference/plugins/theme", "order": "theme" }, "reference/plugins/title": { "title": "title", "intro": " ", "slug": "reference/plugins/title", "order": "title" }, "reference/repos/backend": { "title": "backend", "intro": "See also: The backend API reference", "slug": "reference/repos/backend", "order": "backend" }, "reference/repos": { "title": "Repositories", "for": "contributors", "about": "Complete list of all FreeSewing software repositories", "intro": "FreeSewing uses the following repositories:", "slug": "reference/repos", "order": "Repositories" }, "reference/repos/freesewing.dev": { "slug": "reference/repos/freesewing.dev" }, "reference/repos/freesewing.org": { "title": "freesewing.org", "intro": "This is the source code for FreeSewing.org , our main website.", "slug": "reference/repos/freesewing.org", "order": "freesewing.org" }, "reference/repos/freesewing": { "slug": "reference/repos/freesewing" }, "reference/repos/svgtopdf": { "slug": "reference/repos/svgtopdf" }, "reference/repos/tile": { "title": "tile", "intro": "This is a PostScript tiler, a command line utility written in C.", "slug": "reference/repos/tile", "order": "tile" }, "reference/settings/complete": { "slug": "reference/settings/complete" }, "reference/settings/embed": { "title": "embed", "intro": "Set to true to make SVG output suitable for embedding in a web page.", "slug": "reference/settings/embed", "order": "embed" }, "reference/settings": { "title": "Settings", "for": "developers", "about": "Documents all the settings your pattern can receive, including the pattern options, measurmeents, and design options", "intro": "Settings are what the user passes to your pattern at run-time.", "slug": "reference/settings", "order": "Settings" }, "reference/settings/idprefix": { "title": "idPrefix", "intro": "Prefixes all IDs in the SVG with the string you pass it. (defaults to fs- ).", "slug": "reference/settings/idprefix", "order": "idPrefix" }, "reference/settings/layout": { "slug": "reference/settings/layout" }, "reference/settings/locale": { "title": "locale", "intro": "A 2-letter language code that indicates what language the user wants.", "slug": "reference/settings/locale", "order": "locale" }, "reference/settings/margin": { "title": "margin", "intro": "Allows you to specify a part margin (in mm). The default is 2mm. Each part will have this margin applied. This means that:", "slug": "reference/settings/margin", "order": "margin" }, "reference/settings/measurements": { "title": "measurements", "intro": "The measurements to draft for. The pattern configuration lists all required measurements.", "slug": "reference/settings/measurements", "order": "measurements" }, "reference/settings/only": { "title": "only", "intro": "Allows you to specify one or more parts to draft/render, rather than the entire pattern.", "slug": "reference/settings/only", "order": "only" }, "reference/settings/options": { "title": "options", "intro": "The pattern options as specified in the pattern configuration.", "slug": "reference/settings/options", "order": "options" }, "reference/settings/paperless": { "title": "paperless", "intro": "Set this to true to draft a paperless pattern. The default is false .", "slug": "reference/settings/paperless", "order": "paperless" }, "reference/settings/sa": { "title": "sa", "intro": "The seam allowance in mm.", "slug": "reference/settings/sa", "order": "sa" }, "reference/settings/units": { "title": "units", "intro": "Either metric (the default) or imperial .", "slug": "reference/settings/units", "order": "units" }, "reference/snippets/bnotch": { "slug": "reference/snippets/bnotch" }, "reference/snippets/button": { "slug": "reference/snippets/button" }, "reference/snippets/buttonhole-end": { "slug": "reference/snippets/buttonhole-end" }, "reference/snippets/buttonhole-start": { "slug": "reference/snippets/buttonhole-start" }, "reference/snippets/buttonhole": { "slug": "reference/snippets/buttonhole" }, "reference/snippets": { "title": "Snippets", "for": "developers", "about": "Complete list of all the available snippets", "intro": "Snippets are provided by plugins. Follow the links below for more info on and an example of a specific snippet:", "slug": "reference/snippets", "order": "Snippets" }, "reference/snippets/logo": { "slug": "reference/snippets/logo" }, "reference/snippets/notch": { "slug": "reference/snippets/notch" }, "reference/snippets/snap-socket": { "title": "snap-socket", "intro": "The snap-socket snippet is used to mark the socket part of a snap button.", "slug": "reference/snippets/snap-socket", "order": "snap-socket" }, "reference/snippets/snap-stud": { "title": "snap-stud", "intro": "The snap-stud snippet is used to mark the stud part of a snap button.", "slug": "reference/snippets/snap-stud", "order": "snap-stud" }, "translators/empty": { "title": " ", "intro": "This page was intentionally left blank.", "slug": "translators/empty", "order": " " }, "translators": { "title": "For translators", "order": "1140For translators", "intro": "Freesewing is proudly multilingual. We currently support 5 languges:", "slug": "translators" }, "tutorials": { "title": "Tutorials", "order": "1010Tutorials", "intro": "FIXME_no_intro", "slug": "tutorials" }, "tutorials/getting-started-linux/create-freesewing-pattern": { "title": "Setting up the FreeSewing development environment", "order": "40Setting up the FreeSewing development environment", "intro": "FreeSewing provides a development environment to help you design and develop patterns.", "slug": "tutorials/getting-started-linux/create-freesewing-pattern" }, "tutorials/getting-started-linux": { "slug": "tutorials/getting-started-linux" }, "tutorials/getting-started-linux/installing-node": { "title": "Installing Node", "order": "20Installing Node", "intro": "Now we will use nvm to install Node JS. Run the following command:", "slug": "tutorials/getting-started-linux/installing-node" }, "tutorials/getting-started-linux/installing-nvm": { "title": "Installing nvm", "order": "10Installing nvm", "intro": "FreeSewing is built with Node.js , a JavaScript runtime.", "slug": "tutorials/getting-started-linux/installing-nvm" }, "tutorials/getting-started-linux/node-versions": { "slug": "tutorials/getting-started-linux/node-versions" }, "tutorials/getting-started-linux/start-development-environment": { "slug": "tutorials/getting-started-linux/start-development-environment" }, "tutorials/getting-started-mac/create-freesewing-pattern": { "title": "Setting up the FreeSewing development environment", "order": "50Setting up the FreeSewing development environment", "intro": "FreeSewing provides a development environment to help you design and develop patterns.", "slug": "tutorials/getting-started-mac/create-freesewing-pattern" }, "tutorials/getting-started-mac": { "slug": "tutorials/getting-started-mac" }, "tutorials/getting-started-mac/installing-node": { "title": "Installing Node", "order": "30Installing Node", "intro": "Now we will use nvm to install Node JS. Run the following command:", "slug": "tutorials/getting-started-mac/installing-node" }, "tutorials/getting-started-mac/installing-nvm": { "title": "Installing nvm", "order": "20Installing nvm", "intro": "FreeSewing is built with Node.js , a JavaScript runtime.", "slug": "tutorials/getting-started-mac/installing-nvm" }, "tutorials/getting-started-mac/installing-xcode": { "slug": "tutorials/getting-started-mac/installing-xcode" }, "tutorials/getting-started-mac/node-versions": { "slug": "tutorials/getting-started-mac/node-versions" }, "tutorials/getting-started-mac/start-development-environment": { "slug": "tutorials/getting-started-mac/start-development-environment" }, "tutorials/getting-started-windows": { "title": "Getting started on Windows", "order": "30Getting started on Windows", "for": "developers", "icons": [ "start", "windows" ], "about": "You'll learn how to setup Node JS on a Windows system, \nas well as initialize the FreeSewing development environment.\n", "goals": [ "Install Node JS using nvm", "Chosing a Node version to use", "Initializing the FreeSewing development environment", "Starting the FreeSewing development environment" ], "intro": "If you already have a working WSL environment and VSCode Remote configured you can follow the getting started on Linux guide or skip ahead to Setting up the FreeSewing development environment (WSL) . If not, the following process is very similar but has some differences to avoid quirks specific to this environment.", "slug": "tutorials/getting-started-windows" }, "tutorials/pattern-design/adding-measurements": { "slug": "tutorials/pattern-design/adding-measurements" }, "tutorials/pattern-design/adding-options": { "slug": "tutorials/pattern-design/adding-options" }, "tutorials/pattern-design/avoiding-overlap": { "slug": "tutorials/pattern-design/avoiding-overlap" }, "tutorials/pattern-design/completing-the-neck-opening": { "slug": "tutorials/pattern-design/completing-the-neck-opening" }, "tutorials/pattern-design/completing-your-pattern": { "title": "Completing your pattern", "order": "260Completing your pattern", "intro": "When we started out, we said a good part boilerplate looks like this:", "slug": "tutorials/pattern-design/completing-your-pattern" }, "tutorials/pattern-design/conclusion": { "slug": "tutorials/pattern-design/conclusion" }, "tutorials/pattern-design/constructing-the-neck-opening": { "slug": "tutorials/pattern-design/constructing-the-neck-opening" }, "tutorials/pattern-design/create-freesewing-pattern": { "title": "Setting up the development environment", "order": "100Setting up the development environment", "intro": "If you already set up the FreeSewing development environment and created a pattern, you can use that pattern and skip these steps. You can move on to Your first part .", "slug": "tutorials/pattern-design/create-freesewing-pattern" }, "tutorials/pattern-design/creating-the-closure": { "slug": "tutorials/pattern-design/creating-the-closure" }, "tutorials/pattern-design/drawing-the-bib-outline": { "title": "Drawing the bib outline", "order": "190Drawing the bib outline", "intro": "With our neck opening in place, let's draw the basic outline of our bib:", "slug": "tutorials/pattern-design/drawing-the-bib-outline" }, "tutorials/pattern-design/drawing-the-straps": { "slug": "tutorials/pattern-design/drawing-the-straps" }, "tutorials/pattern-design": { "slug": "tutorials/pattern-design" }, "tutorials/pattern-design/fitting-the-neck-opening": { "title": "Fitting the neck opening", "order": "170Fitting the neck opening", "intro": "Here's how we'll make sure the neck opening is :", "slug": "tutorials/pattern-design/fitting-the-neck-opening" }, "tutorials/pattern-design/paperless-bib": { "title": "Making your pattern paperless", "order": "270Making your pattern paperless", "intro": "Users can request paperless patterns by setting the paperless setting to true .", "slug": "tutorials/pattern-design/paperless-bib" }, "tutorials/pattern-design/part-structure": { "slug": "tutorials/pattern-design/part-structure" }, "tutorials/pattern-design/rounding-the-corners": { "title": "Rounding the corners", "order": "240Rounding the corners", "intro": "We already know how to round corners, let the round macro do it:", "slug": "tutorials/pattern-design/rounding-the-corners" }, "tutorials/pattern-design/shaping-the-straps": { "slug": "tutorials/pattern-design/shaping-the-straps" }, "tutorials/pattern-design/testing-your-pattern": { "slug": "tutorials/pattern-design/testing-your-pattern" }, "tutorials/pattern-design/your-first-part": { "title": "Your first part", "order": "120Your first part", "intro": "Much like garments themselves, patterns are made up of .", "slug": "tutorials/pattern-design/your-first-part" } }