@salesforce/design-system-react
Version:
Salesforce Lightning Design System for React
155 lines (135 loc) • 6.98 kB
JavaScript
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
/* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved */
/* Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
// # Spinner Component --- SLDS for React
// Implements the [Spinner design pattern - 2.1.0-beta.3 (204)](https://latest-204.lightningdesignsystem.com/components/spinners) in React.
// ### React
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import checkProps from './check-props'; // ## Constants
import { SPINNER } from '../../utilities/constants';
import componentDoc from './component.json'; // ### Prop Types
var propTypes = {
/**
* **Assistive text for accessibility.**
* This object is merged with the default props object on every render.
* * `label`: Assistive text that is read out loud to screen readers.
*/
assistiveText: PropTypes.shape({
label: PropTypes.string
}),
/**
* Custom css classes applied to Spinner container
*/
containerClassName: PropTypes.string,
/**
* Custom css properties applied to Spinner container
*/
containerStyle: PropTypes.object,
/**
* Render the spinner inside of a container.
*/
hasContainer: PropTypes.bool,
/**
* Unique html id placed on div with role="status".
*/
id: PropTypes.string,
/**
* Adds delay of 300ms to the spinner
*/
isDelayed: PropTypes.bool,
/**
* Add styling to support a spinner inside an input field.
*/
isInput: PropTypes.bool,
/**
* Add styling to support an inline spinner inside of the document flow.
*/
isInline: PropTypes.bool,
/**
* Determines the size of the spinner
*/
size: PropTypes.oneOf(['xx-small', 'x-small', 'small', 'medium', 'large']),
/**
* Determines the color of the spinner: `base` is gray, `brand` is blue, and `inverse` is white.
*/
variant: PropTypes.oneOf(['base', 'brand', 'inverse'])
};
var defaultProps = {
assistiveText: {
label: 'Loading...'
},
isDelayed: false,
isInline: false,
isInput: false,
hasContainer: true,
size: 'medium',
variant: 'base'
};
/**
* Spinners are CSS loading indicators that should be shown when retrieving data or performing slow computations. In some cases, the first time a parent component loads, a stencil is preferred to indicate network activity.
*/
var Spinner = function Spinner(_ref) {
var containerClassName = _ref.containerClassName,
containerStyle = _ref.containerStyle,
id = _ref.id,
_ref$isDelayed = _ref.isDelayed,
isDelayed = _ref$isDelayed === void 0 ? defaultProps.isDelayed : _ref$isDelayed,
_ref$isInline = _ref.isInline,
isInline = _ref$isInline === void 0 ? defaultProps.isInline : _ref$isInline,
_ref$isInput = _ref.isInput,
isInput = _ref$isInput === void 0 ? defaultProps.isInput : _ref$isInput,
_ref$hasContainer = _ref.hasContainer,
hasContainer = _ref$hasContainer === void 0 ? defaultProps.hasContainer : _ref$hasContainer,
_ref$size = _ref.size,
size = _ref$size === void 0 ? defaultProps.size : _ref$size,
_ref$variant = _ref.variant,
variant = _ref$variant === void 0 ? defaultProps.variant : _ref$variant,
_ref$assistiveText = _ref.assistiveText,
assistiveText = _ref$assistiveText === void 0 ? defaultProps.assistiveText : _ref$assistiveText,
restProps = _objectWithoutProperties(_ref, ["containerClassName", "containerStyle", "id", "isDelayed", "isInline", "isInput", "hasContainer", "size", "variant", "assistiveText"]);
checkProps(SPINNER, _objectSpread({
containerClassName: containerClassName,
containerStyle: containerStyle,
id: id,
isDelayed: isDelayed,
isInline: isInline,
isInput: isInput,
hasContainer: hasContainer,
size: size,
variant: variant
}, restProps), componentDoc);
var mergedAssistiveText = typeof assistiveText === 'string' ? assistiveText : _objectSpread(_objectSpread({}, defaultProps.assistiveText), assistiveText).label;
var spinnerClassName = classNames('slds-spinner', _defineProperty({
'slds-spinner_inline': isInline,
'slds-input__spinner': isInput,
'slds-spinner_brand': variant === 'brand',
'slds-spinner_inverse': variant === 'inverse',
'slds-spinner_delayed': isDelayed
}, "slds-spinner_".concat(size), size));
var spinner = /*#__PURE__*/React.createElement("div", {
"aria-hidden": "false",
className: spinnerClassName,
id: id,
role: "status"
}, mergedAssistiveText && /*#__PURE__*/React.createElement("span", {
className: "slds-assistive-text"
}, mergedAssistiveText), /*#__PURE__*/React.createElement("div", {
className: "slds-spinner__dot-a"
}), /*#__PURE__*/React.createElement("div", {
className: "slds-spinner__dot-b"
}));
return hasContainer ? /*#__PURE__*/React.createElement("div", {
className: classNames(containerClassName, 'slds-spinner_container'),
style: containerStyle
}, spinner) : spinner;
};
Spinner.displayName = SPINNER;
Spinner.propTypes = propTypes;
export default Spinner;
//# sourceMappingURL=index.js.map