@music-loopy/loops
Version:
A React component library for Music Loopy Applications and websites
157 lines (156 loc) • 12.4 kB
JavaScript
"use strict";
exports.__esModule = true;
exports["default"] = exports.CheckboxSelect = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _Icon = _interopRequireDefault(require("../Icon"));
var _lia = require("react-icons/lia");
var _excluded = ["color", "label", "options", "onChange", "firstRow", "icon", "selectedOptions"];
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
function _taggedTemplateLiteralLoose(e, t) { return t || (t = e.slice(0)), e.raw = t, e; }
var StyledContainer = _styledComponents["default"].div(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n width: 100%;\n border: 1px solid\n ", ";\n padding: 5px;\n background: ", ";\n border-radius: 5px;\n overflow: hidden;\n transition:\n max-height 0.25s ease-in-out,\n opacity 0.25s ease-in-out;\n max-height: ", ";\n ", "\n"])), function (props) {
return props.theme.colors[props.color.border || 'primary'].color;
}, function (props) {
return props.theme.colors[props.color.background || 'primary'].color;
}, function (props) {
return props.isOpen ? '50vh' : '100px';
}, function (props) {
return props.isOpen && "position: relative;\n overflow: scroll;\n box-shadow: 1px 1px 11px 1px #00000057;\n ";
});
var IconContainer = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: 5%;\n margin-left: 1%;\n svg {\n color: ", ";\n }\n"])), function (props) {
return props.theme.colors[props.color || 'primary'].color;
});
var LabelContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n width: 80%;\n margin-left: 2%;\n color: ", ";\n"])), function (props) {
return props.theme.colors[props.color || 'primary'].color;
});
var Circle = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n width: 15px;\n height: 15px;\n font-weight: 600;\n border: 2px solid\n ", ";\n transition: transform 0.25s ease-in-out;\n svg {\n stroke-width: 2.5px;\n }\n &:hover {\n cursor: pointer;\n transform: scale(1.1);\n }\n"])), function (props) {
return props.theme.colors[props.color || 'primary'].color;
});
var Rows = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 5px;\n flex-direction: column;\n padding-top: ", ";\n padding-bottom: ", ";\n margin-left: 7%;\n width: 100%;\n margin-top: ", ";\n transition: all 0.25s ease-in-out;\n"])), function (props) {
return props.isOpen ? '10px' : '0';
}, function (props) {
return props.isOpen ? '10px' : '0';
}, function (props) {
return props.isOpen ? '5%' : '0';
});
var Row = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex-direction: row;\n transition: all 0.25s ease-in-out;\n"])));
var RadioButtonContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 10px;\n flex-direction: row;\n transition: all 0.25s ease-in-out;\n"])));
var Checkbox = _styledComponents["default"].input(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n width: 10px;\n transition: all 0.25s ease-in-out;\n visibility: hidden;\n position: absolute;\n &::after {\n --color-border: ", ";\n --color-dot: var(--color-border);\n content: '';\n visibility: visible;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: calc(var(--padding) * -1);\n width: var(--size);\n height: var(--size);\n border-radius: 1px;\n color: lightgray;\n\n box-shadow: 0 0 0 2px var(--color-border);\n pointer-events: none;\n }\n\n &:checked::after {\n content: '\u2713';\n color: var(--color-dot);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n"])), function (props) {
var _props$color;
return props.theme.colors[((_props$color = props.color) === null || _props$color === void 0 ? void 0 : _props$color.text) || 'darkGrey'].color;
});
var Label = _styledComponents["default"].label(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n color: ", ";\n font-size: 12px;\n --size: 10px;\n --padding: calc(var(--size) + 1em);\n position: relative;\n margin: 0.25em;\n min-height: var(--size);\n padding-left: var(--padding);\n cursor: pointer;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n transition: all 0.25s ease-in-out;\n"])), function (props) {
var _props$color2;
return props.theme.colors[((_props$color2 = props.color) === null || _props$color2 === void 0 ? void 0 : _props$color2.text) || 'darkGrey' || 'primary'].color;
});
var FirstRow = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 5px;\n z-index: 1;\n flex-direction: row;\n ", "\n"])), function (props) {
return props.isOpen && "\n position: sticky;\n background: hsl(\n from " + props.theme.colors[props.background || 'primary'].color + " h s calc(l - 5)\n );\n top: -10px;\n left: -10px;\n right: -2px;\n z-index: 10;\n padding: 5px;\n margin: -5px;\n ";
});
var CheckboxSelect = exports.CheckboxSelect = function CheckboxSelect(_ref) {
var color = _ref.color,
label = _ref.label,
options = _ref.options,
onChange = _ref.onChange,
firstRow = _ref.firstRow,
icon = _ref.icon,
selectedOptions = _ref.selectedOptions,
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
var _useState = (0, _react.useState)(false),
isOpen = _useState[0],
setIsOpen = _useState[1];
var _useState2 = (0, _react.useState)(selectedOptions || []),
_selectedOptions = _useState2[0],
setSelectedOptions = _useState2[1];
var openSelect = function openSelect() {
setIsOpen(!isOpen);
};
var handleCheckboxSelect = function handleCheckboxSelect(e) {
var checked = e.target.checked;
if (checked) {
var option = options.find(function (option) {
return option.id === e.target.id;
});
var newSelectedOptions = [].concat(_selectedOptions, [option]);
onChange(newSelectedOptions);
setSelectedOptions(newSelectedOptions);
} else {
var _newSelectedOptions = _selectedOptions.filter(function (option) {
return option.id !== e.target.id;
});
onChange(_newSelectedOptions);
setSelectedOptions(_newSelectedOptions);
}
};
return /*#__PURE__*/_react["default"].createElement(StyledContainer, _extends({
color: color,
isOpen: isOpen
}, rest), /*#__PURE__*/_react["default"].createElement(FirstRow, {
isOpen: isOpen,
style: {
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between'
},
background: isOpen ? (firstRow === null || firstRow === void 0 ? void 0 : firstRow.background) || 'light' : (color === null || color === void 0 ? void 0 : color.icon) || 'darkGrey'
}, /*#__PURE__*/_react["default"].createElement(IconContainer, {
color: isOpen ? (firstRow === null || firstRow === void 0 ? void 0 : firstRow.text) || 'darkGrey' : (color === null || color === void 0 ? void 0 : color.icon) || 'darkGrey'
}, /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
name: icon,
fill: isOpen ? (firstRow === null || firstRow === void 0 ? void 0 : firstRow.text) || 'darkGrey' : (color === null || color === void 0 ? void 0 : color.icon) || 'darkGrey'
})), /*#__PURE__*/_react["default"].createElement(LabelContainer, {
color: isOpen ? (firstRow === null || firstRow === void 0 ? void 0 : firstRow.text) || 'darkGrey' : (color === null || color === void 0 ? void 0 : color.text) || 'darkGrey'
}, label), /*#__PURE__*/_react["default"].createElement(IconContainer, {
color: isOpen ? (firstRow === null || firstRow === void 0 ? void 0 : firstRow.text) || 'darkGrey' : (color === null || color === void 0 ? void 0 : color.icon) || 'darkGrey',
onClick: function onClick() {
return openSelect();
}
}, isOpen ? /*#__PURE__*/_react["default"].createElement(Circle, {
color: isOpen ? (firstRow === null || firstRow === void 0 ? void 0 : firstRow.text) || 'darkGrey' : (color === null || color === void 0 ? void 0 : color.icon) || 'darkGrey'
}, ' ', /*#__PURE__*/_react["default"].createElement(_lia.LiaAngleUpSolid, {
size: "2em"
})) : /*#__PURE__*/_react["default"].createElement(Circle, {
color: isOpen ? (firstRow === null || firstRow === void 0 ? void 0 : firstRow.text) || 'darkGrey' : (color === null || color === void 0 ? void 0 : color.icon) || 'darkGrey'
}, /*#__PURE__*/_react["default"].createElement(_lia.LiaAngleDownSolid, {
size: "2em"
})))), /*#__PURE__*/_react["default"].createElement(Row, null, /*#__PURE__*/_react["default"].createElement(Rows, {
isOpen: isOpen,
color: color
}, isOpen && options.map(function (option) {
return /*#__PURE__*/_react["default"].createElement(Row, {
key: option.label
}, /*#__PURE__*/_react["default"].createElement(RadioButtonContainer, null, /*#__PURE__*/_react["default"].createElement(Label, {
className: "radio",
color: color,
htmlFor: option.id
}, /*#__PURE__*/_react["default"].createElement(Checkbox, {
type: "checkbox",
id: option.id,
name: option.name,
onClick: handleCheckboxSelect,
checked: _selectedOptions.some(function (selectedOption) {
return selectedOption.id === option.id;
}),
color: color
}), option.label)));
}))));
};
CheckboxSelect.propTypes = process.env.NODE_ENV !== "production" ? {
color: _propTypes["default"].shape({
border: _propTypes["default"].string,
text: _propTypes["default"].string,
icon: _propTypes["default"].string
}),
label: _propTypes["default"].string.isRequired,
options: _propTypes["default"].arrayOf(_propTypes["default"].shape({
id: _propTypes["default"].string,
name: _propTypes["default"].string,
label: _propTypes["default"].string
}))
} : {};
var _default = exports["default"] = CheckboxSelect;