diff --git a/config/exceptions.yaml b/config/exceptions.yaml
index 3b47dc85614..3dfd00412bd 100644
--- a/config/exceptions.yaml
+++ b/config/exceptions.yaml
@@ -115,6 +115,8 @@ packageJson:
"./hooks/useAccount": "./hooks/useAccount/index.mjs"
"./hooks/useBackend": "./hooks/useBackend/index.mjs"
"./hooks/useControl": "./hooks/useControl/index.mjs"
+ "./hooks/useDesign": "./hooks/useDesign/index.mjs"
+ "./hooks/useDesignTranslation": "./hooks/useDesignTranslation/index.mjs"
"./hooks/useSelection": "./hooks/useSelection/index.mjs"
# Lib
"./lib/RestClient": "./lib/RestClient/index.mjs"
diff --git a/packages/react/components/Editor/components/Accordion.mjs b/packages/react/components/Editor/components/Accordion.mjs
index d31b1cc3243..ea9a068dd20 100644
--- a/packages/react/components/Editor/components/Accordion.mjs
+++ b/packages/react/components/Editor/components/Accordion.mjs
@@ -4,14 +4,14 @@ import React, { useState } from 'react'
* DaisyUI's accordion seems rather unreliable.
* So instead, we handle this in React state
*/
-const getProps = (isActive) => ({
+const getProps = (isActive = false) => ({
className: `tw-p-2 tw-px-4 tw-rounded-lg tw-bg-transparent tw-shadow hover:tw-cursor-pointer
- tw-w-full tw-mt-2 tw-py-4 tw-h-auto tw-content-start tw-text-left tw-bg-opacity-20
+ tw-w-full tw-h-auto tw-content-start tw-text-left tw-bg-opacity-20
${isActive ? 'hover:tw-bg-transparent' : 'hover:tw-bg-secondary hover:tw-bg-opacity-10'}`,
})
const getSubProps = (isActive) => ({
- className: ` tw-p-2 tw-px-4 tw-rounded tw-bg-transparent tw-w-full tw-mt-2 tw-py-4 tw-h-auto
+ className: `tw-p-2 tw-px-4 tw-rounded-none tw-bg-transparent tw-w-full tw-h-auto
tw-content-start tw-bg-secondary tw-text-left tw-bg-opacity-20
${
isActive
diff --git a/packages/react/components/Editor/components/HeaderMenu.mjs b/packages/react/components/Editor/components/HeaderMenu.mjs
index d1d7e0443ed..6fa5598c6ab 100644
--- a/packages/react/components/Editor/components/HeaderMenu.mjs
+++ b/packages/react/components/Editor/components/HeaderMenu.mjs
@@ -14,8 +14,10 @@ import {
ExpandIcon,
ExportIcon,
FixmeIcon,
+ FlagIcon,
KioskIcon,
MenuIcon,
+ OptionsIcon,
PaperlessIcon,
ResetAllIcon,
RightIcon,
@@ -24,24 +26,28 @@ import {
SaIcon,
SaveAsIcon,
SaveIcon,
+ SettingsIcon,
TrashIcon,
+ UiIcon,
UndoIcon,
UnitsIcon,
} from '@freesewing/react/components/Icon'
+import { ButtonFrame } from '@freesewing/react/components/Input'
import { DesignOptionsMenu } from './menus/DesignOptionsMenu.mjs'
import { CoreSettingsMenu } from './menus/CoreSettingsMenu.mjs'
import { UiPreferencesMenu } from './menus/UiPreferencesMenu.mjs'
import { FlagsAccordionEntries } from './Flag.mjs'
+import { UndoStep } from './views/UndosView.mjs'
/*
* Lookup object for header menu icons
*/
const headerMenuIcons = {
- flag: RocketIcon,
- options: RocketIcon,
+ flag: FlagIcon,
+ options: OptionsIcon,
right: RightIcon,
- settings: RocketIcon,
- ui: RocketIcon,
+ settings: SettingsIcon,
+ ui: UiIcon,
}
export const HeaderMenuIcon = (props) => {
@@ -101,7 +107,7 @@ export const HeaderMenuDropdown = (props) => {
setOpen(open === id ? false : id)}
>
{toggle}
@@ -129,11 +135,11 @@ export const HeaderMenuDraftViewDesignOptions = (props) => {
- fixme: pe:designOptions.t
+ Design Options
>
}
>
@@ -146,12 +152,12 @@ export const HeaderMenuDraftViewCoreSettings = (props) => {
return (
- fixme: pe:coreSettings.t
+ Core Settings
>
}
>
@@ -164,12 +170,12 @@ export const HeaderMenuDraftViewUiPreferences = (props) => {
return (
- fixme: pe:uiPreferences.t
+ UI Preferences
>
}
>
@@ -184,7 +190,7 @@ export const HeaderMenuDraftViewFlags = (props) => {
return (
@@ -389,7 +395,7 @@ export const HeaderMenuUndoIcons = (props) => {
- {viewLabels.undo.t}
+ {viewLabels.undos.t}
{undos.length}
@@ -479,18 +485,18 @@ export const HeaderMenuViewMenu = (props) => {
className="tw-mb-1 tw-flex tw-flex-row tw-items-center tw-justify-between tw-w-full"
>
update.view(viewName)}
>
- {viewLabels[viewName]?.t || viewName}
+
+ {viewLabels[viewName]?.t || viewName}
+
)
@@ -511,7 +517,7 @@ export const HeaderMenuViewMenu = (props) => {
>
diff --git a/packages/react/components/Editor/components/menus/Container.mjs b/packages/react/components/Editor/components/menus/Container.mjs
index 13553f83745..74da6f0d16d 100644
--- a/packages/react/components/Editor/components/menus/Container.mjs
+++ b/packages/react/components/Editor/components/menus/Container.mjs
@@ -1,14 +1,16 @@
// Dependencies
import { menuValueWasChanged } from '../../lib/index.mjs'
+import { designOptionType } from '@freesewing/utils'
// Hooks
import React, { useState, useMemo } from 'react'
// Components
import { SubAccordion } from '../Accordion.mjs'
-import { GroupIcon, OptionsIcon } from '@freesewing/react/components/Icon'
+import { EditIcon, GroupIcon, OptionsIcon, ResetIcon } from '@freesewing/react/components/Icon'
import { CoreSettingsMenu } from './CoreSettingsMenu.mjs'
+import { FormControl } from '@freesewing/react/components/Input'
/** @type {String} class to apply to buttons on open menu items */
-const iconButtonClass = 'btn btn-xs btn-ghost px-0 text-accent'
+const iconButtonClass = 'tw-daisy-btn tw-daisy-btn-xs tw-daisy-btn-ghost tw-px-0 tw-text-accent'
/**
* A generic component for handling a menu item.
@@ -37,6 +39,7 @@ export const MenuItem = ({
docs,
config,
Design,
+ i18n,
}) => {
// Local state - whether the override input should be shown
const [override, setOverride] = useState(false)
@@ -78,15 +81,15 @@ export const MenuItem = ({
}}
>
)
const ResetButton = ({ disabled = false }) => (