UNPKG

@atlaskit/toggle

Version:

A toggle is used to view or switch between enabled or disabled states.

185 lines (177 loc) 7.91 kB
/* toggle.tsx generated by @compiled/babel-plugin v0.39.1 */ import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import "./toggle.compiled.css"; import { ax, ix } from "@compiled/react/runtime"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import React, { forwardRef, memo, useState } from 'react'; import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next'; import __noop from '@atlaskit/ds-lib/noop'; import { useId } from '@atlaskit/ds-lib/use-id'; import CheckMarkIcon from '@atlaskit/icon/core/check-mark'; import CloseIcon from '@atlaskit/icon/core/cross'; import { fg } from '@atlaskit/platform-feature-flags'; import Spinner from '@atlaskit/spinner'; import VisuallyHidden from '@atlaskit/visually-hidden'; import IconContainer from './icon-container'; var LOADING_LABEL = ', Loading'; var baseStyles = null; var sizeStyles = { regular: "_2rko1rr0 _4t3ipxbi _1bsbxy5q _kfgtutpp _1mp41crf", large: "_2rko1rr0 _4t3iv47k _1bsb1jfw _kfgtpxbi _1mp47vkz" }; /** * Slider knob translate transforms per size, applied when checked. */ var checkedSliderStyles = { regular: "_7dwz1fbe", large: "_7dwzw12q" }; /** * Applied when the toggle is checked */ var checkedStyles = null; /** * Applied when the toggle is checked and not disabled. */ var checkedHoveredStyles = null; /** * Applied when the toggle is unchecked and not disabled. */ var uncheckedHoveredStyles = null; /** * Applied when the toggle is disabled. */ var disabledStyles = null; /** * Removes the unnecessary zIndex from the disabled toggle handle (legacy selector path) * that caused it to render above overlapping elements like select menus. */ var basicDisabledZIndexFixStyles = null; /** * Removes the unnecessary zIndex from the disabled toggle handle (atomic path) * that caused it to render above overlapping elements like select menus. */ var atomicDisabledZIndexFixStyles = null; var inputStyles = null; var noop = __noop; var analyticsAttributes = { componentName: 'toggle', packageName: "@atlaskit/toggle", packageVersion: "15.6.2" }; /** * __Toggle__ * * A toggle is used to view or switch between enabled or disabled states. * * - [Examples](https://atlassian.design/components/toggle/examples) * - [Code](https://atlassian.design/components/toggle/code) * - [Usage](https://atlassian.design/components/toggle/usage) */ var Toggle = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function (props, ref) { var _props$defaultChecked = props.defaultChecked, defaultChecked = _props$defaultChecked === void 0 ? false : _props$defaultChecked, _props$isDisabled = props.isDisabled, isDisabled = _props$isDisabled === void 0 ? false : _props$isDisabled, _props$onBlur = props.onBlur, providedOnBlur = _props$onBlur === void 0 ? noop : _props$onBlur, _props$onChange = props.onChange, providedChange = _props$onChange === void 0 ? noop : _props$onChange, _props$onFocus = props.onFocus, providedFocus = _props$onFocus === void 0 ? noop : _props$onFocus, _props$size = props.size, size = _props$size === void 0 ? 'regular' : _props$size, _props$name = props.name, name = _props$name === void 0 ? '' : _props$name, _props$value = props.value, value = _props$value === void 0 ? '' : _props$value, isChecked = props.isChecked, isLoading = props.isLoading, analyticsContext = props.analyticsContext, id = props.id, testId = props.testId, label = props.label, descriptionId = props.descriptionId; var isControlled = typeof isChecked === 'undefined'; var _useState = useState(defaultChecked), _useState2 = _slicedToArray(_useState, 2), checked = _useState2[0], setChecked = _useState2[1]; var loadingLabelId = useId(); var handleBlur = usePlatformLeafEventHandler(_objectSpread({ fn: providedOnBlur, action: 'blur', analyticsData: analyticsContext }, analyticsAttributes)); var handleFocus = usePlatformLeafEventHandler(_objectSpread({ fn: providedFocus, action: 'focus', analyticsData: analyticsContext }, analyticsAttributes)); var handleChange = usePlatformLeafEventHandler(_objectSpread({ fn: function fn(event, analyticsEvent) { if (isControlled) { setChecked(function (checked) { return !checked; }); } return providedChange(event, analyticsEvent); }, action: 'change', analyticsData: analyticsContext }, analyticsAttributes)); var shouldChecked = isControlled ? checked : isChecked; var labelId = useId(); return /*#__PURE__*/React.createElement("label", { "data-testid": testId, className: ax(["_1h6d1j28 _1dqonqa1 _189e1dm9 _1e0c1o8l _vchh1ntv _kqswh2mm _1y1m1ntv _bfhk1aqn _syaz5w2r _80omtlke _6rthv77o _1pfhv77o _12l2v77o _ahbqv77o _85i5v77o _1q51v77o _y4tiv77o _bozgv77o _1oeci9qs _k8m01e03 _6fl4574g _rfx31qll _1cs8stnw _1rus5w2r _1kt9b3bt _1fkr1y44 _z5wt1y44 _1cg6i9qs _qs2z1e03 _mlfe574g _1ys41v1w _ju3ddkaa _16rslghj _i5ec1w7i", sizeStyles[size], shouldChecked && "_bfhkkcmj", shouldChecked && checkedSliderStyles[size], !isDisabled && shouldChecked && "_irr3y7x8", !isDisabled && !shouldChecked && "_irr31ibz", isDisabled && "_bfhkby5v _syaz2sac _80om13gf _1g0vkb7n", fg('platform-toggle-fix-disabled-zindex') && "_1il8n7od", isDisabled && fg('platform-toggle-fix-disabled-zindex') && "_1g0vn7od"]) }, label ? /*#__PURE__*/React.createElement("span", { id: labelId, hidden: true }, isLoading ? "".concat(label).concat(LOADING_LABEL) : label) : null, /*#__PURE__*/React.createElement("input", { ref: ref, checked: shouldChecked, disabled: isDisabled, id: id, name: name, onBlur: handleBlur, onChange: handleChange, onFocus: handleFocus, type: "checkbox", value: value, "data-testid": testId && "".concat(testId, "--input"), "aria-labelledby": isLoading && label ? "".concat(labelId, " ").concat(loadingLabelId) : label ? labelId : undefined, "aria-describedby": descriptionId, className: ax(["_19pkidpf _2hwxidpf _otyridpf _18u0idpf _ca0qidpf _u5f3idpf _n3tdidpf _19bvidpf _19itglyw _tzy4idpf _nt751snc _49pcagmp _1hvw10yn"]) }), /*#__PURE__*/React.createElement(IconContainer, { size: size, isHidden: !shouldChecked, position: "left" }, isLoading && shouldChecked ? /*#__PURE__*/React.createElement(Spinner, { size: "xsmall", appearance: "invert" }) : /*#__PURE__*/React.createElement(CheckMarkIcon, { label: "", color: "currentColor", testId: testId && "".concat(testId, "--toggle-check-icon"), size: "small" })), /*#__PURE__*/React.createElement(IconContainer, { size: size, isHidden: shouldChecked, position: "right" }, isLoading && !shouldChecked ? /*#__PURE__*/React.createElement(Spinner, { size: "xsmall", appearance: "invert" }) : /*#__PURE__*/React.createElement(CloseIcon, { label: "", color: "currentColor", testId: testId && "".concat(testId, "--toggle-cross-icon"), size: "small" })), isLoading && !label && /*#__PURE__*/React.createElement(VisuallyHidden, { id: loadingLabelId }, LOADING_LABEL)); })); Toggle.displayName = 'Toggle'; export default Toggle;