@commercetools-uikit/select-utils
Version:
Utilities for working with select components.
704 lines (684 loc) • 39 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var reactIntl = require('react-intl');
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
var designSystem = require('@commercetools-uikit/design-system');
require('@commercetools-uikit/utils');
var _objectWithoutProperties = require('@babel/runtime-corejs3/helpers/objectWithoutProperties');
var react = require('@emotion/react');
var icons = require('@commercetools-uikit/icons');
var jsxRuntime = require('@emotion/react/jsx-runtime');
var omit = require('lodash/omit');
var AccessibleButton = require('@commercetools-uikit/accessible-button');
var reactSelect = require('react-select');
var react$1 = require('react');
var Spacings = require('@commercetools-uikit/spacings');
var Text = require('@commercetools-uikit/text');
var CheckboxInput = require('@commercetools-uikit/checkbox-input');
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
var omit__default = /*#__PURE__*/_interopDefault(omit);
var AccessibleButton__default = /*#__PURE__*/_interopDefault(AccessibleButton);
var Spacings__default = /*#__PURE__*/_interopDefault(Spacings);
var Text__default = /*#__PURE__*/_interopDefault(Text);
var CheckboxInput__default = /*#__PURE__*/_interopDefault(CheckboxInput);
var messages$1 = reactIntl.defineMessages({
clearButtonLabel: {
id: 'UIKit.ClearButton.clearButtonLabel',
description: 'Label for the clear button',
defaultMessage: 'Clear'
}
});
const _excluded = ["ref", "onMouseDown"];
function ownKeys$7(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$7(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$7(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$7(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
const ClearIndicator = props => {
const intl = reactIntl.useIntl();
const getStyles = props.getStyles,
_props$innerProps = props.innerProps,
ref = _props$innerProps.ref,
onMouseDown = _props$innerProps.onMouseDown,
restInnerProps = _objectWithoutProperties(_props$innerProps, _excluded),
selectProps = props.selectProps;
return jsxRuntime.jsx("button", _objectSpread$7(_objectSpread$7({}, restInnerProps), {}, {
ref: ref,
css: /*#__PURE__*/react.css("border:none;cursor:pointer;background:none;box-sizing:border-box;text-decoration:none;fill:", designSystem.designTokens.colorNeutral40, ";:hover svg *{fill:", designSystem.designTokens.colorError, ";}" + ("" ), "" ),
style: getStyles('clearIndicator', props),
title: intl.formatMessage(messages$1.clearButtonLabel),
"aria-label": intl.formatMessage(messages$1.clearButtonLabel)
// overriding the default `aria-hidden` prop value to make the component accessible by keyboard - https://github.com/JedWatson/react-select/issues/4793
,
"aria-hidden": false
// only onMouseDown and onTouchEnd event handlers are passed by `react-select` to the component by default, which makes it not accessible by keyboard
,
onClick: onMouseDown,
children: jsxRuntime.jsx(icons.CloseIcon, {
size: selectProps.isCondensed ? 'small' : 'medium'
})
}));
};
ClearIndicator.displayName = 'ClearIndicator';
var ClearIndicator$1 = ClearIndicator;
function ownKeys$6(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$6(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$6(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
// see https://github.com/JedWatson/react-select/blob/44e9fb29b230e49a754a2f0d6f30c2250aa45009/src/components/MultiValue.js
const removeProps = ['onClick', 'onTouchEnd', 'onMouseDown'];
const TagRemove = props => {
const isDisabled = Boolean(props.selectProps.isDisabled || props.selectProps.isReadOnly);
// when the select input is disabled,
// we don't want to spread the removeProp event handlers
const innerProps = isDisabled ? omit__default["default"](props.innerProps, removeProps) : props.innerProps;
return jsxRuntime.jsx(AccessibleButton__default["default"], _objectSpread$6(_objectSpread$6({
label: "Remove"
}, innerProps), {}, {
children: jsxRuntime.jsx(icons.CloseBoldIcon, {
color: isDisabled ? 'neutral60' : 'solid',
size: props.selectProps.isCondensed ? 'small' : 'medium'
})
}));
};
TagRemove.displayName = 'TagRemove';
var TagRemove$1 = TagRemove;
function ownKeys$5(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$5(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$5(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
const DropdownIndicator = props => jsxRuntime.jsx(reactSelect.components.DropdownIndicator, _objectSpread$5(_objectSpread$5({}, props), {}, {
children: jsxRuntime.jsx(icons.CaretDownIcon, {
color: props.isDisabled ? 'neutral60' : undefined,
size: "small"
})
}));
DropdownIndicator.displayName = 'DropdownIndicator';
var DropdownIndicator$1 = DropdownIndicator;
function ownKeys$4(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$4(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$4(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
const SearchIconDropdownIndicator = props => {
return jsxRuntime.jsx(reactSelect.components.DropdownIndicator, _objectSpread$4(_objectSpread$4({}, props), {}, {
children: jsxRuntime.jsx(icons.SearchIcon, {
color: 'neutral60',
size: props.selectProps.isCondensed ? 'medium' : 'big'
})
}));
};
SearchIconDropdownIndicator.displayName = 'SearchIconDropdownIndicator';
var SearchIconDropdownIndicator$1 = SearchIconDropdownIndicator;
function ownKeys$3(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$3(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$3(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
const getDefaultComponent = type => {
if (type === 'singleValue') return reactSelect.components.SingleValue;
if (type === 'placeholder') return reactSelect.components.Placeholder;
return null;
};
const WrapperWithIcon = props => {
const DefaultComponent = getDefaultComponent(props.type);
if (!DefaultComponent) {
return null;
}
return jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [props.selectProps.iconLeft && /*#__PURE__*/react$1.cloneElement(props.selectProps.iconLeft, {
size: props.selectProps.isCondensed ? '30' : '40'
}), jsxRuntime.jsx("span", {
// react-select uses absolute positioning for the SingleValue/Placeholder
// the icon has a fixed size of 24px (== SpacingsXl), therefore we can use a fixed margin
// spacingsXs is the margin between the icon and value
css: /*#__PURE__*/react.css("margin-left:", designSystem.designTokens.spacing20, ";" + ("" ), "" ),
children: jsxRuntime.jsx(DefaultComponent, _objectSpread$3({}, props))
})]
});
};
WrapperWithIcon.displayName = 'WrapperWithIcon';
var WrapperWithIcon$1 = WrapperWithIcon;
const customComponents = {
SingleValue: props => jsxRuntime.jsx(WrapperWithIcon, _objectSpread$3(_objectSpread$3({}, props), {}, {
type: "singleValue"
})),
Placeholder: props => jsxRuntime.jsx(WrapperWithIcon, _objectSpread$3(_objectSpread$3({}, props), {}, {
type: "placeholder"
}))
};
const NO_VALUE_FALLBACK = '- - - -';
const SELECT_DROPDOWN_OPTION_TYPES = {
SINGLE_PROPERTY: 'single-property',
DOUBLE_PROPERTY: 'double-property',
MULTIPLE_PROPERTIES: 'multiple-properties'
};
function ownKeys$2(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$2(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$2(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
const MultiplePropertiesSelectInputOption = props => {
const data = props.data;
const noValueFallback = props.noValueFallback || NO_VALUE_FALLBACK;
return jsxRuntime.jsx(reactSelect.components.Option, _objectSpread$2(_objectSpread$2({}, props), {}, {
children: jsxRuntime.jsxs(Spacings__default["default"].Stack, {
scale: "xs",
children: [jsxRuntime.jsx(Text__default["default"].Detail, {
fontWeight: "bold",
children: data?.label || noValueFallback
}), jsxRuntime.jsxs(Text__default["default"].Detail, {
children: ["Key: ", data?.key || noValueFallback]
}), jsxRuntime.jsxs(Text__default["default"].Detail, {
children: ["ID: ", data?.id || noValueFallback]
})]
})
}));
};
MultiplePropertiesSelectInputOption.displayName = 'MultiplePropertiesSelectInputOption';
const DoublePropertySelectInputOption = props => {
const data = props.data;
const noValueFallback = props.noValueFallback || NO_VALUE_FALLBACK;
return jsxRuntime.jsx(reactSelect.components.Option, _objectSpread$2(_objectSpread$2({}, props), {}, {
children: jsxRuntime.jsxs(Spacings__default["default"].Stack, {
scale: "xs",
children: [jsxRuntime.jsx(Text__default["default"].Detail, {
fontWeight: "bold",
children: data?.label || noValueFallback
}), jsxRuntime.jsxs(Text__default["default"].Detail, {
children: ["Key: ", data?.key || noValueFallback]
})]
})
}));
};
DoublePropertySelectInputOption.displayName = 'DoublePropertySelectInputOption';
const CustomSelectInputOption = props => {
const noValueFallback = props.noValueFallback || NO_VALUE_FALLBACK;
switch (props.optionType) {
case SELECT_DROPDOWN_OPTION_TYPES.MULTIPLE_PROPERTIES:
return jsxRuntime.jsx(MultiplePropertiesSelectInputOption, _objectSpread$2(_objectSpread$2({}, props.optionInnerProps), {}, {
noValueFallback: noValueFallback
}));
case SELECT_DROPDOWN_OPTION_TYPES.DOUBLE_PROPERTY:
return jsxRuntime.jsx(DoublePropertySelectInputOption, _objectSpread$2(_objectSpread$2({}, props.optionInnerProps), {}, {
noValueFallback: noValueFallback
}));
default:
return jsxRuntime.jsx(reactSelect.components.Option, _objectSpread$2(_objectSpread$2({}, props.optionInnerProps), {}, {
children: jsxRuntime.jsx(Text__default["default"].Detail, {
children: props.optionInnerProps.data?.label || noValueFallback
})
}));
}
};
CustomSelectInputOption.displayName = 'CustomSelectInputOption';
function ownKeys$1(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys$1(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys$1(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
const optionStyleCheckboxComponents = appearance => {
return {
Option: props => {
const innerRef = props.innerRef,
innerProps = props.innerProps,
label = props.label,
isDisabled = props.isDisabled,
isFocused = props.isFocused,
isSelected = props.isSelected,
className = props.className,
data = props.data;
return jsxRuntime.jsxs("div", _objectSpread$1(_objectSpread$1({
"data-component": "option",
ref: innerRef
}, innerProps), {}, {
css: /*#__PURE__*/react.css("padding:", designSystem.designTokens.spacing10, " ", designSystem.designTokens.spacing20, ";", isFocused && `background-color: ${designSystem.designTokens.backgroundColorForInputWhenHovered};`, " display:flex;justify-content:space-between;font-size:", designSystem.designTokens.fontSize20, ";span{font-size:", designSystem.designTokens.fontSize20, ";}" + ("" ), "" ),
className: className,
"aria-disabled": isDisabled,
children: [jsxRuntime.jsx(CheckboxInput__default["default"], {
isDisabled: isDisabled,
isChecked: isSelected,
onChange: () => {},
children: jsxRuntime.jsx("span", {
children: label
})
}), appearance === 'filter' && jsxRuntime.jsx("div", {
css: /*#__PURE__*/react.css("display:flex;align-items:center;font-weight:400;line-height:", designSystem.designTokens.lineHeight05, ";color:", designSystem.designTokens.colorNeutral50, ";" + ("" ), "" ),
children: data.count
})]
}));
}
};
};
/**
* Returns react-select props to be used with the <Select> component, when optionStyle is set to "checkbox"
*/
const optionsStyleCheckboxSelectProps = () => {
return {
// selected options should still be visible in the option-list, otherwise you cant toggle them
hideSelectedOptions: false,
// don't close the menu on check / uncheck of a checkbox
closeMenuOnSelect: false
};
};
var messages = reactIntl.defineMessages({
createLabel: {
id: 'UIKit.CreatableSelectInput.createLabel',
description: 'Text of dropdown when creating option',
defaultMessage: 'Create "{inputValue}"'
},
noOptionsMessageWithInputValue: {
id: 'UIKit.SelectInput.noOptionsMessageWithInputValue',
description: 'Text of dropdown when no options match search text',
defaultMessage: 'No options'
},
noOptionsMessageWithoutInputValue: {
id: 'UIKit.SelectInput.noOptionsMessageWithoutInputValue',
description: 'Text of dropdown when no options exist',
defaultMessage: 'No options'
},
placeholder: {
id: 'UIKit.SelectInput.placeholder',
description: 'Default input placeholder text',
defaultMessage: 'Select...'
},
selectInputAsFilterPlaceholder: {
id: 'UIKit.SelectInput.selectInputAsFilterPlaceholder',
description: 'Default input placeholder text when used as filter',
defaultMessage: 'Search'
},
loadingOptions: {
id: 'UIKit.SelectInput.loadingOptions',
description: 'Default input loading text',
defaultMessage: 'Loading...'
}
});
function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
const getHorizontalConstraintValue = value => {
switch (value) {
case 'auto':
return 'initial';
default:
return designSystem.designTokens[`constraint${value}`] || designSystem.designTokens.constraintScale;
}
};
const getInputBackgroundColor = props => {
if (props.appearance === 'quiet') {
return designSystem.designTokens.colorTransparent;
}
if (props.isDisabled) {
return designSystem.designTokens.backgroundColorForInputWhenDisabled;
}
if (props.isReadOnly) {
return designSystem.designTokens.backgroundColorForInputWhenReadonly;
}
return designSystem.designTokens.backgroundColorForInput;
};
const getMultiValueBackgroundColor = props => {
if (props.isDisabled) return designSystem.designTokens.backgroundColorForInputWhenDisabled;
if (props.isReadOnly) return designSystem.designTokens.backgroundColorForInputWhenReadonly;
return designSystem.designTokens.colorPrimary95;
};
const getInputBorderColor = (props, state) => {
if (props.appearance === 'quiet') {
return designSystem.designTokens.colorTransparent;
}
if (props.isDisabled) {
return designSystem.designTokens.borderColorForInputWhenDisabled;
}
if (props.isReadOnly) {
return designSystem.designTokens.colorNeutral95;
}
if (state.isFocused) {
return designSystem.designTokens.borderColorForInputWhenFocused;
}
if (props.hasError) {
return designSystem.designTokens.borderColorForInputWhenError;
}
if (props.hasWarning) {
return designSystem.designTokens.borderColorForInputWhenWarning;
}
return designSystem.designTokens.borderColorForInput;
};
const getHoverInputBorderColor = props => {
if (props.appearance === 'quiet') {
return designSystem.designTokens.colorTransparent;
}
if (props.isDisabled) {
return designSystem.designTokens.borderColorForInputWhenDisabled;
}
if (props.isReadOnly) {
return designSystem.designTokens.colorNeutral95;
}
if (props.hasError) {
return designSystem.designTokens.borderColorForInputWhenError;
}
if (props.hasWarning) {
return designSystem.designTokens.borderColorForInputWhenWarning;
}
return designSystem.designTokens.borderColorForInputWhenHovered;
};
const getHoverInputBackgroundColor = props => {
if (!props.isDisabled && !props.isReadOnly) {
if (props.appearance === 'quiet') {
return 'hsla(240, 64%, 58%, 4%)'; //this is mainly a combination of our primary color hsl(240, 64%, 58%) and an alpha channel of 4%.
} else {
return designSystem.designTokens.backgroundColorForInputWhenHovered;
}
}
return null;
};
const controlStyles = props => (base, state) => {
return _objectSpread(_objectSpread(_objectSpread({}, base), {}, {
fontSize: props.isCondensed ? designSystem.designTokens.fontSize20 : designSystem.designTokens.fontSize30,
backgroundColor: getInputBackgroundColor(props),
borderColor: getInputBorderColor(props, state),
borderWidth: (() => {
if (props.hasWarning || props.hasError || state.isFocused || props.appearance === 'quiet') {
return designSystem.designTokens.borderWidth2;
}
return designSystem.designTokens.borderWidth1;
})(),
borderRadius: designSystem.designTokens.borderRadiusForInput,
minHeight: props.isCondensed ? designSystem.designTokens.heightForInputAsSmall : designSystem.designTokens.heightForInput,
cursor: (() => {
if (props.isDisabled) return 'not-allowed';
if (props.isReadOnly) return 'default';
return 'pointer';
})(),
padding: props.appearance === 'quiet' ? `0 ${designSystem.designTokens.spacing20}` : `0 ${designSystem.designTokens.spacing30}`,
transition: `border-color ${designSystem.designTokens.transitionStandard},
box-shadow ${designSystem.designTokens.transitionStandard}`,
outline: 0,
boxShadow: 'none'
}, props.horizontalConstraint === 'auto' ? {
display: 'inline-flex'
} : {}), {}, {
'&:focus-within': {
borderColor: (() => {
if (!props.isDisabled && !props.isReadOnly) return designSystem.designTokens.borderColorForInputWhenFocused;
return null;
})()
},
'&:hover': {
borderColor: getHoverInputBorderColor(props),
backgroundColor: getHoverInputBackgroundColor(props)
},
pointerEvents: 'auto',
color: props.isDisabled || props.isReadOnly ? designSystem.designTokens.fontColorForInputWhenDisabled : base.fontColorForInput
});
};
const menuStyles = props => base => {
return _objectSpread(_objectSpread(_objectSpread({}, base), props.appearance === 'filter' ? {
position: 'inherit',
zIndex: 'inherit'
} : {}), {}, {
border: `1px solid ${designSystem.designTokens.colorSurface}`,
borderRadius: designSystem.designTokens.borderRadiusForInput,
backgroundColor: designSystem.designTokens.backgroundColorForInput,
boxShadow: props.appearance === 'filter' ? 'none' : '0 2px 5px 0px rgba(0, 0, 0, 0.15)',
fontSize: designSystem.designTokens.fontSize30,
fontFamily: 'inherit',
margin: `${designSystem.designTokens.spacing10} 0 0 0`,
borderColor: (() => {
if (props.hasError || props.hasWarning) {
return designSystem.designTokens.colorSurface;
}
return base.borderColorForInput;
})(),
width: props.horizontalConstraint === 'auto' ? 'auto' : '100%',
minWidth: props.minMenuWidth ? getHorizontalConstraintValue(props.minMenuWidth) : designSystem.designTokens.constraint3,
maxWidth: props.maxMenuWidth ? getHorizontalConstraintValue(props.maxMenuWidth) : designSystem.designTokens.constraintScale
});
};
const indicatorSeparatorStyles = () => base => {
return _objectSpread(_objectSpread({}, base), {}, {
display: 'none',
margin: '0',
padding: '0',
marginLeft: designSystem.designTokens.spacing10
});
};
const dropdownIndicatorStyles = props => base => {
return _objectSpread(_objectSpread({}, base), {}, {
color: designSystem.designTokens.fontColorForInput,
margin: '0',
padding: '0',
marginLeft: designSystem.designTokens.spacing20,
fill: (() => {
if (props.isDisabled || props.isReadOnly) return designSystem.designTokens.fontColorForInputWhenDisabled;
if (props.hasError) return designSystem.designTokens.colorError;
if (props.hasWarning) return designSystem.designTokens.colorWarning;
return designSystem.designTokens.colorNeutral60;
})()
});
};
const clearIndicatorStyles = () => base => _objectSpread(_objectSpread({}, base), {}, {
display: 'flex',
padding: 0,
marginLeft: designSystem.designTokens.spacing20
});
const menuListStyles = () => base => {
return _objectSpread(_objectSpread({}, base), {}, {
padding: `${designSystem.designTokens.spacing10} 0`,
borderRadius: designSystem.designTokens.borderRadiusForInput,
backgroundColor: designSystem.designTokens.backgroundColorForInput
});
};
const optionStyles = props => (base, state) => {
return _objectSpread(_objectSpread({}, base), {}, {
transition: `border-color ${designSystem.designTokens.transitionStandard},
background-color ${designSystem.designTokens.transitionStandard},
color ${designSystem.designTokens.transitionStandard}`,
padding: `${designSystem.designTokens.spacing20} ${designSystem.designTokens.spacing30}`,
lineHeight: designSystem.designTokens.lineHeight40,
fontSize: props.isCondensed ? designSystem.designTokens.fontSize20 : designSystem.designTokens.fontSize30,
cursor: state.isDisabled ? 'not-allowed' : 'pointer',
color: (() => {
if (state.isDisabled) return designSystem.designTokens.fontColorForInputWhenDisabled;
return designSystem.designTokens.fontColorForInput;
})(),
borderRadius: props.appearance === 'filter' && '4px',
backgroundColor: (() => {
if (state.isSelected) return designSystem.designTokens.colorPrimary95;
if (state.isFocused) return designSystem.designTokens.backgroundColorForInputWhenHovered;
return base.backgroundColor;
})(),
'&:active': {
backgroundColor: (() => {
if (state.isDisabled) return designSystem.designTokens.colorTransparent;
return designSystem.designTokens.colorPrimary95;
})()
}
});
};
const placeholderStyles = props => base => {
return _objectSpread(_objectSpread({}, base), {}, {
color: (() => {
if (props.appearance === 'quiet' && !props.isReadOnly && !props.isDisabled) {
if (props.hasError) {
return designSystem.designTokens.colorError;
}
if (props.hasWarning) {
return designSystem.designTokens.colorWarning;
}
}
return designSystem.designTokens.colorNeutral60;
})(),
width: '100%',
overflow: 'hidden',
whiteSpace: 'nowrap',
textOverflow: 'ellipsis',
fill: props.isDisabled || props.isReadOnly ? designSystem.designTokens.fontColorForInputWhenDisabled : base.fontColorForInput
});
};
const getInputValueLayout = props => {
switch (true) {
case props.appearance === 'filter':
return 'grid';
// Display property should be grid when isMulti and has no value so the Placeholder component is positioned correctly with the Input
// Display property should be Flex when there is an iconLeft, also when the input has some values when isMulti.
// See PR from react select for more insight https://github.com/JedWatson/react-select/pull/4833
case props.iconLeft && !props.isMulti || props.isMulti && props.hasValue && (props.controlShouldRenderValue ?? true):
return 'flex';
default:
return 'grid';
}
};
const valueContainerStyles = props => base => {
return _objectSpread(_objectSpread(_objectSpread({}, base), !props.isMulti && {
flexWrap: 'nowrap'
}), {}, {
padding: '0',
backgroundColor: 'none',
overflow: 'hidden',
display: getInputValueLayout(props),
fill: props.isDisabled || props.isReadOnly ? designSystem.designTokens.fontColorForInputWhenDisabled : designSystem.designTokens.colorNeutral60
});
};
const singleValueStyles = props => base => {
return _objectSpread(_objectSpread({}, base), {}, {
color: (() => {
if (props.isDisabled) {
return designSystem.designTokens.fontColorForInputWhenDisabled;
}
if (props.isReadOnly) {
return designSystem.designTokens.fontColorForInputWhenReadonly;
}
if (props.hasError) return designSystem.designTokens.colorError;
if (props.hasWarning) return designSystem.designTokens.colorWarning;
return designSystem.designTokens.fontColorForInput;
})()
});
};
const groupStyles = props => base => {
return _objectSpread(_objectSpread({}, base), {}, {
padding: 0,
'&:not(:first-of-type)': {
borderTop: props.showOptionGroupDivider ? `1px solid ${designSystem.designTokens.colorNeutral90}` : base.borderTop
}
});
};
const groupHeadingStyles = () => base => {
return _objectSpread(_objectSpread({}, base), {}, {
color: designSystem.designTokens.fontColorForInputWhenReadonly,
fontSize: designSystem.designTokens.fontSize20,
borderBottom: `1px solid ${designSystem.designTokens.colorNeutral90}`,
textTransform: 'none',
fontWeight: designSystem.designTokens.fontWeight500,
padding: `${designSystem.designTokens.spacing20} ${designSystem.designTokens.spacing30}`,
'&:empty': {
padding: 0
}
});
};
const containerStyles = () => (base, state) => {
return _objectSpread(_objectSpread({}, base), {}, {
fontFamily: 'inherit',
minHeight: designSystem.designTokens.heightForInputAsSmall,
borderRadius: designSystem.designTokens.borderRadiusForInput,
borderColor: state.isFocused ? designSystem.designTokens.borderColorForInputWhenFocused : base.borderColor,
boxShadow: state.isFocused ? 'none' : base.boxShadow
});
};
const indicatorsContainerStyles = () => () => ({
background: 'none',
display: 'flex',
alignItems: 'center'
});
const menuPortalStyles = props => base => _objectSpread(_objectSpread({}, base), {}, {
zIndex: props.menuPortalZIndex
});
const multiValueStyles = props => base => {
return _objectSpread(_objectSpread({}, base), {}, {
display: 'flex',
alignItems: 'center',
height: props.isCondensed ? 'inherit' : '32px',
backgroundColor: getMultiValueBackgroundColor(props),
padding: props.isCondensed ? `0 ${designSystem.designTokens.spacing20} 0 calc(${designSystem.designTokens.spacing05} + ${designSystem.designTokens.spacing10})` : designSystem.designTokens.spacing20,
border: `1px solid ${designSystem.designTokens.colorNeutral85}`,
borderRadius: designSystem.designTokens.borderRadius20
});
};
const multiValueLabelStyles = props => base => {
return _objectSpread(_objectSpread({}, base), {}, {
fontSize: props.isCondensed ? designSystem.designTokens.fontSize20 : designSystem.designTokens.fontSize30,
lineHeight: props.isCondensed ? designSystem.designTokens.lineHeight20 : designSystem.designTokens.lineHeight40,
color: (() => {
if (props.isDisabled) return designSystem.designTokens.fontColorForInputWhenDisabled;
if (props.isReadOnly) return designSystem.designTokens.fontColorForInputWhenReadonly;
return base.color;
})(),
padding: `${props.isCondensed ? '1px' : designSystem.designTokens.spacing10} ${designSystem.designTokens.spacing20}`,
borderRadius: `${designSystem.designTokens.borderRadius2} 0 0 ${designSystem.designTokens.borderRadius2}`,
border: 'none',
borderWidth: '1px 0 1px 1px',
'&:last-child': {
borderRadius: designSystem.designTokens.borderRadius2,
borderWidth: designSystem.designTokens.borderWidth1
}
});
};
const multiValueRemoveStyles = props => (base, state) => {
return _objectSpread(_objectSpread({}, base), {}, {
borderColor: designSystem.designTokens.colorNeutral,
padding: `0 ${designSystem.designTokens.spacing10}`,
borderRadius: `0 ${designSystem.designTokens.borderRadius2} ${designSystem.designTokens.borderRadius2} 0`,
borderStyle: 'none',
borderWidth: '0',
pointerEvents: state.isDisabled || props.isReadOnly ? 'none' : base.pointerEvents,
backgroundColor: designSystem.designTokens.colorNeutral95,
'svg *': {
fill: props.isReadOnly ? designSystem.designTokens.fontColorForInputWhenReadonly : ''
},
'&:hover, &:focus': {
borderColor: designSystem.designTokens.colorWarning,
backgroundColor: designSystem.designTokens.colorNeutral95,
'svg *': {
fill: designSystem.designTokens.colorError
}
}
});
};
function createSelectStyles(props) {
return {
control: controlStyles(props),
menu: menuStyles(props),
indicatorSeparator: indicatorSeparatorStyles(),
dropdownIndicator: dropdownIndicatorStyles(props),
clearIndicator: clearIndicatorStyles(),
menuList: menuListStyles(),
menuPortal: menuPortalStyles(props),
multiValue: multiValueStyles(props),
multiValueLabel: multiValueLabelStyles(props),
multiValueRemove: multiValueRemoveStyles(props),
indicatorsContainer: indicatorsContainerStyles(),
option: optionStyles(props),
placeholder: placeholderStyles(props),
valueContainer: valueContainerStyles(props),
singleValue: singleValueStyles(props),
group: groupStyles(props),
groupHeading: groupHeadingStyles(),
container: containerStyles()
};
}
const warnIfMenuPortalPropsAreMissing = props => {
if (typeof props.menuPortalZIndex !== 'undefined' && props.menuPortalZIndex !== 1 // 1 is the value passed in default props
) ;
};
// NOTE: This string will be replaced on build time with the package version.
var version = "20.2.3";
exports.ClearIndicator = ClearIndicator$1;
exports.CustomSelectInputOption = CustomSelectInputOption;
exports.DoublePropertySelectInputOption = DoublePropertySelectInputOption;
exports.DropdownIndicator = DropdownIndicator$1;
exports.MultiplePropertiesSelectInputOption = MultiplePropertiesSelectInputOption;
exports.SELECT_DROPDOWN_OPTION_TYPES = SELECT_DROPDOWN_OPTION_TYPES;
exports.SearchIconDropdownIndicator = SearchIconDropdownIndicator$1;
exports.TagRemove = TagRemove$1;
exports.ValueWrapperWithIcon = WrapperWithIcon$1;
exports.createSelectStyles = createSelectStyles;
exports.customComponentsWithIcons = customComponents;
exports.messages = messages;
exports.optionStyleCheckboxComponents = optionStyleCheckboxComponents;
exports.optionsStyleCheckboxSelectProps = optionsStyleCheckboxSelectProps;
exports.version = version;
exports.warnIfMenuPortalPropsAreMissing = warnIfMenuPortalPropsAreMissing;