diff --git a/.gitignore b/.gitignore index d6f3154b338..c5603f985e9 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,17 @@ sites/*/yarn.lock # Docusaurus cache .docusaurus +# Sites get some files from org via the reconfigure script +sites/studio/postcss.config.js +sites/studio/babel.config.mjs +sites/studio/plugins +sites/studio/src/css +sites/studio/designs +sites/studio/docs +sites/studio/src +sites/studio/scripts +sites/studio/static + # Sites prebuild artifacts sites/*/public/locales/*/*.json !sites/sde/public/locales/*/*.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fb7dbfbaa0..60a5c1dafe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -211,18 +211,18 @@ - The `@freesewing/i18n` package holds translations in English for where they are needed -### studio - -#### Added - - - Added `@freesewing/studio`, our new development environment - ### react #### Added - The `@freesewing/react` package holds shared components, hooks, and context for our React-based frontends +### studio + +#### Added + + - Added `@freesewing/studio`, our new development environment + ### utils #### Added diff --git a/config/dependencies.yaml b/config/dependencies.yaml index e5521150fd8..4c8437d53cb 100644 --- a/config/dependencies.yaml +++ b/config/dependencies.yaml @@ -1,5 +1,5 @@ _types: - design: + designs: peer: '@freesewing/core': &freesewing '{{version}}' dev: @@ -7,7 +7,7 @@ _types: 'chai': &chai '5.1.1' '@freesewing/models': *freesewing '@freesewing/plugin-timing': *freesewing - plugin: + plugins: peer: '@freesewing/core': *freesewing dev: diff --git a/config/scripts.yaml b/config/scripts.yaml index 8eda0a200b5..de80b64731b 100644 --- a/config/scripts.yaml +++ b/config/scripts.yaml @@ -4,11 +4,11 @@ _: tips: 'node ../../scripts/help.mjs' lint: "npx eslint 'src/**' 'tests/*.mjs'" _types: - design: + designs: prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'" test: &test 'npx mocha tests/*.test.mjs' testci: &testci 'NODE_OPTIONS="--conditions=internal" npx mocha tests/*.test.mjs --reporter ../../tests/reporters/terse.js' - plugin: + plugins: prettier: "npx prettier --write 'src/*.mjs' 'tests/*.mjs'" test: *test testci: *testci diff --git a/config/software/designs.json b/config/software/designs.json deleted file mode 100644 index 93ce52c9bad..00000000000 --- a/config/software/designs.json +++ /dev/null @@ -1,936 +0,0 @@ -{ - "aaron": { - "code": "Joost De Cock", - "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" - ] - }, - "albert": { - "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" - ] - }, - "bee": { - "code": "bobgeorgethe3rd", - "description": "A FreeSewing pattern for a bikini top", - "design": "PrudenceRabbit", - "difficulty": 3, - "tags": [ - "tops", - "swimwear" - ], - "techniques": [ - "hem", - "stretch", - "curved-seam", - "precision" - ] - }, - "bella": { - "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" - ] - }, - "benjamin": { - "code": "Wouter Van Wageningen", - "description": "A FreeSewing pattern for a bow tie", - "design": "Wouter Van Wageningen", - "difficulty": 3, - "tags": [ - "accessories" - ], - "techniques": [ - "precision", - "interfacing" - ] - }, - "bent": { - "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" - ] - }, - "bibi": { - "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" - ] - }, - "bob": { - "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" - ] - }, - "bonny": { - "code": "Jonathan Haas", - "description": "A FreeSewing pattern that turns measurements into a body outline", - "design": "Jonathan Haas", - "difficulty": 1, - "tags": [], - "techniques": [] - }, - "breanna": { - "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" - ] - }, - "brian": { - "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" - ] - }, - "bruce": { - "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" - ] - }, - "carlita": { - "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" - ] - }, - "carlton": { - "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" - ] - }, - "cathrin": { - "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" - ] - }, - "charlie": { - "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" - ] - }, - "cornelius": { - "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" - ] - }, - "diana": { - "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" - ] - }, - "examples": { - "code": "Joost De Cock", - "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, - "tags": [ - "accessories" - ], - "techniques": [ - "curved-seam" - ] - }, - "florent": { - "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" - ] - }, - "gozer": { - "code": "Wouter Van Wageningen", - "description": "A FreeSewing pattern for a ghost costume", - "design": "Wouter Van Wageningen", - "difficulty": 1, - "tags": [ - "costumes" - ], - "techniques": [ - "hem" - ] - }, - "hi": { - "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" - ] - }, - "holmes": { - "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" - ] - }, - "hortensia": { - "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" - ] - }, - "huey": { - "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" - ] - }, - "hugo": { - "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" - ] - }, - "jaeger": { - "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" - ] - }, - "jane": { - "code": "SeaZeeZee", - "description": "A FreeSewing pattern for a 1790s shift", - "design": "SeaZeeZee", - "difficulty": 2, - "tags": [ - "tops", - "historical", - "underwear" - ], - "techniques": [ - "hem" - ] - }, - "legend": { - "code": "Joost De Cock", - "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, - "tags": [ - "accessories", - "historical", - "bags" - ], - "techniques": [ - "curved-seam" - ] - }, - "lumina": { - "code": "Wouter Van Wageningen", - "description": "A FreeSewing pattern for leggings", - "design": "Wouter Van Wageningen", - "difficulty": 3, - "tags": [ - "bottoms", - "trousers" - ], - "techniques": [ - "stretch", - "curved-seam", - "elastic" - ] - }, - "lumira": { - "code": "Wouter Van Wageningen", - "description": "A FreeSewing pattern for leggings", - "design": "Wouter Van Wageningen", - "difficulty": 3, - "tags": [ - "bottoms", - "trousers" - ], - "techniques": [ - "stretch", - "curved-seam", - "elastic" - ] - }, - "lunetius": { - "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" - ] - }, - "magde": { - "code": "clegganator259", - "description": "A FreeSewing pattern for a bike messenger bag", - "design": "clegganator259", - "difficulty": 3, - "tags": [ - "accessories", - "bags" - ], - "techniques": [] - }, - "noble": { - "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" - ] - }, - "octoplushy": { - "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" - ] - }, - "onyx": { - "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" - ] - }, - "opal": { - "code": "Thrunic", - "description": "A FreeSewing pattern for overalls", - "design": "Thrunic", - "difficulty": 3, - "tags": [ - "overalls", - "onePiece" - ], - "techniques": [ - "flat-felled-seam", - "hem", - "curved-seam", - "button", - "pocket" - ] - }, - "otis": { - "code": "Wouter Van Wageningen", - "description": "A FreeSewing pattern for a baby romper", - "design": "Wouter Van Wageningen", - "difficulty": 2, - "tags": [], - "techniques": [] - }, - "paco": { - "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" - ] - }, - "penelope": { - "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" - ] - }, - "plugintest": { - "code": "Joost De Cock", - "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" - }, - "sandy": { - "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" - ] - }, - "shelly": { - "code": "Thrunic", - "description": "A FreeSewing pattern for a raglan shirt, perfect for swimshirts", - "design": "Thrunic", - "difficulty": 2, - "tags": [ - "tops", - "swimwear" - ], - "techniques": [ - "hem", - "stretch", - "curved-seam", - "raglan-sleeve" - ] - }, - "shin": { - "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" - ] - }, - "simon": { - "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" - ] - }, - "simone": { - "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" - ] - }, - "skully": { - "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" - ] - }, - "sven": { - "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" - ] - }, - "tamiko": { - "code": "Joost De Cock", - "description": "A FreeSewing pattern for a zero-waste top", - "design": "Joost De Cock", - "difficulty": 1, - "tags": [ - "tops" - ], - "techniques": [ - "curved-seam" - ] - }, - "teagan": { - "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" - ] - }, - "tiberius": { - "code": "Rika Tamaike", - "description": "A FreeSewing pattern for a tunica, a historical Roman tunic", - "design": "Rika Tamaike", - "difficulty": 1, - "tags": [ - "tops", - "historical" - ], - "techniques": [] - }, - "titan": { - "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": [] - }, - "trayvon": { - "code": "Joost De Cock", - "description": "A FreeSewing pattern for a tie", - "design": "Joost De Cock", - "difficulty": 2, - "tags": [ - "accessories" - ], - "techniques": [ - "precision", - "lining" - ] - }, - "tristan": { - "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" - ] - }, - "uma": { - "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" - ] - }, - "umbra": { - "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" - ] - }, - "wahid": { - "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" - ] - }, - "walburga": { - "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" - ] - }, - "waralee": { - "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" - ] - }, - "yuri": { - "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" - ] - }, - "lily": { - "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/config/software/index.mjs b/config/software/index.mjs deleted file mode 100644 index b38d19621c3..00000000000 --- a/config/software/index.mjs +++ /dev/null @@ -1,41 +0,0 @@ -import designs from './designs.json' assert { type: 'json' } -import packages from './packages.json' assert { type: 'json' } -import plugins from './plugins.json' assert { type: 'json' } - -// Helper method to construct summary objects -const unpack = (obj, folder) => - Object.fromEntries( - Object.keys(obj).map((name) => [ - name, - { name, folder, type: folder.slice(0, -1), description: obj[name] }, - ]) - ) - -// Helper method to construct summary objects for designs -const unpackDesigns = (obj, folder) => - Object.fromEntries( - Object.keys(obj).map((name) => [ - name, - { name, folder, type: folder.slice(0, -1), ...obj[name] }, - ]) - ) - -// Re-Export imported JSON -export { designs, packages, plugins } - -// All software -export const software = { - ...unpackDesigns(designs, 'designs'), - ...unpack(plugins, 'plugins'), - ...unpack(packages, 'packages'), -} - -// All software published on NPM -export const publishedSoftware = { - ...unpackDesigns(designs, 'designs'), - ...unpack(plugins, 'plugins'), - ...unpack(packages, 'packages'), -} - -export const publishedTypes = ['designs', 'packages', 'plugins'] -export const types = publishedTypes diff --git a/config/software/packages.json b/config/software/packages.json deleted file mode 100644 index 70c52b78bb2..00000000000 --- a/config/software/packages.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "collection": "All FreeSewing designs bundles into one pacakge, our collection", - "config": "Various configurations for FreeSewing", - "core": "A library for creating made-to-measure sewing patterns", - "i18n": "Translation for the FreeSewing project", - "models": "Body measurements data for a range of default sizes", - "studio": "Initializer package for a the FreeSewing design studio: npx @freesewing/studio", - "prettier-config": "FreeSewing's shared configuration for prettier", - "react": "React components, hooks and context by/for FreeSewing", - "snapseries": "A series of common sizes for elastics and other series to be used with snapped percentage options", - "utils": "A number of utilities, typically used by FreeSewing frontend code" -} diff --git a/config/software/plugins.json b/config/software/plugins.json deleted file mode 100644 index c9746e580ba..00000000000 --- a/config/software/plugins.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "core-plugins": "An umbrella package of essential plugins that are bundled with FreeSewing's core library", - "plugin-annotations": "A FreeSewing plugin that provides pattern annotations", - "plugin-bin-pack": "A FreeSewing plugin that adds a bin-pack algorithm to the core library", - "plugin-bust": "A FreeSewing plugin that helps with bust-adjusting menswear patterns", - "plugin-flip": "A FreeSewing plugin to flip parts horizontally", - "plugin-gore": "A FreeSewing plugin to generate gores for a semi-sphere or dome", - "plugin-i18n": "A FreeSewing plugin for pattern translation", - "plugin-measurements": "A FreeSewing plugin that adds additional measurements that can be calculated from existing ones", - "plugin-mirror": "A FreeSewing plugin to mirror points or paths", - "plugin-ringsector": "A FreeSewing plugin to draft a ring sector (think part of a donut)", - "plugin-round": "A FreeSewing plugin to round corners", - "plugin-path-utils": "A FreeSewing plugin that adds various path helper macros", - "plugin-sprinkle": "A FreeSewing plugin to bulk-add snippets to your pattern", - "plugin-svgattr": "A FreeSewing plugin to set SVG attributes", - "plugin-theme": "A FreeSewing plugin that provides a default theme", - "plugin-timing": "A FreeSewing plugin to record the time it takes to draft your pattern parts", - "plugin-versionfree-svg": "A FreeSewing plugin to keep version info out of your SVG to allow easy diffs across versions" -} diff --git a/config/templates/collection-hook.mustache b/config/templates/collection-hook.mustache new file mode 100644 index 00000000000..783dfcb4fe2 --- /dev/null +++ b/config/templates/collection-hook.mustache @@ -0,0 +1,9 @@ +{{{ designImports }}} + +export const designs = { + {{ designList }} +} + +export const useDesign = (design) => (designs[design] ? designs[design] : false) + +export const collection = Object.keys(designs) diff --git a/config/templates/collection-pkg.mustache b/config/templates/collection-pkg.mustache new file mode 100644 index 00000000000..5bed574dae0 --- /dev/null +++ b/config/templates/collection-pkg.mustache @@ -0,0 +1,72 @@ +// Designs +{{{ designImports }}} +// Translations +import { i18n as translations } from './i18n.mjs' +// Examples +import { designExampleIds, designExampleHrefs } from './examples.mjs' + +/* + * Export the designs themselves + */ +export const designs = { + {{ designList }} +} + +/* + * 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 + optionalMeasurements[design] = designs[design].patternConfig.optionalMeasurements + measurements[design] = [ + ...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)) _dess.add(...about[design].design) + else _dess.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() + +/* + * Export the translations + */ +export const i18n = translations + +/* + * These are examples + */ +export const examples = { + id: designExampleIds, + href: designExampleHrefs, +} diff --git a/config/templates/data.dflt.mjs.mustache b/config/templates/data.dflt.mjs.mustache deleted file mode 100644 index c27b44251ef..00000000000 --- a/config/templates/data.dflt.mjs.mustache +++ /dev/null @@ -1,4 +0,0 @@ -// This file is auto-generated | All changes you make will be overwritten. -export const name = '{{{ name }}}' -export const version = '{{ version }}' -export const data = { name, version } diff --git a/config/templates/package.dflt.json b/config/templates/package.dflt.json index 99d9fbdca3a..098b7afc7bb 100644 --- a/config/templates/package.dflt.json +++ b/config/templates/package.dflt.json @@ -17,7 +17,7 @@ ".": "./src/index.mjs" }, "scripts": { - "testonly": "BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.js --require @babel/register", + "test": "npx mocha tests/*.test.mjs", "publish": "npm publish --access public" }, "peerDependencies": {}, diff --git a/config/templates/plugin/about.json.mustache b/config/templates/plugin/about.json.mustache new file mode 100644 index 00000000000..deff531f3c7 --- /dev/null +++ b/config/templates/plugin/about.json.mustache @@ -0,0 +1,6 @@ +{ + "id": "plugin-{{ name }}", + "description": "A FreeSewing plugin that lacks a description", + "version": "4.0.0-rc.8" +} + diff --git a/config/templates/plugin/src/index.mjs.mustache b/config/templates/plugin/src/index.mjs.mustache index 7d592d99feb..84973c93a96 100644 --- a/config/templates/plugin/src/index.mjs.mustache +++ b/config/templates/plugin/src/index.mjs.mustache @@ -1,21 +1,23 @@ -import { name, version } from '../data.mjs' +import about from '../about.json' with { type: 'json' } + +/* + * This is plugin-{{ name }} + * + * This skeleton file was auto-generated. + * For help on writing plugins, see the plugin guide at: + * https://freesewing.dev/guides/plugins/ + */ export const plugin = { - name, - version, - macros: { - {{name}}: function (so, {points, paths, Path}) { //Example shorthand, you may wish to add other elements like utils - const defaults = { - //note these are common examples and can be removed - scale: 1, - rotation: 0, - } - so = { ...defaults, ...so } - //write plugin here - }, - }, + name: about.id, + version: about.version, + hooks: { }, + macros: { }, + store: [ ], } -// More specifically named exports +/* + * More specifically named exports + */ export const {{name}}Plugin = plugin export const plugin{{capitalized_name}} = plugin diff --git a/designs/aaron/package.json b/designs/aaron/package.json index f747fa076e2..01fafa8bc23 100644 --- a/designs/aaron/package.json +++ b/designs/aaron/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/albert/package.json b/designs/albert/package.json index 3e3f590356d..cdaba343d07 100644 --- a/designs/albert/package.json +++ b/designs/albert/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/bee/package.json b/designs/bee/package.json index dfa3525bc4b..67791d324f0 100644 --- a/designs/bee/package.json +++ b/designs/bee/package.json @@ -61,4 +61,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/bella/package.json b/designs/bella/package.json index e1385404340..ba8a0e3b41b 100644 --- a/designs/bella/package.json +++ b/designs/bella/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/benjamin/package.json b/designs/benjamin/package.json index 27a80a25cfa..ea5a1a25cd8 100644 --- a/designs/benjamin/package.json +++ b/designs/benjamin/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/bent/package.json b/designs/bent/package.json index 1a65df446fc..66576b1962d 100644 --- a/designs/bent/package.json +++ b/designs/bent/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/bibi/package.json b/designs/bibi/package.json index 1b851930b89..56999962c9b 100644 --- a/designs/bibi/package.json +++ b/designs/bibi/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/bob/package.json b/designs/bob/package.json index 1270a080792..c67ad4c54ad 100644 --- a/designs/bob/package.json +++ b/designs/bob/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/bonny/package.json b/designs/bonny/package.json index 36f92fc5b8a..98c424dc2b6 100644 --- a/designs/bonny/package.json +++ b/designs/bonny/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/breanna/package.json b/designs/breanna/package.json index 3da7db9b5b4..a22b19a159d 100644 --- a/designs/breanna/package.json +++ b/designs/breanna/package.json @@ -61,4 +61,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/brian/package.json b/designs/brian/package.json index dc0819b8231..c5c73c65c75 100644 --- a/designs/brian/package.json +++ b/designs/brian/package.json @@ -61,4 +61,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/bruce/package.json b/designs/bruce/package.json index 550ab2c7a0b..70f15caf091 100644 --- a/designs/bruce/package.json +++ b/designs/bruce/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/carlita/package.json b/designs/carlita/package.json index 66484aad7d3..f1e6dcd7f8e 100644 --- a/designs/carlita/package.json +++ b/designs/carlita/package.json @@ -64,4 +64,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/carlton/package.json b/designs/carlton/package.json index 6524d2dc471..67e6aa8a22c 100644 --- a/designs/carlton/package.json +++ b/designs/carlton/package.json @@ -63,4 +63,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/cathrin/package.json b/designs/cathrin/package.json index 6b73c9922fe..41433220609 100644 --- a/designs/cathrin/package.json +++ b/designs/cathrin/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/charlie/package.json b/designs/charlie/package.json index efff7055062..e9d2de18c67 100644 --- a/designs/charlie/package.json +++ b/designs/charlie/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/cornelius/package.json b/designs/cornelius/package.json index c840732c0ce..0aa4d7bc877 100644 --- a/designs/cornelius/package.json +++ b/designs/cornelius/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/diana/package.json b/designs/diana/package.json index ad326322acc..1c9d32debe0 100644 --- a/designs/diana/package.json +++ b/designs/diana/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/examples/about.json b/designs/examples/about.json new file mode 100644 index 00000000000..cb3a4230fe6 --- /dev/null +++ b/designs/examples/about.json @@ -0,0 +1,5 @@ +{ + "id": "examples", + "version": "4.0.0", + "description": "A FreeSewing pattern holding examples for our documentation" +} \ No newline at end of file diff --git a/designs/examples/package.json b/designs/examples/package.json index 9c4d4e1a6aa..4201fc2ba15 100644 --- a/designs/examples/package.json +++ b/designs/examples/package.json @@ -56,4 +56,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/florence/package.json b/designs/florence/package.json index 53fc9c44972..2ab7e06c478 100644 --- a/designs/florence/package.json +++ b/designs/florence/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/florent/package.json b/designs/florent/package.json index 55c71d16684..9593904c34b 100644 --- a/designs/florent/package.json +++ b/designs/florent/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/gozer/package.json b/designs/gozer/package.json index 6e9ba40dc1e..1953610ec45 100644 --- a/designs/gozer/package.json +++ b/designs/gozer/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/hi/package.json b/designs/hi/package.json index 89ecdd39b9d..47ed68154cb 100644 --- a/designs/hi/package.json +++ b/designs/hi/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/holmes/package.json b/designs/holmes/package.json index 3934f62f333..c40f040f53f 100644 --- a/designs/holmes/package.json +++ b/designs/holmes/package.json @@ -63,4 +63,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/hortensia/package.json b/designs/hortensia/package.json index de6ae5f43f6..a35691b6211 100644 --- a/designs/hortensia/package.json +++ b/designs/hortensia/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/huey/package.json b/designs/huey/package.json index 66d174870e5..d334de44f9b 100644 --- a/designs/huey/package.json +++ b/designs/huey/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/hugo/package.json b/designs/hugo/package.json index 4030861417f..4842b459e91 100644 --- a/designs/hugo/package.json +++ b/designs/hugo/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/jaeger/package.json b/designs/jaeger/package.json index 613c0d46ee2..a30f8ad7a2e 100644 --- a/designs/jaeger/package.json +++ b/designs/jaeger/package.json @@ -63,4 +63,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/jane/package.json b/designs/jane/package.json index 277099c46ec..e854614bdc0 100644 --- a/designs/jane/package.json +++ b/designs/jane/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/legend/about.json b/designs/legend/about.json new file mode 100644 index 00000000000..88aea72c79f --- /dev/null +++ b/designs/legend/about.json @@ -0,0 +1,5 @@ +{ + "id": "legend", + "description": "A FreeSewing pattern to document pattern notation", + "version": "4.0.0" +} \ No newline at end of file diff --git a/designs/legend/package.json b/designs/legend/package.json index 25a589f1a29..7545703465c 100644 --- a/designs/legend/package.json +++ b/designs/legend/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/lily/package.json b/designs/lily/package.json index 14c619abf73..20631cbf8fb 100644 --- a/designs/lily/package.json +++ b/designs/lily/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/lucy/package.json b/designs/lucy/package.json index c3dfdeec6e3..ab374533e56 100644 --- a/designs/lucy/package.json +++ b/designs/lucy/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/lumina/package.json b/designs/lumina/package.json index 351eca3bf58..60311356781 100644 --- a/designs/lumina/package.json +++ b/designs/lumina/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/lumira/package.json b/designs/lumira/package.json index 96445fc2b03..d5b34554a23 100644 --- a/designs/lumira/package.json +++ b/designs/lumira/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/lunetius/package.json b/designs/lunetius/package.json index 7f319472cca..c8ef6577d25 100644 --- a/designs/lunetius/package.json +++ b/designs/lunetius/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/magde/about.json b/designs/magde/about.json index 1dac1602319..fa1944d427b 100644 --- a/designs/magde/about.json +++ b/designs/magde/about.json @@ -9,5 +9,6 @@ "accessories", "bags" ], - "techniques": [] -} + "techniques": [], + "version": "4.0.0" +} \ No newline at end of file diff --git a/designs/magde/package.json b/designs/magde/package.json index 527fe376007..80ef0920821 100644 --- a/designs/magde/package.json +++ b/designs/magde/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/noble/package.json b/designs/noble/package.json index 49fc70166cb..3ff6c6e76db 100644 --- a/designs/noble/package.json +++ b/designs/noble/package.json @@ -61,4 +61,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/octoplushy/package.json b/designs/octoplushy/package.json index 546af307a82..9790bc8d34a 100644 --- a/designs/octoplushy/package.json +++ b/designs/octoplushy/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/onyx/package.json b/designs/onyx/package.json index 56d09eb844e..9ec58d18a15 100644 --- a/designs/onyx/package.json +++ b/designs/onyx/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/opal/package.json b/designs/opal/package.json index e7134b50c21..2c9402a2d58 100644 --- a/designs/opal/package.json +++ b/designs/opal/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/otis/package.json b/designs/otis/package.json index e9f40a53db6..a5fd310f138 100644 --- a/designs/otis/package.json +++ b/designs/otis/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/paco/package.json b/designs/paco/package.json index a7c963b687b..f620a27d004 100644 --- a/designs/paco/package.json +++ b/designs/paco/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/penelope/package.json b/designs/penelope/package.json index 69da5eac38a..e944e2d09a6 100644 --- a/designs/penelope/package.json +++ b/designs/penelope/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/plugintest/about.json b/designs/plugintest/about.json new file mode 100644 index 00000000000..8e83a9951a6 --- /dev/null +++ b/designs/plugintest/about.json @@ -0,0 +1,5 @@ +{ + "id": "plugintest", + "description": "A FreeSewing pattern to test (y)our plugins", + "version": "4.0.0" +} \ No newline at end of file diff --git a/designs/plugintest/package.json b/designs/plugintest/package.json index 18e22ecf257..1bc76c2377e 100644 --- a/designs/plugintest/package.json +++ b/designs/plugintest/package.json @@ -71,4 +71,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/rendertest/about.json b/designs/rendertest/about.json new file mode 100644 index 00000000000..bbe7db4e452 --- /dev/null +++ b/designs/rendertest/about.json @@ -0,0 +1,5 @@ +{ + "id": "rendertest", + "description": "A FreeSewing pattern to test (y)our render engine our CSS", + "version": "4.0.0" +} \ No newline at end of file diff --git a/designs/rendertest/package.json b/designs/rendertest/package.json index d446acaf963..26684b785f9 100644 --- a/designs/rendertest/package.json +++ b/designs/rendertest/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/sandy/package.json b/designs/sandy/package.json index 62777c48e5b..16b734354e3 100644 --- a/designs/sandy/package.json +++ b/designs/sandy/package.json @@ -63,4 +63,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/shelly/README.md b/designs/shelly/README.md index 6d69f5ebf2e..76884cb1564 100644 --- a/designs/shelly/README.md +++ b/designs/shelly/README.md @@ -32,7 +32,7 @@ # @freesewing/shelly -A FreeSewing pattern for a raglan shirt, perfect for swimshirts +A FreeSewing pattern for a raglan shirt, perfect for swim shirts diff --git a/designs/shelly/package.json b/designs/shelly/package.json index a54e0abece1..724faa1ed5c 100644 --- a/designs/shelly/package.json +++ b/designs/shelly/package.json @@ -1,7 +1,7 @@ { "name": "@freesewing/shelly", "version": "4.0.0", - "description": "A FreeSewing pattern for a raglan shirt, perfect for swimshirts", + "description": "A FreeSewing pattern for a raglan shirt, perfect for swim shirts", "author": "Thrunic (https://github.com/Thrunic)", "homepage": "https://freesewing.org/", "repository": "github:freesewing/freesewing", @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/shin/package.json b/designs/shin/package.json index da4b10855c4..f23edfb5760 100644 --- a/designs/shin/package.json +++ b/designs/shin/package.json @@ -61,4 +61,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/simon/package.json b/designs/simon/package.json index 4dbb48bd53e..13e5f941152 100644 --- a/designs/simon/package.json +++ b/designs/simon/package.json @@ -63,4 +63,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/simone/package.json b/designs/simone/package.json index 82de3c1589e..4c964d496d8 100644 --- a/designs/simone/package.json +++ b/designs/simone/package.json @@ -64,4 +64,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/skully/package.json b/designs/skully/package.json index 6ebd1e07e61..7797cc21952 100644 --- a/designs/skully/package.json +++ b/designs/skully/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/sven/package.json b/designs/sven/package.json index dcbe43f1d49..9eedfc20db6 100644 --- a/designs/sven/package.json +++ b/designs/sven/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/tamiko/package.json b/designs/tamiko/package.json index 26b11ef3075..9de97bb129b 100644 --- a/designs/tamiko/package.json +++ b/designs/tamiko/package.json @@ -61,4 +61,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/teagan/package.json b/designs/teagan/package.json index da073575678..e60b35c30ed 100644 --- a/designs/teagan/package.json +++ b/designs/teagan/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/tiberius/package.json b/designs/tiberius/package.json index dd6cb8d4d21..2f24651034e 100644 --- a/designs/tiberius/package.json +++ b/designs/tiberius/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/titan/package.json b/designs/titan/package.json index 7f908407a78..470cfef28ac 100644 --- a/designs/titan/package.json +++ b/designs/titan/package.json @@ -61,4 +61,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/trayvon/package.json b/designs/trayvon/package.json index cd0230e0dc0..5aac5253726 100644 --- a/designs/trayvon/package.json +++ b/designs/trayvon/package.json @@ -61,4 +61,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/tristan/package.json b/designs/tristan/package.json index 4f15749fee0..f5375546a1f 100644 --- a/designs/tristan/package.json +++ b/designs/tristan/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/uma/package.json b/designs/uma/package.json index 116707d5ce9..7bc5d01f50c 100644 --- a/designs/uma/package.json +++ b/designs/uma/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/umbra/package.json b/designs/umbra/package.json index 9447c50bdde..832ee6d9e2b 100644 --- a/designs/umbra/package.json +++ b/designs/umbra/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/wahid/package.json b/designs/wahid/package.json index f5cdfff10a6..4aa58236f04 100644 --- a/designs/wahid/package.json +++ b/designs/wahid/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/walburga/package.json b/designs/walburga/package.json index 338caaff9d5..342e7c4e5d5 100644 --- a/designs/walburga/package.json +++ b/designs/walburga/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/waralee/package.json b/designs/waralee/package.json index 22dd8e01cff..69a77132d55 100644 --- a/designs/waralee/package.json +++ b/designs/waralee/package.json @@ -60,4 +60,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/designs/yuri/package.json b/designs/yuri/package.json index c76ea2eecf2..4145812a0e4 100644 --- a/designs/yuri/package.json +++ b/designs/yuri/package.json @@ -62,4 +62,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 46ddc40f081..0163d95a5e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59607,6 +59607,10 @@ "node": ">=4" } }, + "node_modules/studio": { + "resolved": "sites/studio", + "link": true + }, "node_modules/style-mod": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", @@ -70585,6 +70589,384 @@ "funding": { "url": "https://github.com/sponsors/isaacs" } + }, + "sites/studio": { + "version": "0.0.0", + "dependencies": { + "@docusaurus/core": "^3.7.0", + "@docusaurus/faster": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@freesewing/collection": "latest", + "@freesewing/config": "latest", + "@freesewing/core": "latest", + "@freesewing/i18n": "latest", + "@freesewing/plugin-i18n": "latest", + "@freesewing/plugin-theme": "latest", + "@freesewing/plugin-timing": "latest", + "@freesewing/react": "latest", + "@freesewing/snapseries": "latest", + "@freesewing/utils": "latest", + "@mdx-js/react": "^3.0.0", + "lodash": "^4.17.21", + "postcss": "^8.4.47", + "prism-react-renderer": "^2.3.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-markdown": "^9.0.1", + "remark-smartypants": "^3.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "^3.7.0", + "@docusaurus/types": "^3.7.0", + "@tailwindcss/postcss": "^4.1.3", + "autoprefixer": "^10.4.20", + "daisyui": "^5.0.19", + "glob": "^11.0.0", + "gray-matter": "^4.0.3", + "postcss": "^8.4.47", + "tailwindcss": "^4.1.3", + "yaml-loader": "^0.8.1" + }, + "engines": { + "node": ">=20.0" + } + }, + "sites/studio/node_modules/@freesewing/collection": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/collection/-/collection-4.0.0.tgz", + "integrity": "sha512-ozBv1MdcZ3VyJiBxsevK/dIOHTa+Di7m2qfvYPdCa1Io+zMT6RfCdS46gYOp79M9Hf1lLEsKaXV6IPa5P6eCIQ==", + "license": "MIT", + "dependencies": { + "@freesewing/aaron": "4.0.0", + "@freesewing/albert": "4.0.0", + "@freesewing/bee": "4.0.0", + "@freesewing/bella": "4.0.0", + "@freesewing/benjamin": "4.0.0", + "@freesewing/bent": "4.0.0", + "@freesewing/bibi": "4.0.0", + "@freesewing/bob": "4.0.0", + "@freesewing/bonny": "4.0.0", + "@freesewing/breanna": "4.0.0", + "@freesewing/brian": "4.0.0", + "@freesewing/bruce": "4.0.0", + "@freesewing/carlita": "4.0.0", + "@freesewing/carlton": "4.0.0", + "@freesewing/cathrin": "4.0.0", + "@freesewing/charlie": "4.0.0", + "@freesewing/core": "4.0.0", + "@freesewing/core-plugins": "4.0.0", + "@freesewing/cornelius": "4.0.0", + "@freesewing/diana": "4.0.0", + "@freesewing/florence": "4.0.0", + "@freesewing/florent": "4.0.0", + "@freesewing/gozer": "4.0.0", + "@freesewing/hi": "4.0.0", + "@freesewing/holmes": "4.0.0", + "@freesewing/hortensia": "4.0.0", + "@freesewing/huey": "4.0.0", + "@freesewing/hugo": "4.0.0", + "@freesewing/jaeger": "4.0.0", + "@freesewing/jane": "4.0.0", + "@freesewing/lily": "4.0.0", + "@freesewing/lucy": "4.0.0", + "@freesewing/lumina": "4.0.0", + "@freesewing/lumira": "4.0.0", + "@freesewing/lunetius": "4.0.0", + "@freesewing/noble": "4.0.0", + "@freesewing/octoplushy": "4.0.0", + "@freesewing/onyx": "4.0.0", + "@freesewing/opal": "4.0.0", + "@freesewing/otis": "4.0.0", + "@freesewing/paco": "4.0.0", + "@freesewing/penelope": "4.0.0", + "@freesewing/plugin-bust": "4.0.0", + "@freesewing/plugin-flip": "4.0.0", + "@freesewing/sandy": "4.0.0", + "@freesewing/shelly": "4.0.0", + "@freesewing/shin": "4.0.0", + "@freesewing/simon": "4.0.0", + "@freesewing/simone": "4.0.0", + "@freesewing/skully": "4.0.0", + "@freesewing/snapseries": "4.0.0", + "@freesewing/sven": "4.0.0", + "@freesewing/tamiko": "4.0.0", + "@freesewing/teagan": "4.0.0", + "@freesewing/tiberius": "4.0.0", + "@freesewing/titan": "4.0.0", + "@freesewing/trayvon": "4.0.0", + "@freesewing/tristan": "4.0.0", + "@freesewing/uma": "4.0.0", + "@freesewing/umbra": "4.0.0", + "@freesewing/wahid": "4.0.0", + "@freesewing/walburga": "4.0.0", + "@freesewing/waralee": "4.0.0", + "@freesewing/yuri": "4.0.0" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + } + }, + "sites/studio/node_modules/@freesewing/config": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/config/-/config-4.0.0.tgz", + "integrity": "sha512-VNGs+22BsNyY4grbbca2ml/prMweqNmmO2SO8uwY+8GLPnvVs+0pRgSEciWkGmTTprWsFtLHIz8jCf2u+spZ7g==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + } + }, + "sites/studio/node_modules/@freesewing/core": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/core/-/core-4.0.0.tgz", + "integrity": "sha512-o1CTkyND0ytU7wj9h29G/AuG9pkxZlQ+7hbZx51u9l1UA0Qbvfm627+VEMThdDQalrNam4WN+9mW6OdTZyXr8Q==", + "license": "MIT", + "dependencies": { + "@freesewing/core-plugins": "4.0.0", + "bezier-js": "6.1.4", + "hooks": "0.3.2", + "lodash.clonedeep": "^4.5.0", + "lodash.get": "4.4.2", + "lodash.set": "4.3.2", + "lodash.unset": "4.5.2" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + } + }, + "sites/studio/node_modules/@freesewing/i18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/i18n/-/i18n-4.0.0.tgz", + "integrity": "sha512-jd0LLuSiiGfM5P1EQKW/5tS/nFMpAbXgg22OP9lYTDiHNdPdZ3QFoDGGb1p8dnbI3RBJfkn+ciLTt7R45YOPBg==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + } + }, + "sites/studio/node_modules/@freesewing/plugin-i18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/plugin-i18n/-/plugin-i18n-4.0.0.tgz", + "integrity": "sha512-v4DoroyWpkoJNCccQ2saepphySKv91On31eWCW9aj8E3Ps8smcwUd+4kOz+MXZkUpPXOOD7oFhdYhrT4hlGcFg==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + }, + "peerDependencies": { + "@freesewing/core": "4.0.0" + } + }, + "sites/studio/node_modules/@freesewing/plugin-theme": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/plugin-theme/-/plugin-theme-4.0.0.tgz", + "integrity": "sha512-USB0sKJphpoicXvFDb/I5K5m8KSSOb8l0wZGbb+KnKkj9zrUSEyJB4EHtGgv1fstelNyjfA8naq0Nq5qgHPJFA==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + }, + "peerDependencies": { + "@freesewing/core": "4.0.0" + } + }, + "sites/studio/node_modules/@freesewing/plugin-timing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/plugin-timing/-/plugin-timing-4.0.0.tgz", + "integrity": "sha512-m4n3Ley+aoScI8vW1uVW/YBjeTZmWCyuixhFC88LU2TjUH/Lm11P6gCTWdbE9IBpA2Zkn65arpRLZrI08GQlnw==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + }, + "peerDependencies": { + "@freesewing/core": "4.0.0" + } + }, + "sites/studio/node_modules/@freesewing/react": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/react/-/react-4.0.0.tgz", + "integrity": "sha512-h53FTzj11T9JewkcLm+4B+lN85JqdFMv3HEvbe7l2+C17KYSFQEky9P8Xv613Gq/WzNjzfpOWbr7YIrGdSExSA==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-yaml": "^6.1.2", + "@uiw/react-codemirror": "^4.23.8", + "d3-drag": "3.0.0", + "d3-selection": "3.0.0", + "diff": "^7.0.0", + "echarts": "^5.6.0", + "echarts-for-react": "^3.0.2", + "file-saver": "^2.0.5", + "highlight.js": "^11.11.1", + "html-react-parser": "^5.2.2", + "jotai": "^2.12.1", + "jotai-location": "^0.5.5", + "luxon": "^3.5.0", + "mustache": "^4.2.0", + "pdfkit": "^0.16.0", + "react-diff-viewer-continued": "^4.0.5", + "react-dropzone": "^14.3.5", + "react-zoom-pan-pinch": "^3.7.0", + "svg-to-pdfkit": "^0.1.8", + "use-local-storage-state": "^19.5.0", + "web-worker": "^1.5.0", + "yaml": "^2.7.0" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, + "sites/studio/node_modules/@freesewing/snapseries": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/snapseries/-/snapseries-4.0.0.tgz", + "integrity": "sha512-Fqh+Mz22xccDZGqQMpYBgKHnARSe/T1s4JCXUhKPvk0fgMg+5jNFfFUj+qTo9gaJ6qDFZYv1Wts/Smqr5nYIpQ==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + } + }, + "sites/studio/node_modules/@freesewing/utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@freesewing/utils/-/utils-4.0.0.tgz", + "integrity": "sha512-CUqdmCWWoMj/UkONtKAq3rtFbWt8jFZS/DhqjmryJ1m8I4UjPpzXNEekr9gSiiP2RV/AbRHMAFS4sFBPmxia0w==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "tlds": "^1.255.0" + }, + "engines": { + "node": ">= 20" + }, + "funding": { + "type": "individual", + "url": "https://freesewing.org/patrons/join" + } + }, + "sites/studio/node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "sites/studio/node_modules/glob": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", + "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "sites/studio/node_modules/jackspeak": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", + "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "sites/studio/node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "sites/studio/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "sites/studio/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } } } } diff --git a/package.json b/package.json index 4f1700ddadc..b74fb880627 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,15 @@ "homepage": "https://freesewing.org/", "license": "MIT", "scripts": { + "add": "node --experimental-json-modules --no-warnings scripts/add-software.mjs", "new": "node --experimental-json-modules --no-warnings scripts/add-software.mjs", "build": "lerna run build:all", "?": "node scripts/help.mjs", "tips": "node scripts/help.mjs", "org": "cd sites/org && npm run start", + "eu": "cd sites/org && npm run start", "dev": "cd sites/dev && npm run start", + "studio": "cd sites/studio && npm run start", "kickstart": "npm install && husky && npm run tips", "cleanall": "npx nx run-many --target=clean", "test": "npx nx run-many --target=test", diff --git a/packages/collection/README.md b/packages/collection/README.md index 38accea5c13..892d0e99969 100644 --- a/packages/collection/README.md +++ b/packages/collection/README.md @@ -32,7 +32,7 @@ # @freesewing/collection -All FreeSewing designs bundles into one pacakge, our collection +All FreeSewing designs bundled into one package, our collection diff --git a/packages/collection/about.json b/packages/collection/about.json new file mode 100644 index 00000000000..f3f3689690f --- /dev/null +++ b/packages/collection/about.json @@ -0,0 +1,5 @@ +{ + "id": "collection", + "description": "All FreeSewing designs bundled into one package, our collection", + "version": "4.0.0" +} \ No newline at end of file diff --git a/packages/collection/package.json b/packages/collection/package.json index 131807dfbde..9540faea8a9 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -1,7 +1,7 @@ { "name": "@freesewing/collection", "version": "4.0.0", - "description": "All FreeSewing designs bundles into one pacakge, our collection", + "description": "All FreeSewing designs bundled into one package, our collection", "author": "Joost De Cock (https://github.com/joostdecock)", "homepage": "https://freesewing.org/", "repository": "github:freesewing/freesewing", @@ -15,7 +15,12 @@ }, "keywords": [ "freesewing", - "freesewing" + "design", + "diy", + "fashion", + "made to measure", + "parametric design", + "sewing" ], "type": "module", "module": "src/index.mjs", @@ -109,4 +114,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/packages/collection/src/index.mjs b/packages/collection/src/index.mjs index 68198ff77f7..65b43ef8792 100644 --- a/packages/collection/src/index.mjs +++ b/packages/collection/src/index.mjs @@ -75,6 +75,7 @@ export const designs = { bent, bibi, bob, + bonny, breanna, brian, bruce, diff --git a/packages/config/about.json b/packages/config/about.json new file mode 100644 index 00000000000..a8ab4787be8 --- /dev/null +++ b/packages/config/about.json @@ -0,0 +1,5 @@ +{ + "id": "config", + "description": "Various configurations for FreeSewing", + "version": "4.0.0" +} \ No newline at end of file diff --git a/packages/config/package.json b/packages/config/package.json index c18b21d024b..e6449015c6e 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -15,7 +15,12 @@ }, "keywords": [ "freesewing", - "freesewing" + "design", + "diy", + "fashion", + "made to measure", + "parametric design", + "sewing" ], "type": "module", "module": "src/index.mjs", @@ -44,4 +49,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/packages/core/about.json b/packages/core/about.json index 963bef31270..7f4bb1c88f1 100644 --- a/packages/core/about.json +++ b/packages/core/about.json @@ -1,20 +1,5 @@ { - "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" - ], - "version": "4.0.0-rc.5", - "pkg": "@freesewing/aaron" + "id": "core", + "description": "A library for creating made-to-measure sewing patterns", + "version": "4.0.0" } \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index 0f0df2cbe27..40d03e5d728 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -70,4 +70,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/packages/i18n/README.md b/packages/i18n/README.md index 418e12bd4df..f6cbb72960b 100644 --- a/packages/i18n/README.md +++ b/packages/i18n/README.md @@ -32,7 +32,7 @@ # @freesewing/i18n -Translation for the FreeSewing project +English translation for the FreeSewing project diff --git a/packages/i18n/about.json b/packages/i18n/about.json new file mode 100644 index 00000000000..254dac10d52 --- /dev/null +++ b/packages/i18n/about.json @@ -0,0 +1,5 @@ +{ + "id": "i18n", + "description": "English translation for the FreeSewing project", + "version": "4.0.0" +} \ No newline at end of file diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 083fd4869e1..f0f7acfc0d7 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,7 +1,7 @@ { "name": "@freesewing/i18n", "version": "4.0.0", - "description": "Translation for the FreeSewing project", + "description": "English translation for the FreeSewing project", "author": "Joost De Cock (https://github.com/joostdecock)", "homepage": "https://freesewing.org/", "repository": "github:freesewing/freesewing", @@ -48,4 +48,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/packages/models/README.md b/packages/models/README.md index 9eafc24831b..6c78f396c58 100644 --- a/packages/models/README.md +++ b/packages/models/README.md @@ -32,7 +32,7 @@ # @freesewing/models -Body measurements data for a range of default sizes +Body measurements data used to test FreeSewing designs ## Usage diff --git a/packages/models/about.json b/packages/models/about.json new file mode 100644 index 00000000000..e501adfb666 --- /dev/null +++ b/packages/models/about.json @@ -0,0 +1,5 @@ +{ + "id": "models", + "description": "Body measurements data used to test FreeSewing designs", + "version": "4.0.0" +} \ No newline at end of file diff --git a/packages/models/package.json b/packages/models/package.json index 3789be1f322..6ce7577616d 100644 --- a/packages/models/package.json +++ b/packages/models/package.json @@ -1,7 +1,7 @@ { "name": "@freesewing/models", "version": "4.0.0", - "description": "Body measurements data for a range of default sizes", + "description": "Body measurements data used to test FreeSewing designs", "author": "Joost De Cock (https://github.com/joostdecock)", "homepage": "https://freesewing.org/", "repository": "github:freesewing/freesewing", @@ -48,4 +48,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/packages/prettier-config/README.md b/packages/prettier-config/README.md index c1632d6bf7f..1ea959a0bde 100644 --- a/packages/prettier-config/README.md +++ b/packages/prettier-config/README.md @@ -32,7 +32,7 @@ # @freesewing/prettier-config -FreeSewing's shared configuration for prettier +FreeSewing shared configuration for prettier diff --git a/packages/prettier-config/about.json b/packages/prettier-config/about.json new file mode 100644 index 00000000000..662644c6d15 --- /dev/null +++ b/packages/prettier-config/about.json @@ -0,0 +1,5 @@ +{ + "id": "prettier-config", + "description": "FreeSewing shared configuration for prettier", + "version": "4.0.0" +} \ No newline at end of file diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json index 3afeb305a43..7541261e263 100644 --- a/packages/prettier-config/package.json +++ b/packages/prettier-config/package.json @@ -1,7 +1,7 @@ { "name": "@freesewing/prettier-config", "version": "4.0.0", - "description": "FreeSewing's shared configuration for prettier", + "description": "FreeSewing shared configuration for prettier", "author": "Joost De Cock (https://github.com/joostdecock)", "homepage": "https://freesewing.org/", "repository": "github:freesewing/freesewing", @@ -41,4 +41,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/packages/react/README.md b/packages/react/README.md index 769ee0f78a6..456899cc90a 100644 --- a/packages/react/README.md +++ b/packages/react/README.md @@ -32,7 +32,7 @@ # @freesewing/react -React components, hooks and context by/for FreeSewing +React components, hooks and context for FreeSewing frontends diff --git a/packages/react/about.json b/packages/react/about.json new file mode 100644 index 00000000000..9bf7dc6533f --- /dev/null +++ b/packages/react/about.json @@ -0,0 +1,5 @@ +{ + "id": "react", + "description": "React components, hooks and context for FreeSewing frontends", + "version": "4.0.0" +} \ No newline at end of file diff --git a/packages/react/hooks/useDesign/index.mjs b/packages/react/hooks/useDesign/index.mjs index f529bdd7ced..2631a8f5090 100644 --- a/packages/react/hooks/useDesign/index.mjs +++ b/packages/react/hooks/useDesign/index.mjs @@ -6,6 +6,7 @@ import { Benjamin as benjamin } from '@freesewing/benjamin' import { Bent as bent } from '@freesewing/bent' import { Bibi as bibi } from '@freesewing/bibi' import { Bob as bob } from '@freesewing/bob' +import { Bonny as bonny } from '@freesewing/bonny' import { Breanna as breanna } from '@freesewing/breanna' import { Brian as brian } from '@freesewing/brian' import { Bruce as bruce } from '@freesewing/bruce' @@ -25,6 +26,7 @@ import { Huey as huey } from '@freesewing/huey' import { Hugo as hugo } from '@freesewing/hugo' import { Jaeger as jaeger } from '@freesewing/jaeger' import { Jane as jane } from '@freesewing/jane' +import { Lily as lily } from '@freesewing/lily' import { Lucy as lucy } from '@freesewing/lucy' import { Lumina as lumina } from '@freesewing/lumina' import { Lumira as lumira } from '@freesewing/lumira' @@ -55,8 +57,6 @@ import { Wahid as wahid } from '@freesewing/wahid' 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' -import { Bonny as bonny } from '@freesewing/bonny' export const designs = { aaron, @@ -67,6 +67,7 @@ export const designs = { bent, bibi, bob, + bonny, breanna, brian, bruce, @@ -86,6 +87,7 @@ export const designs = { hugo, jaeger, jane, + lily, lucy, lumina, lumira, @@ -116,8 +118,6 @@ export const designs = { walburga, waralee, yuri, - lily, - bonny, } export const useDesign = (design) => (designs[design] ? designs[design] : false) diff --git a/packages/react/package.json b/packages/react/package.json index 415d02ffa4b..4e36c888e6c 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,7 +1,7 @@ { "name": "@freesewing/react", "version": "4.0.0", - "description": "React components, hooks and context by/for FreeSewing", + "description": "React components, hooks and context for FreeSewing frontends", "author": "Joost De Cock (https://github.com/joostdecock)", "homepage": "https://freesewing.org/", "repository": "github:freesewing/freesewing", @@ -15,7 +15,12 @@ }, "keywords": [ "freesewing", - "freesewing" + "design", + "diy", + "fashion", + "made to measure", + "parametric design", + "sewing" ], "type": "module", "module": "src/index.mjs", @@ -131,4 +136,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/packages/snapseries/about.json b/packages/snapseries/about.json new file mode 100644 index 00000000000..cead0505939 --- /dev/null +++ b/packages/snapseries/about.json @@ -0,0 +1,5 @@ +{ + "id": "snapseries", + "description": "A series of common sizes for elastics and other series to be used with snapped percentage options", + "version": "4.0.0" +} \ No newline at end of file diff --git a/packages/snapseries/package.json b/packages/snapseries/package.json index cc3a23e3f41..a7deacc0183 100644 --- a/packages/snapseries/package.json +++ b/packages/snapseries/package.json @@ -15,7 +15,12 @@ }, "keywords": [ "freesewing", - "freesewing" + "design", + "diy", + "fashion", + "made to measure", + "parametric design", + "sewing" ], "type": "module", "module": "src/index.mjs", @@ -44,4 +49,4 @@ "engines": { "node": ">= 20" } -} +} \ No newline at end of file diff --git a/packages/studio/about.json b/packages/studio/about.json new file mode 100644 index 00000000000..24c72418fe0 --- /dev/null +++ b/packages/studio/about.json @@ -0,0 +1,5 @@ +{ + "id": "studio", + "description": "Initializer package for a the FreeSewing design studio: npx @freesewing/studio", + "version": "4.0.0" +} \ No newline at end of file diff --git a/packages/studio/package.json b/packages/studio/package.json index 0588f0524cc..a8209989282 100644 --- a/packages/studio/package.json +++ b/packages/studio/package.json @@ -15,7 +15,12 @@ }, "keywords": [ "freesewing", - "freesewing" + "design", + "diy", + "fashion", + "made to measure", + "parametric design", + "sewing" ], "type": "module", "scripts": { @@ -49,4 +54,4 @@ "bin": { "studio": "./index.mjs" } -} +} \ No newline at end of file diff --git a/packages/studio/template/docs/support.mdx b/packages/studio/template/docs/support.mdx index 7a945b13dea..d64d16a06ae 100644 --- a/packages/studio/template/docs/support.mdx +++ b/packages/studio/template/docs/support.mdx @@ -1,6 +1,6 @@ --- title: Support -sidebar_class_name: tw-hidden +sidebar_class_name: tw:hidden --- import { RoleBlock } from '@freesewing/react/components/Role' diff --git a/packages/studio/template/docusaurus.config.mjs b/packages/studio/template/docusaurus.config.mjs index 9d4a84a1a45..da43c448fba 100644 --- a/packages/studio/template/docusaurus.config.mjs +++ b/packages/studio/template/docusaurus.config.mjs @@ -1,8 +1,5 @@ -import path from 'node:path' import { themes as prismThemes } from 'prism-react-renderer' -//import designs from '../../config/software/designs.json' -import tailwindcss from 'tailwindcss' -import autoprefixer from 'autoprefixer' +import { docusaurusPlugins } from './plugins/index.mjs' import smartypants from 'remark-smartypants' const config = { @@ -22,51 +19,7 @@ const config = { /* * We need to make sure we can import from .mjs files */ - plugins: [ - () => ({ - name: 'mjs-loader', - configureWebpack() { - return { - module: { - rules: [ - { - test: /\.mjs$/, - include: /node_modules/, - type: 'javascript/auto', - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env', '@babel/preset-react'], - }, - }, - }, - { - test: /\.mjs$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-react'], - }, - }, - }, - ], - }, - } - }, - }), - async function myPlugin() { - return { - name: 'docusaurus-tailwindcss', - configurePostCss(postcssOptions) { - // Appends TailwindCSS and AutoPrefixer. - postcssOptions.plugins.push(tailwindcss) - postcssOptions.plugins.push(autoprefixer) - return postcssOptions - }, - } - }, - ], + plugins: docusaurusPlugins, i18n: { defaultLocale: 'en', locales: ['en'] }, presets: [ [ @@ -84,6 +37,11 @@ const config = { ], ], themeConfig: { + colorMode: { + // Do not be tempted to change these + disableSwitch: true, + respectPrefersColorScheme: true, + }, image: 'img/freesewing-social-card.png', navbar: { title: 'FreeSewing Studio', diff --git a/packages/studio/template/package.json b/packages/studio/template/package.json index 4a39401be31..2d7c898a9d3 100644 --- a/packages/studio/template/package.json +++ b/packages/studio/template/package.json @@ -29,24 +29,25 @@ "@freesewing/plugin-i18n": "latest", "@freesewing/plugin-theme": "latest", "@freesewing/plugin-timing": "latest", - "autoprefixer": "^10.4.20", "clsx": "^2.0.0", - "daisyui": "^4.12.23", "lodash": "^4.17.21", - "postcss": "^8.4.47", "prism-react-renderer": "^2.3.0", "react": "^19.0.0", "react-dom": "^19.0.0", "react-markdown": "^9.0.1", - "remark-smartypants": "^3.0.2", - "tailwindcss": "^3.4.14" + "remark-smartypants": "^3.0.2" }, "devDependencies": { "@babel/plugin-syntax-import-attributes": "^7.25.6", "@docusaurus/module-type-aliases": "^3.7.0", "@docusaurus/types": "^3.7.0", + "@tailwindcss/postcss": "^4.1.3", + "autoprefixer": "^10.4.20", + "daisyui": "^5.0.19", "glob": "^11.0.0", "gray-matter": "^4.0.3", + "postcss": "^8.4.47", + "tailwindcss": "^4.1.3", "yaml-loader": "^0.8.1" }, "browserslist": { diff --git a/packages/studio/template/plugins/esm.mjs b/packages/studio/template/plugins/esm.mjs new file mode 100644 index 00000000000..934e6e13e09 --- /dev/null +++ b/packages/studio/template/plugins/esm.mjs @@ -0,0 +1,28 @@ +export function esmPlugin() { + return { + name: 'esm-plugin', + configureWebpack() { + return { + module: { + rules: [ + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + { + test: /\.mjs$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-react'], + }, + }, + }, + ], + }, + } + }, + } +} diff --git a/packages/studio/template/plugins/index.mjs b/packages/studio/template/plugins/index.mjs new file mode 100644 index 00000000000..8f0deda5467 --- /dev/null +++ b/packages/studio/template/plugins/index.mjs @@ -0,0 +1,4 @@ +import { esmPlugin } from './esm.mjs' +import { tailwindPlugin } from './tailwind.mjs' + +export const docusaurusPlugins = [esmPlugin, tailwindPlugin] diff --git a/packages/studio/template/plugins/tailwind.mjs b/packages/studio/template/plugins/tailwind.mjs new file mode 100644 index 00000000000..963726ff4bc --- /dev/null +++ b/packages/studio/template/plugins/tailwind.mjs @@ -0,0 +1,14 @@ +import tailwindPostcss from '@tailwindcss/postcss' +import autoprefixer from 'autoprefixer' + +export async function tailwindPlugin() { + return { + name: 'tailwind-plugin', + configurePostCss(postcssOptions) { + // Appends TailwindCSS and AutoPrefixer. + postcssOptions.plugins.push(tailwindPostcss) + postcssOptions.plugins.push(autoprefixer) + return postcssOptions + }, + } +} diff --git a/packages/studio/template/postcss.config.js b/packages/studio/template/postcss.config.js new file mode 100644 index 00000000000..668a5b956e9 --- /dev/null +++ b/packages/studio/template/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, +} diff --git a/packages/studio/template/src/components/bare-layout.mjs b/packages/studio/template/src/components/bare-layout.mjs index 282396f6d35..4b3523041ae 100644 --- a/packages/studio/template/src/components/bare-layout.mjs +++ b/packages/studio/template/src/components/bare-layout.mjs @@ -24,7 +24,7 @@ export function BareLayout({ children = null, footer = false, noHeader = false, - className = 'tw-bg-transparent tw-p-0 tw-m-0', + className = 'tw:bg-transparent tw:p-0 tw:m-0', title = 'FreeSewing.org', description = 'Free bespoke sewing patterns', }) { diff --git a/packages/studio/template/src/css/custom.css b/packages/studio/template/src/css/custom.css index 79e600c462b..a9a5eb6b2a2 100644 --- a/packages/studio/template/src/css/custom.css +++ b/packages/studio/template/src/css/custom.css @@ -1,285 +1,205 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -/* You can override the default Infima variables here. */ -:root { - /* Colors from tailwind that we use here*/ - --sky-300: #7dd3fc; - --sky-400: #38bdf8; - --sky-500: #0ea5e9; - --sky-600: #0284c7; - --sky-700: #0369a1; - --pink-300: #f9a8d4; - --pink-500: #ec4899; - --neutral-50: #fafafa; - --neutral-100: #f5f5f5; - --neutral-200: #e5e5e5; - --neutral-400: #a3a3a3; - --neutral-500: #737373; - --neutral-600: #525252; - --neutral-900: #0a0a0a; - --amber-600: #d97706; - --red-500: #ef4444; - --blue-500: #3b82f6; - --pink-500: #ec4899; - --violet-500: #8b5cf6; - - /* Color Palette */ - --ifm-color-primary: var(--sky-500); - --ifm-color-primary-dark: var(--sky-600); - --ifm-color-primary-light: var(--sky-400); - --ifm-color-secondary: var(--sky-300); - --ifm-color-tertiary: var(--pink-500); - - /* Text Colors */ - --ifm-font-color-base: var(--neutral-900); - --ifm-font-color-light: var(--neutral-50); - --ifm-font-color-secondary: var(--sky-500); - - /* State colors */ - --ifm-color-success: var(--sky-400); - - /* Background Colors */ - --ifm-background-color: #fcfcfc; - --ifm-background-color-secondary: var(--neutral-100); - - /* Borders and Outlines */ - --ifm-border-color: var(--neutral-200); - --ifm-outline-color: var(--pink-300); - - /* Link colors */ - --ifm-link-color: var(--sky-600); - --ifm-link-hover-color: var(--sky-700); - - /* Button Colors */ - --ifm-button-color: var(--neutral-50); - --ifm-button-background-color: var(--sky-500); - --ifm-button-background-hover-color: var(--sky-700); - --ifm-button-border-color: var(--sky-600); - - /* Font Sizes and Spacing */ - --ifm-font-size-base: 16px; - --ifm-line-height-base: 1.5; - --ifm-spacing-unit: 8px; - --ifm-spacing-base: 16px; - - /* Sidebar/Navigation Customizations */ - --ifm-sidebar-background-color: var(--neutral-50); - --ifm-sidebar-link-color: var(--neutral-500); - --ifm-sidebar-link-hover-color: var(--sky-600); - --ifm-sidebar-active-link-color: var(--sky-600); - --ifm-sidebar-item-spacing: 8px; - - /* Navbar Customizations */ - --ifm-navbar-background-color: var(--neutral-50); - --ifm-navbar-link-color: var(--neutral-900); - --ifm-navbar-link-hover-color: var(--sky-500); - - /* Footer colors */ - --ifm-footer-background-color: var(--neutral-100); - --ifm-footer-link-color: var(--sky-600); - - /* - * FreeSewing pattern vars - */ - '--pattern-bg':var(--neutral-50); - '--pattern-fabric':var(--neutral-900); - '--pattern-lining':var(--emerald-500); - '--pattern-interfacing':var(--neutral-400); - ,'--pattern-canvas': var(--amber-600); - '--pattern-various':var(--red-500); - '--pattern-mark':var(--blue-500); - '--pattern-contrast':var(--pink-500); - '--pattern-note':var(--violet-500); -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - /* Text Colors */ - --ifm-font-color-base: var(--neutral-200); - --ifm-font-color-light: var(--neutral-50); - - /* Background Colors */ - --ifm-background-color: var(--neutral-900); - --ifm-background-color-secondary: var(--neutral-100); - - /* Borders and Outlines */ - --ifm-border-color: var(--neutral-200); - - /* Link colors */ - --ifm-link-color: var(--sky-400); - --ifm-link-hover-color: var(--sky-500); - - /* Button Colors */ - --ifm-button-color: var(--neutral-600); - - /* Navbar Customizations */ - --ifm-navbar-background-color: var(--neutral-900); - --ifm-navbar-link-color: var(--neutral-50); - --ifm-navbar-link-hover-color: var(--sky-300); - - /* Footer colors */ - --ifm-footer-background-color: var(--neutral-900); - --ifm-footer-link-color: var(--sky-300); - - /* - * FreeSewing pattern vars - */ - '--pattern-bg':var(--neutral-900); - '--pattern-fabric':var(--neutral-5); - '--pattern-lining':var(--emerald-500); - '--pattern-interfacing':var(--neutral-400); - ,'--pattern-canvas': var(--amber-600); - '--pattern-various':var(--red-500); - '--pattern-mark':var(--blue-500); - '--pattern-contrast':var(--pink-500); - '--pattern-note':var(--violet-500); +@import 'tailwindcss' prefix(tw); +@plugin "daisyui" { + prefix: 'daisy-'; } +@import './light.css'; +@import './dark.css'; /* * Add CSS for code */ -@import './code.css'; +@import './code.css' layer(base); /* * Add styling for FreeSewing patterns */ -@import './patterns.css'; +@import './patterns.css' layer(base); -div.footer__copyright { - font-size: 0.8rem; -} -div.footer__copyright a { - font-weight: bold; +@source '../**/*.{js,mjs,mdx}'; +@source '../../docs/**/*.mdx'; +@source '../../node_modules/daisyui/**/*.{js,mjs,ts,tsx}'; +@source '../../node_modules/@freesewing/react/components/**/*.mjs'; +@source '../../node_modules/@freesewing/react/context/**/*.mjs'; +@source '../../node_modules/@freesewing/react/hooks/**/*.mjs'; +@source '../../node_modules/@freesewing/utils/src/*.mjs'; + +@custom-variant dark (&:where(data-theme="dark"], data-theme="dark"] *)); + +@theme { + --aspect-9\/16: 9 / 16; } -.caption { - text-align: center; - font-style: italic; - margin-top: -1rem; +/* + The default border color has changed to `currentcolor` in Tailwind CSS v4, + so we've added these compatibility styles to make sure everything still + looks the same as it did with Tailwind CSS v3. + + If we ever want to remove these styles, we need to add an explicit border + color utility to any element that depends on these defaults. +*/ +@layer base { + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentcolor); + } } -.tag, -.technique { - background: var(--ifm-color-primary); - padding: 0.2rem 0.5rem; - font-weight: bold; - color: var(--ifm-font-color-light); - border-radius: 0.5rem; +@utility markdown { + & ul { + @apply tw:list-inside tw:list-disc tw:ml-4; + } } -.technique { - background: var(--pink-500); -} +@layer base { + div.footer__copyright { + font-size: 0.8rem; + } + div.footer__copyright a { + font-weight: bold; + } -p > figure.mdx { - padding: 0; - margin: 0; -} -figure.mdx { - margin: 0; - padding: 1rem 0 0; -} -figure.mdx > img { - padding: 1rem; -} -figcaption.mdx { - font-style: italic; - margin-top: -0.25rem; - opacity: 0.8; - padding: 0 0.5rem; - font-size: 90%; + .caption { + text-align: center; + font-style: italic; + margin-top: -1rem; + } + + .tag, + .technique { + background: var(--ifm-color-primary); + padding: 0.2rem 0.5rem; + font-weight: bold; + color: var(--ifm-font-color-light); + border-radius: 0.5rem; + } + + .technique { + background: var(--pink-500); + } + + p > figure.mdx { + padding: 0; + margin: 0; + } + figure.mdx { + margin: 0; + padding: 1rem 0 0; + } + figure.mdx > img { + padding: 1rem; + } + figcaption.mdx { + font-style: italic; + margin-top: -0.25rem; + opacity: 0.8; + padding: 0 0.5rem; + font-size: 90%; + } + .mdx p { + margin: 0.75rem 0; + } + .avatar img { + width: var(--ifm-avatar-photo-size); + height: var(--ifm-avatar-photo-size); + } + .avatar > div { + aspect-ratio: auto; + } + + .markdown a:not([class]) { + color: var(--ifm-link-color); + text-decoration: underline; + text-decoration-thickness: 2px; + } + + .markdown a:not([class]):hover { + color: var(--ifm-link-hover-color); + text-decoration: underline; + text-decoration-thickness: 4px; + } + + .markdown ul > li > p { + display: inline; + } + a.theme-edit-this-page { + display: flex; + flex-direction: row; + gap: 1rem; + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: var(--ifm-pagination-nav-border-radius); + line-height: var(--ifm-heading-line-height); + padding: var(--ifm-global-spacing); + transition: border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default); + color: var(--ifm-link-color); + text-decoration: var(--ifm-link-decoration); + transition: color var(--ifm-transition-fast) var(--ifm-transition-timing-default); + font-size: var(--ifm-h4-font-size); + font-weight: var(--ifm-heading-font-weight); + word-break: break-word; + } + a.theme-edit-this-page:hover { + border-color: var(--ifm-pagination-nav-color-hover); + -webkit-text-decoration: none; + text-decoration: none; + } + + a.daisy-btn-neutral:hover { + color: #fff; + text-decoration: none; + } } /* * fixes */ -.avatar img { - width: var(--ifm-avatar-photo-size); - height: var(--ifm-avatar-photo-size); +a.no-hover-decoration:hover { + text-decoration: none; } -.avatar > div { - aspect-ratio: auto; +a.tw\:daisy-btn { + color: inherit; } - -.markdown a:not([class]) { - color: var(--ifm-link-color); - text-decoration: underline; - text-decoration-thickness: 2px; +a.tw\:daisy-btn-primary.tw\:daisy-btn-outline { + color: var(--color-primary); } - -.markdown a:not([class]):hover { - color: var(--ifm-link-hover-color); - text-decoration: underline; - text-decoration-thickness: 4px; +a.tw\:daisy-btn-primary.tw\:daisy-btn-outline:hover { + color: var(--color-primary-content); + text-decoration: none; } - -.markdown ul > li > p { - display: inline; +.tw\:daisy-menu { + --daisy-menu-active-fg: currentColor; + --daisy-menu-active-bg: var(--bg-transparent); } /* * Make the 'edit this page' link look consistent */ -a.theme-edit-this-page { - display: flex; - flex-direction: row; - gap: 1rem; - border: 1px solid var(--ifm-color-emphasis-300); - border-radius: var(--ifm-pagination-nav-border-radius); - line-height: var(--ifm-heading-line-height); - padding: var(--ifm-global-spacing); - transition: border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default); - color: var(--ifm-link-color); - text-decoration: var(--ifm-link-decoration); - transition: color var(--ifm-transition-fast) var(--ifm-transition-timing-default); - font-size: var(--ifm-h4-font-size); - font-weight: var(--ifm-heading-font-weight); - word-break: break-word; -} -a.theme-edit-this-page:hover { - border-color: var(--ifm-pagination-nav-color-hover); - -webkit-text-decoration: none; - text-decoration: none; -} - -a.daisy-btn-neutral:hover { - color: #fff; - text-decoration: none; -} /* * Add Tailwindcss */ -@tailwind base; -@tailwind components; -@tailwind utilities; @layer components { /* Applied styles for common HTML tags */ h1 { - @apply tw-text-5xl tw-pt-5 tw-pb-4 tw-font-light tw-tracking-tight lg:tw-text-6xl; + @apply tw:text-5xl tw:pt-5 tw:pb-4 tw:font-light tw:tracking-tight tw:lg:text-6xl; } h2 { - @apply tw-text-3xl tw-pt-4 tw-pb-3 tw-font-black tw-m-0 tw-tracking-tight lg:tw-text-4xl; + @apply tw:text-3xl tw:pt-4 tw:pb-3 tw:font-black tw:m-0 tw:tracking-tight tw:lg:text-4xl; } h3 { - @apply tw-text-2xl tw-pt-3 tw-pb-2 tw-font-extrabold tw-tracking-tight tw-m-0 lg:tw-text-3xl; + @apply tw:text-2xl tw:pt-3 tw:pb-2 tw:font-extrabold tw:tracking-tight tw:m-0 tw:lg:text-3xl; } h4 { - @apply tw-text-xl tw-pt-2 tw-pb-1 tw-font-bold tw-m-0 tw-tracking-tight lg:tw-text-2xl; + @apply tw:text-xl tw:pt-2 tw:pb-1 tw:font-bold tw:m-0 tw:tracking-tight tw:lg:text-2xl; } h5 { - @apply tw-text-lg tw-py-1 tw-font-semibold tw-m-0 tw-tracking-tight lg:tw-text-xl; + @apply tw:text-lg tw:py-1 tw:font-semibold tw:m-0 tw:tracking-tight tw:lg:text-xl; } h6 { - @apply tw-text-base tw-py-1 tw-font-medium tw-italic tw-m-0 tw-tracking-tight lg:tw-text-lg; - } - .markdown ul { - @apply tw-list-inside tw-list-disc tw-ml-4; + @apply tw:text-base tw:py-1 tw:font-medium tw:italic tw:m-0 tw:tracking-tight tw:lg:text-lg; } } nav.navbar { diff --git a/packages/studio/template/src/css/dark.css b/packages/studio/template/src/css/dark.css new file mode 100644 index 00000000000..135883d88fc --- /dev/null +++ b/packages/studio/template/src/css/dark.css @@ -0,0 +1,229 @@ +[data-theme='dark']:root, +html[data-theme='dark'] { + /* Color Palette */ + --ifm-color-primary: oklch(0.685 0.169 237.323); + --ifm-color-primary-dark: oklch(0.588 0.158 241.966); + --ifm-color-primary-light: oklch(0.746 0.16 232.661); + --ifm-color-secondary: oklch(0.828 0.111 230.318); + --ifm-color-tertiary: oklch(0.656 0.241 354.308); + + /* Text Colors */ + --ifm-font-color-base: oklch(0.97 0 0); + --ifm-font-color-light: oklch(0.985 0 0); + --ifm-font-color-secondary: oklch(0.685 0.169 237.323); + + /* State colors */ + --ifm-color-success: oklch(0.746 0.16 232.661); + + /* Background Colors */ + --ifm-background-color: oklch(0.269 0 0); + --ifm-background-color-secondary: oklch(0.97 0 0); + + /* Borders and Outlines */ + --ifm-border-color: oklch(0.922 0 0); + --ifm-outline-color: oklch(0.823 0.12 346.018); + + /* Link colors */ + --ifm-link-color: oklch(0.746 0.16 232.661); + --ifm-link-hover-color: oklch(0.828 0.111 230.318); + + /* Button Colors */ + --ifm-button-color: oklch(0.985 0 0); + --ifm-button-background-color: oklch(0.685 0.169 237.323); + --ifm-button-background-hover-color: oklch(0.5 0.134 242.749); + --ifm-button-border-color: oklch(0.588 0.158 241.966); + + /* Font Sizes and Spacing */ + --ifm-font-size-base: 16px; + --ifm-line-height-base: 1.5; + --ifm-spacing-unit: 8px; + --ifm-spacing-base: 16px; + + /* Sidebar/Navigation Customizations */ + --ifm-sidebar-background-color: oklch(0.985 0 0); + --ifm-sidebar-link-color: oklch(0.556 0 0); + --ifm-sidebar-link-hover-color: oklch(0.588 0.158 241.966); + --ifm-sidebar-active-link-color: oklch(0.588 0.158 241.966); + --ifm-sidebar-item-spacing: 8px; + + /* Navbar Customizations */ + --ifm-navbar-background-color: oklch(0.985 0 0); + --ifm-navbar-link-color: oklch(0.97 0 0); + --ifm-navbar-link-hover-color: oklch(0.685 0.169 237.323); + + /* Footer colors */ + --ifm-footer-background-color: oklch(0.205 0 0); + --ifm-footer-link-color: oklch(0.828 0.111 230.318); + + /* + * These are variables to style FreeSewing SVG output (drafts, examples, and so on) + */ + --pattern-bg: oklch(0.985 0 0); + --pattern-fabric: oklch(0.985 0 0); + --pattern-lining: oklch(0.696 0.17 162.48); + --pattern-interfacing: oklch(0.708 0 0); + --pattern-canvas: oklch(0.666 0.179 58.318); + --pattern-various: oklch(0.637 0.237 25.331); + --pattern-mark: oklch(0.623 0.214 259.815); + --pattern-contrast: oklch(0.656 0.241 354.308); + --pattern-note: oklch(0.606 0.25 292.717); + + --pattern-color-0: oklch(0.637 0.237 25.331); + --pattern-color-1: oklch(0.723 0.219 149.579); + --pattern-color-2: oklch(0.623 0.214 259.815); + --pattern-color-3: oklch(0.795 0.184 86.047); + --pattern-color-4: oklch(0.656 0.241 354.308); + --pattern-color-5: oklch(0.606 0.25 292.717); + --pattern-color-6: oklch(0.704 0.14 182.503); + --pattern-color-7: oklch(0.769 0.188 70.08); + --pattern-color-8: oklch(0.667 0.295 322.15); + --pattern-color-9: oklch(0.715 0.143 215.221); + + --pattern-text-xs: 0.2rem; + --pattern-text-sm: 0.3rem; + --pattern-text: 0.4rem; + --pattern-text-lg: 0.6rem; + --pattern-text-xl: 0.8rem; + --pattern-text-2xl: 1.5rem; + --pattern-text-3xl: 2rem; + --pattern-text-4xl: 3rem; + + --pattern-scale: 1; + --pattern-stroke-xs: 0.2px; + --pattern-stroke-sm: 0.4px; + --pattern-stroke: 0.7px; + --pattern-stroke-lg: 1.3px; + --pattern-stroke-xl: 2px; + --pattern-stroke-2xl: 4px; + --pattern-stroke-3xl: 6px; + --pattern-stroke-4xl: 8px; + --pattern-stroke-5xl: 12px; + --pattern-stroke-6xl: 16px; + --pattern-stroke-7xl: 20px; + + --pattern-sample-1: oklch(0.637 0.237 25.331); + --pattern-sample-2: oklch(0.705 0.213 47.604); + --pattern-sample-3: oklch(0.795 0.184 86.047); + --pattern-sample-4: oklch(0.768 0.233 130.85); + --pattern-sample-5: oklch(0.696 0.17 162.48); + --pattern-sample-6: oklch(0.715 0.143 215.221); + --pattern-sample-7: oklch(0.623 0.214 259.815); + --pattern-sample-8: oklch(0.606 0.25 292.717); + --pattern-sample-9: oklch(0.667 0.295 322.15); + --pattern-sample-10: oklch(0.645 0.246 16.439); +} + +@plugin "daisyui/theme" { + name: 'dark'; + default: false; + prefersdark: true; + color-scheme: dark; + + --color-base-100: oklch(0.205 0 0); + --color-base-200: oklch(0.371 0 0); + --color-base-300: oklch(0.439 0 0); + --color-base-content: oklch(0.97 0 0); + --color-primary: oklch(0.811 0.111 293.571); + --color-primary-content: oklch(0.145 0 0); + --color-secondary: oklch(0.828 0.111 230.318); + --color-secondary-content: oklch(0.145 0 0); + --color-accent: oklch(0.833 0.145 321.434); + --color-accent-content: oklch(0.145 0 0); + --color-neutral: oklch(0.87 0 0); + --color-neutral-content: oklch(0.145 0 0); + --color-info: oklch(0.945 0.129 101.54); + --color-info-content: oklch(0.145 0 0); + --color-success: oklch(0.792 0.209 151.711); + --color-success-content: oklch(0.145 0 0); + --color-warning: oklch(0.75 0.183 55.934); + --color-warning-content: oklch(0.145 0 0); + --color-error: oklch(0.704 0.191 22.216); + --color-error-content: oklch(0.145 0 0); + + /* + * These are variables to style highlighted code blocks. + */ + --code-background-color: oklch(0.269 0 0); + --code-background-highlight-color: #313131; + --code-border-color: oklch(0.205 0 0); + --code-color: oklch(0.97 0 0); + --code-font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; + --code-border-radius: 0.5rem; + --code-border-style: solid; + --code-border-width: 1; + --code-outer-padding: 0 0.5rem; + --code-inner-padding: 1rem; + + /* + * These variables are used to style the highlighted tokens themselves + */ + --code-color-keyword: oklch(0.795 0.184 86.047); + --code-font-weight-keyword: bold; + --code-color-entity: oklch(0.702 0.183 293.541); + --code-font-weight-entity: bold; + --code-color-constant: oklch(0.841 0.238 128.85); + --code-color-string: oklch(0.746 0.16 232.661); + --code-font-style-string: italic; + --code-color-variable: oklch(0.673 0.182 276.935); + --code-color-comment: oklch(0.708 0 0); + --code-color-tag: oklch(0.792 0.209 151.711); + --code-color-property: oklch(0.945 0.129 101.54); + --code-font-weight-property: bold; + + /* + * These are variables to style FreeSewing SVG output (drafts, examples, and so on) + */ + --pattern-bg: oklch(0.985 0 0); + --pattern-fabric: oklch(0.985 0 0); + --pattern-lining: oklch(0.696 0.17 162.48); + --pattern-interfacing: oklch(0.708 0 0); + --pattern-canvas: oklch(0.666 0.179 58.318); + --pattern-various: oklch(0.637 0.237 25.331); + --pattern-mark: oklch(0.623 0.214 259.815); + --pattern-contrast: oklch(0.656 0.241 354.308); + --pattern-note: oklch(0.606 0.25 292.717); + + --pattern-color-0: oklch(0.637 0.237 25.331); + --pattern-color-1: oklch(0.723 0.219 149.579); + --pattern-color-2: oklch(0.623 0.214 259.815); + --pattern-color-3: oklch(0.795 0.184 86.047); + --pattern-color-4: oklch(0.656 0.241 354.308); + --pattern-color-5: oklch(0.606 0.25 292.717); + --pattern-color-6: oklch(0.704 0.14 182.503); + --pattern-color-7: oklch(0.769 0.188 70.08); + --pattern-color-8: oklch(0.667 0.295 322.15); + --pattern-color-9: oklch(0.715 0.143 215.221); + + --pattern-text-xs: 0.2rem; + --pattern-text-sm: 0.3rem; + --pattern-text: 0.4rem; + --pattern-text-lg: 0.6rem; + --pattern-text-xl: 0.8rem; + --pattern-text-2xl: 1.5rem; + --pattern-text-3xl: 2rem; + --pattern-text-4xl: 3rem; + + --pattern-scale: 1; + --pattern-stroke-xs: 0.2px; + --pattern-stroke-sm: 0.4px; + --pattern-stroke: 0.7px; + --pattern-stroke-lg: 1.3px; + --pattern-stroke-xl: 2px; + --pattern-stroke-2xl: 4px; + --pattern-stroke-3xl: 6px; + --pattern-stroke-4xl: 8px; + --pattern-stroke-5xl: 12px; + --pattern-stroke-6xl: 16px; + --pattern-stroke-7xl: 20px; + + --pattern-sample-1: oklch(0.637 0.237 25.331); + --pattern-sample-2: oklch(0.705 0.213 47.604); + --pattern-sample-3: oklch(0.795 0.184 86.047); + --pattern-sample-4: oklch(0.768 0.233 130.85); + --pattern-sample-5: oklch(0.696 0.17 162.48); + --pattern-sample-6: oklch(0.715 0.143 215.221); + --pattern-sample-7: oklch(0.623 0.214 259.815); + --pattern-sample-8: oklch(0.606 0.25 292.717); + --pattern-sample-9: oklch(0.667 0.295 322.15); + --pattern-sample-10: oklch(0.645 0.246 16.439); +} diff --git a/packages/studio/template/src/css/light.css b/packages/studio/template/src/css/light.css new file mode 100644 index 00000000000..e164bfba0c8 --- /dev/null +++ b/packages/studio/template/src/css/light.css @@ -0,0 +1,233 @@ +/* Infima vars (for docusaurus native styles) */ +:root { + /* Color Palette */ + --ifm-color-primary: oklch(0.685 0.169 237.323); + --ifm-color-primary-dark: oklch(0.588 0.158 241.966); + --ifm-color-primary-light: oklch(0.746 0.16 232.661); + --ifm-color-secondary: oklch(0.828 0.111 230.318); + --ifm-color-tertiary: oklch(0.656 0.241 354.308); + + /* Text Colors */ + --ifm-font-color-base: oklch(0.205 0 0); + --ifm-font-color-light: oklch(0.985 0 0); + --ifm-font-color-secondary: oklch(0.685 0.169 237.323); + + /* State colors */ + --ifm-color-success: oklch(0.746 0.16 232.661); + + /* Background Colors */ + --ifm-background-color: oklch(0.985 0 0); + --ifm-background-color-secondary: oklch(0.97 0 0); + + /* Borders and Outlines */ + --ifm-border-color: oklch(0.922 0 0); + --ifm-outline-color: oklch(0.823 0.12 346.018); + + /* Link colors */ + --ifm-link-color: oklch(0.588 0.158 241.966); + --ifm-link-hover-color: oklch(0.5 0.134 242.749); + + /* Button Colors */ + --ifm-button-color: oklch(0.985 0 0); + --ifm-button-background-color: oklch(0.685 0.169 237.323); + --ifm-button-background-hover-color: oklch(0.5 0.134 242.749); + --ifm-button-border-color: oklch(0.588 0.158 241.966); + + /* Font Sizes and Spacing */ + --ifm-font-size-base: 16px; + --ifm-line-height-base: 1.5; + --ifm-spacing-unit: 8px; + --ifm-spacing-base: 16px; + + /* Sidebar/Navigation Customizations */ + --ifm-sidebar-background-color: oklch(0.985 0 0); + --ifm-sidebar-link-color: oklch(0.556 0 0); + --ifm-sidebar-link-hover-color: oklch(0.588 0.158 241.966); + --ifm-sidebar-active-link-color: oklch(0.588 0.158 241.966); + --ifm-sidebar-item-spacing: 8px; + + /* Navbar Customizations */ + --ifm-navbar-background-color: oklch(0.985 0 0); + --ifm-navbar-link-color: oklch(0.205 0 0); + --ifm-navbar-link-hover-color: oklch(0.685 0.169 237.323); + + /* Footer colors */ + --ifm-footer-background-color: oklch(0.922 0 0); + --ifm-footer-link-color: oklch(0.588 0.158 241.966); + + /* + * These are variables to style FreeSewing SVG output (drafts, examples, and so on) + */ + --pattern-bg: oklch(0.985 0 0); + --pattern-fabric: oklch(0.205 0 0); + --pattern-lining: oklch(0.696 0.17 162.48); + --pattern-interfacing: oklch(0.708 0 0); + --pattern-canvas: oklch(0.666 0.179 58.318); + --pattern-various: oklch(0.637 0.237 25.331); + --pattern-mark: oklch(0.623 0.214 259.815); + --pattern-contrast: oklch(0.656 0.241 354.308); + --pattern-note: oklch(0.606 0.25 292.717); + + --pattern-color-0: oklch(0.637 0.237 25.331); + --pattern-color-1: oklch(0.723 0.219 149.579); + --pattern-color-2: oklch(0.623 0.214 259.815); + --pattern-color-3: oklch(0.795 0.184 86.047); + --pattern-color-4: oklch(0.656 0.241 354.308); + --pattern-color-5: oklch(0.606 0.25 292.717); + --pattern-color-6: oklch(0.704 0.14 182.503); + --pattern-color-7: oklch(0.769 0.188 70.08); + --pattern-color-8: oklch(0.667 0.295 322.15); + --pattern-color-9: oklch(0.715 0.143 215.221); + + --pattern-text-xs: 0.2rem; + --pattern-text-sm: 0.3rem; + --pattern-text: 0.4rem; + --pattern-text-lg: 0.6rem; + --pattern-text-xl: 0.8rem; + --pattern-text-2xl: 1.5rem; + --pattern-text-3xl: 2rem; + --pattern-text-4xl: 3rem; + + --pattern-scale: 1; + --pattern-stroke-xs: 0.2px; + --pattern-stroke-sm: 0.4px; + --pattern-stroke: 0.7px; + --pattern-stroke-lg: 1.3px; + --pattern-stroke-xl: 2px; + --pattern-stroke-2xl: 4px; + --pattern-stroke-3xl: 6px; + --pattern-stroke-4xl: 8px; + --pattern-stroke-5xl: 12px; + --pattern-stroke-6xl: 16px; + --pattern-stroke-7xl: 20px; + + --pattern-sample-1: oklch(0.637 0.237 25.331); + --pattern-sample-2: oklch(0.705 0.213 47.604); + --pattern-sample-3: oklch(0.795 0.184 86.047); + --pattern-sample-4: oklch(0.768 0.233 130.85); + --pattern-sample-5: oklch(0.696 0.17 162.48); + --pattern-sample-6: oklch(0.715 0.143 215.221); + --pattern-sample-7: oklch(0.623 0.214 259.815); + --pattern-sample-8: oklch(0.606 0.25 292.717); + --pattern-sample-9: oklch(0.667 0.295 322.15); + --pattern-sample-10: oklch(0.645 0.246 16.439); +} + +@plugin "daisyui/theme" { + name: 'light'; + default: true; + prefersdark: false; + color-scheme: light; + + /*fontFamily: 'system-ui, sans-serif',*/ + --ifm-link-hover-color: oklch(0.685 0.169 237.323); + + --color-base-100: oklch(0.985 0 0); + --color-base-200: oklch(0.97 0 0); + --color-base-300: oklch(0.87 0 0); + --color-base-content: oklch(0.371 0 0); + + --color-primary: oklch(0.541 0.281 293.009); + --color-primary-content: oklch(0.985 0 0); + --color-secondary: oklch(0.685 0.169 237.323); + --color-secondary-content: oklch(0.985 0 0); + --color-accent: oklch(0.667 0.295 322.15); + --color-accent-content: oklch(0.985 0 0); + --color-neutral: oklch(0.205 0 0); + --color-neutral-content: oklch(0.985 0 0); + --color-info: oklch(0.905 0.182 98.111); + --color-info-content: oklch(0.205 0 0); + --color-success: oklch(0.627 0.194 149.214); + --color-success-content: oklch(0.985 0 0); + --color-warning: oklch(0.646 0.222 41.116); + --color-warning-content: oklch(0.985 0 0); + --color-error: oklch(0.577 0.245 27.325); + --color-error-content: oklch(0.985 0 0); + + /* + * These are variables to style highlighted code blocks. + */ + --code-background-color: oklch(0.269 0 0); + --code-background-highlight-color: #313131; + --code-border-color: oklch(0.205 0 0); + --code-color: oklch(0.97 0 0); + --code-font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; + --code-border-radius: 0.5rem; + --code-border-style: solid; + --code-border-width: 1; + --code-outer-padding: 0 0.5rem; + --code-inner-padding: 1rem; + + /* + * These variables are used to style the highlighted tokens themselves + */ + --code-color-keyword: oklch(0.795 0.184 86.047); + --code-font-weight-keyword: bold; + --code-color-entity: oklch(0.702 0.183 293.541); + --code-font-weight-entity: bold; + --code-color-constant: oklch(0.841 0.238 128.85); + --code-color-string: oklch(0.746 0.16 232.661); + --code-font-style-string: italic; + --code-color-variable: oklch(0.673 0.182 276.935); + --code-color-comment: oklch(0.708 0 0); + --code-color-tag: oklch(0.792 0.209 151.711); + --code-color-property: oklch(0.945 0.129 101.54); + --code-font-weight-property: bold; + + /* + * These are variables to style FreeSewing SVG output (drafts, examples, and so on) + */ + --pattern-bg: oklch(0.985 0 0); + --pattern-fabric: oklch(0.205 0 0); + --pattern-lining: oklch(0.696 0.17 162.48); + --pattern-interfacing: oklch(0.708 0 0); + --pattern-canvas: oklch(0.666 0.179 58.318); + --pattern-various: oklch(0.637 0.237 25.331); + --pattern-mark: oklch(0.623 0.214 259.815); + --pattern-contrast: oklch(0.656 0.241 354.308); + --pattern-note: oklch(0.606 0.25 292.717); + + --pattern-color-0: oklch(0.637 0.237 25.331); + --pattern-color-1: oklch(0.723 0.219 149.579); + --pattern-color-2: oklch(0.623 0.214 259.815); + --pattern-color-3: oklch(0.795 0.184 86.047); + --pattern-color-4: oklch(0.656 0.241 354.308); + --pattern-color-5: oklch(0.606 0.25 292.717); + --pattern-color-6: oklch(0.704 0.14 182.503); + --pattern-color-7: oklch(0.769 0.188 70.08); + --pattern-color-8: oklch(0.667 0.295 322.15); + --pattern-color-9: oklch(0.715 0.143 215.221); + + --pattern-text-xs: 0.2rem; + --pattern-text-sm: 0.3rem; + --pattern-text: 0.4rem; + --pattern-text-lg: 0.6rem; + --pattern-text-xl: 0.8rem; + --pattern-text-2xl: 1.5rem; + --pattern-text-3xl: 2rem; + --pattern-text-4xl: 3rem; + + --pattern-scale: 1; + --pattern-stroke-xs: 0.2px; + --pattern-stroke-sm: 0.4px; + --pattern-stroke: 0.7px; + --pattern-stroke-lg: 1.3px; + --pattern-stroke-xl: 2px; + --pattern-stroke-2xl: 4px; + --pattern-stroke-3xl: 6px; + --pattern-stroke-4xl: 8px; + --pattern-stroke-5xl: 12px; + --pattern-stroke-6xl: 16px; + --pattern-stroke-7xl: 20px; + + --pattern-sample-1: oklch(0.637 0.237 25.331); + --pattern-sample-2: oklch(0.705 0.213 47.604); + --pattern-sample-3: oklch(0.795 0.184 86.047); + --pattern-sample-4: oklch(0.768 0.233 130.85); + --pattern-sample-5: oklch(0.696 0.17 162.48); + --pattern-sample-6: oklch(0.715 0.143 215.221); + --pattern-sample-7: oklch(0.623 0.214 259.815); + --pattern-sample-8: oklch(0.606 0.25 292.717); + --pattern-sample-9: oklch(0.667 0.295 322.15); + --pattern-sample-10: oklch(0.645 0.246 16.439); +} diff --git a/packages/studio/template/src/pages/index.js b/packages/studio/template/src/pages/index.js index e3984077b70..115b9cf3416 100644 --- a/packages/studio/template/src/pages/index.js +++ b/packages/studio/template/src/pages/index.js @@ -6,8 +6,8 @@ import { linkClasses } from '@freesewing/utils' import Link from '@docusaurus/Link' const Card = ({ title, children, icon }) => ( -
-

+
+

{title} {icon}

@@ -25,44 +25,44 @@ const meta = { export default function Home() { return ( -
-
- -

+
+
+ +

FreeSewing Studio

-

+

Design your own bespoke sewing patterns

-
+
} + icon={} > -

+

The FreeSewing Studio ships with all FreeSewing designs on board. You can utilize them as they are, or extend them for your own needs.

-

+

The studio is also integrated with the FreeSewing backend, so you can access all your account data, and can store your patterns.

-

+

- Browse Collection + Browse Collection

} + icon={} > -

+

Adding your own custom design {' '} @@ -72,16 +72,16 @@ export default function Home() { .

-

+

You can start a new design from scratch, or start from one of our blocks. Just pick the option you want, and your new design will be added to the studio.

-

+

- Add a new design + Add a new design

diff --git a/packages/studio/template/tailwind-force.html b/packages/studio/template/tailwind-force.html deleted file mode 100644 index f425dd85991..00000000000 --- a/packages/studio/template/tailwind-force.html +++ /dev/null @@ -1,66 +0,0 @@ - - - -
- -
-
-
-
-
-
-
-
-
-
-
- - -

-

-

-

-

-

-

- - - - - - - - - - - - - - - - - - -

-
-
- - -