diff --git a/packages/freesewing.shared/components/mdx/example.js b/packages/freesewing.shared/components/mdx/example.js index 940af054e2e..367c518a925 100644 --- a/packages/freesewing.shared/components/mdx/example.js +++ b/packages/freesewing.shared/components/mdx/example.js @@ -4,6 +4,7 @@ import rendertest from '@freesewing/rendertest' import tutorial from '@freesewing/tutorial' import Draft from '@freesewing/components/Draft' import Icon from 'shared/components/icon' +import Pattern from '../../../react-pattern/dist/index.mjs' //import Design from '../Workbench/Design' // const Design = props =>

TODO: Design

@@ -84,7 +85,7 @@ const Example = ({
- +
{children}
diff --git a/packages/freesewing.shared/styles/globals.css b/packages/freesewing.shared/styles/globals.css index 658e5b15c0c..823761f710f 100644 --- a/packages/freesewing.shared/styles/globals.css +++ b/packages/freesewing.shared/styles/globals.css @@ -3,7 +3,6 @@ @tailwind utilities; @import './code.css'; -@import './svg-freesewing-draft.css'; @layer components { @@ -31,22 +30,22 @@ .fs-stroke-mark { stroke: var(--pattern-mark); } .fs-stroke-contrast { stroke: var(--pattern-contrast); } .fs-stroke-note { stroke: var(--pattern-note); } - svg.freesewing.draft path.fabric, - svg.freesewing.draft circle.fabric { @apply fs-stroke-fabric } - svg.freesewing.draft path.lining, - svg.freesewing.draft circle.lining { @apply fs-stroke-lining } - svg.freesewing.draft path.interfacing, - svg.freesewing.draft circle.interfacing { @apply fs-stroke-interfacing } - svg.freesewing.draft path.canvas, - svg.freesewing.draft circle.canvas { @apply fs-stroke-canvas } - svg.freesewing.draft path.various, - svg.freesewing.draft circle.various { @apply fs-stroke-various } - svg.freesewing.draft path.mark, - svg.freesewing.draft circle.mark { @apply fs-stroke-mark } - svg.freesewing.draft path.contrast, - svg.freesewing.draft circle.contrast { @apply fs-stroke-contrast } - svg.freesewing.draft path.note, - svg.freesewing.draft circle.note { @apply fs-stroke-note } + svg.freesewing.pattern path.fabric, + svg.freesewing.pattern circle.fabric { @apply fs-stroke-fabric } + svg.freesewing.pattern path.lining, + svg.freesewing.pattern circle.lining { @apply fs-stroke-lining } + svg.freesewing.pattern path.interfacing, + svg.freesewing.pattern circle.interfacing { @apply fs-stroke-interfacing } + svg.freesewing.pattern path.canvas, + svg.freesewing.pattern circle.canvas { @apply fs-stroke-canvas } + svg.freesewing.pattern path.various, + svg.freesewing.pattern circle.various { @apply fs-stroke-various } + svg.freesewing.pattern path.mark, + svg.freesewing.pattern circle.mark { @apply fs-stroke-mark } + svg.freesewing.pattern path.contrast, + svg.freesewing.pattern circle.contrast { @apply fs-stroke-contrast } + svg.freesewing.pattern path.note, + svg.freesewing.pattern circle.note { @apply fs-stroke-note } .fs-fill-fabric { fill: var(--pattern-fabric); } .fs-fill-lining { fill: var(--pattern-lining); } .fs-fill-interfacing { fill: var(--pattern-interfacing); } @@ -55,47 +54,47 @@ .fs-fill-mark { fill: var(--pattern-mark); } .fs-fill-contrast { fill: var(--pattern-contrast); } .fs-fill-note { fill: var(--pattern-note); } - svg.freesewing.draft path.fill-fabric, - svg.freesewing.draft text.fill-fabric, - svg.freesewing.draft tspan.fill-fabric, - svg.freesewing.draft circle.fill-fabric { @apply fs-fill-fabric } - svg.freesewing.draft text.fill-lining, - svg.freesewing.draft tspan.fill-lining, - svg.freesewing.draft path.fill-lining, - svg.freesewing.draft circle.fill-lining { @apply fs-fill-lining } - svg.freesewing.draft text.fill-interfacing, - svg.freesewing.draft tspan.fill-interfacing, - svg.freesewing.draft path.fill-interfacing, - svg.freesewing.draft circle.fill-interfacing { @apply fs-fill-interfacing } - svg.freesewing.draft text.fill-canvas, - svg.freesewing.draft tspan.fill-canvas, - svg.freesewing.draft path.fill-canvas, - svg.freesewing.draft circle.fill-canvas { @apply fs-fill-canvas } - svg.freesewing.draft text.fill-various, - svg.freesewing.draft tspan.fill-various, - svg.freesewing.draft path.fill-various, - svg.freesewing.draft circle.fill-various { @apply fs-fill-various } - svg.freesewing.draft path.fill-mark, - svg.freesewing.draft text.fill-mark, - svg.freesewing.draft tspan.fill-mark, - svg.freesewing.draft circle.fill-mark { @apply fs-fill-mark } - svg.freesewing.draft text.fill-contrast, - svg.freesewing.draft tspan.fill-contrast, - svg.freesewing.draft path.fill-contrast, - svg.freesewing.draft circle.fill-contrast { @apply fs-fill-contrast } - svg.freesewing.draft text.fill-note, - svg.freesewing.draft tspan.fill-note, - svg.freesewing.draft path.fill-note, - svg.freesewing.draft circle.fill-note { @apply fs-fill-note } + svg.freesewing.pattern path.fill-fabric, + svg.freesewing.pattern text.fill-fabric, + svg.freesewing.pattern tspan.fill-fabric, + svg.freesewing.pattern circle.fill-fabric { @apply fs-fill-fabric } + svg.freesewing.pattern text.fill-lining, + svg.freesewing.pattern tspan.fill-lining, + svg.freesewing.pattern path.fill-lining, + svg.freesewing.pattern circle.fill-lining { @apply fs-fill-lining } + svg.freesewing.pattern text.fill-interfacing, + svg.freesewing.pattern tspan.fill-interfacing, + svg.freesewing.pattern path.fill-interfacing, + svg.freesewing.pattern circle.fill-interfacing { @apply fs-fill-interfacing } + svg.freesewing.pattern text.fill-canvas, + svg.freesewing.pattern tspan.fill-canvas, + svg.freesewing.pattern path.fill-canvas, + svg.freesewing.pattern circle.fill-canvas { @apply fs-fill-canvas } + svg.freesewing.pattern text.fill-various, + svg.freesewing.pattern tspan.fill-various, + svg.freesewing.pattern path.fill-various, + svg.freesewing.pattern circle.fill-various { @apply fs-fill-various } + svg.freesewing.pattern path.fill-mark, + svg.freesewing.pattern text.fill-mark, + svg.freesewing.pattern tspan.fill-mark, + svg.freesewing.pattern circle.fill-mark { @apply fs-fill-mark } + svg.freesewing.pattern text.fill-contrast, + svg.freesewing.pattern tspan.fill-contrast, + svg.freesewing.pattern path.fill-contrast, + svg.freesewing.pattern circle.fill-contrast { @apply fs-fill-contrast } + svg.freesewing.pattern text.fill-note, + svg.freesewing.pattern tspan.fill-note, + svg.freesewing.pattern path.fill-note, + svg.freesewing.pattern circle.fill-note { @apply fs-fill-note } .fs-fill-bg { fill: var(--pattern-bg); } .fs-fill-current { fill: currentColor; } - svg.freesewing.draft .fill-bg { @apply fs-fill-bg } - svg.freesewing.draft .fill-current { @apply fs-fill-current } + svg.freesewing.pattern .fill-bg { @apply fs-fill-bg } + svg.freesewing.pattern .fill-current { @apply fs-fill-current } } - +/* Style for navigation */ details { user-select: none; } details > summary > svg.details-toggle { transform: rotate(90deg); @@ -114,4 +113,6 @@ summary::-webkit-details-marker { display: none; } +/* Style for patterns */ +@import './svg-freesewing-draft.css'; diff --git a/packages/freesewing.shared/styles/svg-freesewing-draft.css b/packages/freesewing.shared/styles/svg-freesewing-draft.css index 2f7932548de..099b126518e 100644 --- a/packages/freesewing.shared/styles/svg-freesewing-draft.css +++ b/packages/freesewing.shared/styles/svg-freesewing-draft.css @@ -1,101 +1,58 @@ -svg.freesewing.draft { +svg.freesewing.pattern { + + /* Don't let the SVG surpass the parent container */ max-width: 100%; + /* Reset */ - path, - circle { - fill: none; - stroke: none; - } + path, circle { fill: none; stroke: none; } /* Defaults */ path, circle { stroke-opacity: 1; - stroke-width: 0.7; + stroke-width: calc(var(--pattern-stroke) * var(--pattern-scale)); stroke-linecap: round; stroke-linejoin: round; } - /* Stroke classes */ - .stroke-xs { - stroke-width: 0.1; - } - .stroke-sm { - stroke-width: 0.4; - } - .stroke-lg { - stroke-width: 1.3; - } - .stroke-xl { - stroke-width: 2; - } - .stroke-xxl { - stroke-width: 4; - } + /* Stroke width utility classes */ + .stroke-xs { stroke-width: calc(var(--pattern-stroke-xs) * var(--pattern-scale)); } + .stroke-sm { stroke-width: calc(var(--pattern-stroke-sm) * var(--pattern-scale)); } + .stroke-lg { stroke-width: calc(var(--pattern-stroke-lg) * var(--pattern-scale)); } + .stroke-xl { stroke-width: calc(var(--pattern-stroke-xl) * var(--pattern-scale)); } + .stroke-2xl { stroke-width: calc(var(--pattern-stroke-2xl) * var(--pattern-scale)); } - .sa { - stroke-dasharray: 1, 3; - } - .help { - stroke-width: 0.6; - stroke-dasharray: 15, 5, 2, 5; - } - .dotted { - stroke-dasharray: 0.5, 1; - } - .dashed { - stroke-dasharray: 2, 2; - } - .lashed { - stroke-dasharray: 8, 3; - } - .hidden { - stroke: none !important; - fill: none !important; - } + /* Stroke dasharray utility classes */ + .sa { stroke-dasharray: 1, 3; } + .help { stroke-dasharray: 15, 5, 2, 5; } + .dotted { stroke-dasharray: 0.5, 1; } + .dashed { stroke-dasharray: 2, 2; } + .lashed { stroke-dasharray: 8, 3; } + + /* Hidden */ + .hidden { stroke: none !important; fill: none !important; } /* Text */ text { - font-size: 6px; - @include title-font; + font-size: calc(var(--pattern-text) * var(--pattern-scale)); text-anchor: start; - font-weight: 400; + font-weight: normal; + fill: currentColor; dominant-baseline: ideographic; } - .text-xs { - font-size: 4px; - } - .text-sm { - font-size: 5px; - } - .text-l { - font-size: 8px; - } - .text-xl { - font-size: 10px; - } - .text-xxl { - font-size: 13px; - } + .text-xs { font-size: calc(var(--pattern-text-xs) * var(--pattern-scale)); } + .text-sm { font-size: calc(var(--pattern-text-sm) * var(--pattern-scale)); } + .text-lg { font-size: calc(var(--pattern-text-lg) * var(--pattern-scale)); } + .text-xl { font-size: calc(var(--pattern-text-xl) * var(--pattern-scale)); } + .text-2xl { font-size: calc(var(--pattern-text-2xl) * var(--pattern-scale)); } + .text-3xl { font-size: calc(var(--pattern-text-3xl) * var(--pattern-scale)); } + .text-4xl { font-size: calc(var(--pattern-text-4xl) * var(--pattern-scale)); } + .text-5xl { font-size: calc(var(--pattern-text-5xl) * var(--pattern-scale)); } + .bold { font-weight: bold; } - .center { - text-anchor: middle; - } - .right { - text-anchor: end; - } + .center { text-anchor: middle; } + .right { text-anchor: end; } - .scribble { - @include scribble-font; - } - - /* Plugins */ - text.title-nr { - font-size: 32px; - @include title-font; - font-weight: 700; - stroke: none; - } /* New style for sampled sizes */ path.size-3XS, path.size-2XS, @@ -115,244 +72,20 @@ svg.freesewing.draft { } } -svg.freesewing.draft text { - fill: currentColor; -} -.theme-wrapper.light svg.freesewing.draft { - /* Stroke classes */ - path, - circle { - stroke: $fc-draft-fabric-light; - } - .fabric { - stroke: $fc-draft-fabric-light; - } - .lining { - stroke: $fc-draft-lining-light; - } - .interfacing { - stroke: $fc-draft-interfacing-light; - } - .canvas { - stroke: $fc-draft-canvas-light; - } - .various { - stroke: $fc-draft-various-light; - } - .mark { - stroke: $fc-draft-mark-light; - } - .contrast { - stroke: $fc-draft-contrast-light; - } - .note { - stroke: $fc-draft-note-light; - } - /* Fill classes */ - .fill-fabric { - fill: $fc-draft-fabric-light; - } - .fill-lining { - fill: $fc-draft-lining-light; - } - .fill-interfacing { - fill: $fc-draft-interfacing-light; - } - .fill-canvas { - fill: $fc-draft-canvas-light; - } - .fill-various { - fill: $fc-draft-various-light; - } - .fill-mark { - fill: $fc-draft-mark-light; - } - .fill-contrast { - fill: $fc-draft-contrast-light; - } - .fill-note { - fill: $fc-draft-note-light; - } - .fill-bg { - fill: $fc-bg-light; - } - path.sample-focus { - fill: #000; - } - /* scalebox plugin */ - path.scalebox.metric { - stroke: none; - fill: $fc-bg-light; - } - path.scalebox.imperial { - stroke: none; - fill: $fc-bg-dark; - } - path.bartack { - stroke: $fc-draft-mark-light; - } - path.logo { - fill: currentColor; - stroke: none; - } - /* New style for sampled sizes */ - path.made-to-measure { - stroke: #212529; - } - path.size-3XS { - stroke: $oc-lime-6; - } - path.size-2XS { - stroke: $oc-orange-6; - } - path.size-XS { - stroke: $oc-grape-6; - } - path.size-S { - stroke: $oc-indigo-6; - } - path.size-M { - stroke: $oc-cyan-6; - } - path.size-L { - stroke: $oc-indigo-6; - } - path.size-XL { - stroke: $oc-grape-6; - } - path.size-2XL { - stroke: $oc-orange-6; - } - path.size-3XL { - stroke: $oc-lime-6; - } - path.size-4XL { - stroke: $oc-teal-6; - } -} -.theme-wrapper.dark svg.freesewing.draft { - /* Stroke classes */ - path, - circle { - stroke: $fc-draft-fabric-dark; - } - .fabric { - stroke: $fc-draft-fabric-dark; - } - .lining { - stroke: $fc-draft-lining-dark; - } - .interfacing { - stroke: $fc-draft-interfacing-dark; - } - .canvas { - stroke: $fc-draft-canvas-dark; - } - .various { - stroke: $fc-draft-various-dark; - } - .mark { - stroke: $fc-draft-mark-dark; - } - .contrast { - stroke: $fc-draft-contrast-dark; - } - .note { - stroke: $fc-draft-note-dark; - } - /* Fill classes */ - .fill-fabric { - fill: $fc-draft-fabric-dark; - } - .fill-lining { - fill: $fc-draft-lining-dark; - } - .fill-interfacing { - fill: $fc-draft-interfacing-dark; - } - .fill-canvas { - fill: $fc-draft-canvas-dark; - } - .fill-various { - fill: $fc-draft-various-dark; - } - .fill-mark { - fill: $fc-draft-mark-dark; - } - .fill-contrast { - fill: $fc-draft-contrast-dark; - } - .fill-note { - fill: $fc-draft-note-dark; - } - .fill-bg { - fill: $fc-bg-dark; - } - path.sample-focus { - fill: #fff; - } - /* scalebox plugin */ - path.scalebox.metric { - stroke: none; - fill: $fc-bg-dark; - } - path.scalebox.imperial { - stroke: none; - fill: $fc-bg-light; - } - path.bartack { - stroke: $fc-draft-mark-dark; - } - path.logo { - fill: currentColor; - stroke: none; - } - /* New style for sampled sizes */ - path.made-to-measure { - stroke: #f8f9fa; - } - path.size-3XS { - stroke: $oc-lime-3; - } - path.size-2XS { - stroke: $oc-orange-3; - } - path.size-XS { - stroke: $oc-grape-3; - } - path.size-S { - stroke: $oc-indigo-3; - } - path.size-M { - stroke: $oc-cyan-3; - } - path.size-L { - stroke: $oc-indigo-3; - } - path.size-XL { - stroke: $oc-grape-3; - } - path.size-2XL { - stroke: $oc-orange-3; - } - path.size-3XL { - stroke: $oc-lime-3; - } - path.size-4XL { - stroke: $oc-teal-3; - } -} +/* Styling the shadow DOM is hard to do + * This is for styling FreeSewing snippets + * TODO: Update snippets to use inline styles with CSS vars + */ +g#buttonhole path.note, +g#notch circle.note, +g#bnotch path.note, +g#bnotch circle.note { + stroke: var(--pattern-note); + fill: none; + } +g#notch circle.fill-note, +g#bnotch circle.fill-note { fill: var(--pattern-note); } -/* SVG defs (snippets) are in the shadow DOM */ -g.snippet.notch > circle, -g.snippet.button > circle, -g.snippet.buttonhole > path { - color: $fc-draft-mark-light; -} -g.snippet.bnotch > circle, -g.snippet.bnotch > path { - color: $fc-draft-note-light; -} /* Same for paperless grid, also in shadow DOM */ rect.grid { stroke-width: 1; @@ -381,15 +114,3 @@ path.gridline.imperial { path.gridline.imperial.sm { stroke-dasharray: 2 2; } -.light { - rect.grid, - path.gridline { - color: $oc-gray-5 !important; - } -} -.dark { - rect.grid, - path.gridline { - color: $oc-gray-6 !important; - } -} diff --git a/packages/freesewing.shared/themes/dark/index.js b/packages/freesewing.shared/themes/dark/index.js index 1bb621d1e59..741f69a716c 100644 --- a/packages/freesewing.shared/themes/dark/index.js +++ b/packages/freesewing.shared/themes/dark/index.js @@ -61,4 +61,11 @@ module.exports = { '--pattern-contrast': colors.pink['600'], '--pattern-note': colors.violet['600'], + '--pattern-scale': 1, + '--pattern-stroke-xs': "0.2", + '--pattern-stroke-sm': "0.4", + '--pattern-stroke': "0.7", + '--pattern-stroke-lg': "1.3", + '--pattern-stroke-xl': "2", + '--pattern-stroke-xxl': "4", } diff --git a/packages/freesewing.shared/themes/hax0r/index.js b/packages/freesewing.shared/themes/hax0r/index.js index a5fdf6486a2..065c380c703 100644 --- a/packages/freesewing.shared/themes/hax0r/index.js +++ b/packages/freesewing.shared/themes/hax0r/index.js @@ -70,4 +70,11 @@ module.exports = { '--pattern-contrast': colors.pink['500'], '--pattern-note': colors.violet['500'], + '--pattern-scale': 1, + '--pattern-stroke-xs': "0.2", + '--pattern-stroke-sm': "0.4", + '--pattern-stroke': "0.7", + '--pattern-stroke-lg': "1.3", + '--pattern-stroke-xl': "2", + '--pattern-stroke-xxl': "4", } diff --git a/packages/freesewing.shared/themes/lgbtq/index.js b/packages/freesewing.shared/themes/lgbtq/index.js index c7aae0ed8d0..21a19ad1dbf 100644 --- a/packages/freesewing.shared/themes/lgbtq/index.js +++ b/packages/freesewing.shared/themes/lgbtq/index.js @@ -60,5 +60,13 @@ module.exports = { '--pattern-mark': colors.blue['500'], '--pattern-contrast': colors.pink['500'], '--pattern-note': colors.violet['500'], + + '--pattern-scale': 1, + '--pattern-stroke-xs': "0.2", + '--pattern-stroke-sm': "0.4", + '--pattern-stroke': "0.7", + '--pattern-stroke-lg': "1.3", + '--pattern-stroke-xl': "2", + '--pattern-stroke-xxl': "4", } diff --git a/packages/freesewing.shared/themes/light/index.js b/packages/freesewing.shared/themes/light/index.js index 23f199c4958..093af234198 100644 --- a/packages/freesewing.shared/themes/light/index.js +++ b/packages/freesewing.shared/themes/light/index.js @@ -152,7 +152,7 @@ module.exports = { '--code-color-property': 'inherit', '--code-font-weight-property': 'bold', - /* FREESEWING PATTERN COLORS + /* FREESEWING PATTERN THEMEING * * These are variables to style FreeSewing SVG output (drafts, examples, and so on) */ @@ -176,4 +176,36 @@ module.exports = { // Color for noting things on a pattern '--pattern-note': colors.violet['500'], + // Pattern xs text size + '--pattern-text-xs': '0.2rem', + // Pattern sm text size + '--pattern-text-sm': '0.3rem', + // Pattern default text size + '--pattern-text': '0.4rem', + // Pattern lg text size + '--pattern-text-lg': '0.6rem', + // Pattern xl text size + '--pattern-text-xl': '0.8rem', + // Pattern 2xl text size + '--pattern-text-2xl': '1.5rem', + // Pattern 3xl text size + '--pattern-text-3xl': '2rem', + // Pattern 4xl text size + '--pattern-text-4xl': '3rem', + + // Pattern overal scale for strokes and text sizes + '--pattern-scale': '1', + // Pattern xs stroke width + '--pattern-stroke-xs': "0.2px", + // Pattern sm stroke width + '--pattern-stroke-sm': "0.4px", + // Pattern default stroke width + '--pattern-stroke': "0.7px", + // Pattern lg stroke width + '--pattern-stroke-lg': "1.3px", + // Pattern xl stroke width + '--pattern-stroke-xl': "2px", + // Pattern xxl stroke width + '--pattern-stroke-2xl': "4px", + } diff --git a/packages/freesewing.shared/themes/trans/index.js b/packages/freesewing.shared/themes/trans/index.js index c7aae0ed8d0..21a19ad1dbf 100644 --- a/packages/freesewing.shared/themes/trans/index.js +++ b/packages/freesewing.shared/themes/trans/index.js @@ -60,5 +60,13 @@ module.exports = { '--pattern-mark': colors.blue['500'], '--pattern-contrast': colors.pink['500'], '--pattern-note': colors.violet['500'], + + '--pattern-scale': 1, + '--pattern-stroke-xs': "0.2", + '--pattern-stroke-sm': "0.4", + '--pattern-stroke': "0.7", + '--pattern-stroke-lg': "1.3", + '--pattern-stroke-xl': "2", + '--pattern-stroke-xxl': "4", }