UNPKG

react95

Version:

Refreshed Windows95 UI components for modern web apps - React95

128 lines (115 loc) 4.38 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var styled = require('styled-components'); var index = require('../common/index.js'); var useControlledOrUncontrolled = require('../common/hooks/useControlledOrUncontrolled.js'); var SwitchBase = require('../common/SwitchBase.js'); var index$1 = require('../common/utils/index.js'); var ScrollView = require('../ScrollView/ScrollView.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled); const sharedCheckboxStyles = styled.css` width: ${SwitchBase.size}px; height: ${SwitchBase.size}px; display: flex; align-items: center; justify-content: space-around; margin-right: 0.5rem; `; const StyledCheckbox = styled__default["default"](ScrollView.StyledScrollView)` ${sharedCheckboxStyles} width: ${SwitchBase.size}px; height: ${SwitchBase.size}px; background: ${({ $disabled, theme }) => $disabled ? theme.material : theme.canvas}; &:before { box-shadow: none; } `; const StyledFlatCheckbox = styled__default["default"].div` position: relative; box-sizing: border-box; display: inline-block; background: ${({ $disabled, theme }) => $disabled ? theme.flatLight : theme.canvas}; ${sharedCheckboxStyles} width: ${SwitchBase.size - 4}px; height: ${SwitchBase.size - 4}px; outline: none; border: 2px solid ${({ theme }) => theme.flatDark}; background: ${({ $disabled, theme }) => $disabled ? theme.flatLight : theme.canvas}; `; const CheckmarkIcon = styled__default["default"].span.attrs(() => ({ "data-testid": "checkmarkIcon" }))` display: inline-block; position: relative; width: 100%; height: 100%; &:after { content: ''; display: block; position: absolute; left: 50%; top: calc(50% - 1px); width: 3px; height: 7px; border: solid ${({ $disabled, theme }) => $disabled ? theme.checkmarkDisabled : theme.checkmark}; border-width: 0 3px 3px 0; transform: translate(-50%, -50%) rotate(45deg); border-color: ${(p) => p.$disabled ? p.theme.checkmarkDisabled : p.theme.checkmark}; } `; const IndeterminateIcon = styled__default["default"].span.attrs(() => ({ "data-testid": "indeterminateIcon" }))` display: inline-block; position: relative; width: 100%; height: 100%; &:after { content: ''; display: block; width: 100%; height: 100%; ${({ $disabled, theme }) => index.createHatchedBackground({ mainColor: $disabled ? theme.checkmarkDisabled : theme.checkmark })} background-position: 0px 0px, 2px 2px; } `; const CheckboxComponents = { flat: StyledFlatCheckbox, default: StyledCheckbox }; const Checkbox = React.forwardRef(({ checked, className = "", defaultChecked = false, disabled = false, indeterminate = false, label = "", onChange = index$1.noOp, style = {}, value, variant = "default", ...otherProps }, ref) => { var _a; const [state, setState] = useControlledOrUncontrolled({ defaultValue: defaultChecked, onChange, readOnly: (_a = otherProps.readOnly) !== null && _a !== void 0 ? _a : disabled, value: checked }); const handleChange = React.useCallback((e) => { const newState = e.target.checked; setState(newState); onChange(e); }, [onChange, setState]); const CheckboxComponent = CheckboxComponents[variant]; let Icon = null; if (indeterminate) { Icon = IndeterminateIcon; } else if (state) { Icon = CheckmarkIcon; } return React__default["default"].createElement( SwitchBase.StyledLabel, { "$disabled": disabled, className, style }, React__default["default"].createElement(SwitchBase.StyledInput, { disabled, onChange: disabled ? void 0 : handleChange, readOnly: disabled, type: "checkbox", value, checked: state, "data-indeterminate": indeterminate, ref, ...otherProps }), React__default["default"].createElement(CheckboxComponent, { "$disabled": disabled, role: "presentation" }, Icon && React__default["default"].createElement(Icon, { "$disabled": disabled, variant })), label && React__default["default"].createElement(SwitchBase.LabelText, null, label) ); }); Checkbox.displayName = "Checkbox"; exports.Checkbox = Checkbox;