diff --git a/sites/shared/components/workbench/views/exporting/index.mjs b/sites/shared/components/workbench/views/exporting/index.mjs
index 228519999ff..a24eeb0e872 100644
--- a/sites/shared/components/workbench/views/exporting/index.mjs
+++ b/sites/shared/components/workbench/views/exporting/index.mjs
@@ -9,6 +9,7 @@ import {
handleExport,
ns as exportNs,
} from 'shared/components/workbench/exporting/export-handler.mjs'
+import { V3Wip } from 'shared/components/v3-wip.mjs'
export const ns = ['exporting', exportNs]
@@ -45,6 +46,7 @@ export const ExportView = ({ settings, ui, design, Design }) => {
return (
{t('export')}
+
{t('exportPattern-txt')}
{link && (
diff --git a/sites/shared/components/workbench/views/inspect/index.mjs b/sites/shared/components/workbench/views/inspect/index.mjs
index 71afe4bec71..8a0875ad9f2 100644
--- a/sites/shared/components/workbench/views/inspect/index.mjs
+++ b/sites/shared/components/workbench/views/inspect/index.mjs
@@ -3,6 +3,7 @@ import { InspectorPattern } from './inspector/pattern.mjs'
import { DraftMenu, ns as menuNs } from './menu.mjs'
import { objUpdate } from 'shared/utils.mjs'
import { PatternWithMenu, ns as wrapperNs } from '../pattern-with-menu.mjs'
+import { V3Wip } from 'shared/components/v3-wip.mjs'
export const ns = [...menuNs, ...wrapperNs]
@@ -76,24 +77,27 @@ export const InspectView = ({
setSettings,
pattern: output,
menu: (
-
+ <>
+
+
+ >
),
}}
/>
diff --git a/sites/shared/components/workbench/views/logs/index.mjs b/sites/shared/components/workbench/views/logs/index.mjs
index 81dba1326d8..7d556423409 100644
--- a/sites/shared/components/workbench/views/logs/index.mjs
+++ b/sites/shared/components/workbench/views/logs/index.mjs
@@ -5,6 +5,7 @@ import {
ClearAllButton,
ns as coreMenuNs,
} from 'shared/components/workbench/menus/core-settings/index.mjs'
+import { V3Wip } from 'shared/components/v3-wip.mjs'
export const ns = ['logs', ...coreMenuNs]
@@ -88,6 +89,7 @@ export const LogView = ({ pattern, settings, setSettings }) => {
{t('logs')}
+
{Object.entries(logs).map(([type, lines], key) => (
))}
diff --git a/sites/shared/components/workbench/views/print/index.mjs b/sites/shared/components/workbench/views/print/index.mjs
index 5c901e38e43..e8443933daa 100644
--- a/sites/shared/components/workbench/views/print/index.mjs
+++ b/sites/shared/components/workbench/views/print/index.mjs
@@ -13,6 +13,7 @@ import { PrintIcon, RightIcon } from 'shared/components/icons.mjs'
import { LoadingContext } from 'shared/context/loading-context.mjs'
import { useToast } from 'shared/hooks/use-toast.mjs'
import { PatternWithMenu, ns as wrapperNs } from '../pattern-with-menu.mjs'
+import { V3Wip } from 'shared/components/v3-wip.mjs'
const viewNs = ['print', ...exportNs]
export const ns = [...viewNs, ...menuNs, ...wrapperNs]
@@ -114,21 +115,24 @@ export const PrintView = ({
/>
),
menu: (
-
+ <>
+
+
+ >
),
}}
/>
diff --git a/sites/shared/components/workbench/views/save/index.mjs b/sites/shared/components/workbench/views/save/index.mjs
index e88dbde444b..687dbb57fab 100644
--- a/sites/shared/components/workbench/views/save/index.mjs
+++ b/sites/shared/components/workbench/views/save/index.mjs
@@ -10,6 +10,7 @@ import { useToast } from 'shared/hooks/use-toast.mjs'
import { LoadingContext } from 'shared/context/loading-context.mjs'
// Components
import { Spinner } from 'shared/components/spinner.mjs'
+import { V3Wip } from 'shared/components/v3-wip.mjs'
export const ns = ['wbsave']
@@ -245,6 +246,7 @@ export const SaveView = ({ design, settings, from = false }) => {
return (
{t('wbsave:title')}
+
{info.new ?
: null}
{info.edit ?
: null}
diff --git a/sites/shared/components/workbench/views/test/menu.mjs b/sites/shared/components/workbench/views/test/menu.mjs
index 234a1909e49..8f8092f48c4 100644
--- a/sites/shared/components/workbench/views/test/menu.mjs
+++ b/sites/shared/components/workbench/views/test/menu.mjs
@@ -1,6 +1,29 @@
-import { TestOptions, ns as optionsNs } from './options.mjs'
-import { TestMeasurements, ns as measieNs } from './measurements.mjs'
-export const ns = [...optionsNs, ...measieNs]
+import { ns as optionsNs } from './options.mjs'
+import { ns as measieNs } from './measurements.mjs'
+import { Accordion } from 'shared/components/accordion.mjs'
+import { useTranslation } from 'next-i18next'
+import { nsMerge } from 'shared/utils.mjs'
+import { OptionsIcon, MeasieIcon, CommunityIcon } from 'shared/components/icons.mjs'
+import { ListInput } from 'shared/components/inputs.mjs'
+import { optionsMenuStructure } from 'shared/utils.mjs'
+import { V3Wip } from 'shared/components/v3-wip.mjs'
+
+export const ns = nsMerge('workbench', optionsNs, measieNs)
+
+const flattenOptions = (options, list = false, path = []) => {
+ if (list === false) return flattenOptions(optionsMenuStructure(options), new Set())
+
+ for (const [key, option] of Object.entries(options)) {
+ if (key !== 'isGroup') {
+ if (!option.isGroup) list.add({ key, option, path })
+ else list = flattenOptions(option, list, [...path, key])
+ }
+ }
+
+ return list
+}
+
+const spacer =
/
export const TestMenu = ({
design,
@@ -11,22 +34,72 @@ export const TestMenu = ({
account,
DynamicDocs,
}) => {
- const control = account.control
- const menuProps = {
- design,
- patternConfig,
- settings,
- update,
- language,
- account,
- DynamicDocs,
- control,
- }
+ const { t } = useTranslation(ns)
+
+ const allOptions = flattenOptions(patternConfig.options)
return (
-
+
+
+ {t('workbench:testOptions')}
+
+
+ {t('workbench:testOptionsDesc')}
+ >,
+ ({
+ label: [
+ ...option.path.map((p) => (
+ <>
+ {t(`${p}.t`)}
+ {spacer}
+ >
+ )),
+ {t(`${design}:${option.key}.t`)},
+ ],
+ val: option.key,
+ }))}
+ update={(value) => {
+ if (value) update.settings(['sample'], { type: 'option', option: value })
+ else update.settings(['sample'])
+ }}
+ current={settings.sample.option}
+ />,
+ ],
+ [
+ <>
+
+ {t('workbench:testMeasurements')}
+
+
+ {t('workbench:testOptionsDesc')}
+ >,
+ ({
+ label: t(m),
+ val: m,
+ }))}
+ update={(value) => {
+ if (value) update.settings(['sample'], { type: 'measurement', measurement: value })
+ else update.settings(['sample'])
+ }}
+ current={settings.sample.measurement}
+ />,
+ ],
+ [
+ <>
+
+ {t('workbench:testSets')}
+
+
+ {t('workbench:testSetsDesc')}
+ >,
+ ,
+ ],
+ ]}
+ />
)
}
diff --git a/sites/shared/components/workbench/views/view-header.mjs b/sites/shared/components/workbench/views/view-header.mjs
index cbaa2824a94..93819718235 100644
--- a/sites/shared/components/workbench/views/view-header.mjs
+++ b/sites/shared/components/workbench/views/view-header.mjs
@@ -11,6 +11,7 @@ import {
DetailIcon,
IconWrapper,
ClearIcon,
+ ResetIcon,
} from 'shared/components/icons.mjs'
import { ClearAllButton } from 'shared/components/workbench/menus/core-settings/index.mjs'
import { shownHeaderSelector } from 'shared/components/wrappers/header.mjs'
@@ -94,7 +95,7 @@ export const ViewHeader = ({ update, settings, ui, control, setSettings }) => {
'lg:top-24'
)} transition-[top] duration-300 ease-in-out`}
>
-
+
{headerZoomButtons}
@@ -156,7 +157,34 @@ export const ViewHeader = ({ update, settings, ui, control, setSettings }) => {
-
+
+