diff --git a/sites/shared/components/icons.mjs b/sites/shared/components/icons.mjs
index 619d11cea5c..830fdcbe8cd 100644
--- a/sites/shared/components/icons.mjs
+++ b/sites/shared/components/icons.mjs
@@ -282,6 +282,12 @@ export const EmailIcon = (props) => (
)
+export const ExpandIcon = (props) => (
+
+
+
+)
+
export const ExportIcon = (props) => (
diff --git a/sites/shared/components/workbench/gist.mjs b/sites/shared/components/workbench/gist.mjs
index bcec5daad2c..497db143b8e 100644
--- a/sites/shared/components/workbench/gist.mjs
+++ b/sites/shared/components/workbench/gist.mjs
@@ -27,6 +27,7 @@ export const defaultGist = {
margin: 2,
renderer: 'react',
embed: true,
+ expand: false,
}
export const preloadGist = {
diff --git a/sites/shared/components/workbench/menus/core-settings/config.mjs b/sites/shared/components/workbench/menus/core-settings/config.mjs
index ba8c4339b23..ef9d5509011 100644
--- a/sites/shared/components/workbench/menus/core-settings/config.mjs
+++ b/sites/shared/components/workbench/menus/core-settings/config.mjs
@@ -8,6 +8,7 @@ import {
DetailIcon,
IncludeIcon,
MarginIcon,
+ ExpandIcon,
} from 'shared/components/icons.mjs'
export const defaultSamm = (units, inMm = true) => {
@@ -106,6 +107,20 @@ export const loadSettingsConfig = ({
},
icon: DetailIcon,
},
+ expand: {
+ control: 4, // Show when control > 3
+ list: [0, 1],
+ dflt: 0,
+ choiceTitles: {
+ 0: 'expandNo',
+ 1: 'expandYes',
+ },
+ valueTitles: {
+ 0: 'no',
+ 1: 'yes',
+ },
+ icon: ExpandIcon,
+ },
only: {
control: 4, // Show when control > 3
dflt: false,
diff --git a/sites/shared/components/workbench/menus/core-settings/en.yaml b/sites/shared/components/workbench/menus/core-settings/en.yaml
index f4ca2d81e62..1740f71c875 100644
--- a/sites/shared/components/workbench/menus/core-settings/en.yaml
+++ b/sites/shared/components/workbench/menus/core-settings/en.yaml
@@ -9,6 +9,8 @@ sabool.t: Include Seam Allowance
sabool.d: Controls whether or not to include seam allowance in your pattern
complete.t: Details
complete.d: Controls how detailed the pattern is; Either a complete pattern with all details, or a basic outline of the pattern parts
+expand.t: Expand
+expand.d: Controls efforts to save paper. Disable this to expand all pattern parts at the cost of using more space.
only.t: Included Parts
only.d: Use this to control exactly which pattern parts will be included in your pattern
locale.t: Language
@@ -35,6 +37,10 @@ completeYes.t: Generate a complete pattern
completeYes.d: This will generate a complete pattern with all notations, lines, markings. Use this if you are not certain what to choose.
completeNo.t: Generate a pattern outline
completeNo.d: Only generate the outline of the pattern parts. Use this if you are looking to use a lasercutter or have other specific needs.
+expandYes.t: Expand all pattern parts
+expandYes.d: This will generate a pattern where all pattern parts are drawn to their full size, even if they are simple rectangles.
+expandNo.t: Keep patterns parts compact where possible
+expandNo.d: This will draw a more dense representation of the pattern which includes all info without using up too much space & paper.
paperlessNo.t: Generate a regular pattern
paperlessNo.d: This will generate a regular pattern, which you can then print out.
paperlessYes.t: Generate a paperless pattern
diff --git a/sites/shared/components/workbench/menus/core-settings/inputs.mjs b/sites/shared/components/workbench/menus/core-settings/inputs.mjs
index 7767c3799b4..e2c786c0e6d 100644
--- a/sites/shared/components/workbench/menus/core-settings/inputs.mjs
+++ b/sites/shared/components/workbench/menus/core-settings/inputs.mjs
@@ -13,6 +13,7 @@ const OnlySettingInput = (props) => {
export const inputs = {
complete: ListInput,
+ expand: ListInput,
locale: ListInput,
margin: MmInput,
only: OnlySettingInput,
diff --git a/sites/shared/components/workbench/menus/core-settings/values.mjs b/sites/shared/components/workbench/menus/core-settings/values.mjs
index 075957bf321..8cfc51c8299 100644
--- a/sites/shared/components/workbench/menus/core-settings/values.mjs
+++ b/sites/shared/components/workbench/menus/core-settings/values.mjs
@@ -14,6 +14,7 @@ const OnlySettingValue = ({ current, config }) => (
export const values = {
complete: ListValue,
+ expand: ListValue,
locale: ListValue,
margin: MmValue,
only: OnlySettingValue,
diff --git a/sites/shared/components/workbench/views/view-header.mjs b/sites/shared/components/workbench/views/view-header.mjs
index 68be0136588..fe138b83bd6 100644
--- a/sites/shared/components/workbench/views/view-header.mjs
+++ b/sites/shared/components/workbench/views/view-header.mjs
@@ -21,6 +21,7 @@ import {
BookmarkIcon,
ZoomInIcon,
ZoomOutIcon,
+ ExpandIcon,
} from 'shared/components/icons.mjs'
import { shownHeaderSelector } from 'shared/components/wrappers/header.mjs'
@@ -158,6 +159,17 @@ export const ViewHeader = ({ update, settings, ui, control, account, design, set
}
title={t('core-settings:complete.t')}
/>
+
+ update.settings(
+ ['expand'],
+ typeof settings.expand === 'undefined' ? 1 : settings.expand ? 0 : 1
+ )
+ }
+ title={t('core-settings:expand.t')}
+ />