diff --git a/config/exceptions.yaml b/config/exceptions.yaml index fff78407617..124f370d643 100644 --- a/config/exceptions.yaml +++ b/config/exceptions.yaml @@ -77,8 +77,10 @@ packageJson: "./components/Account": "./components/Account/index.mjs" "./components/Breadcrumbs": "./components/Breadcrumbs/index.mjs" "./components/Button": "./components/Button/index.mjs" + "./components/Collection": "./components/Collection/index.mjs" "./components/Control": "./components/Control/index.mjs" "./components/CopyToClipboard": "./components/CopyToClipboard/index.mjs" + "./components/Design": "./components/Design/index.mjs" "./components/Docusaurus": "./components/Docusaurus/index.mjs" "./components/Editor": "./components/Editor/index.mjs" "./components/Highlight": "./components/Highlight/index.mjs" diff --git a/config/software/designs.json b/config/software/designs.json index 147150bb620..9416fcec2f8 100644 --- a/config/software/designs.json +++ b/config/software/designs.json @@ -4,8 +4,6 @@ "description": "A FreeSewing pattern for a A-shirt or tank top", "design": "Joost De Cock", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "tops", "underwear" @@ -13,8 +11,8 @@ "techniques": [ "hem", "stretch", - "knitBinding", - "curvedSeam" + "knit-binding", + "curved-seam" ] }, "albert": { @@ -22,15 +20,13 @@ "description": "A FreeSewing pattern for an apron", "design": "Wouter Van Wageningen", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "accessories" ], "techniques": [ "hem", - "knitBinding", - "curvedSeam", + "knit-binding", + "curved-seam", "pocket" ] }, @@ -39,8 +35,6 @@ "description": "A FreeSewing pattern for a bikini top", "design": "PrudenceRabbit", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "tops", "swimwear" @@ -48,7 +42,7 @@ "techniques": [ "hem", "stretch", - "curvedSeam", + "curved-seam", "precision" ] }, @@ -60,8 +54,6 @@ "Joost De Cock" ], "difficulty": 3, - "lab": true, - "org": true, "tags": [ "blocks", "tops" @@ -76,8 +68,6 @@ "description": "A FreeSewing pattern for a bow tie", "design": "Wouter Van Wageningen", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "accessories" ], @@ -91,16 +81,14 @@ "description": "A FreeSewing pattern for a menswear body block with a two-part sleeve", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "blocks", "tops" ], "techniques": [ "hem", - "curvedSeam", - "setSleeve" + "curved-seam", + "set-sleeve" ] }, "bibi": { @@ -108,16 +96,14 @@ "description": "A FreeSewing pattern for a knit top body block", "design": "Jonathan Haas", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "blocks", "tops" ], "techniques": [ - "curvedSeam", + "curved-seam", "hem", - "flatSleeve" + "flat-sleeve" ] }, "bob": { @@ -125,15 +111,13 @@ "description": "A FreeSewing pattern for a bib", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "accessories", "infants" ], "techniques": [ - "biasTape", - "curvedSeam", + "bias-tape", + "curved-seam", "snap" ] }, @@ -142,8 +126,6 @@ "description": "A FreeSewing pattern for a basic body block for womenswear", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "blocks", "tops" @@ -158,15 +140,13 @@ "description": "A FreeSewing pattern for a basic body block for menswear", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "blocks", "tops" ], "techniques": [ "block", - "flatSleeve" + "flat-sleeve" ] }, "bruce": { @@ -174,8 +154,6 @@ "description": "A FreeSewing pattern for boxer briefs", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "bottoms", "underwear" @@ -183,7 +161,7 @@ "techniques": [ "stretch", "hem", - "curvedSeam", + "curved-seam", "elastic" ] }, @@ -195,8 +173,6 @@ "Joost De Cock" ], "difficulty": 5, - "lab": true, - "org": true, "tags": [ "tops", "coats" @@ -204,12 +180,12 @@ "techniques": [ "hem", "pocket", - "curvedSeam", + "curved-seam", "precision", - "setSleeve", - "weltPocket", + "set-sleeve", + "welt-pocket", "lining", - "princessSeam", + "princess-seam", "interfacing", "button" ] @@ -222,8 +198,6 @@ "Joost De Cock" ], "difficulty": 5, - "lab": true, - "org": true, "tags": [ "tops", "coats" @@ -231,10 +205,10 @@ "techniques": [ "hem", "pocket", - "curvedSeam", + "curved-seam", "precision", - "setSleeve", - "weltPocket", + "set-sleeve", + "welt-pocket", "lining", "interfacing", "button" @@ -248,8 +222,6 @@ "Joost De Cock" ], "difficulty": 4, - "lab": true, - "org": true, "tags": [ "tops", "underwear" @@ -257,7 +229,7 @@ "techniques": [ "boning", "precision", - "curvedSeam", + "curved-seam", "interfacing" ] }, @@ -266,22 +238,20 @@ "description": "A FreeSewing pattern for chino trousers", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "bottoms", "trousers" ], "techniques": [ - "weltPocket", - "curvedSeam", + "welt-pocket", + "curved-seam", "interfacing", "fly", "zipper", "button", "dart", "hem", - "seamPocket" + "seam-pocket" ] }, "cornelius": { @@ -289,14 +259,12 @@ "description": "A FreeSewing pattern for cycling breeches, based on the Keystone drafting system", "design": "Wouter Van Wageningen", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "bottoms", "trousers" ], "techniques": [ - "curvedSeam", + "curved-seam", "fly", "zipper", "button", @@ -308,35 +276,29 @@ "description": "A FreeSewing pattern for a top with a draped neck", "design": "Erica Alcusa Sáez", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam", - "flatSleeve", + "curved-seam", + "flat-sleeve", "hem" ] }, "examples": { "code": "Joost De Cock", - "description": "A FreeSewing pattern holding examples for our documentation", - "lab": false, - "org": false + "description": "A FreeSewing pattern holding examples for our documentation" }, "florence": { "code": "Joost De Cock", "description": "A FreeSewing pattern for a face mask", "design": "Joost De Cock", "difficulty": 1, - "lab": true, - "org": true, "tags": [ "accessories" ], "techniques": [ - "curvedSeam" + "curved-seam" ] }, "florent": { @@ -347,14 +309,12 @@ "description": "A FreeSewing pattern for a flat cap", "design": "Quentin Felix", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "accessories", "hats" ], "techniques": [ - "curvedSeam" + "curved-seam" ] }, "gozer": { @@ -362,8 +322,6 @@ "description": "A FreeSewing pattern for a ghost costume", "design": "Wouter Van Wageningen", "difficulty": 1, - "lab": true, - "org": true, "tags": [ "costumes" ], @@ -376,14 +334,12 @@ "description": "A FreeSewing pattern for a shark plush toy", "design": "Wouter Van Wageningen", "difficulty": 4, - "lab": true, - "org": true, "tags": [ "accessories", "toys" ], "techniques": [ - "curvedSeam", + "curved-seam", "dart" ] }, @@ -395,14 +351,12 @@ "description": "A FreeSewing pattern for a Sherlock Holmes hat", "design": "Erica Alcusa Sáez", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "accessories", "hats" ], "techniques": [ - "curvedSeam", + "curved-seam", "lining" ] }, @@ -414,14 +368,12 @@ "Wouter Van Wageningen" ], "difficulty": 3, - "lab": true, - "org": true, "tags": [ "accessories", "bags" ], "techniques": [ - "curvedSeam", + "curved-seam", "precision", "lining", "zipper" @@ -432,17 +384,15 @@ "description": "A FreeSewing pattern for a zip-up hoodie", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam", + "curved-seam", "pocket", "zipper", "ribbing", - "flatSleeve" + "flat-sleeve" ] }, "hugo": { @@ -450,16 +400,14 @@ "description": "A FreeSewing pattern for a hooded jumper with raglan sleeves", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam", + "curved-seam", "pocket", "ribbing", - "raglanSleeve" + "raglan-sleeve" ] }, "jaeger": { @@ -467,8 +415,6 @@ "description": "A FreeSewing pattern for a sport coat style jacket", "design": "Joost De Cock", "difficulty": 5, - "lab": true, - "org": true, "tags": [ "tops", "coats" @@ -476,10 +422,10 @@ "techniques": [ "hem", "pocket", - "curvedSeam", + "curved-seam", "precision", - "setSleeve", - "weltPocket", + "set-sleeve", + "welt-pocket", "lining", "interfacing", "button" @@ -490,8 +436,6 @@ "description": "A FreeSewing pattern for a 1790s shift", "design": "SeaZeeZee", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "tops", "historical", @@ -503,24 +447,20 @@ }, "legend": { "code": "Joost De Cock", - "description": "A FreeSewing pattern to document pattern notation", - "lab": false, - "org": false + "description": "A FreeSewing pattern to document pattern notation" }, "lucy": { "code": "SeaZeeZee", "description": "A FreeSewing pattern for a historical tie-on pocket", "design": "SeaZeeZee", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "accessories", "historical", "bags" ], "techniques": [ - "curvedSeam" + "curved-seam" ] }, "lumina": { @@ -528,15 +468,13 @@ "description": "A FreeSewing pattern for leggings", "design": "Wouter Van Wageningen", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "bottoms", "trousers" ], "techniques": [ "stretch", - "curvedSeam", + "curved-seam", "elastic" ] }, @@ -545,15 +483,13 @@ "description": "A FreeSewing pattern for leggings", "design": "Wouter Van Wageningen", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "bottoms", "trousers" ], "techniques": [ "stretch", - "curvedSeam", + "curved-seam", "elastic" ] }, @@ -562,8 +498,6 @@ "description": "A FreeSewing pattern for a lacerna, a historical Roman cloak", "design": "Rika Tamaike", "difficulty": 1, - "lab": true, - "org": true, "tags": [ "tops", "coats", @@ -578,8 +512,6 @@ "description": "A FreeSewing pattern for a bike messenger bag", "design": "clegganator259", "difficulty": 3, - "lab": true, - "org": false, "tags": [ "accessories", "bags" @@ -591,17 +523,15 @@ "description": "A FreeSewing pattern for a princess seam bodice block", "design": "Wouter Van Wageningen", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "blocks", "tops" ], "techniques": [ "block", - "curvedSeam", + "curved-seam", "precision", - "princessSeam" + "princess-seam" ] }, "octoplushy": { @@ -609,14 +539,12 @@ "description": "A FreeSewing pattern for an octopus plushy toy", "design": "Wouter Van Wageningen", "difficulty": 4, - "lab": true, - "org": true, "tags": [ "accessories", "toys" ], "techniques": [ - "curvedSeam", + "curved-seam", "precision" ] }, @@ -625,8 +553,6 @@ "description": "A FreeSewing pattern for one-piece garments", "design": "Thrunic", "difficulty": 4, - "lab": true, - "org": true, "tags": [ "swimwear", "pajamas", @@ -634,7 +560,7 @@ ], "techniques": [ "hem", - "curvedSeam", + "curved-seam", "stretch", "lining", "zipper", @@ -646,16 +572,14 @@ "description": "A FreeSewing pattern for overalls", "design": "Thrunic", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "overalls", "onePiece" ], "techniques": [ - "flatFelledSeam", + "flat-felled-seam", "hem", - "curvedSeam", + "curved-seam", "button", "pocket" ] @@ -665,8 +589,6 @@ "description": "A FreeSewing pattern for a baby romper", "design": "Wouter Van Wageningen", "difficulty": 2, - "lab": true, - "org": true, "tags": [], "techniques": [] }, @@ -675,17 +597,15 @@ "description": "A FreeSewing pattern for summer pants", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "bottoms", "trousers" ], "techniques": [ "elastic", - "curvedSeam", + "curved-seam", "pocket", - "weltPocket", + "welt-pocket", "hem" ] }, @@ -694,30 +614,24 @@ "description": "A FreeSewing pattern for a pencil skirt", "design": "Wouter Van Wageningen", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "bottoms", "skirts" ], "techniques": [ "hem", - "curvedSeam", + "curved-seam", "precision", "zipper" ] }, "plugintest": { "code": "Joost De Cock", - "description": "A FreeSewing pattern to test (y)our plugins", - "lab": true, - "org": false + "description": "A FreeSewing pattern to test (y)our plugins" }, "rendertest": { "code": "Joost De Cock", - "description": "A FreeSewing pattern to test (y)our render engine our CSS", - "lab": true, - "org": false + "description": "A FreeSewing pattern to test (y)our render engine our CSS" }, "sandy": { "code": [ @@ -727,14 +641,12 @@ "description": "A FreeSewing pattern for a circle skirt", "design": "Erica Alcusa Sáez", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "bottoms", "skirts" ], "techniques": [ - "curvedSeam", + "curved-seam", "button", "hem" ] @@ -744,8 +656,6 @@ "description": "A FreeSewing pattern for a raglan shirt, perfect for swimshirts", "design": "Thrunic", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "tops", "swimwear" @@ -753,8 +663,8 @@ "techniques": [ "hem", "stretch", - "curvedSeam", - "raglanSleeve" + "curved-seam", + "raglan-sleeve" ] }, "shin": { @@ -762,8 +672,6 @@ "description": "A FreeSewing pattern for swim trunks", "design": "Joost De Cock", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "bottoms", "swimwear" @@ -771,7 +679,7 @@ "techniques": [ "hem", "stretch", - "curvedSeam", + "curved-seam", "elastic" ] }, @@ -780,8 +688,6 @@ "description": "A FreeSewing pattern for a button down shirt", "design": "Joost De Cock", "difficulty": 4, - "lab": true, - "org": true, "tags": [ "tops" ], @@ -789,9 +695,9 @@ "hem", "button", "interfacing", - "curvedSeam", - "flatFelledSeam", - "flatSleeve" + "curved-seam", + "flat-felled-seam", + "flat-sleeve" ] }, "simone": { @@ -799,8 +705,6 @@ "description": "A FreeSewing pattern for a button down shirt (Simone = Simon for people with breasts)", "design": "Joost De Cock", "difficulty": 4, - "lab": true, - "org": true, "tags": [ "tops" ], @@ -808,9 +712,9 @@ "hem", "button", "interfacing", - "curvedSeam", - "flatFelledSeam", - "flatSleeve" + "curved-seam", + "flat-felled-seam", + "flat-sleeve" ] }, "skully": { @@ -818,14 +722,12 @@ "description": "A FreeSewing pattern for skully, our logo, a plushy toy", "design": "Wouter Van Wageningen", "difficulty": 4, - "lab": true, - "org": true, "tags": [ "accessories", "toys" ], "techniques": [ - "curvedSeam", + "curved-seam", "precision" ] }, @@ -834,14 +736,12 @@ "description": "A FreeSewing pattern for a straightforward sweater", "design": "Joost De Cock", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam", - "flatSleeve", + "curved-seam", + "flat-sleeve", "ribbing" ] }, @@ -850,13 +750,11 @@ "description": "A FreeSewing pattern for a zero-waste top", "design": "Joost De Cock", "difficulty": 1, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam" + "curved-seam" ] }, "teagan": { @@ -864,16 +762,14 @@ "description": "A FreeSewing pattern for a T-shirt", "design": "Joost De Cock", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam", + "curved-seam", "hem", - "flatSleeve", - "knitBand" + "flat-sleeve", + "knit-band" ] }, "tiberius": { @@ -881,8 +777,6 @@ "description": "A FreeSewing pattern for a tunica, a historical Roman tunic", "design": "Rika Tamaike", "difficulty": 1, - "lab": true, - "org": true, "tags": [ "tops", "historical" @@ -897,8 +791,6 @@ "Joost De Cock" ], "difficulty": 3, - "lab": true, - "org": true, "tags": [ "blocks", "bottoms" @@ -910,8 +802,6 @@ "description": "A FreeSewing pattern for a tie", "design": "Joost De Cock", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "accessories" ], @@ -925,13 +815,11 @@ "description": "A FreeSewing pattern for a fitted top with prince(ss) seams", "design": "Natalia Sayang", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam", + "curved-seam", "precision" ] }, @@ -940,31 +828,27 @@ "description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern", "design": "Joost De Cock", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "bottoms", "underwear" ], "techniques": [ "elastic", - "curvedSeam" + "curved-seam" ] }, "umbra": { - "code": "Joost De Cock, Jonathan Haas", + "code": ["Joost De Cock", "Jonathan Haas"], "description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern", - "design": "Joost De Cock, Jonathan Haas", + "design": ["Joost De Cock", "Jonathan Haas"], "difficulty": 2, - "lab": true, - "org": true, "tags": [ "bottoms", "underwear" ], "techniques": [ "elastic", - "curvedSeam" + "curved-seam" ] }, "wahid": { @@ -972,17 +856,15 @@ "description": "A FreeSewing pattern for a classic fitted waistcoat", "design": "Joost De Cock", "difficulty": 4, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam", + "curved-seam", "hem", "interfacing", "lining", - "weltPocket", + "welt-pocket", "button" ] }, @@ -991,8 +873,6 @@ "description": "A FreeSewing pattern for a wappenrock (tabard/surcoat), a historical European/medieval (ish) garment", "design": "Rika Tamaike", "difficulty": 1, - "lab": true, - "org": true, "tags": [ "bottoms", "historical" @@ -1006,16 +886,14 @@ "description": "A FreeSewing pattern for wrap pants", "design": "Wouter Van Wageningen", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "bottoms", "trousers" ], "techniques": [ - "curvedSeam", + "curved-seam", "hem", - "weltPocket" + "welt-pocket" ] }, "yuri": { @@ -1023,31 +901,27 @@ "description": "A FreeSewing pattern for a fancy zipless sweater based on the Huey hoodie", "design": "Biou", "difficulty": 3, - "lab": true, - "org": true, "tags": [ "tops" ], "techniques": [ - "curvedSeam", - "flatSleeve", + "curved-seam", + "flat-sleeve", "hem", "button" ] }, "lily": { - "code": "Anna Puk, Joost De Cock", + "code": ["Anna Puk", "Joost De Cock"], "description": "A FreeSewing pattern for basic leggings", "design": "Anna Puk", "difficulty": 2, - "lab": true, - "org": true, "tags": [ "bottoms" ], "techniques": [ "elastic", - "curvedSeam", + "curved-seam", "hem" ] } diff --git a/designs/aaron/about.json b/designs/aaron/about.json new file mode 100644 index 00000000000..cb9bca669a4 --- /dev/null +++ b/designs/aaron/about.json @@ -0,0 +1,18 @@ +{ + "id": "aaron", + "code": "Joost De Cock", + "name": "Aaron A-shirt", + "description": "A FreeSewing pattern for a A-shirt or tank top", + "design": "Joost De Cock", + "difficulty": 2, + "tags": [ + "tops", + "underwear" + ], + "techniques": [ + "hem", + "stretch", + "knit-binding", + "curved-seam" + ] +} diff --git a/designs/aaron/data.mjs b/designs/aaron/data.mjs deleted file mode 100644 index 6135e5314c3..00000000000 --- a/designs/aaron/data.mjs +++ /dev/null @@ -1,4 +0,0 @@ -// This file is auto-generated | All changes you make will be overwritten. -export const name = '@freesewing/aaron' -export const version = '3.3.0-rc.1' -export const data = { name, version } diff --git a/designs/aaron/src/index.mjs b/designs/aaron/src/index.mjs index e2f9e8f3451..6a08a7866e7 100644 --- a/designs/aaron/src/index.mjs +++ b/designs/aaron/src/index.mjs @@ -1,7 +1,7 @@ import { Design, mergeI18n } from '@freesewing/core' import { i18n as brianI18n } from '@freesewing/brian' import { i18n as aaronI18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { back } from './back.mjs' import { front } from './front.mjs' import { armBinding } from './arm-binding.mjs' @@ -9,7 +9,7 @@ import { neckBinding } from './neck-binding.mjs' // Setup our new design const Aaron = new Design({ - data, + data: about, parts: [back, front, armBinding, neckBinding], }) @@ -33,4 +33,4 @@ const i18n = mergeI18n([brianI18n, aaronI18n], { }) // Named exports -export { back, front, Aaron, i18n } +export { back, front, Aaron, i18n, about } diff --git a/designs/albert/about.json b/designs/albert/about.json new file mode 100644 index 00000000000..8228f6d7b7b --- /dev/null +++ b/designs/albert/about.json @@ -0,0 +1,17 @@ +{ + "id": "albert", + "name": "Albert apron", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for an apron", + "design": "Wouter Van Wageningen", + "difficulty": 2, + "tags": [ + "accessories" + ], + "techniques": [ + "hem", + "knit-binding", + "curved-seam", + "pocket" + ] +} diff --git a/designs/albert/src/index.mjs b/designs/albert/src/index.mjs index 9897b7fd4b5..51369b09b32 100644 --- a/designs/albert/src/index.mjs +++ b/designs/albert/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { front } from './front.mjs' import { pocket } from './pocket.mjs' import { strap } from './strap.mjs' @@ -7,9 +7,9 @@ import { i18n } from '../i18n/index.mjs' // Setup our new design const Albert = new Design({ - data, + data: about, parts: [front, pocket, strap], }) // Named exports -export { front, pocket, strap, Albert, i18n } +export { front, pocket, strap, Albert, i18n, about } diff --git a/designs/bee/about.json b/designs/bee/about.json new file mode 100644 index 00000000000..dc313325832 --- /dev/null +++ b/designs/bee/about.json @@ -0,0 +1,18 @@ +{ + "id": "bee", + "name": "Bee bikini top", + "code": "bobgeorgethe3rd", + "description": "A FreeSewing pattern for a bikini top", + "design": "PrudenceRabbit", + "difficulty": 3, + "tags": [ + "tops", + "swimwear" + ], + "techniques": [ + "hem", + "stretch", + "curved-seam", + "precision" + ] +} diff --git a/designs/bee/src/index.mjs b/designs/bee/src/index.mjs index 58f8430fef2..42786fd9bae 100644 --- a/designs/bee/src/index.mjs +++ b/designs/bee/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { cup } from './cup.mjs' import { neckTie } from './neck-tie.mjs' import { bandTie } from './band-tie.mjs' @@ -7,7 +7,7 @@ import { i18n as beeI18n } from '../i18n/index.mjs' import { i18n as bellaI18n } from '@freesewing/bella' const Bee = new Design({ - data, + data: about, parts: [cup, neckTie, bandTie], }) @@ -50,4 +50,4 @@ const i18n = mergeI18n([bellaI18n, beeI18n], { o: { keep: i18nKeepOptions }, }) -export { cup, neckTie, bandTie, Bee, i18n } +export { cup, neckTie, bandTie, Bee, i18n, about } diff --git a/designs/bella/about.json b/designs/bella/about.json new file mode 100644 index 00000000000..1c9a442415d --- /dev/null +++ b/designs/bella/about.json @@ -0,0 +1,19 @@ +{ + "id": "bella", + "name": "Bella body block", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a womenswear bodice block", + "design": [ + "Bella Incognito", + "Joost De Cock" + ], + "difficulty": 3, + "tags": [ + "blocks", + "tops" + ], + "techniques": [ + "dart", + "block" + ] +} diff --git a/designs/bella/src/index.mjs b/designs/bella/src/index.mjs index 46a0565b8d6..c04d343b45a 100644 --- a/designs/bella/src/index.mjs +++ b/designs/bella/src/index.mjs @@ -1,12 +1,12 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { back } from './back.mjs' import { frontSideDart } from './front-side-dart.mjs' import { i18n } from '../i18n/index.mjs' const Bella = new Design({ - data, + data: about, parts: [back, frontSideDart], }) -export { back, frontSideDart, Bella, i18n } +export { back, frontSideDart, Bella, i18n, about } diff --git a/designs/benjamin/about.json b/designs/benjamin/about.json new file mode 100644 index 00000000000..feca255b6ee --- /dev/null +++ b/designs/benjamin/about.json @@ -0,0 +1,15 @@ +{ + "id": "benjamin", + "name": "Benjamin bow tie", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for a bow tie", + "design": "Wouter Van Wageningen", + "difficulty": 3, + "tags": [ + "accessories" + ], + "techniques": [ + "precision", + "interfacing" + ] +} diff --git a/designs/benjamin/src/index.mjs b/designs/benjamin/src/index.mjs index af0d0b3c3fb..b128637ca0a 100644 --- a/designs/benjamin/src/index.mjs +++ b/designs/benjamin/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { bow1 } from './bow1.mjs' import { bow2 } from './bow2.mjs' import { bow3 } from './bow3.mjs' @@ -8,9 +8,9 @@ import { i18n } from '../i18n/index.mjs' // Setup our new design const Benjamin = new Design({ - data, + data: about, parts: [bow1, bow2, bow3, collarBand], }) // Named exports -export { bow1, bow2, bow3, collarBand, Benjamin, i18n } +export { bow1, bow2, bow3, collarBand, Benjamin, i18n, about } diff --git a/designs/bent/about.json b/designs/bent/about.json new file mode 100644 index 00000000000..445c17be56b --- /dev/null +++ b/designs/bent/about.json @@ -0,0 +1,17 @@ +{ + "id": "bent", + "name": "Bent body block", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a menswear body block with a two-part sleeve", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "blocks", + "tops" + ], + "techniques": [ + "hem", + "curved-seam", + "set-sleeve" + ] +} diff --git a/designs/bent/src/index.mjs b/designs/bent/src/index.mjs index fb5097d1378..12029e74371 100644 --- a/designs/bent/src/index.mjs +++ b/designs/bent/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { front, back, i18n as brianI18n } from '@freesewing/brian' import { sleeve } from './sleeve.mjs' import { topSleeve } from './topsleeve.mjs' @@ -8,7 +8,7 @@ import { i18n as bentI18n } from '../i18n/index.mjs' // Create new design const Bent = new Design({ - data, + data: about, parts: [front, back, sleeve, topSleeve, underSleeve], }) @@ -28,4 +28,4 @@ const i18n = mergeI18n([brianI18n, bentI18n], { }) // Named exports -export { front, back, sleeve, topSleeve, underSleeve, Bent, i18n } +export { front, back, sleeve, topSleeve, underSleeve, Bent, i18n, about } diff --git a/designs/bibi/about.json b/designs/bibi/about.json new file mode 100644 index 00000000000..e1ef77af85e --- /dev/null +++ b/designs/bibi/about.json @@ -0,0 +1,17 @@ +{ + "id": "bibi", + "name": "Bibi body block", + "code": "Jonathan Haas", + "description": "A FreeSewing pattern for a knit top body block", + "design": "Jonathan Haas", + "difficulty": 2, + "tags": [ + "blocks", + "tops" + ], + "techniques": [ + "curved-seam", + "hem", + "flat-sleeve" + ] +} diff --git a/designs/bibi/src/index.mjs b/designs/bibi/src/index.mjs index 9b7d68b56a2..946c1b13121 100644 --- a/designs/bibi/src/index.mjs +++ b/designs/bibi/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as bibiI18n } from '../i18n/index.mjs' import { front } from './front.mjs' @@ -26,7 +26,7 @@ import { // Setup our new design const Bibi = new Design({ - data, + data: about, parts: [waistband, cuff, armholeBinding, neckBinding, sleeve, back, front], }) @@ -58,4 +58,5 @@ export { draftKnitBinding, Bibi, i18n, + about, } diff --git a/designs/bob/about.json b/designs/bob/about.json new file mode 100644 index 00000000000..8e1c5595029 --- /dev/null +++ b/designs/bob/about.json @@ -0,0 +1,17 @@ +{ + "id": "bob", + "name": "Bob the bib", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a bib", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "accessories", + "infants" + ], + "techniques": [ + "bias-tape", + "curved-seam", + "snap" + ] +} diff --git a/designs/bob/src/index.mjs b/designs/bob/src/index.mjs index 7f29e4b36e5..cb574842365 100644 --- a/designs/bob/src/index.mjs +++ b/designs/bob/src/index.mjs @@ -1,13 +1,13 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { bib } from './bib.mjs' import { i18n } from '../i18n/index.mjs' // Setup our new design const Bob = new Design({ - data, + data: about, parts: [bib], }) //Named exports -export { bib, Bob, i18n } +export { bib, Bob, i18n, about } diff --git a/designs/breanna/about.json b/designs/breanna/about.json new file mode 100644 index 00000000000..42a86755c40 --- /dev/null +++ b/designs/breanna/about.json @@ -0,0 +1,16 @@ +{ + "id": "breanna", + "name": "Breanna body block", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a basic body block for womenswear", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "blocks", + "tops" + ], + "techniques": [ + "block", + "dart" + ] +} diff --git a/designs/breanna/src/index.mjs b/designs/breanna/src/index.mjs index f99a40ff862..989b977dac1 100644 --- a/designs/breanna/src/index.mjs +++ b/designs/breanna/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { back } from './back.mjs' import { front } from './front.mjs' import { sleeve } from './sleeve.mjs' @@ -10,9 +10,9 @@ import { i18n } from '../i18n/index.mjs' // Create design const Breanna = new Design({ - data, + data: about, parts: [back, front, sleeve, base, frontBase, sleevecap], }) // Named exports -export { back, front, sleeve, base, frontBase, sleevecap, Breanna, i18n } +export { back, front, sleeve, base, frontBase, sleevecap, Breanna, i18n, about } diff --git a/designs/brian/about.json b/designs/brian/about.json new file mode 100644 index 00000000000..b3fd1d798ea --- /dev/null +++ b/designs/brian/about.json @@ -0,0 +1,16 @@ +{ + "id": "brian", + "name": "Brian body block", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a basic body block for menswear", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "blocks", + "tops" + ], + "techniques": [ + "block", + "flat-sleeve" + ] +} diff --git a/designs/brian/src/index.mjs b/designs/brian/src/index.mjs index 62207631f97..0f01969ae2d 100644 --- a/designs/brian/src/index.mjs +++ b/designs/brian/src/index.mjs @@ -1,6 +1,6 @@ import { Design } from '@freesewing/core' import { i18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { back } from './back.mjs' import { front } from './front.mjs' import { sleeve } from './sleeve.mjs' @@ -10,9 +10,9 @@ import { sleevecap } from './sleevecap.mjs' // Setup our new design const Brian = new Design({ - data, + data: about, parts: [back, front, sleeve], }) // Named exports -export { back, front, sleeve, base, sleevecap, Brian, i18n } +export { back, front, sleeve, base, sleevecap, Brian, i18n, about } diff --git a/designs/bruce/about.json b/designs/bruce/about.json new file mode 100644 index 00000000000..11dd124f648 --- /dev/null +++ b/designs/bruce/about.json @@ -0,0 +1,18 @@ +{ + "id": "bruce", + "name": "Bruce boxer briefs", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for boxer briefs", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "bottoms", + "underwear" + ], + "techniques": [ + "stretch", + "hem", + "curved-seam", + "elastic" + ] +} diff --git a/designs/bruce/src/index.mjs b/designs/bruce/src/index.mjs index e75806df5a9..061d09753b0 100644 --- a/designs/bruce/src/index.mjs +++ b/designs/bruce/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { back } from './back.mjs' import { side } from './side.mjs' import { front } from './front.mjs' @@ -8,9 +8,9 @@ import { i18n } from '../i18n/index.mjs' // Create design const Bruce = new Design({ - data, + data: about, parts: [back, side, front, inset], }) // Named exports -export { back, side, front, inset, Bruce, i18n } +export { back, side, front, inset, Bruce, i18n, about } diff --git a/designs/carlita/about.json b/designs/carlita/about.json new file mode 100644 index 00000000000..0ed81e31ff6 --- /dev/null +++ b/designs/carlita/about.json @@ -0,0 +1,27 @@ +{ + "id": "carlita", + "name": "Carlita coat", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for Sherlock Holmes cosplay; Or just a nice long coat", + "design": [ + "Anneke Caramin", + "Joost De Cock" + ], + "difficulty": 5, + "tags": [ + "tops", + "coats" + ], + "techniques": [ + "hem", + "pocket", + "curved-seam", + "precision", + "set-sleeve", + "welt-pocket", + "lining", + "princess-seam", + "interfacing", + "button" + ] +} diff --git a/designs/carlita/src/index.mjs b/designs/carlita/src/index.mjs index c404e8e1724..cb58aeadf85 100644 --- a/designs/carlita/src/index.mjs +++ b/designs/carlita/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { front } from './front.mjs' import { side } from './side.mjs' import { frontFacing } from './front-facing.mjs' @@ -28,7 +28,7 @@ import { i18n as carlitaI18n } from '../i18n/index.mjs' // Create new design const Carlita = new Design({ - data, + data: about, parts: [ front, frontFacing, @@ -82,4 +82,5 @@ export { innerPocketTab, Carlita, i18n, + about, } diff --git a/designs/carlton/about.json b/designs/carlton/about.json new file mode 100644 index 00000000000..be5ee390a67 --- /dev/null +++ b/designs/carlton/about.json @@ -0,0 +1,26 @@ +{ + "id": "carlton", + "name": "Carlton coat", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for Sherlock Holmes cosplay; Or just a nice long coat", + "design": [ + "Anneke Caramin", + "Joost De Cock" + ], + "difficulty": 5, + "tags": [ + "tops", + "coats" + ], + "techniques": [ + "hem", + "pocket", + "curved-seam", + "precision", + "set-sleeve", + "welt-pocket", + "lining", + "interfacing", + "button" + ] +} diff --git a/designs/carlton/src/index.mjs b/designs/carlton/src/index.mjs index b62a704e568..a3daa0373b2 100644 --- a/designs/carlton/src/index.mjs +++ b/designs/carlton/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n, Brian, sleevecap as brianSleevecap } from '@freesewing/brian' import { i18n as carltonI18n } from '../i18n/index.mjs' // Parts @@ -26,7 +26,7 @@ import { innerPocketTab } from './innerpockettab.mjs' // Create design const Carlton = new Design({ - data, + data: about, parts: [ front, frontFacing, @@ -90,4 +90,5 @@ export { innerPocketTab, Carlton, i18n, + about, } diff --git a/designs/cathrin/about.json b/designs/cathrin/about.json new file mode 100644 index 00000000000..3a60695c9eb --- /dev/null +++ b/designs/cathrin/about.json @@ -0,0 +1,21 @@ +{ + "id": "cathrin", + "name": "Cathrin corset", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a underbust corset / waist trainer", + "design": [ + "Cathrin Åhlén", + "Joost De Cock" + ], + "difficulty": 4, + "tags": [ + "tops", + "underwear" + ], + "techniques": [ + "boning", + "precision", + "curved-seam", + "interfacing" + ] +} diff --git a/designs/cathrin/src/index.mjs b/designs/cathrin/src/index.mjs index a18fb6b84fc..58290083b1c 100644 --- a/designs/cathrin/src/index.mjs +++ b/designs/cathrin/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } //Parts import { panel1 } from './panel1.mjs' import { panel2 } from './panel2.mjs' @@ -15,9 +15,9 @@ import { i18n } from '../i18n/index.mjs' // Create design const Cathrin = new Design({ - data, + data: about, parts: [panel1, panel2, panel3, panel4, panel5, panel6], }) // Named exports -export { base, panels, panel1, panel2, panel3, panel4, panel5, panel6, Cathrin, i18n } +export { base, panels, panel1, panel2, panel3, panel4, panel5, panel6, Cathrin, i18n, about } diff --git a/designs/charlie/about.json b/designs/charlie/about.json new file mode 100644 index 00000000000..e810e98056f --- /dev/null +++ b/designs/charlie/about.json @@ -0,0 +1,23 @@ +{ + "id": "charlie", + "name": "Charlie chinos", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for chino trousers", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "bottoms", + "trousers" + ], + "techniques": [ + "welt-pocket", + "curved-seam", + "interfacing", + "fly", + "zipper", + "button", + "dart", + "hem", + "seam-pocket" + ] +} diff --git a/designs/charlie/src/index.mjs b/designs/charlie/src/index.mjs index b1b23dcf6b2..94a67fdcf8e 100644 --- a/designs/charlie/src/index.mjs +++ b/designs/charlie/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as titanI18n } from '@freesewing/titan' import { i18n as charlieI18n } from '../i18n/index.mjs' // Parts @@ -19,7 +19,7 @@ import { beltLoops } from './beltloops.mjs' // Create design const Charlie = new Design({ - data, + data: about, parts: [ front, back, @@ -57,4 +57,5 @@ export { beltLoops, Charlie, i18n, + about, } diff --git a/designs/cornelius/about.json b/designs/cornelius/about.json new file mode 100644 index 00000000000..d6563d9b991 --- /dev/null +++ b/designs/cornelius/about.json @@ -0,0 +1,19 @@ +{ + "id": "cornelius", + "name": "Cornelius cycling breeches", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for cycling breeches, based on the Keystone drafting system", + "design": "Wouter Van Wageningen", + "difficulty": 3, + "tags": [ + "bottoms", + "trousers" + ], + "techniques": [ + "curved-seam", + "fly", + "zipper", + "button", + "pocket" + ] +} diff --git a/designs/cornelius/src/index.mjs b/designs/cornelius/src/index.mjs index 29398576cad..4726fa93faa 100644 --- a/designs/cornelius/src/index.mjs +++ b/designs/cornelius/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } // Parts import { frontpoints } from './frontpoints.mjs' import { front } from './front.mjs' @@ -15,7 +15,7 @@ import { i18n } from '../i18n/index.mjs' // Create new design const Cornelius = new Design({ - data, + data: about, parts: [front, back, legband, legbandKeystone, waistband, pocketFacing, pocket, zipperguard], }) @@ -32,4 +32,5 @@ export { frontpoints, Cornelius, i18n, + about, } diff --git a/designs/diana/about.json b/designs/diana/about.json new file mode 100644 index 00000000000..3f833a080b4 --- /dev/null +++ b/designs/diana/about.json @@ -0,0 +1,16 @@ +{ + "id": "diana", + "name": "Diana draped top", + "code": "Erica Alcusa Sáez", + "description": "A FreeSewing pattern for a top with a draped neck", + "design": "Erica Alcusa Sáez", + "difficulty": 2, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam", + "flat-sleeve", + "hem" + ] +} diff --git a/designs/diana/src/index.mjs b/designs/diana/src/index.mjs index bb78bc9d62e..f68183194f1 100644 --- a/designs/diana/src/index.mjs +++ b/designs/diana/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as dianaI18n } from '../i18n/index.mjs' // Parts @@ -8,7 +8,7 @@ import { sleeve } from './sleeve.mjs' // Create design const Diana = new Design({ - data, + data: about, parts: [front, back, sleeve], }) @@ -16,4 +16,4 @@ const Diana = new Design({ const i18n = mergeI18n([brianI18n, dianaI18n]) // Named exports -export { front, back, sleeve, Diana, i18n } +export { front, back, sleeve, Diana, i18n, about } diff --git a/designs/examples/src/index.mjs b/designs/examples/src/index.mjs index b1c68e88445..0eab64aa3f2 100644 --- a/designs/examples/src/index.mjs +++ b/designs/examples/src/index.mjs @@ -1,6 +1,5 @@ import { Design } from '@freesewing/core' import { gorePlugin } from '@freesewing/plugin-gore' -import { data } from '../data.mjs' import { i18n } from '../i18n/index.mjs' // Stacks @@ -19,7 +18,6 @@ import { settings_sa } from './settings.mjs' // Setup our new design const Examples = new Design({ - data, parts: [ // Stacks stacks_top, diff --git a/designs/florence/about.json b/designs/florence/about.json new file mode 100644 index 00000000000..9039d209e5c --- /dev/null +++ b/designs/florence/about.json @@ -0,0 +1,14 @@ +{ + "id": "florence", + "name": "Florence face mask", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a face mask", + "design": "Joost De Cock", + "difficulty": 1, + "tags": [ + "accessories" + ], + "techniques": [ + "curved-seam" + ] +} diff --git a/designs/florence/src/index.mjs b/designs/florence/src/index.mjs index 2c873a7ffb8..3b22285f668 100644 --- a/designs/florence/src/index.mjs +++ b/designs/florence/src/index.mjs @@ -1,13 +1,13 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { mask } from './mask.mjs' import { i18n } from '../i18n/index.mjs' // Setup our new design const Florence = new Design({ - data, + data: about, parts: [mask], }) // Named exports -export { mask, Florence, i18n } +export { mask, Florence, i18n, about } diff --git a/designs/florent/about.json b/designs/florent/about.json new file mode 100644 index 00000000000..670899f69a4 --- /dev/null +++ b/designs/florent/about.json @@ -0,0 +1,18 @@ +{ + "id": "florent", + "name": "Florent flat cap", + "code": [ + "Quentin Felix", + "Joost De Cock" + ], + "description": "A FreeSewing pattern for a flat cap", + "design": "Quentin Felix", + "difficulty": 3, + "tags": [ + "accessories", + "hats" + ], + "techniques": [ + "curved-seam" + ] +} diff --git a/designs/florent/src/index.mjs b/designs/florent/src/index.mjs index 07a4b7d86ff..789a3b31550 100644 --- a/designs/florent/src/index.mjs +++ b/designs/florent/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' // Parts import { top } from './top.mjs' @@ -10,9 +10,9 @@ import { brimInterfacing } from './briminterfacing.mjs' // Create new design const Florent = new Design({ - data, + data: about, parts: [top, side, brimBottom, brimTop, brimInterfacing], }) // Named exports -export { top, side, brimBottom, brimTop, brimInterfacing, Florent, i18n } +export { top, side, brimBottom, brimTop, brimInterfacing, Florent, i18n, about } diff --git a/designs/gozer/about.json b/designs/gozer/about.json new file mode 100644 index 00000000000..0ab1b6ecd00 --- /dev/null +++ b/designs/gozer/about.json @@ -0,0 +1,14 @@ +{ + "id": "gozer", + "name": "Gozer ghost costume", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for a ghost costume", + "design": "Wouter Van Wageningen", + "difficulty": 1, + "tags": [ + "costumes" + ], + "techniques": [ + "hem" + ] +} diff --git a/designs/gozer/src/index.mjs b/designs/gozer/src/index.mjs index e7eaddaa418..96075c89ad2 100644 --- a/designs/gozer/src/index.mjs +++ b/designs/gozer/src/index.mjs @@ -1,16 +1,14 @@ -// - import { Design } from '@freesewing/core' import { i18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } // Parts import { ghost } from './ghost.mjs' // Create new design const Gozer = new Design({ - data, + data: about, parts: [ghost], }) // Named exports -export { ghost, i18n, Gozer } +export { ghost, Gozer, i18n, about } diff --git a/designs/hi/about.json b/designs/hi/about.json new file mode 100644 index 00000000000..836b3cd4cd1 --- /dev/null +++ b/designs/hi/about.json @@ -0,0 +1,16 @@ +{ + "id": "hi", + "name": "Hi the shark", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for a shark plush toy", + "design": "Wouter Van Wageningen", + "difficulty": 4, + "tags": [ + "accessories", + "toys" + ], + "techniques": [ + "curved-seam", + "dart" + ] +} diff --git a/designs/hi/src/index.mjs b/designs/hi/src/index.mjs index 9dd53d8fd20..5ddc78f1c48 100644 --- a/designs/hi/src/index.mjs +++ b/designs/hi/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' // Parts import { body } from './body.mjs' @@ -14,7 +14,7 @@ import { upperTeeth } from './upperTeeth.mjs' // Create design const Hi = new Design({ - data, + data: about, parts: [body, tail, mouth, aboveMouth, belly, topOfFin, bottomOfFin, lowerTeeth, upperTeeth], }) @@ -31,4 +31,5 @@ export { upperTeeth, Hi, i18n, + about, } diff --git a/designs/holmes/about.json b/designs/holmes/about.json new file mode 100644 index 00000000000..6439c0b0b9f --- /dev/null +++ b/designs/holmes/about.json @@ -0,0 +1,19 @@ +{ + "id": "holmes", + "name": "Holmes deerstalker hat", + "code": [ + "Erica Alcusa Sáez", + "bobgeorgethe3rd" + ], + "description": "A FreeSewing pattern for a Sherlock Holmes hat", + "design": "Erica Alcusa Sáez", + "difficulty": 3, + "tags": [ + "accessories", + "hats" + ], + "techniques": [ + "curved-seam", + "lining" + ] +} diff --git a/designs/holmes/src/index.mjs b/designs/holmes/src/index.mjs index eae9ba7a3d5..2caa5b1e7b0 100644 --- a/designs/holmes/src/index.mjs +++ b/designs/holmes/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' // Parts @@ -9,9 +9,9 @@ import { ear } from './ear.mjs' // Create new design const Holmes = new Design({ - data, + data: about, parts: [crown, visor, ear], }) // Named exports -export { crown, visor, ear, Holmes, i18n } +export { crown, visor, ear, Holmes, i18n, about } diff --git a/designs/hortensia/about.json b/designs/hortensia/about.json new file mode 100644 index 00000000000..5bb9231bb1e --- /dev/null +++ b/designs/hortensia/about.json @@ -0,0 +1,21 @@ +{ + "id": "hortensia", + "name": "Hortensia handbag", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for a handbag", + "design": [ + "Stoffsuchti", + "Wouter Van Wageningen" + ], + "difficulty": 3, + "tags": [ + "accessories", + "bags" + ], + "techniques": [ + "curved-seam", + "precision", + "lining", + "zipper" + ] +} diff --git a/designs/hortensia/src/index.mjs b/designs/hortensia/src/index.mjs index 24c27502460..83bb93ee951 100644 --- a/designs/hortensia/src/index.mjs +++ b/designs/hortensia/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' // Parts import { sidePanel } from './sidepanel.mjs' @@ -11,7 +11,7 @@ import { strap } from './strap.mjs' // Create new design const Hortensia = new Design({ - data, + data: about, parts: [sidePanel, frontPanel, bottomPanel, zipperPanel, sidePanelReinforcement, strap], }) @@ -25,4 +25,5 @@ export { strap, Hortensia, i18n, + about, } diff --git a/designs/huey/about.json b/designs/huey/about.json new file mode 100644 index 00000000000..748619f9505 --- /dev/null +++ b/designs/huey/about.json @@ -0,0 +1,18 @@ +{ + "id": "huey", + "name": "Huey hoodie", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a zip-up hoodie", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam", + "pocket", + "zipper", + "ribbing", + "flat-sleeve" + ] +} diff --git a/designs/huey/src/index.mjs b/designs/huey/src/index.mjs index b46df362446..c036e556bb1 100644 --- a/designs/huey/src/index.mjs +++ b/designs/huey/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as hueyI18n } from '../i18n/index.mjs' // Parts @@ -13,7 +13,7 @@ import { cuff } from './cuff.mjs' // Create design const Huey = new Design({ - data, + data: about, parts: [back, front, sleeve, pocket, hood, waistband, cuff], }) @@ -21,4 +21,4 @@ const Huey = new Design({ const i18n = mergeI18n([brianI18n, hueyI18n]) // Named exports -export { back, front, sleeve, pocket, hood, waistband, cuff, Huey, i18n } +export { back, front, sleeve, pocket, hood, waistband, cuff, Huey, i18n, about } diff --git a/designs/hugo/about.json b/designs/hugo/about.json new file mode 100644 index 00000000000..21f8037e24f --- /dev/null +++ b/designs/hugo/about.json @@ -0,0 +1,17 @@ +{ + "id": "hugo", + "name": "Hugo hoodie", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a hooded jumper with raglan sleeves", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam", + "pocket", + "ribbing", + "raglan-sleeve" + ] +} diff --git a/designs/hugo/src/index.mjs b/designs/hugo/src/index.mjs index 4aa759a0776..d1801570add 100644 --- a/designs/hugo/src/index.mjs +++ b/designs/hugo/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as hugoI18n } from '../i18n/index.mjs' import { back } from './back.mjs' @@ -15,7 +15,7 @@ import { neckBinding } from './neckbinding.mjs' // Setup our new design const Hugo = new Design({ - data, + data: about, parts: [ back, front, @@ -47,4 +47,5 @@ export { neckBinding, Hugo, i18n, + about, } diff --git a/designs/jaeger/about.json b/designs/jaeger/about.json new file mode 100644 index 00000000000..7854c55033d --- /dev/null +++ b/designs/jaeger/about.json @@ -0,0 +1,23 @@ +{ + "id": "jaeger", + "name": "Jaeger jacket", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a sport coat style jacket", + "design": "Joost De Cock", + "difficulty": 5, + "tags": [ + "tops", + "coats" + ], + "techniques": [ + "hem", + "pocket", + "curved-seam", + "precision", + "set-sleeve", + "welt-pocket", + "lining", + "interfacing", + "button" + ] +} diff --git a/designs/jaeger/src/index.mjs b/designs/jaeger/src/index.mjs index bff991865a4..3f2c88bc501 100644 --- a/designs/jaeger/src/index.mjs +++ b/designs/jaeger/src/index.mjs @@ -1,7 +1,7 @@ import { Design, mergeI18n } from '@freesewing/core' import { i18n as bentI18n } from '@freesewing/bent' import { i18n as jaegerI18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { backBase } from './backbase.mjs' import { frontBase } from './frontbase.mjs' import { side } from './side.mjs' @@ -22,7 +22,7 @@ import { frontLining } from './front-lining.mjs' // Setup our new design const Jaeger = new Design({ - data, + data: about, parts: [ backBase, frontBase, @@ -68,4 +68,5 @@ export { innerPocketWelt, Jaeger, i18n, + about, } diff --git a/designs/jane/about.json b/designs/jane/about.json new file mode 100644 index 00000000000..0d9c715a342 --- /dev/null +++ b/designs/jane/about.json @@ -0,0 +1,16 @@ +{ + "id": "jane", + "name": "Jane 1970s shift", + "code": "SeaZeeZee", + "description": "A FreeSewing pattern for a 1790s shift", + "design": "SeaZeeZee", + "difficulty": 2, + "tags": [ + "tops", + "historical", + "underwear" + ], + "techniques": [ + "hem" + ] +} diff --git a/designs/jane/src/index.mjs b/designs/jane/src/index.mjs index 1e9cb535531..208ce102acf 100644 --- a/designs/jane/src/index.mjs +++ b/designs/jane/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { body } from './body.mjs' import { sleeve } from './sleeve.mjs' import { gusset } from './gusset.mjs' @@ -7,8 +7,8 @@ import { i18n } from '../i18n/index.mjs' // Create new design const Jane = new Design({ - data, + data: about, parts: [body, sleeve, gusset], }) -export { body, sleeve, gusset, i18n, Jane } +export { body, sleeve, gusset, Jane, i18n, about } diff --git a/designs/legend/src/index.mjs b/designs/legend/src/index.mjs index f0afbbc669e..e52b7223d2f 100644 --- a/designs/legend/src/index.mjs +++ b/designs/legend/src/index.mjs @@ -1,5 +1,4 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' import { i18n } from '../i18n/index.mjs' import { fabricLines, saLines, otherLines, lineWidths, lineStrokes } from './lines.mjs' import { notches } from './notches.mjs' @@ -17,7 +16,6 @@ import { sa } from './sa.mjs' // Setup our new design const Legend = new Design({ - data, parts: [ fabricLines, saLines, diff --git a/designs/lily/about.json b/designs/lily/about.json new file mode 100644 index 00000000000..378c6bd9986 --- /dev/null +++ b/designs/lily/about.json @@ -0,0 +1,19 @@ +{ + "id": "lily", + "name": "Lily leggings", + "code": [ + "Anna Puk", + "Joost De Cock" + ], + "description": "A FreeSewing pattern for basic leggings", + "design": "Anna Puk", + "difficulty": 2, + "tags": [ + "bottoms" + ], + "techniques": [ + "elastic", + "curved-seam", + "hem" + ] +} diff --git a/designs/lily/src/index.mjs b/designs/lily/src/index.mjs index 1a831522031..d0943c002bf 100644 --- a/designs/lily/src/index.mjs +++ b/designs/lily/src/index.mjs @@ -1,6 +1,6 @@ import { Design } from '@freesewing/core' import { i18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } // Parts import { front } from './front.mjs' import { back } from './back.mjs' @@ -8,9 +8,9 @@ import { waistband } from './waistband.mjs' // Create new design const Lily = new Design({ - data, + data: about, parts: [front, back, waistband], }) // Named exports -export { front, back, waistband, i18n, Lily } +export { front, back, waistband, Lily, i18n, about } diff --git a/designs/lucy/about.json b/designs/lucy/about.json new file mode 100644 index 00000000000..0b500c30b41 --- /dev/null +++ b/designs/lucy/about.json @@ -0,0 +1,16 @@ +{ + "id": "lucy", + "name": "Lucy tie-on pocket", + "code": "SeaZeeZee", + "description": "A FreeSewing pattern for a historical tie-on pocket", + "design": "SeaZeeZee", + "difficulty": 2, + "tags": [ + "accessories", + "historical", + "bags" + ], + "techniques": [ + "curved-seam" + ] +} diff --git a/designs/lucy/src/index.mjs b/designs/lucy/src/index.mjs index a837aa5f514..6554ddd71b7 100644 --- a/designs/lucy/src/index.mjs +++ b/designs/lucy/src/index.mjs @@ -1,10 +1,13 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { pocket } from './pocket.mjs' // Setup our new design -const Lucy = new Design({ data, parts: [pocket] }) +const Lucy = new Design({ + data: about, + parts: [pocket], +}) // Named exports -export { pocket, Lucy, i18n } +export { pocket, Lucy, i18n, about } diff --git a/designs/lumina/about.json b/designs/lumina/about.json new file mode 100644 index 00000000000..1a50a813ff1 --- /dev/null +++ b/designs/lumina/about.json @@ -0,0 +1,17 @@ +{ + "id": "lumina", + "name": "Lumina leggings", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for leggings", + "design": "Wouter Van Wageningen", + "difficulty": 3, + "tags": [ + "bottoms", + "trousers" + ], + "techniques": [ + "stretch", + "curved-seam", + "elastic" + ] +} diff --git a/designs/lumina/src/index.mjs b/designs/lumina/src/index.mjs index 85f68e79c47..c3dc8dcd600 100644 --- a/designs/lumina/src/index.mjs +++ b/designs/lumina/src/index.mjs @@ -1,8 +1,6 @@ -// - import { Design } from '@freesewing/core' import { i18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } // Parts import { shape } from './shape.mjs' import { panel } from './panel.mjs' @@ -12,9 +10,9 @@ import { waistband } from './waistband.mjs' // Create new design const Lumina = new Design({ - data, + data: about, parts: [shape, panel, leg, waistband, pocket], }) // Named exports -export { i18n, Lumina, shape, panel, leg, waistband, pocket } +export { shape, panel, leg, waistband, pocket, Lumina, i18n, about } diff --git a/designs/lumira/about.json b/designs/lumira/about.json new file mode 100644 index 00000000000..57487a60aa5 --- /dev/null +++ b/designs/lumira/about.json @@ -0,0 +1,17 @@ +{ + "id": "lumira", + "name": "Lumira leggings", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for leggings", + "design": "Wouter Van Wageningen", + "difficulty": 3, + "tags": [ + "bottoms", + "trousers" + ], + "techniques": [ + "stretch", + "curved-seam", + "elastic" + ] +} diff --git a/designs/lumira/src/index.mjs b/designs/lumira/src/index.mjs index 447fc8c31bd..02a9e094bf5 100644 --- a/designs/lumira/src/index.mjs +++ b/designs/lumira/src/index.mjs @@ -2,7 +2,7 @@ import { Design } from '@freesewing/core' import { i18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } // Parts import { extendPath, controlPoints, createControlPoints, shape } from './shape.mjs' import { leg } from './leg.mjs' @@ -11,14 +11,12 @@ import { waistband } from './waistband.mjs' // Create new design const Lumira = new Design({ - data, + data: about, parts: [shape, gusset, leg, waistband], }) // Named exports export { - i18n, - Lumira, shape, gusset, leg, @@ -26,4 +24,7 @@ export { extendPath, controlPoints, createControlPoints, + Lumira, + i18n, + about, } diff --git a/designs/lunetius/about.json b/designs/lunetius/about.json new file mode 100644 index 00000000000..dca9cf46d00 --- /dev/null +++ b/designs/lunetius/about.json @@ -0,0 +1,16 @@ +{ + "id": "lunetius", + "name": "Lunetius lacerna", + "code": "Rika Tamaike", + "description": "A FreeSewing pattern for a lacerna, a historical Roman cloak", + "design": "Rika Tamaike", + "difficulty": 1, + "tags": [ + "tops", + "coats", + "historical" + ], + "techniques": [ + "hem" + ] +} diff --git a/designs/lunetius/src/index.mjs b/designs/lunetius/src/index.mjs index 0430964ee80..fdd11969d71 100644 --- a/designs/lunetius/src/index.mjs +++ b/designs/lunetius/src/index.mjs @@ -1,13 +1,13 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { lacerna } from './lacerna.mjs' // Setup our new design const Lunetius = new Design({ - data, + data: about, parts: [lacerna], }) // Named exports -export { lacerna, Lunetius, i18n } +export { lacerna, Lunetius, i18n, about } diff --git a/designs/magde/about.json b/designs/magde/about.json new file mode 100644 index 00000000000..1dac1602319 --- /dev/null +++ b/designs/magde/about.json @@ -0,0 +1,13 @@ +{ + "id": "magde", + "name": "Magde messenger bag", + "code": "clegganator259", + "description": "A FreeSewing pattern for a bike messenger bag", + "design": "clegganator259", + "difficulty": 3, + "tags": [ + "accessories", + "bags" + ], + "techniques": [] +} diff --git a/designs/magde/src/index.mjs b/designs/magde/src/index.mjs index 28e8728cc04..3c767898de5 100644 --- a/designs/magde/src/index.mjs +++ b/designs/magde/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' // Parts import { bodyLiner } from './bodyLiner.mjs' @@ -16,7 +16,7 @@ import { strapAttachments } from './strapAttachments.mjs' // Create new design const Magde = new Design({ - data, + data: about, parts: [ backPanel, frontPanel, @@ -47,4 +47,5 @@ export { internalOrganiser, Magde, i18n, + about, } diff --git a/designs/noble/about.json b/designs/noble/about.json new file mode 100644 index 00000000000..2e377d503eb --- /dev/null +++ b/designs/noble/about.json @@ -0,0 +1,18 @@ +{ + "id": "noble", + "name": "Noble body block", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for a princess seam bodice block", + "design": "Wouter Van Wageningen", + "difficulty": 3, + "tags": [ + "blocks", + "tops" + ], + "techniques": [ + "block", + "curved-seam", + "precision", + "princess-seam" + ] +} diff --git a/designs/noble/src/index.mjs b/designs/noble/src/index.mjs index 0e3f95d863c..feedfc75e04 100644 --- a/designs/noble/src/index.mjs +++ b/designs/noble/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { backPoints } from './backpoints.mjs' import { backInside } from './backinside.mjs' @@ -10,9 +10,19 @@ import { frontOutside } from './frontoutside.mjs' // Setup our new design const Noble = new Design({ - data, + data: about, parts: [backPoints, backInside, backOutside, frontPoints, frontInside, frontOutside], }) // Named exports -export { backPoints, backInside, backOutside, frontPoints, frontInside, frontOutside, Noble, i18n } +export { + backPoints, + backInside, + backOutside, + frontPoints, + frontInside, + frontOutside, + Noble, + i18n, + about, +} diff --git a/designs/octoplushy/about.json b/designs/octoplushy/about.json new file mode 100644 index 00000000000..af97d7f0d84 --- /dev/null +++ b/designs/octoplushy/about.json @@ -0,0 +1,16 @@ +{ + "id": "octoplushy", + "name": "Octoplushy the octopus", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for an octopus plushy toy", + "design": "Wouter Van Wageningen", + "difficulty": 4, + "tags": [ + "accessories", + "toys" + ], + "techniques": [ + "curved-seam", + "precision" + ] +} diff --git a/designs/octoplushy/src/index.mjs b/designs/octoplushy/src/index.mjs index 9c044a95198..6efc9a789e7 100644 --- a/designs/octoplushy/src/index.mjs +++ b/designs/octoplushy/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { headSection1, headSection2 } from './head.mjs' import { armSection1, armSection2 } from './arm.mjs' @@ -7,9 +7,20 @@ import { eye1, eye2, eye3 } from './eye.mjs' // Setup our new design const Octoplushy = new Design({ - data, + data: about, parts: [headSection1, headSection2, armSection1, armSection2, eye1, eye2, eye3], }) // Named exports -export { headSection1, headSection2, armSection1, armSection2, eye1, eye2, eye3, Octoplushy, i18n } +export { + headSection1, + headSection2, + armSection1, + armSection2, + eye1, + eye2, + eye3, + Octoplushy, + i18n, + about, +} diff --git a/designs/onyx/about.json b/designs/onyx/about.json new file mode 100644 index 00000000000..0fa2b29b66f --- /dev/null +++ b/designs/onyx/about.json @@ -0,0 +1,21 @@ +{ + "id": "onyx", + "name": "Onyx one-piece", + "code": "Thrunic", + "description": "A FreeSewing pattern for one-piece garments", + "design": "Thrunic", + "difficulty": 4, + "tags": [ + "swimwear", + "pajamas", + "onePiece" + ], + "techniques": [ + "hem", + "curved-seam", + "stretch", + "lining", + "zipper", + "ribbing" + ] +} diff --git a/designs/onyx/src/index.mjs b/designs/onyx/src/index.mjs index c09e0bf3714..332a54e2ba1 100644 --- a/designs/onyx/src/index.mjs +++ b/designs/onyx/src/index.mjs @@ -1,6 +1,6 @@ // Import Design constructor import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' // Import Parts import { front } from './front.mjs' @@ -17,7 +17,7 @@ import { legRibbing } from './legribbing.mjs' // Create new design const Onyx = new Design({ - data, + data: about, parts: [ front, back, @@ -48,4 +48,5 @@ export { legRibbing, Onyx, i18n, + about, } diff --git a/designs/opal/about.json b/designs/opal/about.json new file mode 100644 index 00000000000..d9aad80b531 --- /dev/null +++ b/designs/opal/about.json @@ -0,0 +1,19 @@ +{ + "id": "opal", + "name": "Opal overalls", + "code": "Thrunic", + "description": "A FreeSewing pattern for overalls", + "design": "Thrunic", + "difficulty": 3, + "tags": [ + "overalls", + "onePiece" + ], + "techniques": [ + "flat-felled-seam", + "hem", + "curved-seam", + "button", + "pocket" + ] +} diff --git a/designs/opal/src/index.mjs b/designs/opal/src/index.mjs index 010bef67feb..a0dbf46316f 100644 --- a/designs/opal/src/index.mjs +++ b/designs/opal/src/index.mjs @@ -1,6 +1,6 @@ import { Design } from '@freesewing/core' import { i18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } // Parts import { front } from './front.mjs' import { back } from './back.mjs' @@ -17,7 +17,7 @@ import { hammerLoop } from './hammerloop.mjs' // Create new design const Opal = new Design({ - data, + data: about, parts: [ front, back, @@ -50,4 +50,5 @@ export { hammerLoop, i18n, Opal, + about, } diff --git a/designs/otis/about.json b/designs/otis/about.json new file mode 100644 index 00000000000..66de2d88c85 --- /dev/null +++ b/designs/otis/about.json @@ -0,0 +1,10 @@ +{ + "id": "otis", + "name": "Otis romper", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for a baby romper", + "design": "Wouter Van Wageningen", + "difficulty": 2, + "tags": [], + "techniques": [] +} diff --git a/designs/otis/src/index.mjs b/designs/otis/src/index.mjs index daf3165132c..85f7c11e8e3 100644 --- a/designs/otis/src/index.mjs +++ b/designs/otis/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' // Parts import { back } from './back.mjs' @@ -12,7 +12,7 @@ import { bindingLeg } from './bindingLeg.mjs' // Create new design const Otis = new Design({ - data, + data: about, parts: [back, front, shortsleeve, longsleeve, bindingNeckBack, bindingNeckFront, bindingLeg], }) @@ -27,4 +27,5 @@ export { bindingLeg, i18n, Otis, + about, } diff --git a/designs/paco/about.json b/designs/paco/about.json new file mode 100644 index 00000000000..a699e8a5935 --- /dev/null +++ b/designs/paco/about.json @@ -0,0 +1,19 @@ +{ + "id": "paco", + "name": "Paco pants", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for summer pants", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "bottoms", + "trousers" + ], + "techniques": [ + "elastic", + "curved-seam", + "pocket", + "welt-pocket", + "hem" + ] +} diff --git a/designs/paco/src/index.mjs b/designs/paco/src/index.mjs index a0064129ba0..225ac76cf85 100644 --- a/designs/paco/src/index.mjs +++ b/designs/paco/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as titanI18n } from '@freesewing/titan' import { i18n as pacoI18n } from '../i18n/index.mjs' import { back } from './back.mjs' @@ -13,7 +13,7 @@ import { waistband } from './waistband.mjs' // Setup our new design const Paco = new Design({ - data, + data: about, parts: [ back, front, @@ -41,4 +41,5 @@ export { waistband, Paco, i18n, + about, } diff --git a/designs/penelope/about.json b/designs/penelope/about.json new file mode 100644 index 00000000000..760c2e5c72b --- /dev/null +++ b/designs/penelope/about.json @@ -0,0 +1,18 @@ +{ + "id": "penelope", + "name": "Penenlope pencil skirt", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for a pencil skirt", + "design": "Wouter Van Wageningen", + "difficulty": 3, + "tags": [ + "bottoms", + "skirts" + ], + "techniques": [ + "hem", + "curved-seam", + "precision", + "zipper" + ] +} diff --git a/designs/penelope/src/index.mjs b/designs/penelope/src/index.mjs index c15f98bd542..663a20eb3ba 100644 --- a/designs/penelope/src/index.mjs +++ b/designs/penelope/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { back } from './back.mjs' import { front } from './front.mjs' @@ -7,9 +7,9 @@ import { waistband } from './waistband.mjs' // Setup our new design const Penelope = new Design({ - data, + data: about, parts: [back, front, waistband], }) // Named exports -export { back, front, waistband, Penelope, i18n } +export { back, front, waistband, Penelope, i18n, about } diff --git a/designs/plugintest/src/index.mjs b/designs/plugintest/src/index.mjs index b6f9f731ee8..5bd63c7434c 100644 --- a/designs/plugintest/src/index.mjs +++ b/designs/plugintest/src/index.mjs @@ -1,5 +1,4 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' import { i18n } from '../i18n/index.mjs' import { annotations } from './plugin-annotations.mjs' import { flip } from './plugin-flip.mjs' @@ -13,7 +12,6 @@ import { ringsector } from './plugin-ringsector.mjs' // Setup our new design const Plugintest = new Design({ - data, parts: [annotations, flip, gore, i18nStack, measurements, mirror, round, sprinkle, ringsector], }) diff --git a/designs/rendertest/src/index.mjs b/designs/rendertest/src/index.mjs index 341c17d3334..e2e5d8eb8a6 100644 --- a/designs/rendertest/src/index.mjs +++ b/designs/rendertest/src/index.mjs @@ -1,11 +1,9 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' import { i18n } from '../i18n/index.mjs' import { demo } from './demo.mjs' // Setup our new design const Rendertest = new Design({ - data, parts: [demo], }) diff --git a/designs/sandy/about.json b/designs/sandy/about.json new file mode 100644 index 00000000000..b52d4a0a93b --- /dev/null +++ b/designs/sandy/about.json @@ -0,0 +1,20 @@ +{ + "id": "sandy", + "name": "Sandy circle skirt", + "code": [ + "Erica Alcusa Sáez", + "Joost De Cock" + ], + "description": "A FreeSewing pattern for a circle skirt", + "design": "Erica Alcusa Sáez", + "difficulty": 3, + "tags": [ + "bottoms", + "skirts" + ], + "techniques": [ + "curved-seam", + "button", + "hem" + ] +} diff --git a/designs/sandy/src/index.mjs b/designs/sandy/src/index.mjs index 6daa4ac8e2f..2ccc88e2a45 100644 --- a/designs/sandy/src/index.mjs +++ b/designs/sandy/src/index.mjs @@ -1,14 +1,14 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { skirt } from './skirt.mjs' import { waistband } from './waistband.mjs' // Setup our new design const Sandy = new Design({ - data, + data: about, parts: [skirt, waistband], }) // Named exports -export { skirt, waistband, Sandy, i18n } +export { skirt, waistband, Sandy, i18n, about } diff --git a/designs/shelly/about.json b/designs/shelly/about.json new file mode 100644 index 00000000000..0d2192bb25f --- /dev/null +++ b/designs/shelly/about.json @@ -0,0 +1,18 @@ +{ + "id": "shelly", + "name": "Shelly swim shirt", + "code": "Thrunic", + "description": "A FreeSewing pattern for a raglan shirt, perfect for swim shirts", + "design": "Thrunic", + "difficulty": 2, + "tags": [ + "tops", + "swimwear" + ], + "techniques": [ + "hem", + "stretch", + "curved-seam", + "raglan-sleeve" + ] +} diff --git a/designs/shelly/src/index.mjs b/designs/shelly/src/index.mjs index 2e4b4197179..f251062ebf4 100644 --- a/designs/shelly/src/index.mjs +++ b/designs/shelly/src/index.mjs @@ -1,6 +1,6 @@ // Import Design constructor import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' // Import parts import { front } from './front.mjs' @@ -10,7 +10,7 @@ import { neckband } from './neckband.mjs' // Create the new design const Shelly = new Design({ - data, + data: about, // A list of parts is all that is required. parts: [front, back, raglanSleeve, neckband], }) @@ -22,4 +22,4 @@ const Shelly = new Design({ * This allows us to re-use these parts in other designs. */ -export { front, back, raglanSleeve, neckband, Shelly, i18n } +export { front, back, raglanSleeve, neckband, Shelly, i18n, about } diff --git a/designs/shin/about.json b/designs/shin/about.json new file mode 100644 index 00000000000..65e31c7a94f --- /dev/null +++ b/designs/shin/about.json @@ -0,0 +1,18 @@ +{ + "id": "shin", + "name": "Shin swim trunks", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for swim trunks", + "design": "Joost De Cock", + "difficulty": 2, + "tags": [ + "bottoms", + "swimwear" + ], + "techniques": [ + "hem", + "stretch", + "curved-seam", + "elastic" + ] +} diff --git a/designs/shin/src/index.mjs b/designs/shin/src/index.mjs index 8cadcc023e8..0ba2e9c11fa 100644 --- a/designs/shin/src/index.mjs +++ b/designs/shin/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { back } from './back.mjs' import { front } from './front.mjs' @@ -7,9 +7,9 @@ import { waistband } from './waistband.mjs' // Setup our new design const Shin = new Design({ - data, + data: about, parts: [back, front, waistband], }) // Named exports -export { back, front, waistband, Shin, i18n } +export { back, front, waistband, Shin, i18n, about } diff --git a/designs/simon/about.json b/designs/simon/about.json new file mode 100644 index 00000000000..06a678aa7e9 --- /dev/null +++ b/designs/simon/about.json @@ -0,0 +1,19 @@ +{ + "id": "simon", + "name": "Simon button-down shirt", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a button down shirt", + "design": "Joost De Cock", + "difficulty": 4, + "tags": [ + "tops" + ], + "techniques": [ + "hem", + "button", + "interfacing", + "curved-seam", + "flat-felled-seam", + "flat-sleeve" + ] +} diff --git a/designs/simon/src/index.mjs b/designs/simon/src/index.mjs index f9fb36cdc37..58c4b7dbc99 100644 --- a/designs/simon/src/index.mjs +++ b/designs/simon/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as simonI18n } from '../i18n/index.mjs' import { back } from './back.mjs' @@ -19,7 +19,7 @@ import { front } from './front.mjs' // Setup our new design const Simon = new Design({ - data, + data: about, parts: [ back, buttonholePlacket, @@ -57,4 +57,5 @@ export { yoke, Simon, i18n, + about, } diff --git a/designs/simone/about.json b/designs/simone/about.json new file mode 100644 index 00000000000..d3c64f718c1 --- /dev/null +++ b/designs/simone/about.json @@ -0,0 +1,19 @@ +{ + "id": "simone", + "name": "Simone button-down shirt", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a button down shirt (Simone = Simon for people with breasts)", + "design": "Joost De Cock", + "difficulty": 4, + "tags": [ + "tops" + ], + "techniques": [ + "hem", + "button", + "interfacing", + "curved-seam", + "flat-felled-seam", + "flat-sleeve" + ] +} diff --git a/designs/simone/src/index.mjs b/designs/simone/src/index.mjs index 9596e72f465..f92bf692909 100644 --- a/designs/simone/src/index.mjs +++ b/designs/simone/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as simonI18n } from '@freesewing/simon' import { i18n as simoneI18n } from '../i18n/index.mjs' import { @@ -41,7 +41,7 @@ const frontLeft = { // Setup our new design const Simone = new Design({ - data, + data: about, parts: [ fbaFront, back, @@ -79,4 +79,5 @@ export { frontLeft, Simone, i18n, + about, } diff --git a/designs/skully/about.json b/designs/skully/about.json new file mode 100644 index 00000000000..dea9ac16f2b --- /dev/null +++ b/designs/skully/about.json @@ -0,0 +1,16 @@ +{ + "id": "skully", + "name": "Skully the FreeSewing mascot", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for skully, our logo, a plushy toy", + "design": "Wouter Van Wageningen", + "difficulty": 4, + "tags": [ + "accessories", + "toys" + ], + "techniques": [ + "curved-seam", + "precision" + ] +} diff --git a/designs/skully/src/index.mjs b/designs/skully/src/index.mjs index 9eb42512ed7..ea05e9dbe91 100644 --- a/designs/skully/src/index.mjs +++ b/designs/skully/src/index.mjs @@ -1,6 +1,6 @@ // Skully import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } // Parts import { cheek } from './cheek.mjs' import { cheekbone } from './cheekbone.mjs' @@ -19,7 +19,7 @@ import { i18n } from '../i18n/index.mjs' // Create new design const Skully = new Design({ - data, + data: about, parts: [ cheek, cheekbone, @@ -52,4 +52,5 @@ export { uppermouth, Skully, i18n, + about, } diff --git a/designs/sven/about.json b/designs/sven/about.json new file mode 100644 index 00000000000..eb18b08ad7a --- /dev/null +++ b/designs/sven/about.json @@ -0,0 +1,16 @@ +{ + "id": "sven", + "name": "Sven sweatshirt", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a straightforward sweater", + "design": "Joost De Cock", + "difficulty": 3, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam", + "flat-sleeve", + "ribbing" + ] +} diff --git a/designs/sven/src/index.mjs b/designs/sven/src/index.mjs index ed8981b9a0c..5c88d71915e 100644 --- a/designs/sven/src/index.mjs +++ b/designs/sven/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as svenI18n } from '../i18n/index.mjs' import { front, back } from './frontback.mjs' @@ -9,7 +9,7 @@ import { waistband } from './waistband.mjs' // Setup our new design const Sven = new Design({ - data, + data: about, parts: [front, back, sleeve, cuff, waistband], }) @@ -17,4 +17,4 @@ const Sven = new Design({ const i18n = mergeI18n([brianI18n, svenI18n]) // Named exports -export { front, back, sleeve, cuff, waistband, Sven, i18n } +export { front, back, sleeve, cuff, waistband, Sven, i18n, about } diff --git a/designs/tamiko/about.json b/designs/tamiko/about.json new file mode 100644 index 00000000000..12307466ff7 --- /dev/null +++ b/designs/tamiko/about.json @@ -0,0 +1,14 @@ +{ + "id": "tamiko", + "name": "Tamiko zero-waste top", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a zero-waste top", + "design": "Joost De Cock", + "difficulty": 1, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam" + ] +} diff --git a/designs/tamiko/src/index.mjs b/designs/tamiko/src/index.mjs index 1169ff39bc2..9c4747e09fa 100644 --- a/designs/tamiko/src/index.mjs +++ b/designs/tamiko/src/index.mjs @@ -1,13 +1,13 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { top } from './top.mjs' // Setup our new design const Tamiko = new Design({ - data, + data: about, parts: [top], }) // Named exports -export { top, Tamiko, i18n } +export { top, Tamiko, i18n, about } diff --git a/designs/teagan/about.json b/designs/teagan/about.json new file mode 100644 index 00000000000..1319b51753a --- /dev/null +++ b/designs/teagan/about.json @@ -0,0 +1,17 @@ +{ + "id": "teagan", + "name": "Teagan T-shirt", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a T-shirt", + "design": "Joost De Cock", + "difficulty": 2, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam", + "hem", + "flat-sleeve", + "knit-band" + ] +} diff --git a/designs/teagan/src/index.mjs b/designs/teagan/src/index.mjs index e0ab9c3212f..914adaae486 100644 --- a/designs/teagan/src/index.mjs +++ b/designs/teagan/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as teaganI18n } from '../i18n/index.mjs' import { back } from './back.mjs' @@ -8,7 +8,7 @@ import { sleeve } from './sleeve.mjs' // Setup our new design const Teagan = new Design({ - data, + data: about, parts: [back, front, sleeve], }) @@ -18,4 +18,4 @@ const i18n = mergeI18n([brianI18n, teaganI18n], { }) // Named exports -export { back, front, sleeve, Teagan, i18n } +export { back, front, sleeve, Teagan, i18n, about } diff --git a/designs/tiberius/about.json b/designs/tiberius/about.json new file mode 100644 index 00000000000..61aadb4f062 --- /dev/null +++ b/designs/tiberius/about.json @@ -0,0 +1,13 @@ +{ + "id": "tiberius", + "name": "Tiberius tunica", + "code": "Rika Tamaike", + "description": "A FreeSewing pattern for a tunica, a historical Roman tunic", + "design": "Rika Tamaike", + "difficulty": 1, + "tags": [ + "tops", + "historical" + ], + "techniques": [] +} diff --git a/designs/tiberius/src/index.mjs b/designs/tiberius/src/index.mjs index 656e947ddf0..78cd9d59aa4 100644 --- a/designs/tiberius/src/index.mjs +++ b/designs/tiberius/src/index.mjs @@ -1,13 +1,13 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { tunica } from './tunica.mjs' // Setup our new design const Tiberius = new Design({ - data, + data: about, parts: [tunica], }) // Named exports -export { tunica, Tiberius, i18n } +export { tunica, Tiberius, i18n, about } diff --git a/designs/titan/about.json b/designs/titan/about.json new file mode 100644 index 00000000000..a432d581665 --- /dev/null +++ b/designs/titan/about.json @@ -0,0 +1,16 @@ +{ + "id": "titan", + "name": "Titan trouser block", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a unisex trouser block", + "design": [ + "Debra Bean", + "Joost De Cock" + ], + "difficulty": 3, + "tags": [ + "blocks", + "bottoms" + ], + "techniques": [] +} diff --git a/designs/titan/src/index.mjs b/designs/titan/src/index.mjs index 8ccbbcf8dd5..145855b9a8c 100644 --- a/designs/titan/src/index.mjs +++ b/designs/titan/src/index.mjs @@ -1,14 +1,14 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { back } from './back.mjs' import { front } from './front.mjs' // Setup our new design const Titan = new Design({ - data, + data: about, parts: [back, front], }) // Named exports -export { back, front, Titan, i18n } +export { back, front, Titan, i18n, about } diff --git a/designs/trayvon/about.json b/designs/trayvon/about.json new file mode 100644 index 00000000000..1d0a89d20ce --- /dev/null +++ b/designs/trayvon/about.json @@ -0,0 +1,15 @@ +{ + "id": "trayvon", + "name": "Trayvon tie", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a tie", + "design": "Joost De Cock", + "difficulty": 2, + "tags": [ + "accessories" + ], + "techniques": [ + "precision", + "lining" + ] +} diff --git a/designs/trayvon/src/index.mjs b/designs/trayvon/src/index.mjs index 9376d51a03c..247b34b1aba 100644 --- a/designs/trayvon/src/index.mjs +++ b/designs/trayvon/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { interfacingTail, interfacingTip } from './interfacing.mjs' import { liningTail, liningTip } from './lining.mjs' @@ -8,7 +8,7 @@ import { fabricLoop } from './loop.mjs' // Setup our new design const Trayvon = new Design({ - data, + data: about, parts: [ interfacingTail, interfacingTip, @@ -31,4 +31,5 @@ export { fabricLoop, Trayvon, i18n, + about, } diff --git a/designs/tristan/about.json b/designs/tristan/about.json new file mode 100644 index 00000000000..4e6f11c3c14 --- /dev/null +++ b/designs/tristan/about.json @@ -0,0 +1,15 @@ +{ + "id": "tristan", + "name": "Tristan top", + "code": "Wouter van Wageningen", + "description": "A FreeSewing pattern for a fitted top with prince(ss) seams", + "design": "Natalia Sayang", + "difficulty": 3, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam", + "precision" + ] +} diff --git a/designs/tristan/src/index.mjs b/designs/tristan/src/index.mjs index bf3a9aab97d..7b6199d8953 100644 --- a/designs/tristan/src/index.mjs +++ b/designs/tristan/src/index.mjs @@ -1,8 +1,6 @@ -// - import { Design } from '@freesewing/core' import { i18n } from '../i18n/index.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } // Parts import { frontPoints } from './frontpoints.mjs' import { frontInside } from './frontinside.mjs' @@ -15,7 +13,7 @@ import { peplumBack } from './peplumBack.mjs' // Create new design const Tristan = new Design({ - data, + data: about, parts: [ frontPoints, frontInside, @@ -40,4 +38,5 @@ export { peplumBack, i18n, Tristan, + about, } diff --git a/designs/uma/about.json b/designs/uma/about.json new file mode 100644 index 00000000000..955075ab699 --- /dev/null +++ b/designs/uma/about.json @@ -0,0 +1,16 @@ +{ + "id": "uma", + "name": "Uma undies", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern", + "design": "Joost De Cock", + "difficulty": 2, + "tags": [ + "bottoms", + "underwear" + ], + "techniques": [ + "elastic", + "curved-seam" + ] +} diff --git a/designs/uma/src/index.mjs b/designs/uma/src/index.mjs index 94246187022..1405672c94e 100644 --- a/designs/uma/src/index.mjs +++ b/designs/uma/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { base } from './base.mjs' import { back } from './back.mjs' @@ -9,19 +9,12 @@ import { gusset } from './gusset.mjs' /* * Let core bake a new design for us */ -const Uma = new Design({ data, parts: [base, back, front, gusset] }) +const Uma = new Design({ + data: about, + parts: [base, back, front, gusset], +}) /* * Named exports */ -export { - // Individual parts - base, - back, - front, - gusset, - // The Uma design itself - Uma, - // Translations - i18n, -} +export { base, back, front, gusset, Uma, i18n, about } diff --git a/designs/umbra/about.json b/designs/umbra/about.json new file mode 100644 index 00000000000..358256e9bed --- /dev/null +++ b/designs/umbra/about.json @@ -0,0 +1,22 @@ +{ + "id": "umbra", + "name": "Umbra undies", + "code": [ + "Joost De Cock", + "Jonathan Haas" + ], + "description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern", + "design": [ + "Joost De Cock", + "Jonathan Haas" + ], + "difficulty": 2, + "tags": [ + "bottoms", + "underwear" + ], + "techniques": [ + "elastic", + "curved-seam" + ] +} diff --git a/designs/umbra/src/index.mjs b/designs/umbra/src/index.mjs index faf32fbca8f..ab7e9db3a01 100644 --- a/designs/umbra/src/index.mjs +++ b/designs/umbra/src/index.mjs @@ -3,26 +3,17 @@ import { i18n } from '../i18n/index.mjs' import { base } from './base.mjs' import { back } from './back.mjs' import { front } from './front.mjs' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } /* * Let core bake a new design for us */ const Umbra = new Design({ - data, + data: about, parts: [base, back, front], }) /* * Named exports */ -export { - // Individual parts - base, - back, - front, - // The Umbra design itself - Umbra, - // Translations - i18n, -} +export { base, back, front, Umbra, i18n, about } diff --git a/designs/wahid/about.json b/designs/wahid/about.json new file mode 100644 index 00000000000..45bbec4bcb6 --- /dev/null +++ b/designs/wahid/about.json @@ -0,0 +1,19 @@ +{ + "id": "wahid", + "name": "Wahid waistcoat", + "code": "Joost De Cock", + "description": "A FreeSewing pattern for a classic fitted waistcoat", + "design": "Joost De Cock", + "difficulty": 4, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam", + "hem", + "interfacing", + "lining", + "welt-pocket", + "button" + ] +} diff --git a/designs/wahid/src/index.mjs b/designs/wahid/src/index.mjs index c81bb514a36..4e5b0302722 100644 --- a/designs/wahid/src/index.mjs +++ b/designs/wahid/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as wahidI18n } from '../i18n/index.mjs' import { front } from './front.mjs' @@ -13,7 +13,7 @@ import { pocketInterfacing } from './pocketinterfacing.mjs' // Setup our new design const Wahid = new Design({ - data, + data: about, parts: [ front, back, @@ -43,4 +43,5 @@ export { pocketInterfacing, Wahid, i18n, + about, } diff --git a/designs/walburga/about.json b/designs/walburga/about.json new file mode 100644 index 00000000000..680be9a3c64 --- /dev/null +++ b/designs/walburga/about.json @@ -0,0 +1,15 @@ +{ + "id": "walburga", + "name": "Walburga wappenrock", + "code": "Rika Tamaike", + "description": "A FreeSewing pattern for a wappenrock (tabard/surcoat), a historical European/medieval (ish) garment", + "design": "Rika Tamaike", + "difficulty": 1, + "tags": [ + "bottoms", + "historical" + ], + "techniques": [ + "hem" + ] +} diff --git a/designs/walburga/src/index.mjs b/designs/walburga/src/index.mjs index 010102dd6fa..516946715ba 100644 --- a/designs/walburga/src/index.mjs +++ b/designs/walburga/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { front } from './front.mjs' import { back } from './back.mjs' @@ -8,9 +8,9 @@ import { base } from './base.mjs' // Setup our new design const Walburga = new Design({ - data, + data: about, parts: [back, front], }) // Named exports -export { back, front, base, Walburga, i18n } +export { back, front, base, Walburga, i18n, about } diff --git a/designs/waralee/about.json b/designs/waralee/about.json new file mode 100644 index 00000000000..d7fc50885cc --- /dev/null +++ b/designs/waralee/about.json @@ -0,0 +1,17 @@ +{ + "id": "waralee", + "name": "Waralee wrap pants", + "code": "Wouter Van Wageningen", + "description": "A FreeSewing pattern for wrap pants", + "design": "Wouter Van Wageningen", + "difficulty": 2, + "tags": [ + "bottoms", + "trousers" + ], + "techniques": [ + "curved-seam", + "hem", + "welt-pocket" + ] +} diff --git a/designs/waralee/src/index.mjs b/designs/waralee/src/index.mjs index f0254229a8c..3fe87c3c2eb 100644 --- a/designs/waralee/src/index.mjs +++ b/designs/waralee/src/index.mjs @@ -1,5 +1,5 @@ import { Design } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n } from '../i18n/index.mjs' import { pants } from './pants.mjs' import { cutout } from './cutout.mjs' @@ -13,7 +13,7 @@ import { pantsProto } from './pantsproto.mjs' // Setup our new design const Waralee = new Design({ - data, + data: about, parts: [ pants, cutout, @@ -45,4 +45,5 @@ export { pantsProto, Waralee, i18n, + about, } diff --git a/designs/yuri/about.json b/designs/yuri/about.json new file mode 100644 index 00000000000..9b7c307759e --- /dev/null +++ b/designs/yuri/about.json @@ -0,0 +1,17 @@ +{ + "id": "yuri", + "name": "Yuri sweater", + "code": "Hellgy", + "description": "A FreeSewing pattern for a fancy zipless sweater based on the Huey hoodie", + "design": "Biou", + "difficulty": 3, + "tags": [ + "tops" + ], + "techniques": [ + "curved-seam", + "flat-sleeve", + "hem", + "button" + ] +} diff --git a/designs/yuri/src/index.mjs b/designs/yuri/src/index.mjs index fd2fb5debc6..5945a37dfea 100644 --- a/designs/yuri/src/index.mjs +++ b/designs/yuri/src/index.mjs @@ -1,5 +1,5 @@ import { Design, mergeI18n } from '@freesewing/core' -import { data } from '../data.mjs' +import about from '../about.json' with { type: 'json' } import { i18n as brianI18n } from '@freesewing/brian' import { i18n as yuriI18n } from '../i18n/index.mjs' import { back } from './back.mjs' @@ -11,7 +11,7 @@ import { hoodCenter } from './hoodcenter.mjs' // Setup our new design const Yuri = new Design({ - data, + data: about, parts: [back, front, sleeve, gusset, hoodSide, hoodCenter], }) @@ -20,4 +20,4 @@ const i18n = mergeI18n([brianI18n, yuriI18n]) // Named exports // Named exports -export { back, front, sleeve, gusset, hoodSide, hoodCenter, Yuri, i18n } +export { back, front, sleeve, gusset, hoodSide, hoodCenter, Yuri, i18n, about } diff --git a/packages/collection/src/examples.mjs b/packages/collection/src/examples.mjs new file mode 100644 index 00000000000..6a89fedd687 --- /dev/null +++ b/packages/collection/src/examples.mjs @@ -0,0 +1,68 @@ +import { cloudflare } from '@freesewing/config' + +/* + * This holds the ID of an example image for all designs in the FreeSewing collection + */ +export const designExampleIds = { + aaron: 'showcase-tight-aaron', + albert: 'showcase-albert-by-wouter', + bee: 'd0312c99-7b2f-4e37-c131-d626d34cd300', + bella: 'showcase-bella-by-karen', + benjamin: 'showcase-benjamin-by-anto', + bent: 'showcase-linnen-jaeger-by-paul', + bob: 'showcase-bob-bibs-by-duck', + breanna: 'showcase-magicantace-breanna-sandy', + brian: 'showcase-brian-by-stefan-1', + bruce: 'showcase-nsfw-bruce', + cathrin: 'showcase-green-cathrin', + carlton: 'showcase-carlton-by-boris', + carlita: 'showcase-quentin-carlita', + charlie: 'showcase-charlie-by-joost', + cornelius: 'showcase-cornelius-by-wouter', + diana: 'showcase-diana-by-deby', + florence: 'showcase-rowans-leaf-print-florence', + florent: 'showcase-florent-by-enno', + gozer: '80f22d09-e1fd-4e04-67f7-e58253c66200', + hi: 'showcase-hi-the-shark-has-our-hearts', + holmes: 'showcase-a-modified-holmes', + hortensia: 'showcase-hortensia-by-saber', + huey: 'showcase-anneke-huey', + hugo: 'showcase-husband-hugo', + jaeger: 'showcase-jaeger-by-roberta', + lucy: 'showcase-houseoflief-lucy', + lumira: 'showcase-lumira-leggings-with-cycling-chamois', + lunetius: 'showcase-lunetius-the-lacerna', + noble: 'showcase-a-casual-test-of-noble', + octoplushy: 'showcase-meet-octoplushy', + onyx: 'showcase-onyx-full-body-unisuit', + opal: 'showcase-embroidered-opal-shortalls', + otis: 'showcase-four-versions-of-otis-and-a-bonus-bob', + paco: 'showcase-paco-by-karen', + penelope: 'showcase-pregnant-lady-penelope', + sandy: 'showcase-sandy-by-anneke', + shelly: 'showcase-short-sleeve-shelly-rash-guard', + shin: 'showcase-just-peachy-shin-bee', + simon: 'showcase-simon-shirt-by-sewingdentist', + simone: 'showcase-simone-by-gaelle', + skully: 'showcase-3d-skully', + sven: 'showcase-french-terry-sven', + tamiko: 'showcase-a-tamiko-top', + teagan: 'showcase-teagan-karen', + tiberius: 'showcase-tiberius-the-tunica', + titan: 'showcase-a-mock-up-of-titan-with-the-fit-to-knee-option-enabled', + trayvon: 'showcase-liberty-trayvon', + tristan: 'showcase-a-lined-tristan-top-with-front-lacing', + uma: 'showcase-lower-rise-ursula', + wahid: 'showcase-sterling42-wahid', + walburga: 'showcase-walburga-the-wappenrock', + waralee: 'fde729f5-ea72-4af4-b798-331bbce04000', + yuri: 'showcase-yuri-by-its-designer', +} + +/* + * Same, but with a full href + */ +export const designExampleHrefs = {} +for (const [design, id] of Object.entries(designExampleIds)) { + designExampleHrefs[design] = `${cloudflare.url}${id}/public` +} diff --git a/packages/collection/src/index.mjs b/packages/collection/src/index.mjs index 8ec09158b21..26595fa6ff2 100644 --- a/packages/collection/src/index.mjs +++ b/packages/collection/src/index.mjs @@ -1,3 +1,4 @@ +// Designs import { Aaron as aaron } from '@freesewing/aaron' import { Albert as albert } from '@freesewing/albert' import { Bee as bee } from '@freesewing/bee' @@ -56,7 +57,12 @@ import { Walburga as walburga } from '@freesewing/walburga' import { Waralee as waralee } from '@freesewing/waralee' import { Yuri as yuri } from '@freesewing/yuri' import { Lily as lily } from '@freesewing/lily' +// Examples +import { designExampleIds, designExampleHrefs } from './examples.mjs' +/* + * Export the designs themselves + */ export const designs = { aaron, albert, @@ -118,11 +124,23 @@ export const designs = { lily, } +/* + * Export a list of names that make up the FreeSewing collection + */ export const collection = Object.keys(designs) +/* + * Create various helper exports to get info about the collection + */ export const requiredMeasurements = {} export const optionalMeasurements = {} export const measurements = {} +export const about = {} + +const _tags = new Set() +const _techniques = new Set() +const _devs = new Set() +const _dess = new Set() for (const design in designs) { requiredMeasurements[design] = designs[design].patternConfig.measurements @@ -131,4 +149,31 @@ for (const design in designs) { ...designs[design].patternConfig.measurements, ...designs[design].patternConfig.optionalMeasurements, ] + about[design] = { ...designs[design].designConfig.data } + if (about[design].tags) _tags.add(...about[design].tags) + if (about[design].techniques) _techniques.add(...about[design].techniques) + if (Array.isArray(about[design].code)) _devs.add(...about[design].code) + else _devs.add(about[design].code) + if (Array.isArray(about[design].design)) _devs.add(...about[design].design) + else _devs.add(about[design].design) +} +export const tags = Array.from(_tags) + .filter((t) => (t ? true : false)) + .sort() +export const techniques = Array.from(_techniques) + .filter((t) => (t ? true : false)) + .sort() +export const developers = Array.from(_devs) + .filter((t) => (t ? true : false)) + .sort() +export const designers = Array.from(_dess) + .filter((t) => (t ? true : false)) + .sort() + +/* + * These are examples + */ +export const examples = { + id: designExampleIds, + href: designExampleHrefs, } diff --git a/packages/react/components/Account/Apikeys.mjs b/packages/react/components/Account/Apikeys.mjs index 48e90c1455a..20f5d0c963c 100644 --- a/packages/react/components/Account/Apikeys.mjs +++ b/packages/react/components/Account/Apikeys.mjs @@ -102,16 +102,16 @@ export const Apikeys = ({ Link = false }) => { return ( <> -
+
- - +
+ @@ -155,23 +155,23 @@ export const Apikeys = ({ Link = false }) => { {orderBy(apikeys, order, desc ? 'desc' : 'asc').map((apikey, i) => ( - - {Object.keys(fields) .slice(1, 4) .map((field) => ( - ))} - - + + ))} @@ -197,10 +197,10 @@ export const Apikeys = ({ Link = false }) => { const ApiKey = ({ apikey }) => ( <> -

+

API Key

-
@@ -139,13 +139,13 @@ export const Apikeys = ({ Link = false }) => { {Object.keys(fields).map((field) => (
+ toggle(apikey.id)} /> + + {shortDate(apikey.createdAt)}{shortDate(apikey.expiresAt)}{shortDate(apikey.createdAt)}{shortDate(apikey.expiresAt)}
- +
+ @@ -189,16 +136,16 @@ export const Patterns = ({ Link = false }) => { {orderBy(patterns, order, desc ? 'desc' : 'asc').map((pattern, i) => ( - - - + - - - - + diff --git a/packages/react/components/Account/Platform.mjs b/packages/react/components/Account/Platform.mjs index 65def90b2f0..3e4c692647f 100644 --- a/packages/react/components/Account/Platform.mjs +++ b/packages/react/components/Account/Platform.mjs @@ -56,7 +56,7 @@ const Platform = ({ platform = false }) => { } return ( -
+
{ valid={(val) => val.length > 0} placeholder={'joostdecock'} /> -

-

diff --git a/packages/react/components/Account/Reload.mjs b/packages/react/components/Account/Reload.mjs index e9e2ddd4bea..877d6ed7ab3 100644 --- a/packages/react/components/Account/Reload.mjs +++ b/packages/react/components/Account/Reload.mjs @@ -32,7 +32,7 @@ export const Reload = () => { } return ( -
+

The data stored in your browser can sometimes get out of sync with the data stored in our backend. diff --git a/packages/react/components/Account/Remove.mjs b/packages/react/components/Account/Remove.mjs index ee42ac98abf..92d2c124740 100644 --- a/packages/react/components/Account/Remove.mjs +++ b/packages/react/components/Account/Remove.mjs @@ -48,22 +48,22 @@ export const Remove = () => { ) return ( -

+
setModal( -
+

There is no way back from this

If this is what you want, then go ahead.

- + Remove your FreeSewing account Back to safety diff --git a/packages/react/components/Account/Restrict.mjs b/packages/react/components/Account/Restrict.mjs index 5a15294c097..a469b313399 100644 --- a/packages/react/components/Account/Restrict.mjs +++ b/packages/react/components/Account/Restrict.mjs @@ -53,7 +53,7 @@ export const Restrict = ({ Link = false }) => { ) return ( -
+

The GDPR guarantees{' '} @@ -66,21 +66,21 @@ export const Restrict = ({ Link = false }) => { onClick={() => setModal( -

+

Proceed with caution

While no data will be removed, this will disable your account. Furthermore, you can not undo this on your own, but will have to contact support when you want to restore access to your account.

- + Restrict processing of your FreeSewing data Back to safety diff --git a/packages/react/components/Account/Set.mjs b/packages/react/components/Account/Set.mjs index 00400b10658..d528b6f3d25 100644 --- a/packages/react/components/Account/Set.mjs +++ b/packages/react/components/Account/Set.mjs @@ -206,21 +206,21 @@ export const Set = ({ id, publicOnly = false, Link = false }) => { const heading = ( <> -
-
+
+
-
+
{account.control > 2 && mset.public && mset.userId !== account.id ? ( -
+
JSON YAML @@ -230,9 +230,9 @@ export const Set = ({ id, publicOnly = false, Link = false }) => { )} {account.control > 3 && mset.userId === account.id ? ( -
+
@@ -338,11 +338,11 @@ export const Set = ({ id, publicOnly = false, Link = false }) => { )} {account.control > 2 && mset.userId === account.id ? (
-
+
) if (suggest) return ( -
+
{heading}
@@ -364,7 +364,7 @@ export const Set = ({ id, publicOnly = false, Link = false }) => { if (!edit) return ( -
+
{heading}

Data

@@ -379,14 +379,14 @@ export const Set = ({ id, publicOnly = false, Link = false }) => { <> {mset.userId === account.id && ( -
+
{mset.public ? ( - + ) : ( - + )}
) } - -/* - -export const SetCard = ({ - set, - requiredMeasies = [], - href = false, - onClick = false, - useA = false, -}) => { - // Hooks - const { t } = useTranslation(['sets']) - - const [hasMeasies] = hasRequiredMeasurements(requiredMeasies, set.measies, true) - - const wrapperProps = { - className: - 'bg-base-300 w-full mb-2 mx-auto flex flex-col items-start text-center justify-center rounded shadow py-4', - style: { - backgroundImage: `url(${cloudflareImageUrl({ type: 'w1000', id: set.img })})`, - backgroundSize: 'cover', - backgroundRepeat: 'no-repeat', - backgroundPosition: '50%', - }, - } - if (set.img === 'default-avatar') wrapperProps.style.backgroundPosition = 'bottom right' - - const inner = hasMeasies ? null : ( -
- - {t('setLacksMeasiesForDesign')} -
- ) - - // Is it a button with an onClick handler? - if (onClick) - return ( - - ) - - // Returns a link to an internal page - if (href && !useA) - return ( - - {inner} - - ) - - // Returns a link to an external page - if (href && useA) - return ( -
- {inner} - - ) - - // Returns a div - return
{inner}
-} - -export const MsetButton = (props) => -export const MsetLink = (props) => -export const MsetA = (props) => - -export const UserSetPicker = ({ - design, - t, - href, - clickHandler, - missingClickHandler, - size = 'lg', -}) => { - // Hooks - const backend = useBackend() - const { control } = useAccount() - - // State - const [sets, setSets] = useState({}) - - // Effects - useEffect(() => { - const getSets = async () => { - const result = await backend.getSets() - if (result.success) { - const all = {} - for (const set of result.data.sets) all[set.id] = set - setSets(all) - } - } - getSets() - }, [backend]) - - let hasSets = false - const okSets = [] - const lackingSets = [] - if (Object.keys(sets).length > 0) { - hasSets = true - for (const setId in sets) { - const [hasMeasies] = hasRequiredMeasurements( - designMeasurements[design], - sets[setId].measies, - true - ) - if (hasMeasies) okSets.push(sets[setId]) - else lackingSets.push(sets[setId]) - } - } - - if (!hasSets) - return ( -
- -
{t('account:noOwnSets')}
-

{t('account:pleaseMtm')}

-

{t('account:noOwnSetsMsg')}

-

- - - {t('account:newSet')} - -

-
-
- ) - - return ( - <> - {okSets.length > 0 && ( -
- {okSets.map((set) => ( - - ))} -
- )} - {lackingSets.length > 0 && ( -
- - {t('account:someSetsLacking')} - -
- {lackingSets.map((set) => ( - - ))} -
-
- )} - - ) -} - -export const BookmarkedSetPicker = ({ design, clickHandler, t, size, href }) => { - // Hooks - const { control } = useAccount() - const backend = useBackend() - - // State - const [sets, setSets] = useState({}) - - // Effects - useEffect(() => { - const getBookmarks = async () => { - const result = await backend.getBookmarks() - const loadedSets = {} - if (result.success) { - for (const bookmark of result.data.bookmarks.filter( - (bookmark) => bookmark.type === 'set' - )) { - let set - try { - set = await backend.getSet(bookmark.url.slice(6)) - if (set.success) { - const [hasMeasies] = hasRequiredMeasurements( - designMeasurements[design], - set.data.set.measies, - true - ) - loadedSets[set.data.set.id] = { ...set.data.set, hasMeasies } - } - } catch (err) { - console.log(err) - } - } - } - setSets(loadedSets) - } - getBookmarks() - }, []) - - const okSets = Object.values(sets).filter((set) => set.hasMeasies) - const lackingSets = Object.values(sets).filter((set) => !set.hasMeasies) - - return ( - <> - {okSets.length > 0 && ( -
- {okSets.map((set) => ( - - ))} -
- )} - {lackingSets.length > 0 && ( -
- - {t('account:someSetsLacking')} - -
- {lackingSets.map((set) => ( - - ))} -
-
- )} - - ) -} - - -*/ diff --git a/packages/react/components/Account/Sets.mjs b/packages/react/components/Account/Sets.mjs index 2da62a4ff2c..d615208cc6a 100644 --- a/packages/react/components/Account/Sets.mjs +++ b/packages/react/components/Account/Sets.mjs @@ -83,12 +83,12 @@ export const Sets = ({ Link = false }) => { } return ( -
+
{sets.length > 0 ? ( <> -

+

{ Import Measurements Sets

-
+
-
- ) : null - - const childProps = { t, banner } - - if (!token || !account.username) return - if (error) { - if (error === 'accountInactive') return - if (error === 'accountDisabled') return - if (error === 'accountBlocked') return - if (error === 'consentLacking') return - return - } - - if (!roles.levels[account.role] || roles.levels[account.role] < roles.levels[requiredRole]) { - return - } - - return children -} diff --git a/packages/react/components/Breadcrumbs/index.mjs b/packages/react/components/Breadcrumbs/index.mjs index cd0d3c34e39..13c37839f7a 100644 --- a/packages/react/components/Breadcrumbs/index.mjs +++ b/packages/react/components/Breadcrumbs/index.mjs @@ -12,18 +12,21 @@ export const Breadcrumbs = ({ crumbs = [], title, Link = false }) => { if (Link === false) Link = RegularLink return ( -
-
    -
  • +
    +
      +
    • Home
    • {crumbs.map((crumb, i) => ( -
    • +
    • {crumb.label}
    • ))} -
    • {title}
    • +
    • {title}
    ) @@ -39,4 +42,4 @@ const RegularLink = ({ href, children }) => {children} /* * This goes between breadcrumbs */ -const Spacer = () =>
  • »
  • +const Spacer = () =>
  • »
  • diff --git a/packages/react/components/Button/index.mjs b/packages/react/components/Button/index.mjs index e2c5afeb52a..d6f404b075e 100644 --- a/packages/react/components/Button/index.mjs +++ b/packages/react/components/Button/index.mjs @@ -19,7 +19,7 @@ export const IconButton = ({ btnProps = {}, }) => { const allProps = { - className: `${staticLinkClasses} daisy-btn-${color} hover:text-${color}-content ${className}`, + className: `${staticLinkClasses} tw-daisy-btn-${color} hover:tw-text-${color}-content ${className}`, title: title, ...btnProps, } @@ -29,4 +29,6 @@ export const IconButton = ({ return onClick ? : {children} } -const staticLinkClasses = `flex flex-row gap-2 lg:gap-12 items-center justify-between w-full lg:w-auto daisy-btn hover:no-underline capitalize my-2` +const staticLinkClasses = + 'tw-flex tw-flex-row tw-gap-2 lg:tw-gap-12 tw-items-center ' + + 'tw-justify-between tw-w-full lg:tw-w-auto tw-daisy-btn hover:tw-no-underline tw-capitalize tw-my-2' diff --git a/packages/react/components/Collection/index.mjs b/packages/react/components/Collection/index.mjs new file mode 100644 index 00000000000..37a3614bc70 --- /dev/null +++ b/packages/react/components/Collection/index.mjs @@ -0,0 +1,334 @@ +// Dependencies +import { atomWithHash } from 'jotai-location' +import { + about, + collection, + tags, + techniques, + designers, + developers, + examples, +} from '@freesewing/collection' +import { mutateObject } from '@freesewing/utils' + +//import { urls } from '@freesewing/config' +//import { measurements as measurementTranslations } from '@freesewing/i18n' +//import { measurements as designMeasurements } from '@freesewing/collection' + +// Context +//import { LoadingStatusContext } from '@freesewing/react/context/LoadingStatus' +import { ModalContext } from '@freesewing/react/context/Modal' + +// Hooks +import React, { useState, useContext } from 'react' +//import { useAccount } from '@freesewing/react/hooks/useAccount' +//import { useBackend } from '@freesewing/react/hooks/useBackend' +import { useAtom } from 'jotai' + +// Components +import { Link as WebLink, AnchorLink } from '@freesewing/react/components/Link' +import { + CircleIcon, + CisFemaleIcon, + FilterIcon, + ResetIcon, + ShowcaseIcon, +} from '@freesewing/react/components/Icon' +import { lineDrawingsFront as lineDrawings } from '@freesewing/react/components/LineDrawing' + +/* +import { designs, tags, techniques } from 'shared/config/designs.mjs' +import { DesignCard, DesignLink, ns as designNs } from 'shared/components/designs/design.mjs' +import { useTranslation } from 'next-i18next' +import { useState } from 'react' +import { FilterIcon, ShowcaseIcon, CisFemaleIcon, ResetIcon } from 'shared/components/icons.mjs' +import { capitalize, objUpdate } from 'shared/utils.mjs' +import { Difficulty } from 'shared/components/designs/difficulty.mjs' +import { collection } from 'site/hooks/use-design.mjs' + +export const ns = designNs +*/ +const filterAtom = atomWithHash('filter', { example: true }) + +export const useFilter = () => { + return useAtom(filterAtom) +} +/** + * React component to show the FreeSewing collection and pick a design + * + * @param {object} props - All React props + * @param {function} Link - An optional framework specific Link component for client-side routing + */ +export const Collection = ({ Link = false, linkTo = 'about' }) => { + if (!Link) Link = WebLink + + // State + const [filter, setFilter] = useFilter() + const [showFilters, setShowFilters] = useState(false) + console.log(tags) + + /* + * Apply filter + */ + const filtered = {} + for (const d of collection) { + let skip = false + if ( + filter.tag && + filter.tag.filter((tag) => about[d].tags.includes(tag)).length < filter.tag.length + ) + skip = true + if ( + filter.tech && + filter.tech.filter((tech) => about[d].techniques.includes(tech)).length < filter.tech.length + ) + skip = true + if (filter.difficulty && filter.difficulty !== about[d].difficulty) skip = true + if (!skip) filtered[d] = d + } + + const updateFilter = (path, val) => { + // Allow clicking the same difficulty to remove it as a filter + if (path === 'difficulty' && val === filter.difficulty) val = 'unset' + const newFilter = mutateObject({ ...filter }, path, val) + setFilter(newFilter) + } + + const toggle = (type, val) => { + const current = filter[type] || [] + const newSet = new Set(current) + if (newSet.has(val)) newSet.delete(val) + else newSet.add(val) + updateFilter(type, [...newSet]) + } + + return ( + <> +
    +
    + {Object.keys(filtered) + .sort() + .map((d) => ( + + {d} + + ))} +
    + {showFilters ? ( + <> +
    + Filters ({Object.keys(filtered).length}/{collection.length}) +
    +
    + Tags: + {tags.map((tag) => ( + + ))} +
    +
    + Techniques + {techniques.sort().map((tech) => ( + + ))} +
    +
    + Difficulty: + {[1, 2, 3, 4, 5].map((score) => ( + + ))} +
    +
    + + + +
    + + ) : ( +
    + + +
    + )} +
    +
    + {Object.keys(filtered) + .sort() + .map((d) => ( + + ))} +
    + + ) +} + +/* + * A helper component to show a design technique + * + * @param {object} props - All React props + * @param {function} props.Link - A Link component, typically specific to the framework for client-side routing + * @param {string} props.technique - The technique name/id + */ +const Technique = ({ Link = WebLink, technique }) => ( + + {technique} + +) + +/* + * A helper component to show a design tag + * + * @param {object} props - All React props + * @param {function} props.Link - A Link component, typically specific to the framework for client-side routing + * @param {string} props.tag - The tag name/id + */ +const Tag = ({ Link = WebLink, technique }) => ( + + {tag} + +) + +const DesignCard = ({ name, lineDrawing = false, linkTo, Link }) => { + if (!Link) Link = WebLink + + const LineDrawing = + lineDrawing && lineDrawings[name] + ? lineDrawings[name] + : ({ className }) =>
    + const exampleImageUrl = examples.href[name] ? examples.href[name] : noExample + const bg = { aspectRatio: '1/1.4' } + if (!lineDrawing) { + bg.backgroundImage = `url(${exampleImageUrl}` + bg.backgroundSize = 'cover' + bg.backgroundPosition = 'center center' + } + + return ( + +
    +
    + {about[name].name} +
    + {lineDrawing ? ( +
    + +
    + ) : ( + + )} +
    + +
    +
    + + ) +} + +/* + * A helper component to show difficulety of a design + * + * @param {object} props - All React props + * @param {number} props.score - The difficulty score of the design (1-5) + */ +const Difficulty = ({ score = 0 }) => ( +
    + {[0, 1, 2, 3, 4].map((i) => ( + + ))} +
    +) + +const linkBuilders = { + new: (design) => `/-/?d=${design.toLowerCase()}`, + docs: (design) => `/docs/designs/${design.toLowerCase()}/`, + about: (design) => `/designs/${design.toLowerCase()}/`, +} + +const noExample = + 'https://images.pexels.com/photos/5626595/pexels-photo-5626595.jpeg?cs=srgb&fm=jpg&w=640&h=427' diff --git a/packages/react/components/Control/index.mjs b/packages/react/components/Control/index.mjs index e1b620c5fe6..b9c2f6e32e0 100644 --- a/packages/react/components/Control/index.mjs +++ b/packages/react/components/Control/index.mjs @@ -4,9 +4,13 @@ import { BulletIcon } from '@freesewing/react/components/Icon' export const ControlScore = ({ control, color = 'base-content' }) => control ? ( -
    +
    {Object.keys(controlDesc).map((score) => ( - = score ? true : false} className="w-6 h-6 -ml-1" key={score} /> + = score ? true : false} + className="tw-w-6 tw-h-6 tw--ml-1" + key={score} + /> ))}
    ) : null diff --git a/packages/react/components/CopyToClipboard/index.mjs b/packages/react/components/CopyToClipboard/index.mjs index 86416bad743..7e06d1b98f5 100644 --- a/packages/react/components/CopyToClipboard/index.mjs +++ b/packages/react/components/CopyToClipboard/index.mjs @@ -31,14 +31,14 @@ export const CopyToClipboard = ({ content, label = false, sup = false }) => { return ( handleCopied(setCopied, setLoadingStatus, label)}> - diff --git a/packages/react/components/Design/index.mjs b/packages/react/components/Design/index.mjs new file mode 100644 index 00000000000..3127d8e3193 --- /dev/null +++ b/packages/react/components/Design/index.mjs @@ -0,0 +1,139 @@ +// Dependencies +import { collection } from '@freesewing/collection' + +//import { urls } from '@freesewing/config' +//import { measurements as measurementTranslations } from '@freesewing/i18n' +//import { measurements as designMeasurements } from '@freesewing/collection' +import { capitalize } from '@freesewing/utils' + +// Context +//import { LoadingStatusContext } from '@freesewing/react/context/LoadingStatus' +//import { ModalContext } from '@freesewing/react/context/Modal' + +// Hooks +import React, { useState } from 'react' +//import { useAccount } from '@freesewing/react/hooks/useAccount' +//import { useBackend } from '@freesewing/react/hooks/useBackend' + +// Components +import { Link as WebLink, AnchorLink } from '@freesewing/react/components/Link' +import { ShowcaseIcon } from '@freesewing/react/components/Icon' + +/* +// Dependencies +import { capitalize } from 'shared/utils.mjs' +import { linkClasses } from 'shared/components/link.mjs' +import { designImages } from 'shared/components/designs/examples.mjs' +import { designs } from 'shared/config/designs.mjs' +// Context +import { ModalContext } from 'shared/context/modal-context.mjs' +// Hooks +import { useTranslation } from 'next-i18next' +import { useContext } from 'react' +// Components +import { ModalWrapper } from 'shared/components/wrappers/modal.mjs' +import Link from 'next/link' +import { Difficulty } from 'shared/components/designs/difficulty.mjs' +import { lineDrawings } from 'shared/components/designs/linedrawings/index.mjs' +import { DocsIcon, NewPatternIcon } from 'shared/components/icons.mjs' +import { DesignInfo } from 'shared/components/designs/info.mjs' +*/ + +const linkBuilders = { + new: (design) => `/-/?d=${design.toLowerCase()}`, + docs: (design) => `/docs/designs/${design.toLowerCase()}`, +} + +export const DesignTechnique = ({ technique }) => ( + + {technique} + +) + +export const DesignTag = ({ tag }) => { + const { t } = useTranslation(['tags']) + + return ( + + {t(tag)} + + ) +} + +export const DesignLink = ({ name, linkTo = 'new', className = linkClasses }) => ( + + {name} + +) + +export const DesignCard = ({ name, lineDrawing = false }) => { + const { t } = useTranslation(ns) + // Context + const { setModal } = useContext(ModalContext) + + const LineDrawing = + lineDrawing && lineDrawings[name] + ? lineDrawings[name] + : ({ className }) =>
    + const exampleImageUrl = designImages[name] + ? designImages[name] + : 'https://images.pexels.com/photos/5626595/pexels-photo-5626595.jpeg?cs=srgb&dl=pexels-frida-toth-5626595.jpg&fm=jpg&w=640&h=427&_gl=1*vmxq7y*_ga*MTM0OTk5OTY4NS4xNjYxMjUyMjc0*_ga_8JE65Q40S6*MTY5NTU1NDc0Mi4yNS4xLjE2OTU1NTU1NjIuMC4wLjA.' + + const bg = lineDrawing + ? {} + : { + backgroundImage: `url(${exampleImageUrl}`, + backgroundSize: 'cover', + backgroundPosition: 'center center', + } + + return ( + + ) +} diff --git a/packages/react/components/Highlight/index.mjs b/packages/react/components/Highlight/index.mjs index 54100f203ee..8085256e337 100644 --- a/packages/react/components/Highlight/index.mjs +++ b/packages/react/components/Highlight/index.mjs @@ -31,20 +31,18 @@ export const Highlight = ({ } const preProps = { - className: `language-${language} hljs text-base lg:text-lg whitespace-break-spaces overflow-scroll pr-4`, + className: `language-${language} hljs tw-text-base lg:tw-text-lg tw-whitespace-break-spaces tw-overflow-scroll tw-pr-4`, } if (raw) preProps.dangerouslySetInnerHTML = { __html: raw } const label = title ? title : defaultTitles[language] ? defaultTitles[language] : language return ( -
    +
    {label} diff --git a/packages/react/components/Icon/index.mjs b/packages/react/components/Icon/index.mjs index 160bdcb2526..171082105d1 100644 --- a/packages/react/components/Icon/index.mjs +++ b/packages/react/components/Icon/index.mjs @@ -92,6 +92,20 @@ export const CircleIcon = (props) => ( ) +// Looks like a female-projecting bathing suit +export const CisFemaleIcon = (props) => ( + + + +) + +// Looks like male-projecting swim trunks +export const CisMaleIcon = (props) => ( + + + +) + // FIXME export const CloneIcon = (props) => ( @@ -214,6 +228,13 @@ export const FailureIcon = ({ size = 6 }) => ( ) +// Looks like a funnel +export const FilterIcon = (props) => ( + + + +) + // Looks like a fingerprint export const FingerprintIcon = (props) => ( diff --git a/packages/react/components/KeyVal/index.mjs b/packages/react/components/KeyVal/index.mjs index b0bbe602da2..76fe1bd326b 100644 --- a/packages/react/components/KeyVal/index.mjs +++ b/packages/react/components/KeyVal/index.mjs @@ -10,12 +10,12 @@ export const KeyVal = ({ k, val, color = 'primary', small = false }) => { handleCopied(setCopied, setLoadingStatus, k)}>
@@ -173,13 +120,13 @@ export const Patterns = ({ Link = false }) => { {Object.keys(fields).map((field) => (
+ toggle(pattern.id)} /> {pattern.id} + {pattern.id} { Link={Link} /> + {pattern.name} + {capitalize(pattern.design)} {shortDate(pattern.createdAt)} + {shortDate(pattern.createdAt)} {pattern.public ? : }