1
0
Fork 0

feat(markdon): Document missing named exports in core

This commit is contained in:
Joost De Cock 2023-10-21 13:23:32 +02:00
parent 8132ade628
commit 05fd153237
4 changed files with 166 additions and 25 deletions

View file

@ -15,38 +15,26 @@ Please refer to our [tutorials](/tutorials) to get started.
</Tip>
## Core API Documentation
<ReadMore recurse />
## Named exports
<Note>
In general, software published under the FreeSewing namespaces prefers named
exports over default exports, and the `@freesewing/core` package provides several of them.
I have grouped them below in different categories:
Ever since version 3 of FreeSewing, we use only named exports, and no default exports.
Refer to [the migration guide](/guides/v3) for more details.
</Note>
The `@freesewing/core` package provides the following named exports:
- [Constructors](#constructors)
- [Constants](#constants)
- [Utilities](#utilities)
### Constructors
| Named export | Description |
| ------------ | ------------|
| version | The version of `@freesewing/core` |
| Bezier | A re-export of [the bezier-js dependency](https://www.npmjs.com/package/bezier-js) |
The following named exports are **constructors**:
<Note>
You will typically use the `Design()` constructor.
The other constructors and utilities below are exported to
facilitate unit testing and other specific use cases.
</Note>
| Named export | Description |
| ------------ | ------------|
| `Design` | The [Design](/reference/api/design) constructor |
| `Attributes` | The [Attributes](/reference/api/attributes) constructor |
| `Design` | The [Design](/reference/api/design) constructor |
| `Pattern` | The [Pattern](/reference/api/pattern) constructor |
| `Point` | The [Point](/reference/api/point) constructor |
| `Path` | The [Path](/reference/api/path) constructor |
@ -54,8 +42,17 @@ facilitate unit testing and other specific use cases.
| `Snippet` | The [Snippet](/reference/api/snippet) constructor |
| `Store` | The [Store](/reference/api/store) constructor |
### Constants
The following named exports are **utility methods**:
| Named export | Description |
| -------------- | ------------|
| `cbqc` | The Cubic Bezier Quarter Circle constant: `0.55191502449351` FIXME: include link |
| `hidePresets` | Presets you can use to [configure your part `hide` option](/reference/api/part/config/hide). |
| `goldenRatio` | The golden ratio constant: `1.618034` FIXME: include link |
| `version` | The version of `@freesewing/core` |
### Utilities
| Named export | Description |
| ------------ | ------------|
@ -64,6 +61,7 @@ The following named exports are **utility methods**:
| `beamIntersectsX` | See the [beamIntersectsX](/reference/api/utils/beamintersectsx) documentation |
| `beamIntersectsY` | See the [beamIntersectsY](/reference/api/utils//beamintersectsy) documentation |
| `beamsIntersect` | See the [beamsIntersect](/reference/api/utils/beamsintersect) documentation |
| `Bezier` | A re-export of [the bezier-js dependency](https://www.npmjs.com/package/bezier-js) |
| `capitalize` | See the [capitalize](/reference/api/utils/capitalize) documentation |
| `circlesIntersect` | See the [circlesIntersect](/reference/api/utils/circlesintersect) documentation |
| `curveEdge` | See the [curveEdge](/reference/api/utils/curveedge) documentation |
@ -71,9 +69,12 @@ The following named exports are **utility methods**:
| `curveIntersectsY` | See the [curveIntersectsY](/reference/api/utils/curveintersectsy) documentation |
| `curvesIntersect` | See the [curvesIntersect](/reference/api/utils/curvesintersect) documentation |
| `deg2rad` | See the [deg2rad](/reference/api/utils/deg2rad) documentation |
| `generateStackTransform` | See the [generateStackTransform](/reference/api/utils/generatestacktransform) documentation |
| `getTransformedBounds` | See the [getTransformedBounds](/reference/api/utils/gettransformedbounds) documentation |
| `lineIntersectsCircle` | See the [lineIntersectsCircle](/reference/api/utils/lineintersectscircle) documentation |
| `lineIntersectsCurve` | See the [lineIntersectsCurve](/reference/api/utils/lineintersectscurve) documentation |
| `linesIntersect` | See the [linesIntersect](/reference/api/utils/linesintersect) documentation |
| `mergeIi18n` | See the [mergeI18n](/reference/api/utils/mergei18n) documentation |
| `mergeOptions` | See the [mergeOptions](/reference/api/utils/mergeoptions) documentation |
| `pctBasedOn` | See the [pctBasedOn](/reference/api/utils/pctbasedon) documentation |
| `pointOnBeam` | See the [pointOnBeam](/reference/api/utils/pointonbeam) documentation |

View file

@ -0,0 +1,34 @@
---
title: generateStackTransform
---
This method will generate the SVG transform to implement a given layout configuration on [a stack](/reference/api/stack).
## Signature
```js
Array generateStackTransform(
Number x = 0,
Number y = 0,
Number rotate = 0,
Boolean flipX = false,
Boolean flipY = false,
Stack stack
)
```
## Parameters
The first and second paramter set the value of the *translate transform* along the X and Y axis in millimeter.
In other words, it moves the stack.
The third parameter sets the *rotate transform* in degrees.
In other words, it rotates the stack.
The fourth and fifth parameter flip the part along the X or Y axis respectively.
<Note compact>
This is a low-level method to facilitate intervening in the pattern layout late in the draft process.
It is unlikely you will want to use this.
</Note>

View file

@ -0,0 +1,22 @@
---
title: getTransformedBounds
---
This methods re-calculates the bounding box of an object (a stack or a part) after applying the passed-in transform(s).
The object passed in should have its `topLeft` and `bottomRight` properties set.
It will return on object that with (only) the updated `topLeft` and `bottomRight` properties set.
## Signature
```js
Object getTransformedBounds(
Object stack,
Array transforms
)
```
<Note compact>
This is a low-level method to facilitate intervening in the pattern layout late in the draft process.
It is unlikely you will want to use this.
</Note>

View file

@ -0,0 +1,84 @@
---
title: mergeI18n
---
The `mergeI18n` method merges translation files from different designs.
When your design re-uses parts from other designs, it should provide
translation for those parts and any strings or options they use. Rather than
re-creating this content in your own design, you can pull it out of of the
design you are using the part from by importing the `i18n` named export, and
then use this method to merge it with your own translations.
## Signature
```js
Object mergeI18n({
Array designs,
Object options
})
```
## Use
In its simplest form, this method will receive an Array of translation data
(typically the `i18n` named export of a design) and merge them:
```js
import { i18n as brianI18n } from '@freesewing/brian'
import { i18n as simonI18n } from '../i18n/index.mjs'
// Merge translations
const i18n = mergeI18n([brianI18n, simonI18n])
```
This simple approach is typically what you want when you are extending a design
and you are keeping all the parts and options of the design you are extending.
In the example above, Simon extends Brian in this way.
## Configuration
If you don't want to keep all options or parts, you can further control how the
translation data will be merged by passing in a second parameter which is an
object holding the configuration that describes how to merge the translation
data.
The configuration object takes 3 top-level properties:
- `s`: Specifies configuration for how to merge the translation of strings (under `s` in the translation files)
- `p`: Specifies configuration for how to merge the part name translations (under `p` in the translation files)
- `o`: Specifies configuration for how to merge the option translations (under `p` in the translation files)
For **each of the `s`, `p`, and `o` keys** you can specificy the followig properties:
- `drop`: An Array with the keys of entries to not merge (drop). Keys that are not in this array will be merged.
- `keep`: An Array with the keys of entries to merge (keep). Keys that are not in this array will not be merged.
### Example
```js
import { i18n as brianI18n } from '@freesewing/brian'
import { i18n as otherI18n } from '../i18n/index.mjs'
// Merge translations
const i18n = mergeI18n(
[brianI18n, otherI18n],
{
p: {
keep: ['sleevecap'],
},
o: {
drop: ['waistEase', 'chestEase']
}
}
}
)
```
The method will check each key under the `s`, `p`, and `o` top-level keys in the translation files.
For each it will:
- Check whether there is a `drop` array configured. If there is, it will remove the entry if its key is included in the `drop` Array.
- Check whether there is a `keep` array configured. If there is, it will remove the entry if its key is not included in the `keep` Array.
If the entry is not explicitly removed by including it in `drop` or excluding it from a list set in `keep` it will be kept.