diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index c41df147510..00000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,161 +0,0 @@ -":package: aaron": - - packages/aaron/* -":package: albert": - - packages/albert/* -":package: bella": - - packages/bella/* -":package: benjamin": - - packages/benjamin/* -":package: bent": - - packages/bent/* -":package: breanna": - - packages/breanna/* -":package: brian": - - packages/brian/* -":package: bruce": - - packages/bruce/* -":package: carlita": - - packages/carlita/* -":package: carlton": - - packages/carlton/* -":package: cathrin": - - packages/cathrin/* -":package: charlie": - - packages/charlie/* -":package: components": - - packages/components/* -":package: core": - - packages/core/* -":package: cornelius": - - packages/cornelius/* -":package: create-freesewing-pattern": - - packages/create-freesewing-pattern/* -":package: css-theme": - - packages/css-theme/* -":package: diana": - - packages/diana/* -"examples": - - packages/examples/* -":package: florence": - - packages/florence/* -":package: florent": - - packages/florent/* -"freesewing.dev": - - packages/freesewing.dev/* -"freesewing.org": - - packages/freesewing.org/* -"freesewing.shared": - - packages/freesewing.shared/* -":package: gatsby-remark-jargon": - - packages/gatsby-remark-jargon/* -":package: holmes": - - packages/holmes/* -":package: hortensia": - - packages/hortensia/* -":package: huey": - - packages/huey/* -":package: hugo": - - packages/hugo/* -":package: i18n": - - packages/i18n/* -"i18n": - - packages/i18n/src/locales/* -":package: jaeger": - - packages/jaeger/* -"legend": - - packages/legend/* -":package: models": - - packages/models/* -":package: mui-theme": - - packages/mui-theme/* -":package: paco": - - packages/paco/* -":package: pattern-info": - - packages/pattern-info/* -":package: penelope": - - packages/penelope/* -":package: plugin-banner": - - packages/plugin-banner/* -":package: plugin-bartack": - - packages/plugin-bartack/* -":package: plugin-bundle": - - packages/plugin-bundle/* -":package: plugin-bust": - - packages/plugin-bust/* -":package: plugin-buttons": - - packages/plugin-buttons/* -":package: plugin-cutonfold": - - packages/plugin-cutonfold/* -":package: plugin-dimension": - - packages/plugin-dimension/* -":package: plugin-export-dxf": - - packages/plugin-export-dxf/* -":package: plugin-flip": - - packages/plugin-flip/* -":package: plugin-gore": - - packages/plugin-gore/* -":package: plugin-grainline": - - packages/plugin-grainline/* -":package: plugin-i18n": - - packages/plugin-i18n/* -":package: plugin-logo": - - packages/plugin-logo/* -":package: plugin-measurements": - - packages/plugin-measurments/* -":package: plugin-mirror": - - packages/plugin-mirror/* -":package: plugin-notches": - - packages/plugin-notches/* -":package: plugin-round": - - packages/plugin-round/* -":package: plugin-scalebox": - - packages/plugin-scalebox/* -":package: plugin-sprinkle": - - packages/plugin-sprinkle/* -":package: plugin-svgattr": - - packages/plugin-svgattr/* -":package: plugin-theme": - - packages/plugin-theme/* -":package: plugin-title": - - packages/plugin-title/* -":package: plugin-validate": - - packages/plugin-validate/* -":package: prettier-config": - - packages/prettier-config/* -":package: remark-jargon": - - packages/remark-jargon/* -":package: rendertest": - - packages/rendertest/* -":package: sandy": - - packages/sandy/* -":package: shin": - - packages/shin/* -":package: simon": - - packages/simon/* -":package: simone": - - packages/simone/* -"strapi": - - packages/strapi/* -":package: sven": - - packages/sven/* -":package: tamiko": - - packages/tamiko/* -":package: teagan": - - packages/teagan/* -":package: theo": - - packages/theo/* -":package: titan": - - packages/titan/* -":package: trayvon": - - packages/trayvon/* -"tutorial": - - packages/tutorial/* -":package: ursula": - - packages/ursula/* -":package: utils": - - packages/utils/* -":package: wahid": - - packages/wahid/* -":package: waralee": - - packages/waralee/* - diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml deleted file mode 100644 index ab46d2e553b..00000000000 --- a/.github/workflows/label.yml +++ /dev/null @@ -1,19 +0,0 @@ -# This workflow will triage pull requests and apply a label based on the -# paths that are modified in the pull request. - -name: PR Labeler -on: [pull_request] - -jobs: - label: - - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: write - - steps: - - uses: actions/labeler@v2 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" - diff --git a/markdown/org/docs/guide/options/scale/en.md b/markdown/org/docs/guide/options/scale/en.md index 6d65ccca713..7762078c437 100644 --- a/markdown/org/docs/guide/options/scale/en.md +++ b/markdown/org/docs/guide/options/scale/en.md @@ -6,7 +6,7 @@ The scale factor can be used to scale down (or up) everything that is not the actual pattern itself. Things like font sizes, arrow sizes, logos, scalebox, line width and so on. -It was specifically created to accomodate patterns for doll clothes and other +It was specifically created to accommodate patterns for doll clothes and other situations where the text and snippets would become too large in comparison to the pattern. You need to enable *Expert mode* after which you can find the scale setting diff --git a/markdown/org/docs/measurements/waisttoupperleg/en.md b/markdown/org/docs/measurements/waisttoupperleg/en.md index 08e42366b7e..e89a58c177d 100644 --- a/markdown/org/docs/measurements/waisttoupperleg/en.md +++ b/markdown/org/docs/measurements/waisttoupperleg/en.md @@ -1,4 +1,4 @@ --- title: Waist to upper leg --- -The **waist to upper leg** is measured from your waist down to the top of your leg. Measure it a the side of your body. +The **waist to upper leg** is measured from your waist down to the top of your leg. Measure it at the side of your body. diff --git a/markdown/org/docs/patterns/aaron/de.md b/markdown/org/docs/patterns/aaron/de.md index 43aafc45fb4..02befb50917 100644 --- a/markdown/org/docs/patterns/aaron/de.md +++ b/markdown/org/docs/patterns/aaron/de.md @@ -1,5 +1,5 @@ -- - - -- - - +--- +--- diff --git a/markdown/org/docs/patterns/aaron/es.md b/markdown/org/docs/patterns/aaron/es.md index 43aafc45fb4..02befb50917 100644 --- a/markdown/org/docs/patterns/aaron/es.md +++ b/markdown/org/docs/patterns/aaron/es.md @@ -1,5 +1,5 @@ -- - - -- - - +--- +--- diff --git a/markdown/org/docs/patterns/aaron/fr.md b/markdown/org/docs/patterns/aaron/fr.md index 43aafc45fb4..02befb50917 100644 --- a/markdown/org/docs/patterns/aaron/fr.md +++ b/markdown/org/docs/patterns/aaron/fr.md @@ -1,5 +1,5 @@ -- - - -- - - +--- +--- diff --git a/markdown/org/docs/patterns/aaron/measurements/de.md b/markdown/org/docs/patterns/aaron/measurements/de.md index f17324d3f8b..4c8bad593e6 100644 --- a/markdown/org/docs/patterns/aaron/measurements/de.md +++ b/markdown/org/docs/patterns/aaron/measurements/de.md @@ -1,5 +1,5 @@ -- - - -- - - +--- +--- diff --git a/markdown/org/docs/patterns/aaron/measurements/es.md b/markdown/org/docs/patterns/aaron/measurements/es.md index f17324d3f8b..4c8bad593e6 100644 --- a/markdown/org/docs/patterns/aaron/measurements/es.md +++ b/markdown/org/docs/patterns/aaron/measurements/es.md @@ -1,5 +1,5 @@ -- - - -- - - +--- +--- diff --git a/markdown/org/docs/patterns/aaron/measurements/fr.md b/markdown/org/docs/patterns/aaron/measurements/fr.md index f17324d3f8b..4c8bad593e6 100644 --- a/markdown/org/docs/patterns/aaron/measurements/fr.md +++ b/markdown/org/docs/patterns/aaron/measurements/fr.md @@ -1,5 +1,5 @@ -- - - -- - - +--- +--- diff --git a/markdown/org/docs/patterns/aaron/measurements/nl.md b/markdown/org/docs/patterns/aaron/measurements/nl.md index f17324d3f8b..4c8bad593e6 100644 --- a/markdown/org/docs/patterns/aaron/measurements/nl.md +++ b/markdown/org/docs/patterns/aaron/measurements/nl.md @@ -1,5 +1,5 @@ -- - - -- - - +--- +--- diff --git a/markdown/org/docs/patterns/aaron/nl.md b/markdown/org/docs/patterns/aaron/nl.md index 43aafc45fb4..02befb50917 100644 --- a/markdown/org/docs/patterns/aaron/nl.md +++ b/markdown/org/docs/patterns/aaron/nl.md @@ -1,5 +1,5 @@ -- - - -- - - +--- +--- diff --git a/markdown/org/docs/patterns/aaron/options/armholedrop/aaron_armholedrop_sample.svg b/markdown/org/docs/patterns/aaron/options/armholedrop/aaron_armholedrop_sample.svg index 0c1446c3911..d111360a94c 100644 --- a/markdown/org/docs/patterns/aaron/options/armholedrop/aaron_armholedrop_sample.svg +++ b/markdown/org/docs/patterns/aaron/options/armholedrop/aaron_armholedrop_sample.svg @@ -7,6 +7,160 @@ svg.freesewing path,svg.freesewing circle,svg.freesewing rect{fill:none;stroke:n svg.freesewing path.grid{fill:none;stroke:#555;stroke-width:0.3}svg.freesewing path.gridline{stroke:#555;stroke-width:0.2}svg.freesewing path.gridline-lg{stroke:#777;stroke-width:0.2;stroke-dasharray:1.5,1.5}svg.freesewing path.gridline-sm{stroke:#999;stroke-width:0.1}svg.freesewing path.gridline-xs{stroke:#999;stroke-width:0.1;stroke-dasharray:0.5,0.5}svg.freesewing path.gridbox{fill:url(#grid)} svg.freesewing path.sample{stroke-width:0.75}svg.freesewing path.sample-focus{stroke-width:1.5;fill:rgba(0,0,0,0.1)} + /* Reset */ + svg.freesewing path, + svg.freesewing circle, + svg.freesewing rect { + fill: none; + stroke: none; + } + + /* Defaults */ + svg.freesewing path, + svg.freesewing circle { + stroke: #000; + stroke-opacity: 1; + stroke-width: 0.3; + stroke-linecap: round; + stroke-linejoin: round; + } + + /* Stroke classes */ + svg.freesewing .fabric { + stroke-width: 0.6; + stroke: #212121; + } + svg.freesewing .lining { + stroke-width: 0.6; + stroke: #ff5b77; + } + svg.freesewing .interfacing { + stroke-width: 0.6; + stroke: #64b5f6; + } + svg.freesewing .canvas { + stroke-width: 0.6; + stroke: #ff9000; + } + svg.freesewing .various { + stroke-width: 0.6; + stroke: #4caf50; + } + svg.freesewing .note { + stroke-width: 0.4; + stroke: #dd60dd; + } + svg.freesewing .mark { + stroke-width: 0.4; + stroke: blue; + } + svg.freesewing .contrast { + stroke-width: 0.8; + stroke: red; + } + svg.freesewing .stroke-xs { + stroke-width: 0.1; + } + svg.freesewing .stroke-sm { + stroke-width: 0.2; + } + svg.freesewing .stroke-lg { + stroke-width: 0.6; + } + svg.freesewing .stroke-xl { + stroke-width: 1; + } + svg.freesewing .stroke-xxl { + stroke-width: 2; + } + + svg.freesewing .sa { + stroke-dasharray: 0.4, 0.8; + } + svg.freesewing .help { + stroke-width: 0.2; + stroke-dasharray: 15, 1.5, 1, 1.5; + } + svg.freesewing .dotted { + stroke-dasharray: 0.4, 0.8; + } + svg.freesewing .dashed { + stroke-dasharray: 1, 1.5; + } + svg.freesewing .lashed { + stroke-dasharray: 6, 6; + } + svg.freesewing .hidden { + stroke: none; + fill: none; + } + + /* Fill classes */ + svg.freesewing .fill-fabric { + fill: #212121; + } + svg.freesewing .fill-lining { + fill: #ff5b77; + } + svg.freesewing .fill-interfacing { + fill: #64b5f6; + } + svg.freesewing .fill-canvas { + fill: #ff9000; + } + svg.freesewing .fill-various { + fill: #4caf50; + } + svg.freesewing .fill-note { + fill: #dd69dd; + } + svg.freesewing .fill-mark { + fill: blue; + } + svg.freesewing .fill-contrast { + fill: red; + } + + /* Text */ + svg.freesewing text { + font-size: 5px; + font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', + Arial, sans-serif; + fill: #000; + text-anchor: start; + font-weight: 200; + dominant-baseline: ideographic; + } + svg.freesewing .text-xs { + font-size: 3px; + } + svg.freesewing .text-sm { + font-size: 4px; + } + svg.freesewing .text-lg { + font-size: 7px; + } + svg.freesewing .text-xl { + font-size: 9px; + } + svg.freesewing .text-xxl { + font-size: 12px; + } + + svg.freesewing .center { + text-anchor: middle; + } + svg.freesewing .right { + text-anchor: end; + } + + /* Bartack */ + svg.freesewing path.bartack { + stroke-width: 2; + stroke: #fd7e14; + stroke-linecap: butt; + } + ]]> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -31,7 +241,7 @@ svg.freesewing path.sample{stroke-width:0.75}svg.freesewing path.sample-focus{st - + @@ -39,47 +249,47 @@ svg.freesewing path.sample{stroke-width:0.75}svg.freesewing path.sample-focus{st - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/markdown/org/docs/patterns/bee/options/armholedepth/de.md b/markdown/org/docs/patterns/bee/options/armholedepth/de.md index 4bceb74ce59..4529482d13b 100644 --- a/markdown/org/docs/patterns/bee/options/armholedepth/de.md +++ b/markdown/org/docs/patterns/bee/options/armholedepth/de.md @@ -1,6 +1,6 @@ -- - - +--- title: Armhole depth (Bella) -- - - +--- Controls the armhole depth in the underlying Bella block Bee is based on diff --git a/markdown/org/docs/patterns/bee/options/armholedepth/es.md b/markdown/org/docs/patterns/bee/options/armholedepth/es.md index 14066a6e407..0cb73586cd0 100644 --- a/markdown/org/docs/patterns/bee/options/armholedepth/es.md +++ b/markdown/org/docs/patterns/bee/options/armholedepth/es.md @@ -1,6 +1,6 @@ -- - - +--- title: Profundidad de la sisa (Bella) -- - - +--- Controla la profundidad de la sisa en el patron de base Bella en el que se basa Bee diff --git a/markdown/org/docs/patterns/bee/options/armholedepth/fr.md b/markdown/org/docs/patterns/bee/options/armholedepth/fr.md index 6cb8bd85a78..ded25865feb 100644 --- a/markdown/org/docs/patterns/bee/options/armholedepth/fr.md +++ b/markdown/org/docs/patterns/bee/options/armholedepth/fr.md @@ -1,6 +1,6 @@ -- - - +--- title: Armhole depth (Bella) -- - - +--- Controls the armhole depth in the underlying Bella block Bee is based on diff --git a/markdown/org/docs/patterns/bee/options/armholedepth/nl.md b/markdown/org/docs/patterns/bee/options/armholedepth/nl.md index 6f0e9ab88f0..52a64764da0 100644 --- a/markdown/org/docs/patterns/bee/options/armholedepth/nl.md +++ b/markdown/org/docs/patterns/bee/options/armholedepth/nl.md @@ -1,6 +1,6 @@ -- - - +--- title: Armhole depth (Bella) -- - - +--- Controls the armhole depth in the underlying Bella block Bee is based on diff --git a/markdown/org/docs/patterns/bee/options/backdartheight/bee_backdartheight_sample.svg b/markdown/org/docs/patterns/bee/options/backdartheight/bee_backdartheight_sample.svg index 372154251d6..4045e99080b 100644 --- a/markdown/org/docs/patterns/bee/options/backdartheight/bee_backdartheight_sample.svg +++ b/markdown/org/docs/patterns/bee/options/backdartheight/bee_backdartheight_sample.svg @@ -1,5 +1,5 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -31,7 +241,7 @@ svg.freesewing path.sample{stroke-width:0.75}svg.freesewing path.sample-focus{st - + @@ -39,47 +249,47 @@ svg.freesewing path.sample{stroke-width:0.75}svg.freesewing path.sample-focus{st - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/markdown/org/docs/patterns/bee/options/backdartheight/de.md b/markdown/org/docs/patterns/bee/options/backdartheight/de.md index 5e6ab7f1640..dba00a0948f 100644 --- a/markdown/org/docs/patterns/bee/options/backdartheight/de.md +++ b/markdown/org/docs/patterns/bee/options/backdartheight/de.md @@ -1,6 +1,6 @@ -- - - +--- title: Back dart height (Bella) -- - - +--- Controls the back dart height in the underlying Bella block Bee is based on diff --git a/markdown/org/docs/patterns/bee/options/backdartheight/es.md b/markdown/org/docs/patterns/bee/options/backdartheight/es.md index e174ff89699..d850f965c4f 100644 --- a/markdown/org/docs/patterns/bee/options/backdartheight/es.md +++ b/markdown/org/docs/patterns/bee/options/backdartheight/es.md @@ -1,6 +1,6 @@ -- - - +--- title: Altura de la pinza trasera (Bella) -- - - +--- Controla la altura de la pinza trasera en el patrón base Bella, en el que se basa Bee diff --git a/markdown/org/docs/patterns/bee/options/backdartheight/fr.md b/markdown/org/docs/patterns/bee/options/backdartheight/fr.md index 7ef91d713b5..e9ffbc2ac6a 100644 --- a/markdown/org/docs/patterns/bee/options/backdartheight/fr.md +++ b/markdown/org/docs/patterns/bee/options/backdartheight/fr.md @@ -1,6 +1,6 @@ -- - - +--- title: Back dart height (Bella) -- - - +--- Controls the back dart height in the underlying Bella block Bee is based on diff --git a/markdown/org/docs/patterns/bee/options/backdartheight/nl.md b/markdown/org/docs/patterns/bee/options/backdartheight/nl.md index 04e0b04eabe..962527506d6 100644 --- a/markdown/org/docs/patterns/bee/options/backdartheight/nl.md +++ b/markdown/org/docs/patterns/bee/options/backdartheight/nl.md @@ -1,6 +1,6 @@ -- - - +--- title: Back dart height (Bella) -- - - +--- Controls the back dart height in the underlying Bella block Bee is based on diff --git a/markdown/org/docs/patterns/bee/options/bandlength/bee_bandlength_sample.svg b/markdown/org/docs/patterns/bee/options/bandlength/bee_bandlength_sample.svg index 2a983d3638a..352c2cbedaa 100644 --- a/markdown/org/docs/patterns/bee/options/bandlength/bee_bandlength_sample.svg +++ b/markdown/org/docs/patterns/bee/options/bandlength/bee_bandlength_sample.svg @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/markdown/org/docs/patterns/charlie/options/backpocketfacing/en.md b/markdown/org/docs/patterns/charlie/options/backpocketfacing/en.md new file mode 100644 index 00000000000..b7d8bb8b20e --- /dev/null +++ b/markdown/org/docs/patterns/charlie/options/backpocketfacing/en.md @@ -0,0 +1,9 @@ +--- +title: Back pocket facing +--- + +Controls whether or not to include facing on the back pockets + + +## Effect of this option on the pattern +![This image shows the effect of this option by superimposing several variants that have a different value for this option](charlie_backpocketfacing_sample.svg "Effect of this option on the pattern") \ No newline at end of file diff --git a/markdown/org/docs/patterns/charlie/options/backpockethorizontalplacement/charlie_backpockethorizontalplacement_sample.svg b/markdown/org/docs/patterns/charlie/options/backpockethorizontalplacement/charlie_backpockethorizontalplacement_sample.svg index 7a5b6e482bb..122667e3852 100644 --- a/markdown/org/docs/patterns/charlie/options/backpockethorizontalplacement/charlie_backpockethorizontalplacement_sample.svg +++ b/markdown/org/docs/patterns/charlie/options/backpockethorizontalplacement/charlie_backpockethorizontalplacement_sample.svg @@ -7,6 +7,160 @@ svg.freesewing path,svg.freesewing circle,svg.freesewing rect{fill:none;stroke:n svg.freesewing path.grid{fill:none;stroke:#555;stroke-width:0.3}svg.freesewing path.gridline{stroke:#555;stroke-width:0.2}svg.freesewing path.gridline-lg{stroke:#777;stroke-width:0.2;stroke-dasharray:1.5,1.5}svg.freesewing path.gridline-sm{stroke:#999;stroke-width:0.1}svg.freesewing path.gridline-xs{stroke:#999;stroke-width:0.1;stroke-dasharray:0.5,0.5}svg.freesewing path.gridbox{fill:url(#grid)} svg.freesewing path.sample{stroke-width:0.75}svg.freesewing path.sample-focus{stroke-width:1.5;fill:rgba(0,0,0,0.1)} + /* Reset */ + svg.freesewing path, + svg.freesewing circle, + svg.freesewing rect { + fill: none; + stroke: none; + } + + /* Defaults */ + svg.freesewing path, + svg.freesewing circle { + stroke: #000; + stroke-opacity: 1; + stroke-width: 0.3; + stroke-linecap: round; + stroke-linejoin: round; + } + + /* Stroke classes */ + svg.freesewing .fabric { + stroke-width: 0.6; + stroke: #212121; + } + svg.freesewing .lining { + stroke-width: 0.6; + stroke: #ff5b77; + } + svg.freesewing .interfacing { + stroke-width: 0.6; + stroke: #64b5f6; + } + svg.freesewing .canvas { + stroke-width: 0.6; + stroke: #ff9000; + } + svg.freesewing .various { + stroke-width: 0.6; + stroke: #4caf50; + } + svg.freesewing .note { + stroke-width: 0.4; + stroke: #dd60dd; + } + svg.freesewing .mark { + stroke-width: 0.4; + stroke: blue; + } + svg.freesewing .contrast { + stroke-width: 0.8; + stroke: red; + } + svg.freesewing .stroke-xs { + stroke-width: 0.1; + } + svg.freesewing .stroke-sm { + stroke-width: 0.2; + } + svg.freesewing .stroke-lg { + stroke-width: 0.6; + } + svg.freesewing .stroke-xl { + stroke-width: 1; + } + svg.freesewing .stroke-xxl { + stroke-width: 2; + } + + svg.freesewing .sa { + stroke-dasharray: 0.4, 0.8; + } + svg.freesewing .help { + stroke-width: 0.2; + stroke-dasharray: 15, 1.5, 1, 1.5; + } + svg.freesewing .dotted { + stroke-dasharray: 0.4, 0.8; + } + svg.freesewing .dashed { + stroke-dasharray: 1, 1.5; + } + svg.freesewing .lashed { + stroke-dasharray: 6, 6; + } + svg.freesewing .hidden { + stroke: none; + fill: none; + } + + /* Fill classes */ + svg.freesewing .fill-fabric { + fill: #212121; + } + svg.freesewing .fill-lining { + fill: #ff5b77; + } + svg.freesewing .fill-interfacing { + fill: #64b5f6; + } + svg.freesewing .fill-canvas { + fill: #ff9000; + } + svg.freesewing .fill-various { + fill: #4caf50; + } + svg.freesewing .fill-note { + fill: #dd69dd; + } + svg.freesewing .fill-mark { + fill: blue; + } + svg.freesewing .fill-contrast { + fill: red; + } + + /* Text */ + svg.freesewing text { + font-size: 5px; + font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', + Arial, sans-serif; + fill: #000; + text-anchor: start; + font-weight: 200; + dominant-baseline: ideographic; + } + svg.freesewing .text-xs { + font-size: 3px; + } + svg.freesewing .text-sm { + font-size: 4px; + } + svg.freesewing .text-lg { + font-size: 7px; + } + svg.freesewing .text-xl { + font-size: 9px; + } + svg.freesewing .text-xxl { + font-size: 12px; + } + + svg.freesewing .center { + text-anchor: middle; + } + svg.freesewing .right { + text-anchor: end; + } + + /* Bartack */ + svg.freesewing path.bartack { + stroke-width: 2; + stroke: #fd7e14; + stroke-linecap: butt; + } + ]]> \ No newline at end of file diff --git a/markdown/org/docs/patterns/diana/options/cuffease/en.md b/markdown/org/docs/patterns/diana/options/cuffease/en.md new file mode 100644 index 00000000000..e8827e40a22 --- /dev/null +++ b/markdown/org/docs/patterns/diana/options/cuffease/en.md @@ -0,0 +1,9 @@ +--- +title: Cuff ease +--- + +The amount of ease at your wrist. + + +## Effect of this option on the pattern +![This image shows the effect of this option by superimposing several variants that have a different value for this option](diana_cuffease_sample.svg "Effect of this option on the pattern") \ No newline at end of file diff --git a/markdown/org/docs/patterns/diana/options/drapeangle/diana_drapeangle_sample.svg b/markdown/org/docs/patterns/diana/options/drapeangle/diana_drapeangle_sample.svg index 48bb6744d1e..781073a8112 100644 --- a/markdown/org/docs/patterns/diana/options/drapeangle/diana_drapeangle_sample.svg +++ b/markdown/org/docs/patterns/diana/options/drapeangle/diana_drapeangle_sample.svg @@ -7,6 +7,160 @@ svg.freesewing path,svg.freesewing circle,svg.freesewing rect{fill:none;stroke:n svg.freesewing path.grid{fill:none;stroke:#555;stroke-width:0.3}svg.freesewing path.gridline{stroke:#555;stroke-width:0.2}svg.freesewing path.gridline-lg{stroke:#777;stroke-width:0.2;stroke-dasharray:1.5,1.5}svg.freesewing path.gridline-sm{stroke:#999;stroke-width:0.1}svg.freesewing path.gridline-xs{stroke:#999;stroke-width:0.1;stroke-dasharray:0.5,0.5}svg.freesewing path.gridbox{fill:url(#grid)} svg.freesewing path.sample{stroke-width:0.75}svg.freesewing path.sample-focus{stroke-width:1.5;fill:rgba(0,0,0,0.1)} + /* Reset */ + svg.freesewing path, + svg.freesewing circle, + svg.freesewing rect { + fill: none; + stroke: none; + } + + /* Defaults */ + svg.freesewing path, + svg.freesewing circle { + stroke: #000; + stroke-opacity: 1; + stroke-width: 0.3; + stroke-linecap: round; + stroke-linejoin: round; + } + + /* Stroke classes */ + svg.freesewing .fabric { + stroke-width: 0.6; + stroke: #212121; + } + svg.freesewing .lining { + stroke-width: 0.6; + stroke: #ff5b77; + } + svg.freesewing .interfacing { + stroke-width: 0.6; + stroke: #64b5f6; + } + svg.freesewing .canvas { + stroke-width: 0.6; + stroke: #ff9000; + } + svg.freesewing .various { + stroke-width: 0.6; + stroke: #4caf50; + } + svg.freesewing .note { + stroke-width: 0.4; + stroke: #dd60dd; + } + svg.freesewing .mark { + stroke-width: 0.4; + stroke: blue; + } + svg.freesewing .contrast { + stroke-width: 0.8; + stroke: red; + } + svg.freesewing .stroke-xs { + stroke-width: 0.1; + } + svg.freesewing .stroke-sm { + stroke-width: 0.2; + } + svg.freesewing .stroke-lg { + stroke-width: 0.6; + } + svg.freesewing .stroke-xl { + stroke-width: 1; + } + svg.freesewing .stroke-xxl { + stroke-width: 2; + } + + svg.freesewing .sa { + stroke-dasharray: 0.4, 0.8; + } + svg.freesewing .help { + stroke-width: 0.2; + stroke-dasharray: 15, 1.5, 1, 1.5; + } + svg.freesewing .dotted { + stroke-dasharray: 0.4, 0.8; + } + svg.freesewing .dashed { + stroke-dasharray: 1, 1.5; + } + svg.freesewing .lashed { + stroke-dasharray: 6, 6; + } + svg.freesewing .hidden { + stroke: none; + fill: none; + } + + /* Fill classes */ + svg.freesewing .fill-fabric { + fill: #212121; + } + svg.freesewing .fill-lining { + fill: #ff5b77; + } + svg.freesewing .fill-interfacing { + fill: #64b5f6; + } + svg.freesewing .fill-canvas { + fill: #ff9000; + } + svg.freesewing .fill-various { + fill: #4caf50; + } + svg.freesewing .fill-note { + fill: #dd69dd; + } + svg.freesewing .fill-mark { + fill: blue; + } + svg.freesewing .fill-contrast { + fill: red; + } + + /* Text */ + svg.freesewing text { + font-size: 5px; + font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', + Arial, sans-serif; + fill: #000; + text-anchor: start; + font-weight: 200; + dominant-baseline: ideographic; + } + svg.freesewing .text-xs { + font-size: 3px; + } + svg.freesewing .text-sm { + font-size: 4px; + } + svg.freesewing .text-lg { + font-size: 7px; + } + svg.freesewing .text-xl { + font-size: 9px; + } + svg.freesewing .text-xxl { + font-size: 12px; + } + + svg.freesewing .center { + text-anchor: middle; + } + svg.freesewing .right { + text-anchor: end; + } + + /* Bartack */ + svg.freesewing path.bartack { + stroke-width: 2; + stroke: #fd7e14; + stroke-linecap: butt; + } + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/markdown/org/docs/patterns/sven/options/lengthbonus/sven_lengthbonus_sample.svg b/markdown/org/docs/patterns/sven/options/lengthbonus/sven_lengthbonus_sample.svg index f1215bc9c2d..352ca2b78aa 100644 --- a/markdown/org/docs/patterns/sven/options/lengthbonus/sven_lengthbonus_sample.svg +++ b/markdown/org/docs/patterns/sven/options/lengthbonus/sven_lengthbonus_sample.svg @@ -7,6 +7,160 @@ svg.freesewing path,svg.freesewing circle,svg.freesewing rect{fill:none;stroke:n svg.freesewing path.grid{fill:none;stroke:#555;stroke-width:0.3}svg.freesewing path.gridline{stroke:#555;stroke-width:0.2}svg.freesewing path.gridline-lg{stroke:#777;stroke-width:0.2;stroke-dasharray:1.5,1.5}svg.freesewing path.gridline-sm{stroke:#999;stroke-width:0.1}svg.freesewing path.gridline-xs{stroke:#999;stroke-width:0.1;stroke-dasharray:0.5,0.5}svg.freesewing path.gridbox{fill:url(#grid)} svg.freesewing path.sample{stroke-width:0.75}svg.freesewing path.sample-focus{stroke-width:1.5;fill:rgba(0,0,0,0.1)} + /* Reset */ + svg.freesewing path, + svg.freesewing circle, + svg.freesewing rect { + fill: none; + stroke: none; + } + + /* Defaults */ + svg.freesewing path, + svg.freesewing circle { + stroke: #000; + stroke-opacity: 1; + stroke-width: 0.3; + stroke-linecap: round; + stroke-linejoin: round; + } + + /* Stroke classes */ + svg.freesewing .fabric { + stroke-width: 0.6; + stroke: #212121; + } + svg.freesewing .lining { + stroke-width: 0.6; + stroke: #ff5b77; + } + svg.freesewing .interfacing { + stroke-width: 0.6; + stroke: #64b5f6; + } + svg.freesewing .canvas { + stroke-width: 0.6; + stroke: #ff9000; + } + svg.freesewing .various { + stroke-width: 0.6; + stroke: #4caf50; + } + svg.freesewing .note { + stroke-width: 0.4; + stroke: #dd60dd; + } + svg.freesewing .mark { + stroke-width: 0.4; + stroke: blue; + } + svg.freesewing .contrast { + stroke-width: 0.8; + stroke: red; + } + svg.freesewing .stroke-xs { + stroke-width: 0.1; + } + svg.freesewing .stroke-sm { + stroke-width: 0.2; + } + svg.freesewing .stroke-lg { + stroke-width: 0.6; + } + svg.freesewing .stroke-xl { + stroke-width: 1; + } + svg.freesewing .stroke-xxl { + stroke-width: 2; + } + + svg.freesewing .sa { + stroke-dasharray: 0.4, 0.8; + } + svg.freesewing .help { + stroke-width: 0.2; + stroke-dasharray: 15, 1.5, 1, 1.5; + } + svg.freesewing .dotted { + stroke-dasharray: 0.4, 0.8; + } + svg.freesewing .dashed { + stroke-dasharray: 1, 1.5; + } + svg.freesewing .lashed { + stroke-dasharray: 6, 6; + } + svg.freesewing .hidden { + stroke: none; + fill: none; + } + + /* Fill classes */ + svg.freesewing .fill-fabric { + fill: #212121; + } + svg.freesewing .fill-lining { + fill: #ff5b77; + } + svg.freesewing .fill-interfacing { + fill: #64b5f6; + } + svg.freesewing .fill-canvas { + fill: #ff9000; + } + svg.freesewing .fill-various { + fill: #4caf50; + } + svg.freesewing .fill-note { + fill: #dd69dd; + } + svg.freesewing .fill-mark { + fill: blue; + } + svg.freesewing .fill-contrast { + fill: red; + } + + /* Text */ + svg.freesewing text { + font-size: 5px; + font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', + Arial, sans-serif; + fill: #000; + text-anchor: start; + font-weight: 200; + dominant-baseline: ideographic; + } + svg.freesewing .text-xs { + font-size: 3px; + } + svg.freesewing .text-sm { + font-size: 4px; + } + svg.freesewing .text-lg { + font-size: 7px; + } + svg.freesewing .text-xl { + font-size: 9px; + } + svg.freesewing .text-xxl { + font-size: 12px; + } + + svg.freesewing .center { + text-anchor: middle; + } + svg.freesewing .right { + text-anchor: end; + } + + /* Bartack */ + svg.freesewing path.bartack { + stroke-width: 2; + stroke: #fd7e14; + stroke-linecap: butt; + } + ]]>

FreeSewing.dev hosts documentation for contributors and developers alike. diff --git a/packages/freesewing.lab/components/pattern-picker.js b/packages/freesewing.lab/components/pattern-picker.js index 7d5a85ee970..e0cd940e2bc 100644 --- a/packages/freesewing.lab/components/pattern-picker.js +++ b/packages/freesewing.lab/components/pattern-picker.js @@ -1,5 +1,4 @@ import React from 'react' -import config from 'site/freesewing.config.js' import DesignIcon from 'shared/components/icons/design.js' import Link from 'next/link' @@ -15,16 +14,16 @@ const PatternPicker = ({ app }) => { Patterns

-
    - {Object.keys(config.patterns).map(section => ( +
      + {Object.keys(app.patterns).map(section => (
    • - {t(config.navigation[section].__title)} + {t(app.navigation[section].__title)}
    • - {config.patterns[section].map(pattern => ( + {app.patterns[section].map(pattern => (
    • )) -const ListPage = ({ sections=Object.keys(config.patterns) }) => { +const PatternListPageTemplate = ({ sections=false }) => { const app = useApp() + if (sections === false) sections = Object.keys(app.patterns) + return ( @@ -31,12 +32,12 @@ const ListPage = ({ sections=Object.keys(config.patterns) }) => {
      - {Object.keys(config.navigation).map(section => { + {Object.keys(app.navigation).map(section => { if (sections.indexOf(section) !== -1) return ( -
      -

      {config.navigation[section].__title}

      +
      +

      {app.navigation[section].__title}

        - {links(section, config.patterns[section])} + {links(section, app.patterns[section])}
      ) @@ -48,4 +49,4 @@ const ListPage = ({ sections=Object.keys(config.patterns) }) => { ) } -export default ListPage +export default PatternListPageTemplate diff --git a/packages/freesewing.lab/pages/accessories/florence.js b/packages/freesewing.lab/pages/accessories/florence.js new file mode 100644 index 00000000000..40cbaac6491 --- /dev/null +++ b/packages/freesewing.lab/pages/accessories/florence.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/florence/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/accessories/florent.js b/packages/freesewing.lab/pages/accessories/florent.js new file mode 100644 index 00000000000..ea5c29a7798 --- /dev/null +++ b/packages/freesewing.lab/pages/accessories/florent.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/florent/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/accessories/holmes.js b/packages/freesewing.lab/pages/accessories/holmes.js new file mode 100644 index 00000000000..d139ab86bfe --- /dev/null +++ b/packages/freesewing.lab/pages/accessories/holmes.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/holmes/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/accessories/hortensia.js b/packages/freesewing.lab/pages/accessories/hortensia.js new file mode 100644 index 00000000000..b8328591b74 --- /dev/null +++ b/packages/freesewing.lab/pages/accessories/hortensia.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/hortensia/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/accessories/trayvon.js b/packages/freesewing.lab/pages/accessories/trayvon.js new file mode 100644 index 00000000000..bc70a2d4a2d --- /dev/null +++ b/packages/freesewing.lab/pages/accessories/trayvon.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/trayvon/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/blocks/bella.js b/packages/freesewing.lab/pages/blocks/bella.js new file mode 100644 index 00000000000..3d008eb6422 --- /dev/null +++ b/packages/freesewing.lab/pages/blocks/bella.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/bella/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/blocks/bent.js b/packages/freesewing.lab/pages/blocks/bent.js new file mode 100644 index 00000000000..409276b4f39 --- /dev/null +++ b/packages/freesewing.lab/pages/blocks/bent.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/bent/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/blocks/brian.js b/packages/freesewing.lab/pages/blocks/brian.js new file mode 100644 index 00000000000..b3fc7df6f4e --- /dev/null +++ b/packages/freesewing.lab/pages/blocks/brian.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/brian/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/blocks/titan.js b/packages/freesewing.lab/pages/blocks/titan.js new file mode 100644 index 00000000000..a576cd56e93 --- /dev/null +++ b/packages/freesewing.lab/pages/blocks/titan.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/titan/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/albert.js b/packages/freesewing.lab/pages/garments/albert.js new file mode 100644 index 00000000000..147545139b6 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/albert.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/albert/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/bee.js b/packages/freesewing.lab/pages/garments/bee.js new file mode 100644 index 00000000000..ac901596665 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/bee.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/bee/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/benjamin.js b/packages/freesewing.lab/pages/garments/benjamin.js new file mode 100644 index 00000000000..cec2b494470 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/benjamin.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/benjamin/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/breanna.js b/packages/freesewing.lab/pages/garments/breanna.js new file mode 100644 index 00000000000..2b7305183ae --- /dev/null +++ b/packages/freesewing.lab/pages/garments/breanna.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/breanna/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/bruce.js b/packages/freesewing.lab/pages/garments/bruce.js new file mode 100644 index 00000000000..5f3b2f1a1fb --- /dev/null +++ b/packages/freesewing.lab/pages/garments/bruce.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/bruce/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/carlita.js b/packages/freesewing.lab/pages/garments/carlita.js new file mode 100644 index 00000000000..8f92d0585b2 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/carlita.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/carlita/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/carlton.js b/packages/freesewing.lab/pages/garments/carlton.js new file mode 100644 index 00000000000..5f49adbba4d --- /dev/null +++ b/packages/freesewing.lab/pages/garments/carlton.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/carlton/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/cathrin.js b/packages/freesewing.lab/pages/garments/cathrin.js new file mode 100644 index 00000000000..312faec4e2c --- /dev/null +++ b/packages/freesewing.lab/pages/garments/cathrin.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/cathrin/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/charlie.js b/packages/freesewing.lab/pages/garments/charlie.js new file mode 100644 index 00000000000..6485cbb6948 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/charlie.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/charlie/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/cornelius.js b/packages/freesewing.lab/pages/garments/cornelius.js new file mode 100644 index 00000000000..c6380fc7154 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/cornelius.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/cornelius/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/diana.js b/packages/freesewing.lab/pages/garments/diana.js new file mode 100644 index 00000000000..6955ca2aa90 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/diana.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/diana/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/huey.js b/packages/freesewing.lab/pages/garments/huey.js new file mode 100644 index 00000000000..93e3c509c1f --- /dev/null +++ b/packages/freesewing.lab/pages/garments/huey.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/huey/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/hugo.js b/packages/freesewing.lab/pages/garments/hugo.js new file mode 100644 index 00000000000..422344d6daf --- /dev/null +++ b/packages/freesewing.lab/pages/garments/hugo.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/hugo/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/jaeger.js b/packages/freesewing.lab/pages/garments/jaeger.js new file mode 100644 index 00000000000..c6040c72213 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/jaeger.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/jaeger/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/lunetius.js b/packages/freesewing.lab/pages/garments/lunetius.js new file mode 100644 index 00000000000..933a147f47f --- /dev/null +++ b/packages/freesewing.lab/pages/garments/lunetius.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/lunetius/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/paco.js b/packages/freesewing.lab/pages/garments/paco.js new file mode 100644 index 00000000000..3754ff56bac --- /dev/null +++ b/packages/freesewing.lab/pages/garments/paco.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/paco/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/penelope.js b/packages/freesewing.lab/pages/garments/penelope.js new file mode 100644 index 00000000000..2aa0a8658ed --- /dev/null +++ b/packages/freesewing.lab/pages/garments/penelope.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/penelope/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/sandy.js b/packages/freesewing.lab/pages/garments/sandy.js new file mode 100644 index 00000000000..b19b6fcdc0c --- /dev/null +++ b/packages/freesewing.lab/pages/garments/sandy.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/sandy/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/shin.js b/packages/freesewing.lab/pages/garments/shin.js new file mode 100644 index 00000000000..162b12e4bf3 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/shin.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/shin/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/simon.js b/packages/freesewing.lab/pages/garments/simon.js new file mode 100644 index 00000000000..b50780974da --- /dev/null +++ b/packages/freesewing.lab/pages/garments/simon.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/simon/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/simone.js b/packages/freesewing.lab/pages/garments/simone.js new file mode 100644 index 00000000000..60897644c29 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/simone.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/simone/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/sven.js b/packages/freesewing.lab/pages/garments/sven.js new file mode 100644 index 00000000000..532c49c3190 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/sven.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/sven/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/tamiko.js b/packages/freesewing.lab/pages/garments/tamiko.js new file mode 100644 index 00000000000..6905cd0b3e9 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/tamiko.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/tamiko/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/teagan.js b/packages/freesewing.lab/pages/garments/teagan.js index f7b82e8a8fb..9fa675bfe2b 100644 --- a/packages/freesewing.lab/pages/garments/teagan.js +++ b/packages/freesewing.lab/pages/garments/teagan.js @@ -1,8 +1,4 @@ import pattern from 'pkgs/teagan/src/index.js' import PageTemplate from 'site/page-templates/workbench.js' -const Teagan = function() { - return -} - -export default Teagan +export default () => diff --git a/packages/freesewing.lab/pages/garments/theo.js b/packages/freesewing.lab/pages/garments/theo.js new file mode 100644 index 00000000000..e61c47b6221 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/theo.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/theo/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/tiberius.js b/packages/freesewing.lab/pages/garments/tiberius.js new file mode 100644 index 00000000000..7b032a418f0 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/tiberius.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/tiberius/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/trayvon.js b/packages/freesewing.lab/pages/garments/trayvon.js new file mode 100644 index 00000000000..bc70a2d4a2d --- /dev/null +++ b/packages/freesewing.lab/pages/garments/trayvon.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/trayvon/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/ursula.js b/packages/freesewing.lab/pages/garments/ursula.js new file mode 100644 index 00000000000..1a7b7ad4d05 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/ursula.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/ursula/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/wahid.js b/packages/freesewing.lab/pages/garments/wahid.js new file mode 100644 index 00000000000..598ca2d1192 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/wahid.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/wahid/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/walburga.js b/packages/freesewing.lab/pages/garments/walburga.js new file mode 100644 index 00000000000..d6c36b30bed --- /dev/null +++ b/packages/freesewing.lab/pages/garments/walburga.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/walburga/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/waralee.js b/packages/freesewing.lab/pages/garments/waralee.js new file mode 100644 index 00000000000..5bdffccacf0 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/waralee.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/waralee/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/garments/yuri.js b/packages/freesewing.lab/pages/garments/yuri.js new file mode 100644 index 00000000000..9837f1b2035 --- /dev/null +++ b/packages/freesewing.lab/pages/garments/yuri.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/yuri/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/utilities/examples.js b/packages/freesewing.lab/pages/utilities/examples.js new file mode 100644 index 00000000000..3c8eac1adff --- /dev/null +++ b/packages/freesewing.lab/pages/utilities/examples.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/examples/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/utilities/legend.js b/packages/freesewing.lab/pages/utilities/legend.js new file mode 100644 index 00000000000..54af4949149 --- /dev/null +++ b/packages/freesewing.lab/pages/utilities/legend.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/legend/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/utilities/plugintest.js b/packages/freesewing.lab/pages/utilities/plugintest.js new file mode 100644 index 00000000000..acf429d7c8e --- /dev/null +++ b/packages/freesewing.lab/pages/utilities/plugintest.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/plugintest/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/utilities/rendertest.js b/packages/freesewing.lab/pages/utilities/rendertest.js new file mode 100644 index 00000000000..69be390bdb2 --- /dev/null +++ b/packages/freesewing.lab/pages/utilities/rendertest.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/rendertest/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/pages/utilities/tutorial.js b/packages/freesewing.lab/pages/utilities/tutorial.js new file mode 100644 index 00000000000..66d2926b51f --- /dev/null +++ b/packages/freesewing.lab/pages/utilities/tutorial.js @@ -0,0 +1,4 @@ +import pattern from 'pkgs/tutorial/src/index.js' +import PageTemplate from 'site/page-templates/workbench.js' + +export default () => diff --git a/packages/freesewing.lab/patterns.json b/packages/freesewing.lab/patterns.json new file mode 100644 index 00000000000..5e508f6f94f --- /dev/null +++ b/packages/freesewing.lab/patterns.json @@ -0,0 +1,57 @@ +{ + "accessories": [ + "florence", + "hortensia", + "florent", + "holmes", + "trayvon" + ], + "blocks": [ + "bella", + "bent", + "brian", + "titan" + ], + "garments": [ + "aaron", + "albert", + "bee", + "benjamin", + "breanna", + "bruce", + "carlita", + "carlton", + "cathrin", + "charlie", + "cornelius", + "diana", + "huey", + "hugo", + "jaeger", + "lunetius", + "paco", + "penelope", + "sandy", + "shin", + "simon", + "simone", + "sven", + "tamiko", + "teagan", + "theo", + "tiberius", + "ursula", + "wahid", + "walburga", + "waralee", + "yuri" + ], + "utilities": [ + "examples", + "legend", + "plugintest", + "rendertest", + "tutorial" + ] +} + diff --git a/packages/freesewing.shared/components/icons/clear.js b/packages/freesewing.shared/components/icons/clear.js new file mode 100644 index 00000000000..4575242e144 --- /dev/null +++ b/packages/freesewing.shared/components/icons/clear.js @@ -0,0 +1,7 @@ +const ClearIcon = () => ( + + + +) + +export default ClearIcon diff --git a/packages/freesewing.shared/components/icons/edit.js b/packages/freesewing.shared/components/icons/edit.js new file mode 100644 index 00000000000..5cd1f91869c --- /dev/null +++ b/packages/freesewing.shared/components/icons/edit.js @@ -0,0 +1,7 @@ +const EditIcon = () => ( + + + +) + +export default EditIcon diff --git a/packages/freesewing.shared/components/icons/with-breasts.js b/packages/freesewing.shared/components/icons/with-breasts.js new file mode 100644 index 00000000000..0e74bfbd1d3 --- /dev/null +++ b/packages/freesewing.shared/components/icons/with-breasts.js @@ -0,0 +1,8 @@ +const WithBreasts = () => ( + + + +) + +export default WithBreasts + diff --git a/packages/freesewing.shared/components/icons/without-breasts.js b/packages/freesewing.shared/components/icons/without-breasts.js new file mode 100644 index 00000000000..8d21f954c0c --- /dev/null +++ b/packages/freesewing.shared/components/icons/without-breasts.js @@ -0,0 +1,8 @@ +const WithoutBreasts = () => ( + + + +) + +export default WithoutBreasts + diff --git a/packages/freesewing.shared/components/layouts/default.js b/packages/freesewing.shared/components/layouts/default.js index e4e40a0fe01..db23949310a 100644 --- a/packages/freesewing.shared/components/layouts/default.js +++ b/packages/freesewing.shared/components/layouts/default.js @@ -178,7 +178,7 @@ const DefaultLayout = ({ }
      - + {AltMenu} )} diff --git a/packages/freesewing.shared/components/workbench/draft/circle/index.js b/packages/freesewing.shared/components/workbench/draft/circle/index.js new file mode 100644 index 00000000000..72dedf1bf14 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/circle/index.js @@ -0,0 +1,10 @@ +const Circle = (props) => ( + +) + +export default Circle diff --git a/packages/freesewing.shared/components/workbench/draft/defs/index.js b/packages/freesewing.shared/components/workbench/draft/defs/index.js new file mode 100644 index 00000000000..4f494dee70a --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/defs/index.js @@ -0,0 +1,69 @@ +const style = ` style="fill: none; stroke: currentColor;" ` +const grids = { + imperial: ` + + + + + + + `, + metric: ` + + + + + + + + + ` +} + +const Defs = (props) => { + let defs = props.svg.defs + if (props.settings.paperless) { + defs += grids[props.settings.units || 'metric'] + for (let p in props.parts) { + let anchor = { x: 0, y: 0 } + if (typeof props.parts[p].points.gridAnchor !== 'undefined') + anchor = props.parts[p].points.gridAnchor + else if (typeof props.parts[p].points.anchor !== 'undefined') + anchor = props.parts[p].points.anchor + + defs += `` + } + } + + return +} + +export default Defs diff --git a/packages/freesewing.shared/components/workbench/draft/index.js b/packages/freesewing.shared/components/workbench/draft/index.js new file mode 100644 index 00000000000..7d41c1bbe27 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/index.js @@ -0,0 +1,35 @@ +import React, { useState } from 'react' +import Svg from './svg' +import Defs from './defs' +import Part from './part' + +const LabDraft = ({ app, pattern, gist, updateGist }) => { + + const patternInstance = new pattern(gist) + patternInstance.draft() + const patternProps = patternInstance.getRenderProps() + + + + return ( + + + + + {Object.keys(patternProps.parts).map((name) => ( + + ))} + + + ) +} + +export default LabDraft diff --git a/packages/freesewing.shared/components/workbench/draft/part/index.js b/packages/freesewing.shared/components/workbench/draft/part/index.js new file mode 100644 index 00000000000..daa51335935 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/part/index.js @@ -0,0 +1,139 @@ +import Path from '../path' +import Point from '../point' +import Snippet from '../snippet' +import { getProps } from '../utils' + +const Part = (props) => { + const focusPoint = (point, i) => { + const p = props.part.points[point] + const pathString = `M ${p.x} ${props.part.topLeft.y} ` + + `L ${p.x} ${props.part.bottomRight.y} ` + + `M ${props.part.topLeft.x} ${p.y} ` + + `L ${props.part.bottomRight.x} ${p.y} ` + const classes = 'focus point c' + (i % 8) // Cycle through 8 colors + return ( + + + + props.raiseEvent('clearFocus', { + part: props.name, + type: 'points', + name: point + }) + } + /> + + ) + } + + const focusCoords = (p, i) => { + let pathString = `M ${p.x} ${props.part.topLeft.y} ` + pathString += `L ${p.x} ${props.part.bottomRight.y} ` + pathString += `M ${props.part.topLeft.x} ${p.y} ` + pathString += `L ${props.part.bottomRight.x} ${p.y} ` + let classes = 'focus coords c' + (i % 4) // Cycle through 4 CSS classes + return ( + + + + props.raiseEvent('clearFocus', { + part: props.name, + type: 'coords', + data: p + }) + } + /> + + ) + } + + let grid = props.paperless ? ( + + ) : null + + let focus = [] + if (props.develop) { + if (props.focus && typeof props.focus[props.name] !== 'undefined') { + for (let i in props.focus[props.name].points) + focus.push(focusPoint(props.focus[props.name].points[i], i)) + for (let i in props.focus[props.name].paths) { + let name = props.focus[props.name].paths[i] + focus.push( + + props.raiseEvent('clearFocus', { + part: props.name, + type: 'paths', + name + }) + } + /> + ) + } + for (let i in props.focus[props.name].coords) + focus.push(focusCoords(props.focus[props.name].coords[i], i)) + } + } + + return ( + + {grid} + {Object.keys(props.part.paths).map((name) => ( + + ))} + {Object.keys(props.part.points).map((name) => ( + + ))} + {Object.keys(props.part.snippets).map((name) => ( + + ))} + {focus} + + ) +} + +export default Part diff --git a/packages/freesewing.shared/components/workbench/draft/path/index.js b/packages/freesewing.shared/components/workbench/draft/path/index.js new file mode 100644 index 00000000000..2a1f6f33258 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/path/index.js @@ -0,0 +1,17 @@ +import TextOnPath from '../text-on-path' +import { getProps } from '../utils' + +const Path = (props) => { + if (!props.path.render) return null + const output = [] + const pathId = 'path-' + props.part + '-' + props.name + output.push( + + ) + if (props.path.attributes.get('data-text')) + output.push() + + return output +} + +export default Path diff --git a/packages/freesewing.shared/components/workbench/draft/point/index.js b/packages/freesewing.shared/components/workbench/draft/point/index.js new file mode 100644 index 00000000000..88e5a290460 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/point/index.js @@ -0,0 +1,14 @@ +import Text from '../text' +import Circle from '../circle' + +const Point = (props) => { + const output = [] + if (props.point.attributes && props.point.attributes.get('data-text')) + output.push() + if (props.point.attributes && props.point.attributes.get('data-circle')) + output.push() + + return output.length < 1 ? null : output +} + +export default Point diff --git a/packages/freesewing.shared/components/workbench/draft/snippet/index.js b/packages/freesewing.shared/components/workbench/draft/snippet/index.js new file mode 100644 index 00000000000..1d1fd0b1627 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/snippet/index.js @@ -0,0 +1,27 @@ +import React from 'react' +import { getProps } from '../utils' + +const Snippet = (props) => { + const snippetProps = { + xlinkHref: '#' + props.snippet.def, + x: props.snippet.anchor.x, + y: props.snippet.anchor.y + } + let scale = props.snippet.attributes.get('data-scale') + let rotate = props.snippet.attributes.get('data-rotate') + if (scale || rotate) { + snippetProps.transform = '' + if (scale) { + snippetProps.transform += `translate(${snippetProps.x}, ${snippetProps.y}) ` + snippetProps.transform += `scale(${scale}) ` + snippetProps.transform += `translate(${snippetProps.x * -1}, ${snippetProps.y * -1}) ` + } + if (rotate) { + snippetProps.transform += `rotate(${rotate}, ${snippetProps.x}, ${snippetProps.y}) ` + } + } + + return +} + +export default Snippet diff --git a/packages/freesewing.shared/components/workbench/draft/svg/index.js b/packages/freesewing.shared/components/workbench/draft/svg/index.js new file mode 100644 index 00000000000..d9c629ea42a --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/svg/index.js @@ -0,0 +1,33 @@ +import React from 'react' + +const Svg = ({ + embed = true, + develop = false, + language = 'en', + className = 'freesewing pattern', + style = {}, + viewBox = false, + width, + height, + children +}) => { + let attributes = { + xmlns: 'http://www.w3.org/2000/svg', + 'xmlns:svg': 'http://www.w3.org/2000/svg', + xmlnsXlink: 'http://www.w3.org/1999/xlink', + xmlLang: language, + viewBox: viewBox || `0 0 ${width} ${height}`, + className, + style + } + + if (!embed) { + attributes.width = width + 'mm' + attributes.height = height + 'mm' + } + if (develop) attributes.className += ' develop' + + return {children} +} + +export default Svg diff --git a/packages/freesewing.shared/components/workbench/draft/text-on-path/index.js b/packages/freesewing.shared/components/workbench/draft/text-on-path/index.js new file mode 100644 index 00000000000..1228d6fca51 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/text-on-path/index.js @@ -0,0 +1,25 @@ +const TextOnPath = (props) => { + const text = [] + // Handle translation + let translated = '' + for (let string of props.path.attributes.getAsArray('data-text')) { + translated += props.app.t(string).replace(/"/g, '"') + ' ' + } + const textPathProps = { + xlinkHref: '#' + props.pathId, + startOffset: '0%' + } + const align = props.path.attributes.get('data-text-class') + if (align && align.indexOf('center') > -1) textPathProps.startOffset = '50%' + else if (align && align.indexOf('right') > -1) textPathProps.startOffset = '100%' + + return ( + + + {translated} + + + ) +} + +export default TextOnPath diff --git a/packages/freesewing.shared/components/workbench/draft/text/index.js b/packages/freesewing.shared/components/workbench/draft/text/index.js new file mode 100644 index 00000000000..05655c43057 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/text/index.js @@ -0,0 +1,38 @@ +const Text = (props) => { + let text = [] + // Handle translation + let translated = '' + for (let string of props.point.attributes.getAsArray('data-text')) { + translated += props.app.t(string.toString()).replace(/"/g, '"') + ' ' + } + // Handle muti-line text + if (translated.indexOf('\n') !== -1) { + let key = 0 + let lines = translated.split('\n') + text.push({lines.shift()}) + for (let line of lines) { + key++ + text.push( + + {line.toString().replace(/"/g, '"')} + + ) + } + } else text.push({translated}) + + return ( + + {text} + + ) +} + +export default Text diff --git a/packages/freesewing.shared/components/workbench/draft/utils.js b/packages/freesewing.shared/components/workbench/draft/utils.js new file mode 100644 index 00000000000..f023e26b58b --- /dev/null +++ b/packages/freesewing.shared/components/workbench/draft/utils.js @@ -0,0 +1,36 @@ +export const getProps = (obj) => { + /** I can't believe it but there seems to be no method on NPM todo this */ + const cssKey = (key) => { + let chunks = key.split('-') + if (chunks.length > 1) { + key = chunks.shift() + for (let s of chunks) key += s.charAt(0).toUpperCase() + s.slice(1) + } + + return key + } + + const convert = (css) => { + let style = {} + let rules = css.split(';') + for (let rule of rules) { + let chunks = rule.split(':') + if (chunks.length === 2) style[cssKey(chunks[0].trim())] = chunks[1].trim() + } + return style + } + + let rename = { + class: 'className', + 'marker-start': 'markerStart', + 'marker-end': 'markerEnd' + } + let props = {} + for (let key in obj.attributes.list) { + if (key === 'style') props[key] = convert(obj.attributes.get(key)) + if (Object.keys(rename).indexOf(key) !== -1) props[rename[key]] = obj.attributes.get(key) + else if (key !== 'style') props[key] = obj.attributes.get(key) + } + + return props +} diff --git a/packages/freesewing.shared/components/workbench/index.js b/packages/freesewing.shared/components/workbench/index.js deleted file mode 100644 index 3b0045b162e..00000000000 --- a/packages/freesewing.shared/components/workbench/index.js +++ /dev/null @@ -1,192 +0,0 @@ -import Link from 'next/link' -import orderBy from 'lodash.orderby' -import ThemePicker from 'shared/components/theme-picker.js' -import RssIcon from 'shared/components/icons/rss.js' -import TutorialIcon from 'shared/components/icons/tutorial.js' -import GuideIcon from 'shared/components/icons/guide.js' -import HelpIcon from 'shared/components/icons/help.js' -import DocsIcon from 'shared/components/icons/docs.js' - -// Don't show children for blog and showcase posts -const keepClosed = ['blog', 'showcase', ] - -// TODO: For now we force tailwind to pickup these styles -// At some point this should 'just work' though, but let's not worry about it now -const force = [ -

      , -

      -] - -// List of icons matched to top-level slug -const icons = { - blog: , - tutorials: , - guides: , - howtos: , - reference: -} - -/* helper method to order nav entries */ -const order = obj => orderBy(obj, ['__order', '__title'], ['asc', 'asc']) - -// Component for the collapse toggle -const Chevron = ({w=8, m=2}) => - - - -// Helper method to filter out the real children -const currentChildren = current => Object.values(order(current)) - .filter(entry => (typeof entry === 'object')) - -// Shared classes for links -const linkClasses = `text-lg lg:text-xl - py-1 hover:cursor-pointer - text-base-content sm:text-neutral-content - hover:text-secondary - sm:hover:text-secondary-focus -` - -// Figure out whether a page is on the path to the active page -const isActive = (slug, active) => { - if (slug === active) return true - let result = true - const slugParts = slug.split('/') - const activeParts = active.split('/') - for (const i in slugParts) { - if (slugParts[i] !== activeParts[i]) result = false - } - - return result -} - -// Component that renders a sublevel of navigation -const SubLevel = ({ nodes={}, active }) => ( -

      -) - -// Component that renders a toplevel of navigation -const TopLevel = ({ icon, title, nav, current, slug, hasChildren=false, active }) => ( -
      - - {icon} - - - {title} - - - {hasChildren && } - - {hasChildren && } -
      -) - -const Navigation = ({ app, active }) => { - if (!app.navigation) return null - const output = [] - for (const page of order(app.navigation)) output.push(°} - title={page.__title} - slug={page.__slug} - hasChildren={keepClosed.indexOf(page.__slug) === -1} - nav={app.navigation} - current={order(app.navigation[page.__slug])} - active={active} - />) - - return
      {output}
      -} - -const PrimaryMenu = ({ app, active }) => ( - -) - -export default PrimaryMenu diff --git a/packages/freesewing.shared/components/workbench/inputs/design-option-percentage.js b/packages/freesewing.shared/components/workbench/inputs/design-option-percentage.js new file mode 100644 index 00000000000..991f429e247 --- /dev/null +++ b/packages/freesewing.shared/components/workbench/inputs/design-option-percentage.js @@ -0,0 +1,119 @@ +import { useState } from 'react' +import ClearIcon from 'shared/components/icons/clear.js' +import EditIcon from 'shared/components/icons/edit.js' +import { formatMm, round } from 'shared/utils.js' + +const EditPercentage = props => ( +
      + + +
      +) + + +const DesignOptionPercentage = props => { + const { pct, max, min } = props.pattern.config.options[props.option] + const val = (typeof props.gist?.options?.[props.option] === 'undefined') + ? pct + : props.gist.options[props.option] * 100 + + const [value, setValue] = useState(val) + const [editPercentage, setEditPercentage] = useState(false) + + const handleChange = (evt) => { + const newVal = evt.target.value + setValue(newVal) + props.updateGist(['options', props.option], newVal/100) + } + const reset = () => { + setValue(pct) + props.unsetGist(['options', props.option]) + } + + return ( +
      +
      + {editPercentage + ? + : ( + <> + {round(min)}% + + {round(val)}% + + {round(max)}% + + ) + } +
      + +
      + + {props.pattern.config.options[props.option]?.toAbs + ? formatMm(props.pattern.config.options[props.option].toAbs(value/100, props.gist)) + : ' ' + } + +
      + + +
      +
      +
      + ) +} + +export default DesignOptionPercentage diff --git a/packages/freesewing.shared/components/workbench/input-measurement.js b/packages/freesewing.shared/components/workbench/inputs/measurement.js similarity index 85% rename from packages/freesewing.shared/components/workbench/input-measurement.js rename to packages/freesewing.shared/components/workbench/inputs/measurement.js index d3a4ecd4ebd..760ad6efa22 100644 --- a/packages/freesewing.shared/components/workbench/input-measurement.js +++ b/packages/freesewing.shared/components/workbench/inputs/measurement.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react' +import React, { useState, useEffect } from 'react' /* * This is a single input for a measurements @@ -11,9 +11,8 @@ import React, { useState } from 'react' const MeasurementInput = ({ m, gist, app, updateMeasurements }) => { const prefix = (app.site === 'org') ? '' : 'https://freesewing.org' const title = app.t(`measurements.${m}`) - console.log('render', m) const isValid = input => { - if (input === null || input === '') return null + if (input === '') return '' return !isNaN(input) } @@ -23,16 +22,20 @@ const MeasurementInput = ({ m, gist, app, updateMeasurements }) => { console.log({ok}) if (ok) { setValid(true) - updateMeasurements(evt.target.value, m) + updateMeasurements(evt.target.value*10, m) } else setValid(false) } - const [val, setVal] = useState(gist?.measurements?.[m] || null) + const [val, setVal] = useState(gist?.measurements?.[m] || '') const [valid, setValid] = useState(typeof gist?.measurements?.[m] === 'undefined' - ? null : + ? '' : isValid(gist.measurements[m]) ) + useEffect(() => { + if (gist?.measurements?.[m]) setVal(gist.measurements[m]/10) + }, [gist]) + if (!m) return null return ( @@ -64,14 +67,14 @@ const MeasurementInput = ({ m, gist, app, updateMeasurements }) => { cm