1
0
Fork 0
freesewing/sites/dev/docs/tutorials/pattern-design/part2/adding-options
Joost De Cock 469eb43c95
feat: Add various content types to docusaurus (#7231)
This brings blog posts, showcase posts, and newsletter editions into the Docusaurus site.

It also adds support for using TailwindCSS inside a container. So this will probably end up being the new freesewing.org site in v4.
2024-11-18 11:05:16 +01:00
..
readme.mdx feat: Add various content types to docusaurus (#7231) 2024-11-18 11:05:16 +01:00

---
title: Adding options
sidebar_position: 40
---

I have shown what our bib should look like, and added the _head_ measurement
to work with. But there's still a number of choices I have to make:

- How large should the neck opening be?
- How wide should the bib be?
- How long should the bib be?

I could make all of these choices for the user and set them in stone, so to speak.

But since the pattern I am designing is code, it is trivial (and _IMHO_ very satisfying)
to make a pattern flexible and let the user choose.
All I need to do to give control to the user is add _options_ to the part.

## Add the neckRatio option

The first option I will add controls the ratio between the neck opening
and the head circumference. Let's call it `neckRatio`.

For this, I will add the `options` property to our `bib` object:

```design/src/bib.mjs
function draftBib({ part }) {
  return part
}

export const bib = {
  name: 'fromscratch.bib',
  draft: draftBib,
  measurements: [ 'head' ],
  // highlight-start
  options: {
    neckRatio: {
      pct: 80,
      min: 70,
      max: 90,
      menu: 'fit'
    },
  },
  // highlight-end
}
```

Can you guess what it means?

- We've added the `options` property to our `bib` object
- On the `options` property, we have added `neckRatio` which holds the configuration for our option
- It is a `pct` option -- which means it's a percentage
- Its default value is 80%
- Its minimum value is 70%
- Its maximum value is 90%

There are different types of options, but percentages are by far the most common ones.
They are all documented [in the part reference docs](/reference/api/part/config/options).

:::note

##### What is `menu` and why should you care?

The `menu` property on our option is _extra_.
It will be ignored by FreeSewing's core library and if we leave it out, our design will produce the same result.

Instead, this `menu` property is there for the benefit of FreeSewing's development environment which will use this to build a menu structure for the various
options.

This is covered in more detail in [Part 3](/tutorials/pattern-design/part3) of this tutorial.

:::

## Add the widthRatio and lengthRatio options

Let's do something similar for the width and length of our bib:

```design/src/bib.mjs
function draftBib({ part }) => {
  return part
}

export const bib = {
  name: 'fromScratch.bib',
  draft: draftBib,
  measurements: [ 'head' ],
  options: {
    neckRatio: {
      pct: 80,
      min: 70,
      max: 90,
      menu: 'fit'
    },

    // highlight-start
    widthRatio: {
      pct: 45,
      min: 35,
      max: 55,
      menu: 'style'
    },
    lengthRatio: {
      pct: 75,
      min: 55,
      max: 85,
      menu: 'style'
    },
    // highlight-end
  },
}
```

This is pretty much the exact same thing, except that are placing these in the `style` menu.

Later, I will test-drive our pattern to see how it behaves when we adapt the options
between their minimum and maximum values. At that time, I may need to tweak these values.

With that out of the way, I will start drawing the bib.