@configura/web-ui 1.3.0-alpha.5 → 1.3.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.postcssrc.json +8 -8
- package/LICENSE +201 -201
- package/README.md +1 -1
- package/dist/components/CanvasWrapper.d.ts +9 -9
- package/dist/components/CanvasWrapper.js +8 -8
- package/dist/components/ConfigurationActionsButtonRow.d.ts +11 -11
- package/dist/components/ConfigurationActionsButtonRow.js +13 -13
- package/dist/components/Configurator.d.ts +12 -12
- package/dist/components/Configurator.js +15 -15
- package/dist/components/ConfiguratorWrapper.d.ts +8 -8
- package/dist/components/ConfiguratorWrapper.js +5 -5
- package/dist/components/CurrencyPrice.d.ts +9 -9
- package/dist/components/CurrencyPrice.js +7 -7
- package/dist/components/ExpandableHeadingRow.d.ts +15 -15
- package/dist/components/ExpandableHeadingRow.js +21 -21
- package/dist/components/Loading.d.ts +13 -13
- package/dist/components/Loading.js +20 -20
- package/dist/components/ProductInformation.d.ts +10 -10
- package/dist/components/ProductInformation.js +23 -23
- package/dist/components/icons/Checkmark.d.ts +5 -5
- package/dist/components/icons/Checkmark.js +12 -12
- package/dist/components/icons/Chevron.d.ts +6 -6
- package/dist/components/icons/Chevron.js +18 -18
- package/dist/components/productConfiguration/CfgAdditionalProductView.d.ts +3 -3
- package/dist/components/productConfiguration/CfgAdditionalProductView.js +28 -28
- package/dist/components/productConfiguration/CfgCheckboxView.d.ts +18 -18
- package/dist/components/productConfiguration/CfgCheckboxView.js +22 -22
- package/dist/components/productConfiguration/CfgCheckboxesView.d.ts +12 -12
- package/dist/components/productConfiguration/CfgCheckboxesView.js +18 -18
- package/dist/components/productConfiguration/CfgDropdownOptionView.d.ts +18 -18
- package/dist/components/productConfiguration/CfgDropdownOptionView.js +35 -35
- package/dist/components/productConfiguration/CfgDropdownView.d.ts +12 -12
- package/dist/components/productConfiguration/CfgDropdownView.js +20 -20
- package/dist/components/productConfiguration/CfgFeatureView.d.ts +27 -27
- package/dist/components/productConfiguration/CfgFeatureView.js +34 -34
- package/dist/components/productConfiguration/CfgGroupView.d.ts +4 -4
- package/dist/components/productConfiguration/CfgGroupView.js +13 -13
- package/dist/components/productConfiguration/CfgOptionFeaturesView.d.ts +6 -6
- package/dist/components/productConfiguration/CfgOptionFeaturesView.js +13 -13
- package/dist/components/productConfiguration/CfgOptionNumericView.d.ts +27 -27
- package/dist/components/productConfiguration/CfgOptionNumericView.js +117 -116
- package/dist/components/productConfiguration/CfgOptionPriceView.d.ts +9 -9
- package/dist/components/productConfiguration/CfgOptionPriceView.js +29 -29
- package/dist/components/productConfiguration/CfgProductConfigurationView.d.ts +18 -18
- package/dist/components/productConfiguration/CfgProductConfigurationView.js +45 -45
- package/dist/css/web-ui.css +1 -1
- package/dist/css/web-ui.css.map +1 -1
- package/dist/index.d.ts +20 -20
- package/dist/index.js +20 -20
- package/dist/scss/_button.scss +36 -36
- package/dist/scss/_configurator.scss +67 -67
- package/dist/scss/_expandable.scss +37 -37
- package/dist/scss/_feature-item.scss +124 -124
- package/dist/scss/_hr.scss +16 -16
- package/dist/scss/_loading.scss +98 -98
- package/dist/scss/_mixins.scss +56 -56
- package/dist/scss/_option-tree.scss +29 -29
- package/dist/scss/_product-information.scss +49 -49
- package/dist/scss/_range-view.scss +28 -20
- package/dist/scss/_slider.scss +70 -70
- package/dist/scss/_themed.scss +124 -124
- package/dist/scss/_utilities.scss +21 -21
- package/dist/scss/_variables.scss +6 -6
- package/dist/scss/icons/_checkmark.scss +46 -46
- package/dist/scss/icons/_chevron.scss +62 -62
- package/dist/scss/web-ui.scss +11 -11
- package/dist/useObservable.d.ts +4 -4
- package/dist/useObservable.js +18 -18
- package/dist/useRerender.d.ts +1 -1
- package/dist/useRerender.js +5 -5
- package/dist/useResize.d.ts +6 -6
- package/dist/useResize.js +47 -47
- package/dist/useSelected.d.ts +2 -2
- package/dist/useSelected.js +13 -13
- package/dist/useUniqueId.d.ts +1 -1
- package/dist/useUniqueId.js +7 -7
- package/dist/utilities.d.ts +5 -5
- package/dist/utilities.js +1 -1
- package/package.json +3 -3
|
@@ -1,116 +1,117 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { NumericValueDiscrete, NumericValueRangeDefinition } from "@configura/web-api";
|
|
11
|
-
import React, { useEffect, useState } from "react";
|
|
12
|
-
import { useRerender } from "../../useRerender.js";
|
|
13
|
-
import { useUuid } from "../../useUniqueId.js";
|
|
14
|
-
import { Checkmark } from "../icons/Checkmark.js";
|
|
15
|
-
export const CfgOptionNumericView = (props) => {
|
|
16
|
-
const { option } = props;
|
|
17
|
-
const { isUseNumericValue } = option;
|
|
18
|
-
// Contrary to most other components this one has its own connection to the
|
|
19
|
-
// option that is backing it. This is for it to be able to "live" update
|
|
20
|
-
// as we drag sliders. The value is not "commited" at immediate drag, and so
|
|
21
|
-
// the full machinery of validations and such is not run until later.
|
|
22
|
-
const rerender = useRerender();
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
option.listenForChange(rerender);
|
|
25
|
-
return () => {
|
|
26
|
-
option.stopListenForChange(rerender);
|
|
27
|
-
};
|
|
28
|
-
}, [option, rerender]);
|
|
29
|
-
if (!isUseNumericValue) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
const { allowedNumericValues, numericValue, unit } = option;
|
|
33
|
-
if (allowedNumericValues === undefined) {
|
|
34
|
-
throw new Error("AllowedNumericValues undefined for numeric option");
|
|
35
|
-
}
|
|
36
|
-
if (numericValue === undefined) {
|
|
37
|
-
throw new Error("Numeric value not set for numeric option");
|
|
38
|
-
}
|
|
39
|
-
const { ranges } = allowedNumericValues;
|
|
40
|
-
const isSingleRange = ranges.length === 1;
|
|
41
|
-
if (isSingleRange && ranges[0] instanceof NumericValueDiscrete) {
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
return (React.createElement("ul", { className: `cfgOptionTree cfgOptionTree--subLevel cfgOptionTree--indent ${props.className || ""}`, style: props.style }, ranges.map((range) => (React.createElement(NumericValueView, { currentValue: numericValue, unit: unit, range: range, key: range.first, hasNoSiblings: isSingleRange, updateValue: (value, commit) => __awaiter(void 0, void 0, void 0, function* () { return yield option.setNumericValue(value, commit); }) })))));
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* Displays GUI for selecting in one "range". Please note that the range
|
|
48
|
-
* parameter can also be a discrete value.
|
|
49
|
-
*/
|
|
50
|
-
export const NumericValueView = (props) => {
|
|
51
|
-
const { range, currentValue, updateValue, hasNoSiblings } = props;
|
|
52
|
-
const { legend, first } = range;
|
|
53
|
-
const selected = range.includesValue(currentValue);
|
|
54
|
-
const optionClasses = selected ? "cfgFeatureItemOption--checked" : "";
|
|
55
|
-
const uniqueId = useUuid();
|
|
56
|
-
const [inputValue, setInputValue] = useState(first);
|
|
57
|
-
const [inputCommited, setInputCommited] = useState(true);
|
|
58
|
-
const [showRangeError, setShowRangeError] = useState(false);
|
|
59
|
-
if (inputCommited && inputValue !== currentValue && range.includesValue(currentValue)) {
|
|
60
|
-
setInputValue(currentValue);
|
|
61
|
-
}
|
|
62
|
-
function isAcceptableValue(value) {
|
|
63
|
-
return !isNaN(value) && range.includesValue(value);
|
|
64
|
-
}
|
|
65
|
-
return (React.createElement("li", { className: `cfgFeatureItem cfgMb1 ${hasNoSiblings ? "" : "cfgMt1"}` },
|
|
66
|
-
!hasNoSiblings && (React.createElement("label", { className: `cfgFeatureItemOption ${optionClasses}`, htmlFor: uniqueId },
|
|
67
|
-
React.createElement("input", { checked: selected, className: "cfgFeatureItem__hiddenInput", id: uniqueId, name: uniqueId, onChange: (event) => {
|
|
68
|
-
if (event.target.checked) {
|
|
69
|
-
updateValue(inputValue, true);
|
|
70
|
-
}
|
|
71
|
-
}, type: "radio", value: first }),
|
|
72
|
-
React.createElement("div", { className: "cfgFeatureItem__radio" }, selected && React.createElement(Checkmark, null)),
|
|
73
|
-
React.createElement("div", { className: "cfgFeatureItemOption__titleWrapper" },
|
|
74
|
-
React.createElement("div", { className: "cfgFeatureItemOption__title" }, legend)))),
|
|
75
|
-
selected && range instanceof NumericValueRangeDefinition && (React.createElement(RangeView, Object.assign({}, props, { className: hasNoSiblings ? undefined : "cfgOptionTree--indent", range: range, onChange: (val, instantUpdate) => {
|
|
76
|
-
setInputValue(val);
|
|
77
|
-
if (!isAcceptableValue(inputValue)) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (instantUpdate) {
|
|
81
|
-
updateValue(val, false);
|
|
82
|
-
}
|
|
83
|
-
setShowRangeError(false);
|
|
84
|
-
setInputCommited(false);
|
|
85
|
-
}, onCommit: () => {
|
|
86
|
-
if (inputCommited) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (!isAcceptableValue(inputValue)) {
|
|
90
|
-
setShowRangeError(true);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
updateValue(inputValue, true);
|
|
94
|
-
setShowRangeError(false);
|
|
95
|
-
setInputCommited(true);
|
|
96
|
-
}, inputValue: inputValue, showRangeError: showRangeError })))));
|
|
97
|
-
};
|
|
98
|
-
export const RangeView = (props) => {
|
|
99
|
-
const { currentValue, unit, inputValue, range, onChange, onCommit, showRangeError } = props;
|
|
100
|
-
const { minValue, maxValue, increment, legend } = range;
|
|
101
|
-
const getOnChange = (instant) => (event) => onChange(event.currentTarget.valueAsNumber, instant);
|
|
102
|
-
const inputProps = {
|
|
103
|
-
min: minValue,
|
|
104
|
-
max: maxValue,
|
|
105
|
-
step: increment || Math.pow(10, Math.round(Math.log10(maxValue - minValue)) - 3),
|
|
106
|
-
onBlur: onCommit,
|
|
107
|
-
onMouseUp: onCommit,
|
|
108
|
-
};
|
|
109
|
-
return (React.createElement("div", { className: `cfgRangeView cfgMt1 ${props.className || ""}`, style: props.style },
|
|
110
|
-
React.createElement("
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { NumericValueDiscrete, NumericValueRangeDefinition } from "@configura/web-api";
|
|
11
|
+
import React, { useEffect, useState } from "react";
|
|
12
|
+
import { useRerender } from "../../useRerender.js";
|
|
13
|
+
import { useUuid } from "../../useUniqueId.js";
|
|
14
|
+
import { Checkmark } from "../icons/Checkmark.js";
|
|
15
|
+
export const CfgOptionNumericView = (props) => {
|
|
16
|
+
const { option } = props;
|
|
17
|
+
const { isUseNumericValue } = option;
|
|
18
|
+
// Contrary to most other components this one has its own connection to the
|
|
19
|
+
// option that is backing it. This is for it to be able to "live" update
|
|
20
|
+
// as we drag sliders. The value is not "commited" at immediate drag, and so
|
|
21
|
+
// the full machinery of validations and such is not run until later.
|
|
22
|
+
const rerender = useRerender();
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
option.listenForChange(rerender);
|
|
25
|
+
return () => {
|
|
26
|
+
option.stopListenForChange(rerender);
|
|
27
|
+
};
|
|
28
|
+
}, [option, rerender]);
|
|
29
|
+
if (!isUseNumericValue) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const { allowedNumericValues, numericValue, unit } = option;
|
|
33
|
+
if (allowedNumericValues === undefined) {
|
|
34
|
+
throw new Error("AllowedNumericValues undefined for numeric option");
|
|
35
|
+
}
|
|
36
|
+
if (numericValue === undefined) {
|
|
37
|
+
throw new Error("Numeric value not set for numeric option");
|
|
38
|
+
}
|
|
39
|
+
const { ranges } = allowedNumericValues;
|
|
40
|
+
const isSingleRange = ranges.length === 1;
|
|
41
|
+
if (isSingleRange && ranges[0] instanceof NumericValueDiscrete) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return (React.createElement("ul", { className: `cfgOptionTree cfgOptionTree--subLevel cfgOptionTree--indent ${props.className || ""}`, style: props.style }, ranges.map((range) => (React.createElement(NumericValueView, { currentValue: numericValue, unit: unit, range: range, key: range.first, hasNoSiblings: isSingleRange, updateValue: (value, commit) => __awaiter(void 0, void 0, void 0, function* () { return yield option.setNumericValue(value, commit); }) })))));
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Displays GUI for selecting in one "range". Please note that the range
|
|
48
|
+
* parameter can also be a discrete value.
|
|
49
|
+
*/
|
|
50
|
+
export const NumericValueView = (props) => {
|
|
51
|
+
const { range, currentValue, updateValue, hasNoSiblings } = props;
|
|
52
|
+
const { legend, first } = range;
|
|
53
|
+
const selected = range.includesValue(currentValue);
|
|
54
|
+
const optionClasses = selected ? "cfgFeatureItemOption--checked" : "";
|
|
55
|
+
const uniqueId = useUuid();
|
|
56
|
+
const [inputValue, setInputValue] = useState(first);
|
|
57
|
+
const [inputCommited, setInputCommited] = useState(true);
|
|
58
|
+
const [showRangeError, setShowRangeError] = useState(false);
|
|
59
|
+
if (inputCommited && inputValue !== currentValue && range.includesValue(currentValue)) {
|
|
60
|
+
setInputValue(currentValue);
|
|
61
|
+
}
|
|
62
|
+
function isAcceptableValue(value) {
|
|
63
|
+
return !isNaN(value) && range.includesValue(value);
|
|
64
|
+
}
|
|
65
|
+
return (React.createElement("li", { className: `cfgFeatureItem cfgMb1 ${hasNoSiblings ? "" : "cfgMt1"}` },
|
|
66
|
+
!hasNoSiblings && (React.createElement("label", { className: `cfgFeatureItemOption ${optionClasses}`, htmlFor: uniqueId },
|
|
67
|
+
React.createElement("input", { checked: selected, className: "cfgFeatureItem__hiddenInput", id: uniqueId, name: uniqueId, onChange: (event) => {
|
|
68
|
+
if (event.target.checked) {
|
|
69
|
+
updateValue(inputValue, true);
|
|
70
|
+
}
|
|
71
|
+
}, type: "radio", value: first }),
|
|
72
|
+
React.createElement("div", { className: "cfgFeatureItem__radio" }, selected && React.createElement(Checkmark, null)),
|
|
73
|
+
React.createElement("div", { className: "cfgFeatureItemOption__titleWrapper" },
|
|
74
|
+
React.createElement("div", { className: "cfgFeatureItemOption__title" }, legend)))),
|
|
75
|
+
selected && range instanceof NumericValueRangeDefinition && (React.createElement(RangeView, Object.assign({}, props, { className: hasNoSiblings ? undefined : "cfgOptionTree--indent", range: range, onChange: (val, instantUpdate) => {
|
|
76
|
+
setInputValue(val);
|
|
77
|
+
if (!isAcceptableValue(inputValue)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (instantUpdate) {
|
|
81
|
+
updateValue(val, false);
|
|
82
|
+
}
|
|
83
|
+
setShowRangeError(false);
|
|
84
|
+
setInputCommited(false);
|
|
85
|
+
}, onCommit: () => {
|
|
86
|
+
if (inputCommited) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (!isAcceptableValue(inputValue)) {
|
|
90
|
+
setShowRangeError(true);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
updateValue(inputValue, true);
|
|
94
|
+
setShowRangeError(false);
|
|
95
|
+
setInputCommited(true);
|
|
96
|
+
}, inputValue: inputValue, showRangeError: showRangeError })))));
|
|
97
|
+
};
|
|
98
|
+
export const RangeView = (props) => {
|
|
99
|
+
const { currentValue, unit, inputValue, range, onChange, onCommit, showRangeError } = props;
|
|
100
|
+
const { minValue, maxValue, increment, legend } = range;
|
|
101
|
+
const getOnChange = (instant) => (event) => onChange(event.currentTarget.valueAsNumber, instant);
|
|
102
|
+
const inputProps = {
|
|
103
|
+
min: minValue,
|
|
104
|
+
max: maxValue,
|
|
105
|
+
step: increment || Math.pow(10, Math.round(Math.log10(maxValue - minValue)) - 3),
|
|
106
|
+
onBlur: onCommit,
|
|
107
|
+
onMouseUp: onCommit,
|
|
108
|
+
};
|
|
109
|
+
return (React.createElement("div", { className: `cfgRangeView cfgMt1 ${props.className || ""}`, style: props.style },
|
|
110
|
+
React.createElement("div", { className: "cfgRangeView__inputs" },
|
|
111
|
+
React.createElement("input", Object.assign({}, inputProps, { type: "number", value: isNaN(inputValue) ? "" : inputValue, onChange: getOnChange(false), className: "cfgRangeView__number-input" })),
|
|
112
|
+
React.createElement("span", { className: "cfgRangeView__unit-label" }, unit),
|
|
113
|
+
React.createElement("input", Object.assign({}, inputProps, { type: "range", className: "cfgSlider cfgRangeView__slider-input", value: currentValue, onChange: getOnChange(true) }))),
|
|
114
|
+
showRangeError && (React.createElement("div", { className: "cfgRangeView__error" },
|
|
115
|
+
"Value not allowed, allowed values are ",
|
|
116
|
+
legend))));
|
|
117
|
+
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { CfgOption } from "@configura/web-api";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { UpchargeDisplayMode } from "./CfgProductConfigurationView.js";
|
|
4
|
-
declare type Props = {
|
|
5
|
-
option: CfgOption;
|
|
6
|
-
upchargeDisplayMode: UpchargeDisplayMode | undefined;
|
|
7
|
-
};
|
|
8
|
-
export declare const CfgOptionPriceView: React.FC<Props>;
|
|
9
|
-
export {};
|
|
1
|
+
import { CfgOption } from "@configura/web-api";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { UpchargeDisplayMode } from "./CfgProductConfigurationView.js";
|
|
4
|
+
declare type Props = {
|
|
5
|
+
option: CfgOption;
|
|
6
|
+
upchargeDisplayMode: UpchargeDisplayMode | undefined;
|
|
7
|
+
};
|
|
8
|
+
export declare const CfgOptionPriceView: React.FC<Props>;
|
|
9
|
+
export {};
|
|
10
10
|
//# sourceMappingURL=CfgOptionPriceView.d.ts.map
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { CurrencyPrice } from "../CurrencyPrice.js";
|
|
3
|
-
import { UpchargeDisplayMode } from "./CfgProductConfigurationView.js";
|
|
4
|
-
export const CfgOptionPriceView = (props) => {
|
|
5
|
-
const { option, upchargeDisplayMode } = props;
|
|
6
|
-
const { currency, fractionDigits, lang } = option.parentProduct;
|
|
7
|
-
if (currency === "") {
|
|
8
|
-
return null;
|
|
9
|
-
}
|
|
10
|
-
switch (upchargeDisplayMode) {
|
|
11
|
-
case UpchargeDisplayMode.None:
|
|
12
|
-
return null;
|
|
13
|
-
case UpchargeDisplayMode.Price:
|
|
14
|
-
const { upcharge } = option;
|
|
15
|
-
if (upcharge === undefined || upcharge === 0) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
return (React.createElement("div", { className: "cfgFeatureItemOption__price" },
|
|
19
|
-
React.createElement(CurrencyPrice, { currency: currency, language: lang, price: upcharge, fractionDigits: fractionDigits })));
|
|
20
|
-
default:
|
|
21
|
-
const { priceChangeAtSelectChange } = option;
|
|
22
|
-
if (priceChangeAtSelectChange === undefined || priceChangeAtSelectChange === 0) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
return (React.createElement("div", { className: "cfgFeatureItemOption__price" },
|
|
26
|
-
priceChangeAtSelectChange < 0 ? "-" : "+",
|
|
27
|
-
React.createElement(CurrencyPrice, { currency: currency, language: lang, price: Math.abs(priceChangeAtSelectChange), fractionDigits: fractionDigits })));
|
|
28
|
-
}
|
|
29
|
-
};
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { CurrencyPrice } from "../CurrencyPrice.js";
|
|
3
|
+
import { UpchargeDisplayMode } from "./CfgProductConfigurationView.js";
|
|
4
|
+
export const CfgOptionPriceView = (props) => {
|
|
5
|
+
const { option, upchargeDisplayMode } = props;
|
|
6
|
+
const { currency, fractionDigits, lang } = option.parentProduct;
|
|
7
|
+
if (currency === "") {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
switch (upchargeDisplayMode) {
|
|
11
|
+
case UpchargeDisplayMode.None:
|
|
12
|
+
return null;
|
|
13
|
+
case UpchargeDisplayMode.Price:
|
|
14
|
+
const { upcharge } = option;
|
|
15
|
+
if (upcharge === undefined || upcharge === 0) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return (React.createElement("div", { className: "cfgFeatureItemOption__price" },
|
|
19
|
+
React.createElement(CurrencyPrice, { currency: currency, language: lang, price: upcharge, fractionDigits: fractionDigits })));
|
|
20
|
+
default:
|
|
21
|
+
const { priceChangeAtSelectChange } = option;
|
|
22
|
+
if (priceChangeAtSelectChange === undefined || priceChangeAtSelectChange === 0) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return (React.createElement("div", { className: "cfgFeatureItemOption__price" },
|
|
26
|
+
priceChangeAtSelectChange < 0 ? "-" : "+",
|
|
27
|
+
React.createElement(CurrencyPrice, { currency: currency, language: lang, price: Math.abs(priceChangeAtSelectChange), fractionDigits: fractionDigits })));
|
|
28
|
+
}
|
|
29
|
+
};
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { CfgProduct, CfgProductConfiguration } from "@configura/web-api";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { CssProps } from "../../utilities.js";
|
|
4
|
-
import { CfgProductConfigurationComponentAndPassthroughProps } from "./CfgFeatureView.js";
|
|
5
|
-
export declare enum UpchargeDisplayMode {
|
|
6
|
-
SelectionImpact = 0,
|
|
7
|
-
None = 1,
|
|
8
|
-
Price = 2
|
|
9
|
-
}
|
|
10
|
-
export declare type PassthroughProps = {
|
|
11
|
-
upchargeDisplayMode?: UpchargeDisplayMode;
|
|
12
|
-
};
|
|
13
|
-
declare type Props = PassthroughProps & {
|
|
14
|
-
productOrConfiguration: CfgProductConfiguration | CfgProduct;
|
|
15
|
-
permanentlyExpandedAdditionalProductLevels?: number;
|
|
16
|
-
};
|
|
17
|
-
export declare const CfgProductConfigurationView: React.FC<Props & CfgProductConfigurationComponentAndPassthroughProps & CssProps>;
|
|
18
|
-
export {};
|
|
1
|
+
import { CfgProduct, CfgProductConfiguration } from "@configura/web-api";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { CssProps } from "../../utilities.js";
|
|
4
|
+
import { CfgProductConfigurationComponentAndPassthroughProps } from "./CfgFeatureView.js";
|
|
5
|
+
export declare enum UpchargeDisplayMode {
|
|
6
|
+
SelectionImpact = 0,
|
|
7
|
+
None = 1,
|
|
8
|
+
Price = 2
|
|
9
|
+
}
|
|
10
|
+
export declare type PassthroughProps = {
|
|
11
|
+
upchargeDisplayMode?: UpchargeDisplayMode;
|
|
12
|
+
};
|
|
13
|
+
declare type Props = PassthroughProps & {
|
|
14
|
+
productOrConfiguration: CfgProductConfiguration | CfgProduct;
|
|
15
|
+
permanentlyExpandedAdditionalProductLevels?: number;
|
|
16
|
+
};
|
|
17
|
+
export declare const CfgProductConfigurationView: React.FC<Props & CfgProductConfigurationComponentAndPassthroughProps & CssProps>;
|
|
18
|
+
export {};
|
|
19
19
|
//# sourceMappingURL=CfgProductConfigurationView.d.ts.map
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import { CfgProduct } from "@configura/web-api";
|
|
2
|
-
import React, { useEffect } from "react";
|
|
3
|
-
import { useRerender } from "../../useRerender.js";
|
|
4
|
-
import { CfgAdditionalProductView } from "./CfgAdditionalProductView.js";
|
|
5
|
-
import { CfgFeatureViewMemo, forwardProps, } from "./CfgFeatureView.js";
|
|
6
|
-
export var UpchargeDisplayMode;
|
|
7
|
-
(function (UpchargeDisplayMode) {
|
|
8
|
-
UpchargeDisplayMode[UpchargeDisplayMode["SelectionImpact"] = 0] = "SelectionImpact";
|
|
9
|
-
UpchargeDisplayMode[UpchargeDisplayMode["None"] = 1] = "None";
|
|
10
|
-
UpchargeDisplayMode[UpchargeDisplayMode["Price"] = 2] = "Price";
|
|
11
|
-
})(UpchargeDisplayMode || (UpchargeDisplayMode = {}));
|
|
12
|
-
export const CfgProductConfigurationView = React.memo((props) => {
|
|
13
|
-
const { productOrConfiguration, permanentlyExpandedAdditionalProductLevels, additionalProductComponent, } = props;
|
|
14
|
-
const configuration = productOrConfiguration instanceof CfgProduct
|
|
15
|
-
? productOrConfiguration.configuration
|
|
16
|
-
: productOrConfiguration;
|
|
17
|
-
const features = configuration.features.reduce((agg, feature) => {
|
|
18
|
-
// It is possible in Cat Creator to double add a Feature. This fills no known
|
|
19
|
-
// purpose and React can not handle this, so we filter out the duplicates.
|
|
20
|
-
const code = feature.code;
|
|
21
|
-
if (agg.every((f) => f.code !== code)) {
|
|
22
|
-
agg.push(feature);
|
|
23
|
-
}
|
|
24
|
-
return agg;
|
|
25
|
-
}, []);
|
|
26
|
-
const additionalProducts = productOrConfiguration instanceof CfgProduct
|
|
27
|
-
? productOrConfiguration.additionalProducts
|
|
28
|
-
: undefined;
|
|
29
|
-
const AdditionalProductComponent = additionalProductComponent || CfgAdditionalProductView;
|
|
30
|
-
// Re-rendering is driven from the very top of the tree. However, when selecting an option
|
|
31
|
-
// the change is not bubbled all the way to the top (and then down again) until after
|
|
32
|
-
// validation has been done. This keeps the 3D-view from re-rendering until after validation
|
|
33
|
-
// has been done. But it also makes the state of this GUI not update until after validate,
|
|
34
|
-
// which does not look good. So we add this extra hook to make this rerender early.
|
|
35
|
-
const rerender = useRerender();
|
|
36
|
-
useEffect(() => {
|
|
37
|
-
configuration.listenForChange(rerender);
|
|
38
|
-
return () => {
|
|
39
|
-
configuration.stopListenForChange(rerender);
|
|
40
|
-
};
|
|
41
|
-
}, [configuration, rerender]);
|
|
42
|
-
return (React.createElement(React.Fragment, null,
|
|
43
|
-
React.createElement("ul", { className: `cfgOptionTree cfgOptionTree--topLevel ${props.className || ""}`, style: props.style }, features.map((f) => (React.createElement(CfgFeatureViewMemo, Object.assign({ feature: f, key: f.key }, forwardProps(props)))))),
|
|
44
|
-
additionalProducts !== undefined && (React.createElement("ul", { className: `cfgAdditionalProduct cfgOptionTree cfgOptionTree--topLevel` }, additionalProducts.map((additionalProduct) => (React.createElement(AdditionalProductComponent, Object.assign({ key: additionalProduct.key }, forwardProps(props), { additionalProductComponent: AdditionalProductComponent, product: additionalProduct, permanentlyExpandedLevels: permanentlyExpandedAdditionalProductLevels || 0 }))))))));
|
|
45
|
-
});
|
|
1
|
+
import { CfgProduct } from "@configura/web-api";
|
|
2
|
+
import React, { useEffect } from "react";
|
|
3
|
+
import { useRerender } from "../../useRerender.js";
|
|
4
|
+
import { CfgAdditionalProductView } from "./CfgAdditionalProductView.js";
|
|
5
|
+
import { CfgFeatureViewMemo, forwardProps, } from "./CfgFeatureView.js";
|
|
6
|
+
export var UpchargeDisplayMode;
|
|
7
|
+
(function (UpchargeDisplayMode) {
|
|
8
|
+
UpchargeDisplayMode[UpchargeDisplayMode["SelectionImpact"] = 0] = "SelectionImpact";
|
|
9
|
+
UpchargeDisplayMode[UpchargeDisplayMode["None"] = 1] = "None";
|
|
10
|
+
UpchargeDisplayMode[UpchargeDisplayMode["Price"] = 2] = "Price";
|
|
11
|
+
})(UpchargeDisplayMode || (UpchargeDisplayMode = {}));
|
|
12
|
+
export const CfgProductConfigurationView = React.memo((props) => {
|
|
13
|
+
const { productOrConfiguration, permanentlyExpandedAdditionalProductLevels, additionalProductComponent, } = props;
|
|
14
|
+
const configuration = productOrConfiguration instanceof CfgProduct
|
|
15
|
+
? productOrConfiguration.configuration
|
|
16
|
+
: productOrConfiguration;
|
|
17
|
+
const features = configuration.features.reduce((agg, feature) => {
|
|
18
|
+
// It is possible in Cat Creator to double add a Feature. This fills no known
|
|
19
|
+
// purpose and React can not handle this, so we filter out the duplicates.
|
|
20
|
+
const code = feature.code;
|
|
21
|
+
if (agg.every((f) => f.code !== code)) {
|
|
22
|
+
agg.push(feature);
|
|
23
|
+
}
|
|
24
|
+
return agg;
|
|
25
|
+
}, []);
|
|
26
|
+
const additionalProducts = productOrConfiguration instanceof CfgProduct
|
|
27
|
+
? productOrConfiguration.additionalProducts
|
|
28
|
+
: undefined;
|
|
29
|
+
const AdditionalProductComponent = additionalProductComponent || CfgAdditionalProductView;
|
|
30
|
+
// Re-rendering is driven from the very top of the tree. However, when selecting an option
|
|
31
|
+
// the change is not bubbled all the way to the top (and then down again) until after
|
|
32
|
+
// validation has been done. This keeps the 3D-view from re-rendering until after validation
|
|
33
|
+
// has been done. But it also makes the state of this GUI not update until after validate,
|
|
34
|
+
// which does not look good. So we add this extra hook to make this rerender early.
|
|
35
|
+
const rerender = useRerender();
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
configuration.listenForChange(rerender);
|
|
38
|
+
return () => {
|
|
39
|
+
configuration.stopListenForChange(rerender);
|
|
40
|
+
};
|
|
41
|
+
}, [configuration, rerender]);
|
|
42
|
+
return (React.createElement(React.Fragment, null,
|
|
43
|
+
React.createElement("ul", { className: `cfgOptionTree cfgOptionTree--topLevel ${props.className || ""}`, style: props.style }, features.map((f) => (React.createElement(CfgFeatureViewMemo, Object.assign({ feature: f, key: f.key }, forwardProps(props)))))),
|
|
44
|
+
additionalProducts !== undefined && (React.createElement("ul", { className: `cfgAdditionalProduct cfgOptionTree cfgOptionTree--topLevel` }, additionalProducts.map((additionalProduct) => (React.createElement(AdditionalProductComponent, Object.assign({ key: additionalProduct.key }, forwardProps(props), { additionalProductComponent: AdditionalProductComponent, product: additionalProduct, permanentlyExpandedLevels: permanentlyExpandedAdditionalProductLevels || 0 }))))))));
|
|
45
|
+
});
|
package/dist/css/web-ui.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.cfgRangeView{display:flex;align-items:center}.cfgRangeView__number-input{font-size:1.5em;flex-grow:1;text-align:right}.cfgRangeView__unit-label{font-size:1.5em;margin-left:.3em}.cfgRangeView__slider-input.cfgSlider{margin-left:1em;flex-grow:3}.cfgMl1{margin-left:1em}.cfgMt1{margin-top:1em}.cfgMb1{margin-bottom:1em}.cfgTextOverflow{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cfgButton{box-sizing:border-box;display:inline-block;background-color:transparent;color:#333;border-radius:.3em;border:.1em solid #bababa;font-size:1.3em;font-weight:500;outline:none;padding:.4em .8em}.cfgButton:after,.cfgButton:before{box-sizing:inherit}.cfgButton *{box-sizing:border-box}.cfgButton :after,.cfgButton :before{box-sizing:inherit}.cfgButton:focus{box-shadow:0 0 0 .075em #fff,0 0 0 .2em #333}.cfgButtonRow{box-sizing:border-box}.cfgButtonRow:after,.cfgButtonRow:before{box-sizing:inherit}.cfgButtonRow *{box-sizing:border-box}.cfgButtonRow :after,.cfgButtonRow :before{box-sizing:inherit}.cfgButtonRow__button:nth-child(n+2){margin-left:1em}.cfgConfigurator{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:10px;color:#333;min-width:0}.cfgConfigurator:after,.cfgConfigurator:before{box-sizing:inherit}.cfgConfigurator *{box-sizing:border-box}.cfgConfigurator :after,.cfgConfigurator :before{box-sizing:inherit}.cfgConfiguratorHeader{border-bottom:.1em solid #c8c7cc;padding:1.7em 1.7em 1.9em;position:relative}.cfgConfiguratorHeader__actions{margin-top:1em}.cfgConfiguratorTree{padding-top:1em}.cfgCanvasWrapper{box-sizing:border-box;position:relative;height:50rem;-webkit-user-select:none;user-select:none}.cfgCanvasWrapper:after,.cfgCanvasWrapper:before{box-sizing:inherit}.cfgCanvasWrapper *{box-sizing:border-box}.cfgCanvasWrapper :after,.cfgCanvasWrapper :before{box-sizing:inherit}.cfgCanvasWrapper canvas{outline:none}.cfgConfiguratorWrapper{box-sizing:border-box;color:#333;height:100%;width:100%}.cfgConfiguratorWrapper:after,.cfgConfiguratorWrapper:before{box-sizing:inherit}.cfgConfiguratorWrapper *{box-sizing:border-box}.cfgConfiguratorWrapper :after,.cfgConfiguratorWrapper :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgConfiguratorWrapper{display:flex;flex-direction:row}.cfgConfiguratorWrapper>.cfgConfigurator{flex:0 1 40%;height:100%}.cfgConfiguratorWrapper .cfgCanvasWrapper{flex:0 1 60%;height:85vh;overflow:hidden;position:sticky;top:0}}.cfgExpandableHeadingRow{box-sizing:border-box;-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%}.cfgExpandableHeadingRow:after,.cfgExpandableHeadingRow:before{box-sizing:inherit}.cfgExpandableHeadingRow *{box-sizing:border-box}.cfgExpandableHeadingRow :after,.cfgExpandableHeadingRow :before{box-sizing:inherit}.cfgExpandableHeadingRow--expandable{cursor:pointer}.cfgExpandableHeadingRow__title{align-items:center;display:flex;flex:1 1 auto;font-size:1.5em;font-weight:500;justify-content:flex-start}.cfgExpandableHeadingRow__icon{align-items:center;display:flex;flex:0 0 5em;justify-content:center;padding:0 1.5em}.cfgHr{box-sizing:border-box;border:0;border-bottom:.1em solid #c8c7cc;padding:0;margin:0}.cfgHr:after,.cfgHr:before{box-sizing:inherit}.cfgHr *{box-sizing:border-box}.cfgHr :after,.cfgHr :before{box-sizing:inherit}.cfgThumbnailImage{border-radius:.7em;display:inline-block;height:3em;width:3em}.cfgThumbnailPlaceholder{align-items:center;display:flex;flex:0 0 4.2em;justify-content:flex-start}.cfgFeatureItem{box-sizing:border-box;color:#333}.cfgFeatureItem:after,.cfgFeatureItem:before{box-sizing:inherit}.cfgFeatureItem *{box-sizing:border-box}.cfgFeatureItem :after,.cfgFeatureItem :before{box-sizing:inherit}.cfgFeatureItem__dropdown{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%;cursor:pointer}.cfgFeatureItem--optional{margin-top:1em}.cfgFeatureItem__hiddenInput{left:-99999px;opacity:0;position:absolute;z-index:-1}.cfgFeatureItem__radio{border:.2em solid #c8c7cc;border-radius:50%}.cfgFeatureItem__checkbox,.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgFeatureItem__checkbox{border:.2em solid #c8c7cc;border-radius:.3em}.cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__checkbox,.cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__radio{box-shadow:0 0 0 .075em #fff,0 0 0 .2em #333}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{border:.2em solid #000;border-radius:50%}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox,.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox{border:.2em solid #000;border-radius:.3em}.cfgFeatureItemOption__titleWrapper,.cfgFeatureItemOptional__titleWrapper{flex:1 1 auto;margin-left:1em}.cfgFeatureItemOption__title,.cfgFeatureItemOptional__title{font-size:1.5em}.cfgFeatureItemOption__price{font-weight:600;font-size:.75em;color:grey}.cfgOptionTree--subLevel .cfgFeatureItem__hr{display:none}.cfgFeatureItemOption,.cfgFeatureItemOptional{align-items:center;display:flex}.cfgFeatureItemOptional{justify-content:center;margin-top:.5em}.cfgFeatureItemOptional__header{font-size:1.2em;font-weight:600;margin:0 0 .3em;padding:0;text-transform:uppercase}.cfgAdditionalProduct .cfgFeatureItem:last-child .cfgFeatureItem__hr{margin-bottom:-.1em}.cfgOptionTree{box-sizing:border-box;list-style:none;margin:0;padding:0}.cfgOptionTree:after,.cfgOptionTree:before{box-sizing:inherit}.cfgOptionTree *{box-sizing:border-box}.cfgOptionTree :after,.cfgOptionTree :before{box-sizing:inherit}.cfgOptionTree--topLevel{padding-left:1.7em}.cfgOptionTree--indent{margin-left:3.2em}.cfgOptionTree--compThumb{margin-left:4.2em}.cfgProductInfo{box-sizing:border-box;color:#333;display:flex}.cfgProductInfo:after,.cfgProductInfo:before{box-sizing:inherit}.cfgProductInfo *{box-sizing:border-box}.cfgProductInfo :after,.cfgProductInfo :before{box-sizing:inherit}.cfgProductInfo__left{flex:1 1 auto;min-width:0;overflow:hidden}.cfgProductInfo__right{align-items:flex-end;display:flex;flex-direction:column;flex:1 0 auto;margin-left:1em;max-width:.333333333;min-width:0}.cfgProductInfo__name{display:block;font-size:1.6em;font-weight:600;line-height:1.33;margin:0}.cfgProductInfo__number{font-size:1.3em;font-weight:400;line-height:1.38;margin:0}.cfgCenteredLoading{box-sizing:border-box;align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.cfgCenteredLoading:after,.cfgCenteredLoading:before{box-sizing:inherit}.cfgCenteredLoading *{box-sizing:border-box}.cfgCenteredLoading :after,.cfgCenteredLoading :before{box-sizing:inherit}.cfgOverlayLoading{box-sizing:border-box;align-items:center;background-color:#fff;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:1000}.cfgOverlayLoading:after,.cfgOverlayLoading:before{box-sizing:inherit}.cfgOverlayLoading *{box-sizing:border-box}.cfgOverlayLoading :after,.cfgOverlayLoading :before{box-sizing:inherit}.cfgOverlayLoading--clickThrough{background-color:transparent;pointer-events:none}.cfgOverlayLoading--clickThrough .cfgLoadingWithText{padding:2em 2em 1.8em;border-radius:.8em;background-color:#fff;opacity:.8;border:.1em solid rgba(0,0,0,.15)}.cfgOverlayLoading--fullWindow{position:fixed;z-index:1001}.cfgLoadingWithText{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center}.cfgLoadingWithText:after,.cfgLoadingWithText:before{box-sizing:inherit}.cfgLoadingWithText *{box-sizing:border-box}.cfgLoadingWithText :after,.cfgLoadingWithText :before{box-sizing:inherit}.cfgLoadingWithText__text{color:#000;font-weight:600;margin-top:.5em;font-size:1.6em}.cfgLoading{box-sizing:border-box;animation:rotate 1.1s linear 0s infinite;border-radius:100%;border:.5em solid rgba(0,0,0,.15);border-bottom-color:#000;display:inline-block;height:3em;width:3em}.cfgLoading:after,.cfgLoading:before{box-sizing:inherit}.cfgLoading *{box-sizing:border-box}.cfgLoading :after,.cfgLoading :before{box-sizing:inherit}.cfgLoading--small{border-width:.4em;height:2em;width:2em}.cfgSlider{box-sizing:border-box;flex:1;margin:0;padding:0;min-height:2.8em;background:transparent;font:inherit}.cfgSlider:after,.cfgSlider:before{box-sizing:inherit}.cfgSlider *{box-sizing:border-box}.cfgSlider :after,.cfgSlider :before{box-sizing:inherit}.cfgSlider,.cfgSlider::-webkit-slider-thumb{-webkit-appearance:none}.cfgSlider::-webkit-slider-runnable-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-moz-range-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-ms-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-webkit-slider-thumb{margin-top:-1.3em;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-moz-range-thumb{box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-ms-thumb{margin-top:0;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-ms-tooltip{display:none}.cfgCheckmark{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgCheckmark:after,.cfgCheckmark:before{box-sizing:inherit}.cfgCheckmark *{box-sizing:border-box}.cfgCheckmark :after,.cfgCheckmark :before{box-sizing:inherit}.cfgCheckmark__container{transition:transform .4s;transform:translateY(17px)}.cfgCheckmark__line{stroke:#000;stroke-linecap:round;stroke-width:12;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgCheckmark__lineLeft{stroke:#000;transform:rotate(40deg) translateY(24px) translateX(18px)}.cfgCheckmark__lineRight{stroke:#000;transform:rotate(-50deg) translateY(-2px) translateX(-3px)}.cfgCheckmark__border{border:.2em solid #c8c7cc;border-radius:.3em}.cfgCheckmark__border,.cfgCheckmark__border--active{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgCheckmark__border--active{border:.2em solid #000;border-radius:.3em}.cfgChevron{box-sizing:border-box;display:inline-block;width:100%}.cfgChevron:after,.cfgChevron:before{box-sizing:inherit}.cfgChevron *{box-sizing:border-box}.cfgChevron :after,.cfgChevron :before{box-sizing:inherit}.cfgChevron__container{transition:transform .4s}.cfgChevron__container--down{transform:translateY(13px)}.cfgChevron__container--up{transform:translateY(-13px)}.cfgChevron__line{stroke-linecap:round;stroke-width:10;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgChevron__lineLeft--active,.cfgChevron__lineRight--active{stroke:#000}.cfgChevron__lineLeft--passive,.cfgChevron__lineRight--passive{stroke:#bababa}.cfgChevron__lineLeft--down{transform:rotate(40deg)}.cfgChevron__lineLeft--up,.cfgChevron__lineRight--down{transform:rotate(-40deg)}.cfgChevron__lineRight--up{transform:rotate(40deg)}.cfgDarkTheme .cfgButton{box-sizing:border-box;display:inline-block;background-color:transparent;color:#d6d6d6;border-radius:.3em;border:.1em solid #6a6a6a;font-size:1.3em;font-weight:500;outline:none;padding:.4em .8em}.cfgDarkTheme .cfgButton:after,.cfgDarkTheme .cfgButton:before{box-sizing:inherit}.cfgDarkTheme .cfgButton *{box-sizing:border-box}.cfgDarkTheme .cfgButton :after,.cfgDarkTheme .cfgButton :before{box-sizing:inherit}.cfgDarkTheme .cfgButton:focus{box-shadow:0 0 0 .075em #333,0 0 0 .2em #d6d6d6}.cfgDarkTheme .cfgButtonRow{box-sizing:border-box}.cfgDarkTheme .cfgButtonRow:after,.cfgDarkTheme .cfgButtonRow:before{box-sizing:inherit}.cfgDarkTheme .cfgButtonRow *{box-sizing:border-box}.cfgDarkTheme .cfgButtonRow :after,.cfgDarkTheme .cfgButtonRow :before{box-sizing:inherit}.cfgDarkTheme .cfgButtonRow__button:nth-child(n+2){margin-left:1em}.cfgDarkTheme .cfgConfigurator{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:10px;color:#d6d6d6;min-width:0}.cfgDarkTheme .cfgConfigurator:after,.cfgDarkTheme .cfgConfigurator:before{box-sizing:inherit}.cfgDarkTheme .cfgConfigurator *{box-sizing:border-box}.cfgDarkTheme .cfgConfigurator :after,.cfgDarkTheme .cfgConfigurator :before{box-sizing:inherit}.cfgDarkTheme .cfgConfiguratorHeader{border-bottom:.1em solid #5b5963;padding:1.7em 1.7em 1.9em;position:relative}.cfgDarkTheme .cfgConfiguratorHeader__actions{margin-top:1em}.cfgDarkTheme .cfgConfiguratorTree{padding-top:1em}.cfgDarkTheme .cfgCanvasWrapper{box-sizing:border-box;position:relative;height:50rem;-webkit-user-select:none;user-select:none}.cfgDarkTheme .cfgCanvasWrapper:after,.cfgDarkTheme .cfgCanvasWrapper:before{box-sizing:inherit}.cfgDarkTheme .cfgCanvasWrapper *{box-sizing:border-box}.cfgDarkTheme .cfgCanvasWrapper :after,.cfgDarkTheme .cfgCanvasWrapper :before{box-sizing:inherit}.cfgDarkTheme .cfgCanvasWrapper canvas{outline:none}.cfgDarkTheme .cfgConfiguratorWrapper{box-sizing:border-box;color:#d6d6d6;height:100%;width:100%}.cfgDarkTheme .cfgConfiguratorWrapper:after,.cfgDarkTheme .cfgConfiguratorWrapper:before{box-sizing:inherit}.cfgDarkTheme .cfgConfiguratorWrapper *{box-sizing:border-box}.cfgDarkTheme .cfgConfiguratorWrapper :after,.cfgDarkTheme .cfgConfiguratorWrapper :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgDarkTheme .cfgConfiguratorWrapper{display:flex;flex-direction:row}.cfgDarkTheme .cfgConfiguratorWrapper>.cfgConfigurator{flex:0 1 40%;height:100%}.cfgDarkTheme .cfgConfiguratorWrapper .cfgCanvasWrapper{flex:0 1 60%;height:85vh;overflow:hidden;position:sticky;top:0}}.cfgDarkTheme .cfgExpandableHeadingRow{box-sizing:border-box;-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%}.cfgDarkTheme .cfgExpandableHeadingRow:after,.cfgDarkTheme .cfgExpandableHeadingRow:before{box-sizing:inherit}.cfgDarkTheme .cfgExpandableHeadingRow *{box-sizing:border-box}.cfgDarkTheme .cfgExpandableHeadingRow :after,.cfgDarkTheme .cfgExpandableHeadingRow :before{box-sizing:inherit}.cfgDarkTheme .cfgExpandableHeadingRow--expandable{cursor:pointer}.cfgDarkTheme .cfgExpandableHeadingRow__title{align-items:center;display:flex;flex:1 1 auto;font-size:1.5em;font-weight:500;justify-content:flex-start}.cfgDarkTheme .cfgExpandableHeadingRow__icon{align-items:center;display:flex;flex:0 0 5em;justify-content:center;padding:0 1.5em}.cfgDarkTheme .cfgHr{box-sizing:border-box;border:0;border-bottom:.1em solid #5b5963;padding:0;margin:0}.cfgDarkTheme .cfgHr:after,.cfgDarkTheme .cfgHr:before{box-sizing:inherit}.cfgDarkTheme .cfgHr *{box-sizing:border-box}.cfgDarkTheme .cfgHr :after,.cfgDarkTheme .cfgHr :before{box-sizing:inherit}.cfgDarkTheme .cfgThumbnailImage{border-radius:.7em;display:inline-block;height:3em;width:3em}.cfgDarkTheme .cfgThumbnailPlaceholder{align-items:center;display:flex;flex:0 0 4.2em;justify-content:flex-start}.cfgDarkTheme .cfgFeatureItem{box-sizing:border-box;color:#d6d6d6}.cfgDarkTheme .cfgFeatureItem:after,.cfgDarkTheme .cfgFeatureItem:before{box-sizing:inherit}.cfgDarkTheme .cfgFeatureItem *{box-sizing:border-box}.cfgDarkTheme .cfgFeatureItem :after,.cfgDarkTheme .cfgFeatureItem :before{box-sizing:inherit}.cfgDarkTheme .cfgFeatureItem__dropdown{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%;cursor:pointer}.cfgDarkTheme .cfgFeatureItem--optional{margin-top:1em}.cfgDarkTheme .cfgFeatureItem__hiddenInput{left:-99999px;opacity:0;position:absolute;z-index:-1}.cfgDarkTheme .cfgFeatureItem__radio{border:.2em solid #5b5963;border-radius:50%}.cfgDarkTheme .cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgFeatureItem__checkbox{border:.2em solid #5b5963;border-radius:.3em}.cfgDarkTheme .cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__radio{box-shadow:0 0 0 .075em #333,0 0 0 .2em #d6d6d6}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{border:.2em solid #fff;border-radius:50%}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox{border:.2em solid #fff;border-radius:.3em}.cfgDarkTheme .cfgFeatureItemOption__titleWrapper,.cfgDarkTheme .cfgFeatureItemOptional__titleWrapper{flex:1 1 auto;margin-left:1em}.cfgDarkTheme .cfgFeatureItemOption__title,.cfgDarkTheme .cfgFeatureItemOptional__title{font-size:1.5em}.cfgDarkTheme .cfgFeatureItemOption__price{font-weight:600;font-size:.75em;color:#999}.cfgDarkTheme .cfgOptionTree--subLevel .cfgFeatureItem__hr{display:none}.cfgDarkTheme .cfgFeatureItemOption{align-items:center;display:flex}.cfgDarkTheme .cfgFeatureItemOptional{align-items:center;display:flex;justify-content:center;margin-top:.5em}.cfgDarkTheme .cfgFeatureItemOptional__header{font-size:1.2em;font-weight:600;margin:0 0 .3em;padding:0;text-transform:uppercase}.cfgDarkTheme .cfgAdditionalProduct .cfgFeatureItem:last-child .cfgFeatureItem__hr{margin-bottom:-.1em}.cfgDarkTheme .cfgOptionTree{box-sizing:border-box;list-style:none;margin:0;padding:0}.cfgDarkTheme .cfgOptionTree:after,.cfgDarkTheme .cfgOptionTree:before{box-sizing:inherit}.cfgDarkTheme .cfgOptionTree *{box-sizing:border-box}.cfgDarkTheme .cfgOptionTree :after,.cfgDarkTheme .cfgOptionTree :before{box-sizing:inherit}.cfgDarkTheme .cfgOptionTree--topLevel{padding-left:1.7em}.cfgDarkTheme .cfgOptionTree--indent{margin-left:3.2em}.cfgDarkTheme .cfgOptionTree--compThumb{margin-left:4.2em}.cfgDarkTheme .cfgProductInfo{box-sizing:border-box;color:#d6d6d6;display:flex}.cfgDarkTheme .cfgProductInfo:after,.cfgDarkTheme .cfgProductInfo:before{box-sizing:inherit}.cfgDarkTheme .cfgProductInfo *{box-sizing:border-box}.cfgDarkTheme .cfgProductInfo :after,.cfgDarkTheme .cfgProductInfo :before{box-sizing:inherit}.cfgDarkTheme .cfgProductInfo__left{flex:1 1 auto;min-width:0;overflow:hidden}.cfgDarkTheme .cfgProductInfo__right{align-items:flex-end;display:flex;flex-direction:column;flex:1 0 auto;margin-left:1em;max-width:.333333333;min-width:0}.cfgDarkTheme .cfgProductInfo__name{display:block;font-size:1.6em;font-weight:600;line-height:1.33;margin:0}.cfgDarkTheme .cfgProductInfo__number{font-size:1.3em;font-weight:400;line-height:1.38;margin:0}.cfgDarkTheme .cfgCenteredLoading{box-sizing:border-box;align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.cfgDarkTheme .cfgCenteredLoading:after,.cfgDarkTheme .cfgCenteredLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgCenteredLoading *{box-sizing:border-box}.cfgDarkTheme .cfgCenteredLoading :after,.cfgDarkTheme .cfgCenteredLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading{box-sizing:border-box;align-items:center;background-color:#333;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:1000}.cfgDarkTheme .cfgOverlayLoading:after,.cfgDarkTheme .cfgOverlayLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading *{box-sizing:border-box}.cfgDarkTheme .cfgOverlayLoading :after,.cfgDarkTheme .cfgOverlayLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading--clickThrough{background-color:transparent;pointer-events:none}.cfgDarkTheme .cfgOverlayLoading--clickThrough .cfgLoadingWithText{padding:2em 2em 1.8em;border-radius:.8em;background-color:#333;opacity:.8;border:.1em solid hsla(0,0%,100%,.15)}.cfgDarkTheme .cfgOverlayLoading--fullWindow{position:fixed;z-index:1001}.cfgDarkTheme .cfgLoadingWithText{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center}.cfgDarkTheme .cfgLoadingWithText:after,.cfgDarkTheme .cfgLoadingWithText:before{box-sizing:inherit}.cfgDarkTheme .cfgLoadingWithText *{box-sizing:border-box}.cfgDarkTheme .cfgLoadingWithText :after,.cfgDarkTheme .cfgLoadingWithText :before{box-sizing:inherit}.cfgDarkTheme .cfgLoadingWithText__text{color:#fff;font-weight:600;margin-top:.5em;font-size:1.6em}.cfgDarkTheme .cfgLoading{box-sizing:border-box;animation:rotate 1.1s linear 0s infinite;border-radius:100%;border:.5em solid hsla(0,0%,100%,.15);border-bottom-color:#fff;display:inline-block;height:3em;width:3em}.cfgDarkTheme .cfgLoading:after,.cfgDarkTheme .cfgLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgLoading *{box-sizing:border-box}.cfgDarkTheme .cfgLoading :after,.cfgDarkTheme .cfgLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgLoading--small{border-width:.4em;height:2em;width:2em}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.cfgDarkTheme .cfgSlider{box-sizing:border-box;flex:1;margin:0;padding:0;min-height:2.8em;background:transparent;font:inherit}.cfgDarkTheme .cfgSlider:after,.cfgDarkTheme .cfgSlider:before{box-sizing:inherit}.cfgDarkTheme .cfgSlider *{box-sizing:border-box}.cfgDarkTheme .cfgSlider :after,.cfgDarkTheme .cfgSlider :before{box-sizing:inherit}.cfgDarkTheme .cfgSlider,.cfgDarkTheme .cfgSlider::-webkit-slider-thumb{-webkit-appearance:none}.cfgDarkTheme .cfgSlider::-webkit-slider-runnable-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-moz-range-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-ms-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-webkit-slider-thumb{margin-top:-1.3em;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-moz-range-thumb{box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-ms-thumb{margin-top:0;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-ms-tooltip{display:none}.cfgDarkTheme .cfgCheckmark{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgDarkTheme .cfgCheckmark:after,.cfgDarkTheme .cfgCheckmark:before{box-sizing:inherit}.cfgDarkTheme .cfgCheckmark *{box-sizing:border-box}.cfgDarkTheme .cfgCheckmark :after,.cfgDarkTheme .cfgCheckmark :before{box-sizing:inherit}.cfgDarkTheme .cfgCheckmark__container{transition:transform .4s;transform:translateY(17px)}.cfgDarkTheme .cfgCheckmark__line{stroke:#fff;stroke-linecap:round;stroke-width:12;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgDarkTheme .cfgCheckmark__lineLeft{stroke:#fff;transform:rotate(40deg) translateY(24px) translateX(18px)}.cfgDarkTheme .cfgCheckmark__lineRight{stroke:#fff;transform:rotate(-50deg) translateY(-2px) translateX(-3px)}.cfgDarkTheme .cfgCheckmark__border{border:.2em solid #5b5963;border-radius:.3em}.cfgDarkTheme .cfgCheckmark__border,.cfgDarkTheme .cfgCheckmark__border--active{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgCheckmark__border--active{border:.2em solid #fff;border-radius:.3em}.cfgDarkTheme .cfgChevron{box-sizing:border-box;display:inline-block;width:100%}.cfgDarkTheme .cfgChevron:after,.cfgDarkTheme .cfgChevron:before{box-sizing:inherit}.cfgDarkTheme .cfgChevron *{box-sizing:border-box}.cfgDarkTheme .cfgChevron :after,.cfgDarkTheme .cfgChevron :before{box-sizing:inherit}.cfgDarkTheme .cfgChevron__container{transition:transform .4s}.cfgDarkTheme .cfgChevron__container--down{transform:translateY(13px)}.cfgDarkTheme .cfgChevron__container--up{transform:translateY(-13px)}.cfgDarkTheme .cfgChevron__line{stroke-linecap:round;stroke-width:10;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgDarkTheme .cfgChevron__lineLeft--active,.cfgDarkTheme .cfgChevron__lineRight--active{stroke:#fff}.cfgDarkTheme .cfgChevron__lineLeft--passive,.cfgDarkTheme .cfgChevron__lineRight--passive{stroke:#6a6a6a}.cfgDarkTheme .cfgChevron__lineLeft--down{transform:rotate(40deg)}.cfgDarkTheme .cfgChevron__lineLeft--up,.cfgDarkTheme .cfgChevron__lineRight--down{transform:rotate(-40deg)}.cfgDarkTheme .cfgChevron__lineRight--up{transform:rotate(40deg)}
|
|
1
|
+
.cfgRangeView__inputs{display:flex;align-items:center}.cfgRangeView__number-input{font-size:1.5em;flex-grow:1;text-align:right}.cfgRangeView__unit-label{font-size:1.5em;margin-left:.3em}.cfgRangeView__slider-input.cfgSlider{margin-left:1em;flex-grow:3}.cfgRangeView__error{margin-top:1em;font-size:1.5em;color:#b00}.cfgMl1{margin-left:1em}.cfgMt1{margin-top:1em}.cfgMb1{margin-bottom:1em}.cfgTextOverflow{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cfgButton{box-sizing:border-box;display:inline-block;background-color:transparent;color:#333;border-radius:.3em;border:.1em solid #bababa;font-size:1.3em;font-weight:500;outline:none;padding:.4em .8em}.cfgButton:after,.cfgButton:before{box-sizing:inherit}.cfgButton *{box-sizing:border-box}.cfgButton :after,.cfgButton :before{box-sizing:inherit}.cfgButton:focus{box-shadow:0 0 0 .075em #fff,0 0 0 .2em #333}.cfgButtonRow{box-sizing:border-box}.cfgButtonRow:after,.cfgButtonRow:before{box-sizing:inherit}.cfgButtonRow *{box-sizing:border-box}.cfgButtonRow :after,.cfgButtonRow :before{box-sizing:inherit}.cfgButtonRow__button:nth-child(n+2){margin-left:1em}.cfgConfigurator{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:10px;color:#333;min-width:0}.cfgConfigurator:after,.cfgConfigurator:before{box-sizing:inherit}.cfgConfigurator *{box-sizing:border-box}.cfgConfigurator :after,.cfgConfigurator :before{box-sizing:inherit}.cfgConfiguratorHeader{border-bottom:.1em solid #c8c7cc;padding:1.7em 1.7em 1.9em;position:relative}.cfgConfiguratorHeader__actions{margin-top:1em}.cfgConfiguratorTree{padding-top:1em}.cfgCanvasWrapper{box-sizing:border-box;position:relative;height:50rem;-webkit-user-select:none;user-select:none}.cfgCanvasWrapper:after,.cfgCanvasWrapper:before{box-sizing:inherit}.cfgCanvasWrapper *{box-sizing:border-box}.cfgCanvasWrapper :after,.cfgCanvasWrapper :before{box-sizing:inherit}.cfgCanvasWrapper canvas{outline:none}.cfgConfiguratorWrapper{box-sizing:border-box;color:#333;height:100%;width:100%}.cfgConfiguratorWrapper:after,.cfgConfiguratorWrapper:before{box-sizing:inherit}.cfgConfiguratorWrapper *{box-sizing:border-box}.cfgConfiguratorWrapper :after,.cfgConfiguratorWrapper :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgConfiguratorWrapper{display:flex;flex-direction:row}.cfgConfiguratorWrapper>.cfgConfigurator{flex:0 1 40%;height:100%}.cfgConfiguratorWrapper .cfgCanvasWrapper{flex:0 1 60%;height:85vh;overflow:hidden;position:sticky;top:0}}.cfgExpandableHeadingRow{box-sizing:border-box;-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%}.cfgExpandableHeadingRow:after,.cfgExpandableHeadingRow:before{box-sizing:inherit}.cfgExpandableHeadingRow *{box-sizing:border-box}.cfgExpandableHeadingRow :after,.cfgExpandableHeadingRow :before{box-sizing:inherit}.cfgExpandableHeadingRow--expandable{cursor:pointer}.cfgExpandableHeadingRow__title{align-items:center;display:flex;flex:1 1 auto;font-size:1.5em;font-weight:500;justify-content:flex-start}.cfgExpandableHeadingRow__icon{align-items:center;display:flex;flex:0 0 5em;justify-content:center;padding:0 1.5em}.cfgHr{box-sizing:border-box;border:0;border-bottom:.1em solid #c8c7cc;padding:0;margin:0}.cfgHr:after,.cfgHr:before{box-sizing:inherit}.cfgHr *{box-sizing:border-box}.cfgHr :after,.cfgHr :before{box-sizing:inherit}.cfgThumbnailImage{border-radius:.7em;display:inline-block;height:3em;width:3em}.cfgThumbnailPlaceholder{align-items:center;display:flex;flex:0 0 4.2em;justify-content:flex-start}.cfgFeatureItem{box-sizing:border-box;color:#333}.cfgFeatureItem:after,.cfgFeatureItem:before{box-sizing:inherit}.cfgFeatureItem *{box-sizing:border-box}.cfgFeatureItem :after,.cfgFeatureItem :before{box-sizing:inherit}.cfgFeatureItem__dropdown{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%;cursor:pointer}.cfgFeatureItem--optional{margin-top:1em}.cfgFeatureItem__hiddenInput{left:-99999px;opacity:0;position:absolute;z-index:-1}.cfgFeatureItem__radio{border:.2em solid #c8c7cc;border-radius:50%}.cfgFeatureItem__checkbox,.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgFeatureItem__checkbox{border:.2em solid #c8c7cc;border-radius:.3em}.cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__checkbox,.cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__radio{box-shadow:0 0 0 .075em #fff,0 0 0 .2em #333}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{border:.2em solid #000;border-radius:50%}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox,.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox{border:.2em solid #000;border-radius:.3em}.cfgFeatureItemOption__titleWrapper,.cfgFeatureItemOptional__titleWrapper{flex:1 1 auto;margin-left:1em}.cfgFeatureItemOption__title,.cfgFeatureItemOptional__title{font-size:1.5em}.cfgFeatureItemOption__price{font-weight:600;font-size:.75em;color:grey}.cfgOptionTree--subLevel .cfgFeatureItem__hr{display:none}.cfgFeatureItemOption,.cfgFeatureItemOptional{align-items:center;display:flex}.cfgFeatureItemOptional{justify-content:center;margin-top:.5em}.cfgFeatureItemOptional__header{font-size:1.2em;font-weight:600;margin:0 0 .3em;padding:0;text-transform:uppercase}.cfgAdditionalProduct .cfgFeatureItem:last-child .cfgFeatureItem__hr{margin-bottom:-.1em}.cfgOptionTree{box-sizing:border-box;list-style:none;margin:0;padding:0}.cfgOptionTree:after,.cfgOptionTree:before{box-sizing:inherit}.cfgOptionTree *{box-sizing:border-box}.cfgOptionTree :after,.cfgOptionTree :before{box-sizing:inherit}.cfgOptionTree--topLevel{padding-left:1.7em}.cfgOptionTree--indent{margin-left:3.2em}.cfgOptionTree--compThumb{margin-left:4.2em}.cfgProductInfo{box-sizing:border-box;color:#333;display:flex}.cfgProductInfo:after,.cfgProductInfo:before{box-sizing:inherit}.cfgProductInfo *{box-sizing:border-box}.cfgProductInfo :after,.cfgProductInfo :before{box-sizing:inherit}.cfgProductInfo__left{flex:1 1 auto;min-width:0;overflow:hidden}.cfgProductInfo__right{align-items:flex-end;display:flex;flex-direction:column;flex:1 0 auto;margin-left:1em;max-width:.333333333;min-width:0}.cfgProductInfo__name{display:block;font-size:1.6em;font-weight:600;line-height:1.33;margin:0}.cfgProductInfo__number{font-size:1.3em;font-weight:400;line-height:1.38;margin:0}.cfgCenteredLoading{box-sizing:border-box;align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.cfgCenteredLoading:after,.cfgCenteredLoading:before{box-sizing:inherit}.cfgCenteredLoading *{box-sizing:border-box}.cfgCenteredLoading :after,.cfgCenteredLoading :before{box-sizing:inherit}.cfgOverlayLoading{box-sizing:border-box;align-items:center;background-color:#fff;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:1000}.cfgOverlayLoading:after,.cfgOverlayLoading:before{box-sizing:inherit}.cfgOverlayLoading *{box-sizing:border-box}.cfgOverlayLoading :after,.cfgOverlayLoading :before{box-sizing:inherit}.cfgOverlayLoading--clickThrough{background-color:transparent;pointer-events:none}.cfgOverlayLoading--clickThrough .cfgLoadingWithText{padding:2em 2em 1.8em;border-radius:.8em;background-color:#fff;opacity:.8;border:.1em solid rgba(0,0,0,.15)}.cfgOverlayLoading--fullWindow{position:fixed;z-index:1001}.cfgLoadingWithText{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center}.cfgLoadingWithText:after,.cfgLoadingWithText:before{box-sizing:inherit}.cfgLoadingWithText *{box-sizing:border-box}.cfgLoadingWithText :after,.cfgLoadingWithText :before{box-sizing:inherit}.cfgLoadingWithText__text{color:#000;font-weight:600;margin-top:.5em;font-size:1.6em}.cfgLoading{box-sizing:border-box;animation:rotate 1.1s linear 0s infinite;border-radius:100%;border:.5em solid rgba(0,0,0,.15);border-bottom-color:#000;display:inline-block;height:3em;width:3em}.cfgLoading:after,.cfgLoading:before{box-sizing:inherit}.cfgLoading *{box-sizing:border-box}.cfgLoading :after,.cfgLoading :before{box-sizing:inherit}.cfgLoading--small{border-width:.4em;height:2em;width:2em}.cfgSlider{box-sizing:border-box;flex:1;margin:0;padding:0;min-height:2.8em;background:transparent;font:inherit}.cfgSlider:after,.cfgSlider:before{box-sizing:inherit}.cfgSlider *{box-sizing:border-box}.cfgSlider :after,.cfgSlider :before{box-sizing:inherit}.cfgSlider,.cfgSlider::-webkit-slider-thumb{-webkit-appearance:none}.cfgSlider::-webkit-slider-runnable-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-moz-range-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-ms-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-webkit-slider-thumb{margin-top:-1.3em;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-moz-range-thumb{box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-ms-thumb{margin-top:0;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-ms-tooltip{display:none}.cfgCheckmark{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgCheckmark:after,.cfgCheckmark:before{box-sizing:inherit}.cfgCheckmark *{box-sizing:border-box}.cfgCheckmark :after,.cfgCheckmark :before{box-sizing:inherit}.cfgCheckmark__container{transition:transform .4s;transform:translateY(17px)}.cfgCheckmark__line{stroke:#000;stroke-linecap:round;stroke-width:12;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgCheckmark__lineLeft{stroke:#000;transform:rotate(40deg) translateY(24px) translateX(18px)}.cfgCheckmark__lineRight{stroke:#000;transform:rotate(-50deg) translateY(-2px) translateX(-3px)}.cfgCheckmark__border{border:.2em solid #c8c7cc;border-radius:.3em}.cfgCheckmark__border,.cfgCheckmark__border--active{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgCheckmark__border--active{border:.2em solid #000;border-radius:.3em}.cfgChevron{box-sizing:border-box;display:inline-block;width:100%}.cfgChevron:after,.cfgChevron:before{box-sizing:inherit}.cfgChevron *{box-sizing:border-box}.cfgChevron :after,.cfgChevron :before{box-sizing:inherit}.cfgChevron__container{transition:transform .4s}.cfgChevron__container--down{transform:translateY(13px)}.cfgChevron__container--up{transform:translateY(-13px)}.cfgChevron__line{stroke-linecap:round;stroke-width:10;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgChevron__lineLeft--active,.cfgChevron__lineRight--active{stroke:#000}.cfgChevron__lineLeft--passive,.cfgChevron__lineRight--passive{stroke:#bababa}.cfgChevron__lineLeft--down{transform:rotate(40deg)}.cfgChevron__lineLeft--up,.cfgChevron__lineRight--down{transform:rotate(-40deg)}.cfgChevron__lineRight--up{transform:rotate(40deg)}.cfgDarkTheme .cfgButton{box-sizing:border-box;display:inline-block;background-color:transparent;color:#d6d6d6;border-radius:.3em;border:.1em solid #6a6a6a;font-size:1.3em;font-weight:500;outline:none;padding:.4em .8em}.cfgDarkTheme .cfgButton:after,.cfgDarkTheme .cfgButton:before{box-sizing:inherit}.cfgDarkTheme .cfgButton *{box-sizing:border-box}.cfgDarkTheme .cfgButton :after,.cfgDarkTheme .cfgButton :before{box-sizing:inherit}.cfgDarkTheme .cfgButton:focus{box-shadow:0 0 0 .075em #333,0 0 0 .2em #d6d6d6}.cfgDarkTheme .cfgButtonRow{box-sizing:border-box}.cfgDarkTheme .cfgButtonRow:after,.cfgDarkTheme .cfgButtonRow:before{box-sizing:inherit}.cfgDarkTheme .cfgButtonRow *{box-sizing:border-box}.cfgDarkTheme .cfgButtonRow :after,.cfgDarkTheme .cfgButtonRow :before{box-sizing:inherit}.cfgDarkTheme .cfgButtonRow__button:nth-child(n+2){margin-left:1em}.cfgDarkTheme .cfgConfigurator{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:10px;color:#d6d6d6;min-width:0}.cfgDarkTheme .cfgConfigurator:after,.cfgDarkTheme .cfgConfigurator:before{box-sizing:inherit}.cfgDarkTheme .cfgConfigurator *{box-sizing:border-box}.cfgDarkTheme .cfgConfigurator :after,.cfgDarkTheme .cfgConfigurator :before{box-sizing:inherit}.cfgDarkTheme .cfgConfiguratorHeader{border-bottom:.1em solid #5b5963;padding:1.7em 1.7em 1.9em;position:relative}.cfgDarkTheme .cfgConfiguratorHeader__actions{margin-top:1em}.cfgDarkTheme .cfgConfiguratorTree{padding-top:1em}.cfgDarkTheme .cfgCanvasWrapper{box-sizing:border-box;position:relative;height:50rem;-webkit-user-select:none;user-select:none}.cfgDarkTheme .cfgCanvasWrapper:after,.cfgDarkTheme .cfgCanvasWrapper:before{box-sizing:inherit}.cfgDarkTheme .cfgCanvasWrapper *{box-sizing:border-box}.cfgDarkTheme .cfgCanvasWrapper :after,.cfgDarkTheme .cfgCanvasWrapper :before{box-sizing:inherit}.cfgDarkTheme .cfgCanvasWrapper canvas{outline:none}.cfgDarkTheme .cfgConfiguratorWrapper{box-sizing:border-box;color:#d6d6d6;height:100%;width:100%}.cfgDarkTheme .cfgConfiguratorWrapper:after,.cfgDarkTheme .cfgConfiguratorWrapper:before{box-sizing:inherit}.cfgDarkTheme .cfgConfiguratorWrapper *{box-sizing:border-box}.cfgDarkTheme .cfgConfiguratorWrapper :after,.cfgDarkTheme .cfgConfiguratorWrapper :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgDarkTheme .cfgConfiguratorWrapper{display:flex;flex-direction:row}.cfgDarkTheme .cfgConfiguratorWrapper>.cfgConfigurator{flex:0 1 40%;height:100%}.cfgDarkTheme .cfgConfiguratorWrapper .cfgCanvasWrapper{flex:0 1 60%;height:85vh;overflow:hidden;position:sticky;top:0}}.cfgDarkTheme .cfgExpandableHeadingRow{box-sizing:border-box;-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%}.cfgDarkTheme .cfgExpandableHeadingRow:after,.cfgDarkTheme .cfgExpandableHeadingRow:before{box-sizing:inherit}.cfgDarkTheme .cfgExpandableHeadingRow *{box-sizing:border-box}.cfgDarkTheme .cfgExpandableHeadingRow :after,.cfgDarkTheme .cfgExpandableHeadingRow :before{box-sizing:inherit}.cfgDarkTheme .cfgExpandableHeadingRow--expandable{cursor:pointer}.cfgDarkTheme .cfgExpandableHeadingRow__title{align-items:center;display:flex;flex:1 1 auto;font-size:1.5em;font-weight:500;justify-content:flex-start}.cfgDarkTheme .cfgExpandableHeadingRow__icon{align-items:center;display:flex;flex:0 0 5em;justify-content:center;padding:0 1.5em}.cfgDarkTheme .cfgHr{box-sizing:border-box;border:0;border-bottom:.1em solid #5b5963;padding:0;margin:0}.cfgDarkTheme .cfgHr:after,.cfgDarkTheme .cfgHr:before{box-sizing:inherit}.cfgDarkTheme .cfgHr *{box-sizing:border-box}.cfgDarkTheme .cfgHr :after,.cfgDarkTheme .cfgHr :before{box-sizing:inherit}.cfgDarkTheme .cfgThumbnailImage{border-radius:.7em;display:inline-block;height:3em;width:3em}.cfgDarkTheme .cfgThumbnailPlaceholder{align-items:center;display:flex;flex:0 0 4.2em;justify-content:flex-start}.cfgDarkTheme .cfgFeatureItem{box-sizing:border-box;color:#d6d6d6}.cfgDarkTheme .cfgFeatureItem:after,.cfgDarkTheme .cfgFeatureItem:before{box-sizing:inherit}.cfgDarkTheme .cfgFeatureItem *{box-sizing:border-box}.cfgDarkTheme .cfgFeatureItem :after,.cfgDarkTheme .cfgFeatureItem :before{box-sizing:inherit}.cfgDarkTheme .cfgFeatureItem__dropdown{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%;cursor:pointer}.cfgDarkTheme .cfgFeatureItem--optional{margin-top:1em}.cfgDarkTheme .cfgFeatureItem__hiddenInput{left:-99999px;opacity:0;position:absolute;z-index:-1}.cfgDarkTheme .cfgFeatureItem__radio{border:.2em solid #5b5963;border-radius:50%}.cfgDarkTheme .cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgFeatureItem__checkbox{border:.2em solid #5b5963;border-radius:.3em}.cfgDarkTheme .cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__radio{box-shadow:0 0 0 .075em #333,0 0 0 .2em #d6d6d6}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{border:.2em solid #fff;border-radius:50%}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox{border:.2em solid #fff;border-radius:.3em}.cfgDarkTheme .cfgFeatureItemOption__titleWrapper,.cfgDarkTheme .cfgFeatureItemOptional__titleWrapper{flex:1 1 auto;margin-left:1em}.cfgDarkTheme .cfgFeatureItemOption__title,.cfgDarkTheme .cfgFeatureItemOptional__title{font-size:1.5em}.cfgDarkTheme .cfgFeatureItemOption__price{font-weight:600;font-size:.75em;color:#999}.cfgDarkTheme .cfgOptionTree--subLevel .cfgFeatureItem__hr{display:none}.cfgDarkTheme .cfgFeatureItemOption{align-items:center;display:flex}.cfgDarkTheme .cfgFeatureItemOptional{align-items:center;display:flex;justify-content:center;margin-top:.5em}.cfgDarkTheme .cfgFeatureItemOptional__header{font-size:1.2em;font-weight:600;margin:0 0 .3em;padding:0;text-transform:uppercase}.cfgDarkTheme .cfgAdditionalProduct .cfgFeatureItem:last-child .cfgFeatureItem__hr{margin-bottom:-.1em}.cfgDarkTheme .cfgOptionTree{box-sizing:border-box;list-style:none;margin:0;padding:0}.cfgDarkTheme .cfgOptionTree:after,.cfgDarkTheme .cfgOptionTree:before{box-sizing:inherit}.cfgDarkTheme .cfgOptionTree *{box-sizing:border-box}.cfgDarkTheme .cfgOptionTree :after,.cfgDarkTheme .cfgOptionTree :before{box-sizing:inherit}.cfgDarkTheme .cfgOptionTree--topLevel{padding-left:1.7em}.cfgDarkTheme .cfgOptionTree--indent{margin-left:3.2em}.cfgDarkTheme .cfgOptionTree--compThumb{margin-left:4.2em}.cfgDarkTheme .cfgProductInfo{box-sizing:border-box;color:#d6d6d6;display:flex}.cfgDarkTheme .cfgProductInfo:after,.cfgDarkTheme .cfgProductInfo:before{box-sizing:inherit}.cfgDarkTheme .cfgProductInfo *{box-sizing:border-box}.cfgDarkTheme .cfgProductInfo :after,.cfgDarkTheme .cfgProductInfo :before{box-sizing:inherit}.cfgDarkTheme .cfgProductInfo__left{flex:1 1 auto;min-width:0;overflow:hidden}.cfgDarkTheme .cfgProductInfo__right{align-items:flex-end;display:flex;flex-direction:column;flex:1 0 auto;margin-left:1em;max-width:.333333333;min-width:0}.cfgDarkTheme .cfgProductInfo__name{display:block;font-size:1.6em;font-weight:600;line-height:1.33;margin:0}.cfgDarkTheme .cfgProductInfo__number{font-size:1.3em;font-weight:400;line-height:1.38;margin:0}.cfgDarkTheme .cfgCenteredLoading{box-sizing:border-box;align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.cfgDarkTheme .cfgCenteredLoading:after,.cfgDarkTheme .cfgCenteredLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgCenteredLoading *{box-sizing:border-box}.cfgDarkTheme .cfgCenteredLoading :after,.cfgDarkTheme .cfgCenteredLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading{box-sizing:border-box;align-items:center;background-color:#333;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:1000}.cfgDarkTheme .cfgOverlayLoading:after,.cfgDarkTheme .cfgOverlayLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading *{box-sizing:border-box}.cfgDarkTheme .cfgOverlayLoading :after,.cfgDarkTheme .cfgOverlayLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading--clickThrough{background-color:transparent;pointer-events:none}.cfgDarkTheme .cfgOverlayLoading--clickThrough .cfgLoadingWithText{padding:2em 2em 1.8em;border-radius:.8em;background-color:#333;opacity:.8;border:.1em solid hsla(0,0%,100%,.15)}.cfgDarkTheme .cfgOverlayLoading--fullWindow{position:fixed;z-index:1001}.cfgDarkTheme .cfgLoadingWithText{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center}.cfgDarkTheme .cfgLoadingWithText:after,.cfgDarkTheme .cfgLoadingWithText:before{box-sizing:inherit}.cfgDarkTheme .cfgLoadingWithText *{box-sizing:border-box}.cfgDarkTheme .cfgLoadingWithText :after,.cfgDarkTheme .cfgLoadingWithText :before{box-sizing:inherit}.cfgDarkTheme .cfgLoadingWithText__text{color:#fff;font-weight:600;margin-top:.5em;font-size:1.6em}.cfgDarkTheme .cfgLoading{box-sizing:border-box;animation:rotate 1.1s linear 0s infinite;border-radius:100%;border:.5em solid hsla(0,0%,100%,.15);border-bottom-color:#fff;display:inline-block;height:3em;width:3em}.cfgDarkTheme .cfgLoading:after,.cfgDarkTheme .cfgLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgLoading *{box-sizing:border-box}.cfgDarkTheme .cfgLoading :after,.cfgDarkTheme .cfgLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgLoading--small{border-width:.4em;height:2em;width:2em}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.cfgDarkTheme .cfgSlider{box-sizing:border-box;flex:1;margin:0;padding:0;min-height:2.8em;background:transparent;font:inherit}.cfgDarkTheme .cfgSlider:after,.cfgDarkTheme .cfgSlider:before{box-sizing:inherit}.cfgDarkTheme .cfgSlider *{box-sizing:border-box}.cfgDarkTheme .cfgSlider :after,.cfgDarkTheme .cfgSlider :before{box-sizing:inherit}.cfgDarkTheme .cfgSlider,.cfgDarkTheme .cfgSlider::-webkit-slider-thumb{-webkit-appearance:none}.cfgDarkTheme .cfgSlider::-webkit-slider-runnable-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-moz-range-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-ms-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-webkit-slider-thumb{margin-top:-1.3em;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-moz-range-thumb{box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-ms-thumb{margin-top:0;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-ms-tooltip{display:none}.cfgDarkTheme .cfgCheckmark{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgDarkTheme .cfgCheckmark:after,.cfgDarkTheme .cfgCheckmark:before{box-sizing:inherit}.cfgDarkTheme .cfgCheckmark *{box-sizing:border-box}.cfgDarkTheme .cfgCheckmark :after,.cfgDarkTheme .cfgCheckmark :before{box-sizing:inherit}.cfgDarkTheme .cfgCheckmark__container{transition:transform .4s;transform:translateY(17px)}.cfgDarkTheme .cfgCheckmark__line{stroke:#fff;stroke-linecap:round;stroke-width:12;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgDarkTheme .cfgCheckmark__lineLeft{stroke:#fff;transform:rotate(40deg) translateY(24px) translateX(18px)}.cfgDarkTheme .cfgCheckmark__lineRight{stroke:#fff;transform:rotate(-50deg) translateY(-2px) translateX(-3px)}.cfgDarkTheme .cfgCheckmark__border{border:.2em solid #5b5963;border-radius:.3em}.cfgDarkTheme .cfgCheckmark__border,.cfgDarkTheme .cfgCheckmark__border--active{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgCheckmark__border--active{border:.2em solid #fff;border-radius:.3em}.cfgDarkTheme .cfgChevron{box-sizing:border-box;display:inline-block;width:100%}.cfgDarkTheme .cfgChevron:after,.cfgDarkTheme .cfgChevron:before{box-sizing:inherit}.cfgDarkTheme .cfgChevron *{box-sizing:border-box}.cfgDarkTheme .cfgChevron :after,.cfgDarkTheme .cfgChevron :before{box-sizing:inherit}.cfgDarkTheme .cfgChevron__container{transition:transform .4s}.cfgDarkTheme .cfgChevron__container--down{transform:translateY(13px)}.cfgDarkTheme .cfgChevron__container--up{transform:translateY(-13px)}.cfgDarkTheme .cfgChevron__line{stroke-linecap:round;stroke-width:10;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgDarkTheme .cfgChevron__lineLeft--active,.cfgDarkTheme .cfgChevron__lineRight--active{stroke:#fff}.cfgDarkTheme .cfgChevron__lineLeft--passive,.cfgDarkTheme .cfgChevron__lineRight--passive{stroke:#6a6a6a}.cfgDarkTheme .cfgChevron__lineLeft--down{transform:rotate(40deg)}.cfgDarkTheme .cfgChevron__lineLeft--up,.cfgDarkTheme .cfgChevron__lineRight--down{transform:rotate(-40deg)}.cfgDarkTheme .cfgChevron__lineRight--up{transform:rotate(40deg)}
|