diff --git a/packages/components/src/DraftSettings/index.js b/packages/components/src/DraftSettings/index.js index 8172b69d2d4..dc101d450c9 100644 --- a/packages/components/src/DraftSettings/index.js +++ b/packages/components/src/DraftSettings/index.js @@ -5,7 +5,7 @@ import { patternInfo, patternList } from "@freesewing/patterns"; import { FormattedMessage } from "react-intl"; import List from "@material-ui/core/List"; import ListSubheader from "@material-ui/core/ListSubheader"; -import CollapsedIcon from "@material-ui/icons/ArrowDropDown"; +import CollapsedIcon from "@material-ui/icons/KeyboardArrowDown"; import ExpandedIcon from "@material-ui/icons/ArrowRight"; import DraftSettingSa from "../DraftSettingSa"; import DraftSettingMargin from "../DraftSettingMargin"; @@ -100,7 +100,7 @@ const DraftSettings = props => { }; return ( - } className="draft-settings gist-side"> + ); }; diff --git a/packages/components/src/FormFieldSlider/index.js b/packages/components/src/FormFieldSlider/index.js index 484b3581b80..b2200f54731 100644 --- a/packages/components/src/FormFieldSlider/index.js +++ b/packages/components/src/FormFieldSlider/index.js @@ -6,7 +6,7 @@ import { withStyles } from "@material-ui/core/styles"; const PaddedSlider = withStyles({ container: { padding: "25px 0", - overflowX: "hidden" // See: https://github.com/mui-org/material-ui/issues/14234 + //overflowX: "hidden" // See: https://github.com/mui-org/material-ui/issues/14234 }, track: { height: "4px" }, thumb: { width: "16px", height: "16px" } diff --git a/packages/components/src/OptionGroup/index.js b/packages/components/src/OptionGroup/index.js index 74dde0576e4..93645b4b80a 100644 --- a/packages/components/src/OptionGroup/index.js +++ b/packages/components/src/OptionGroup/index.js @@ -13,7 +13,7 @@ import { injectIntl } from "react-intl"; const OptionGroup = props => { const update = (name, value) => props.updateValue("option", name, value); - const renderOption = name => { + const renderOption = (name, sub=false) => { let option = props.pattern.config.options[name]; let type = optionType(option); let stringKey = `options.${props.pattern.config.name}.${name}.`; @@ -67,12 +67,14 @@ const OptionGroup = props => { // Subgroup for (let subGroup of Object.keys(name)) { output.push( -

+

-
+ ); + let children = []; for (let option of name[subGroup]) - output.push(renderOption(option)); + children.push(renderOption(option, true)); + output.push(); } } else output.push(renderOption(name)); diff --git a/packages/components/src/OptionPreamble/index.js b/packages/components/src/OptionPreamble/index.js index 66e1d0c02d2..21eb8abb137 100644 --- a/packages/components/src/OptionPreamble/index.js +++ b/packages/components/src/OptionPreamble/index.js @@ -1,6 +1,7 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; import IconButton from "@material-ui/core/IconButton"; +import DownIcon from "@material-ui/icons/KeyboardArrowDown"; import ResetIcon from "@material-ui/icons/SettingsBackupRestore"; import HelpIcon from "@material-ui/icons/Help"; import { injectIntl } from "react-intl"; @@ -17,7 +18,10 @@ const OptionPreamble = props => { flexGrow: 1, margin: "0 0.5rem" }, - right: { margin: "0 0.5rem" } + right: { + margin: 0, + textAlign: "right" + } }; const resetLabel = props.intl.formatMessage({ @@ -31,42 +35,45 @@ const OptionPreamble = props => { return ( -
-
-

{props.title}

-
-
-

- {props.displayValue} -

-
-
-
+

-

{props.desc}

-
+ + {props.title} +

- - - - - - + + {props.displayValue} +
+ +
+
+
+

{props.desc}

+
+
+ + + + + + +
+
+ {props.option}
); diff --git a/packages/components/src/PatternOptionBool/index.js b/packages/components/src/PatternOptionBool/index.js index 3a884f7b977..498ef33f653 100644 --- a/packages/components/src/PatternOptionBool/index.js +++ b/packages/components/src/PatternOptionBool/index.js @@ -5,6 +5,7 @@ import OptionPreamble from "../OptionPreamble"; const PatternOptionBool = props => { const [value, setValue] = useState(props.dflt); + const [expanded, setExpanded] = useState(false); const update = (name, newValue, evt) => { props.updateValue(props.name, newValue); @@ -16,8 +17,21 @@ const PatternOptionBool = props => { props.updateValue(props.name, props.dflt); }; + const toggleExpanded = () => setExpanded(!expanded); + + let option = ( + + ) return ( -
+
  • { title={props.title} id={"po-list-" + props.name} displayValue={value ? props.labels[1] : props.labels[0]} + toggleExpanded={toggleExpanded} + expanded={expanded} reset={reset} showHelp={() => props.triggerAction("showHelp", { @@ -32,17 +48,9 @@ const PatternOptionBool = props => { value: props.name }) } + option={option} /> - -
  • + ); }; diff --git a/packages/components/src/PatternOptionList/index.js b/packages/components/src/PatternOptionList/index.js index e4677eb1823..82c51cd586f 100644 --- a/packages/components/src/PatternOptionList/index.js +++ b/packages/components/src/PatternOptionList/index.js @@ -5,6 +5,7 @@ import OptionPreamble from "../OptionPreamble"; const PatternOptionList = props => { const [value, setValue] = useState(props.dflt); + const [expanded, setExpanded] = useState(false); const update = (name, newValue, evt) => { props.updateValue(props.name, newValue); @@ -16,6 +17,8 @@ const PatternOptionList = props => { props.updateValue(props.name, props.dflt); }; + const toggleExpanded = () => setExpanded(!expanded); + const styles = { container: { display: "flex", @@ -37,9 +40,19 @@ const PatternOptionList = props => { id: stringKey + item, defaultMessage: item }); - + let option = ( + + ) return ( -
    +
  • { id={"po-list-" + props.name} displayValue={list[value]} reset={reset} + toggleExpanded={toggleExpanded} + expanded={expanded} showHelp={() => props.triggerAction("showHelp", { type: "patternOption", value: props.name }) } + option={option} /> - -
  • + ); }; diff --git a/packages/components/src/PatternOptionMillimeter/index.js b/packages/components/src/PatternOptionMillimeter/index.js index 23ceb7b37aa..f704629cdea 100644 --- a/packages/components/src/PatternOptionMillimeter/index.js +++ b/packages/components/src/PatternOptionMillimeter/index.js @@ -13,6 +13,7 @@ import OptionPreamble from "../OptionPreamble"; const PatternOptionMillimeter = props => { const [value, setValue] = useState(props.dflt); const [previousValue, setPreviousValue] = useState(props.dflt); + const [expanded, setExpanded] = useState(false); const update = (name, newValue, evt) => { newValue = roundMm(newValue, props.units); @@ -33,6 +34,8 @@ const PatternOptionMillimeter = props => { props.updateValue(props.name, props.dflt); }; + const toggleExpanded = () => setExpanded(!expanded); + const styles = { container: { display: "flex", @@ -46,8 +49,21 @@ const PatternOptionMillimeter = props => { right: { margin: "0 0.5rem" } }; + let option = ( + + ) + return ( -
    +
  • { id={"po-mm-" + props.name} displayValue={formatMm(value, props.units)} reset={reset} + toggleExpanded={toggleExpanded} + expanded={expanded} showHelp={() => props.triggerAction("showHelp", { type: "patternOption", value: props.name }) } + option={option} /> - -
  • + ); }; diff --git a/packages/components/src/PatternOptionPctDegCount/index.js b/packages/components/src/PatternOptionPctDegCount/index.js index 6d2f8a071d0..f2e06d2edc4 100644 --- a/packages/components/src/PatternOptionPctDegCount/index.js +++ b/packages/components/src/PatternOptionPctDegCount/index.js @@ -31,22 +31,22 @@ const PatternOptionPctDegCount = props => { const toggleExpanded = () => setExpanded(!expanded); - const styles = { - container: { - display: "flex", - flexDirection: "row", - alignItems: "center" - }, - left: { - flexGrow: 1, - margin: "0 0.5rem" - }, - right: { margin: "0 0.5rem" } - }; let unit = ""; if (props.type === "pct") unit = "%"; if (props.type === "deg") unit = "°"; + let option = ( + ) + return (
  • { value: props.name }) } + option={option} /> - {!expanded ? null : ( - - )}
  • ); }; diff --git a/packages/components/src/PatternOptions/index.js b/packages/components/src/PatternOptions/index.js index f72a0d38075..90a7d6cf7bd 100644 --- a/packages/components/src/PatternOptions/index.js +++ b/packages/components/src/PatternOptions/index.js @@ -10,8 +10,7 @@ import { patternInfo, patternList } from "@freesewing/patterns"; import { FormattedMessage } from "react-intl"; import List from "@material-ui/core/List"; import ListSubheader from "@material-ui/core/ListSubheader"; -import CollapsedIcon from "@material-ui/icons/ArrowDropDown"; -import ExpandedIcon from "@material-ui/icons/ArrowRight"; +import DownIcon from "@material-ui/icons/KeyboardArrowDown"; const PatternOptions = props => { const [expanded, setExpanded] = useState([]); @@ -49,11 +48,7 @@ const PatternOptions = props => { output.push(
  • toggleGroup(group)}> - {open ? ( - - ) : ( - - )} +

    {children} diff --git a/packages/css-theme/package.json b/packages/css-theme/package.json index 4173dfcb7df..97e35ee4622 100644 --- a/packages/css-theme/package.json +++ b/packages/css-theme/package.json @@ -22,6 +22,7 @@ "clean": "rimraf ../../dist/css-theme", "nodebuild": "BABEL_ENV=production rollup -c -o ../../dist/css-theme/index.js -f cjs", "modulebuild": "BABEL_ENV=production rollup -c -o ../../dist/css-theme/index.mjs -f es", + "watch": "npx node-sass --watch --output-style compressed src/theme.scss ../../dist/css-theme/theme.css", "build": "npx node-sass --output-style compressed src/theme.scss ../../dist/css-theme/theme.css", "test": "echo \"css-theme: No tests configured. Perhaps you'd like to do this?\" && exit 0", "pubtest": "npm publish --registry http://localhost:6662" diff --git a/packages/css-theme/src/_variables.scss b/packages/css-theme/src/_variables.scss index a2d557581d1..c372c9d773e 100644 --- a/packages/css-theme/src/_variables.scss +++ b/packages/css-theme/src/_variables.scss @@ -1,6 +1,6 @@ $fc-bg-light: $oc-gray-0; $fc-bg-dark: $oc-gray-9; -$fc-notice-light: $oc-lime-9; +$fc-notice-light: $oc-yellow-7; $fc-notice-dark: $oc-lime-3; $fc-hoverbg-light: $oc-gray-1; $fc-hoverbg-dark: $oc-gray-8; diff --git a/packages/css-theme/src/components/_pattern-options.scss b/packages/css-theme/src/components/_pattern-options.scss index 5b1f4059af2..a06f1abf776 100644 --- a/packages/css-theme/src/components/_pattern-options.scss +++ b/packages/css-theme/src/components/_pattern-options.scss @@ -1,49 +1,77 @@ +ul.nav.l1 { overflow-x: hidden;} ul.nav.l1, ul.nav.l2, -ul.nav.l3 { - margin-left: 0.5rem; +ul.nav.l3, +ul.nav.l4 { + margin: 0; padding: 0; @include title-font; } ul.nav li {list-style-type: none;} - +ul.nav p { @include body-font;} +ul.nav.l4 li { padding-left: 0.75rem; } ul.nav h2, ul.nav h3, -ul.nav h4 { +ul.nav h4, +ul.nav h5 { font-weight: normal; display: block; margin: 0; - padding: 0.5rem; + padding: 0.5rem 0.25rem; } -ul.nav h2:hover, ul.nav h3:hover, ul.nav h4:hover { cursor: pointer; background: $fc-hoverbg-light; } ul.nav h2 { font-size: 1.2rem; } -ul.nav h3 { font-size: 1.1rem; } ul.nav h4 { font-size: 1rem; } - -li.zdsfsdfptiongroup-heading, -li.option-headdsg { +ul.nav h5 { font-size: 1rem; padding-left: 1.5rem; font-weight: bold;} +ul.nav h3 { + font-size: 1.1rem; + position: sticky; + top: 0; background: $fc-bg-light; z-index: 3; - h3, h4 { - margin: 0; - svg.collapse-icon { margin-bottom: -5px;} - } } -li.optiongroup-heafsding:hover { - cursor: pointer; - background: $fc-hoverbg-light; +ul.nav span.custom { + color: $fc-notice-light; + font-weight: bold; } +.col-exp { + transition: max-height 0.3s ease-in-out, opacity 0.2s ease 0.2s; +} + +.col-exp.expanded { + margin-top: 0; + opacity: 1; +} +.col-exp.collapsed { + opacity: 0; + max-height: 0; + overflow-y: hidden; +} + +svg.icon-col-exp { + margin-bottom: -5px; + margin-right: 5px; + transition: transform 0.3s ease-in-out, opacity 0.2s ease-in-out; + opacity: 0.4; +} +svg.icon-col-exp.expanded { + transform: scale(-1); + opacity: 1; +} + +ul.nav.l3 div.col-exp { + margin: 0 27px; +} + +button.mini-icon-btn { + margin: 0; + padding: 2px; +} + body.dark { - li.optisdfsdongroup-heading { - background: $fc-bg-dark; - } - li.optiongrsdfsdoup-heading:hover { - background: $fc-hoverbg-dark; - } }