@atlaskit/checkbox
Version:
A checkbox is an input control that allows a user to select one or more options from a number of choices.
126 lines (123 loc) • 6.49 kB
JavaScript
/* checkbox.tsx generated by @compiled/babel-plugin v0.39.1 */
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("./checkbox.compiled.css");
var _react = _interopRequireWildcard(require("react"));
var React = _react;
var _runtime = require("@compiled/react/runtime");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _usePlatformLeafEventHandler = require("@atlaskit/analytics-next/usePlatformLeafEventHandler");
var _mergeRefs = _interopRequireDefault(require("@atlaskit/ds-lib/merge-refs"));
var _checkboxIcon = _interopRequireDefault(require("./internal/checkbox-icon"));
var _label = _interopRequireDefault(require("./internal/label"));
var _labelText = _interopRequireDefault(require("./internal/label-text"));
var _requiredIndicator = _interopRequireDefault(require("./internal/required-indicator"));
var _excluded = ["isChecked", "isDisabled", "isInvalid", "defaultChecked", "isIndeterminate", "onChange", "analyticsContext", "label", "name", "value", "isRequired", "testId", "xcss", "className"];
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
/**
* The input is visually hidden but remains in the DOM for accessibility.
* State-based styling is handled by the Label component using CSS custom properties
* that cascade to the CheckboxIcon, avoiding nested sibling selectors.
*/
var checkboxStyles = {
root: "_19itglyw _nd5lfibj _12ji1r31 _1qu2glyw _12y31o36 _1bsb1osq _4t3i1osq _r06hglyw _6rthze3t _1pfhze3t _12l2ze3t _ahbqze3t _tzy4idpf"
};
/**
* __Checkbox__
*
* A checkbox an input control that allows a user to select one or more options from a number of choices.
*
* - [Examples](https://atlassian.design/components/checkbox/examples)
* - [Code](https://atlassian.design/components/checkbox/code)
* - [Usage](https://atlassian.design/components/checkbox/usage)
*/
var Checkbox = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef)(function Checkbox(_ref, ref) {
var isCheckedProp = _ref.isChecked,
_ref$isDisabled = _ref.isDisabled,
isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
_ref$isInvalid = _ref.isInvalid,
isInvalid = _ref$isInvalid === void 0 ? false : _ref$isInvalid,
_ref$defaultChecked = _ref.defaultChecked,
defaultChecked = _ref$defaultChecked === void 0 ? false : _ref$defaultChecked,
_ref$isIndeterminate = _ref.isIndeterminate,
isIndeterminate = _ref$isIndeterminate === void 0 ? false : _ref$isIndeterminate,
onChangeProps = _ref.onChange,
analyticsContext = _ref.analyticsContext,
label = _ref.label,
name = _ref.name,
value = _ref.value,
isRequired = _ref.isRequired,
testId = _ref.testId,
xcss = _ref.xcss,
className = _ref.className,
rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
var _useState = (0, _react.useState)(isCheckedProp !== undefined ? isCheckedProp : defaultChecked),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isCheckedState = _useState2[0],
setIsCheckedState = _useState2[1];
var onChange = (0, _react.useCallback)(function (e, analyticsEvent) {
setIsCheckedState(e.target.checked);
if (onChangeProps) {
onChangeProps(e, analyticsEvent);
}
}, [onChangeProps]);
var onChangeAnalytics = (0, _usePlatformLeafEventHandler.usePlatformLeafEventHandler)({
fn: onChange,
action: 'changed',
analyticsData: analyticsContext,
componentName: 'checkbox',
packageName: "@atlaskit/checkbox",
packageVersion: "17.3.12"
});
var internalRef = (0, _react.useRef)(null);
var mergedRefs = (0, _mergeRefs.default)([internalRef, ref]);
// Use isChecked from the state if it is controlled
var isChecked = isCheckedProp === undefined ? isCheckedState : isCheckedProp;
(0, _react.useEffect)(function () {
if (internalRef.current) {
internalRef.current.indeterminate = isIndeterminate;
}
}, [isIndeterminate]);
return /*#__PURE__*/React.createElement(_label.default, {
isDisabled: isDisabled,
isChecked: isChecked,
isIndeterminate: isIndeterminate,
isInvalid: isInvalid,
label: label,
id: rest.id ? "".concat(rest.id, "-label") : undefined,
testId: testId && "".concat(testId, "--checkbox-label")
// Currently the rule hasn't been updated to enable "allowed" dynamic pass-throughs.
// When there is more usage of this pattern we'll update the lint rule.
,
xcss: xcss
}, /*#__PURE__*/React.createElement("input", (0, _extends2.default)({
// It is necessary only for Safari. It allows to render focus styles.
tabIndex: 0
}, rest, {
type: "checkbox",
ref: mergedRefs,
disabled: isDisabled,
checked: isChecked,
value: value,
name: name,
required: isRequired,
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
className: (0, _runtime.ax)([checkboxStyles.root, className]),
onChange: onChangeAnalytics,
"aria-invalid": isInvalid ? 'true' : undefined,
"data-testid": testId && "".concat(testId, "--hidden-checkbox"),
"data-invalid": isInvalid ? 'true' : undefined
})), /*#__PURE__*/React.createElement(_checkboxIcon.default, {
isIndeterminate: isIndeterminate,
isChecked: isChecked
}), label && /*#__PURE__*/React.createElement(_labelText.default, null, label, isRequired && /*#__PURE__*/React.createElement(_requiredIndicator.default, null)));
}));
Checkbox.displayName = 'Checkbox';
var _default = exports.default = Checkbox;