UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com's products.

113 lines (112 loc) 4.51 kB
"use strict"; "use client"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; exports.__esModule = true; exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _consts = _interopRequireDefault(require("./consts")); var _useTheme = _interopRequireDefault(require("../hooks/useTheme")); const CircleLoader = ({ animationDelay }) => { return /*#__PURE__*/React.createElement("div", { className: "animate-loader bg-cloud-dark size-200 me-150 rounded-full [&:nth-child(3)]:m-0", style: { animationDelay } }); }; const Loader = ({ type, customSize, title, ariaHidden }) => { const theme = (0, _useTheme.default)(); const isCircledIcon = type === _consts.default.BOX_LOADER || type === _consts.default.SEARCH_LOADER || type === _consts.default.INLINE_LOADER; if (customSize) { return /*#__PURE__*/React.createElement("svg", { viewBox: `0 0 ${customSize} ${customSize}`, className: "orbit-loading-spinner animate-spinner", style: { height: `${customSize}px`, width: `${customSize}px` }, role: "img", "aria-hidden": ariaHidden }, /*#__PURE__*/React.createElement("title", null, title), /*#__PURE__*/React.createElement("circle", { cx: "50%", cy: "50%", fill: "transparent", strokeWidth: "3px", stroke: type === _consts.default.BUTTON_LOADER ? "current" : theme.orbit.paletteCloudDark, strokeLinecap: "round", strokeDasharray: `${customSize * 3 + 8}px`, strokeDashoffset: `${Number(customSize) + 24}px`, r: customSize / 2 - 2 })); } if (isCircledIcon) { return /*#__PURE__*/React.createElement("div", { className: "flex items-center justify-center", "aria-hidden": ariaHidden, role: "img", "aria-label": title }, /*#__PURE__*/React.createElement(CircleLoader, null), /*#__PURE__*/React.createElement(CircleLoader, { animationDelay: "0.1s" }), /*#__PURE__*/React.createElement(CircleLoader, { animationDelay: "0.2s" })); } return /*#__PURE__*/React.createElement("svg", { viewBox: "0 0 40 40", className: "orbit-loading-spinner animate-spinner size-1000", stroke: type === _consts.default.BUTTON_LOADER ? "currentColor" : theme.orbit.paletteCloudDark, role: "img", "aria-hidden": ariaHidden }, /*#__PURE__*/React.createElement("title", null, title), /*#__PURE__*/React.createElement("circle", { cx: "50%", cy: "50%", fill: "transparent", strokeWidth: "3px", stroke: type === _consts.default.BUTTON_LOADER ? "current" : theme.orbit.paletteCloudDark, strokeLinecap: "round", r: "18", strokeDasharray: "128px", strokeDashoffset: "64px" })); }; const Loading = ({ loading = false, asComponent = "div", type = _consts.default.PAGE_LOADER, text, children, dataTest, customSize, title, id, ariaHidden }) => { const Element = text ? "div" : asComponent; return /*#__PURE__*/React.createElement(React.Fragment, null, Boolean(children) && !loading ? children : /*#__PURE__*/React.createElement(Element, { className: (0, _clsx.default)(["items-center", "overflow-hidden", "box-border", type === _consts.default.BUTTON_LOADER && "[&_.orbit-loading-spinner]:size-icon-medium absolute start-0 top-0 size-full justify-center", type === _consts.default.SEARCH_LOADER && "h-1000 justify-start", type === _consts.default.INLINE_LOADER && "inline-flex min-h-[19px] justify-center", type !== _consts.default.INLINE_LOADER && "flex", type === _consts.default.BOX_LOADER && "h-[80px] justify-center", type === _consts.default.PAGE_LOADER && "h-[120px] flex-col justify-center"]), style: { height: customSize }, "data-test": dataTest, id: id, "aria-hidden": ariaHidden ? "true" : undefined }, /*#__PURE__*/React.createElement(Loader, { title: title, type: type, customSize: customSize, ariaHidden: text ? "true" : undefined }), type !== _consts.default.BUTTON_LOADER && Boolean(text) && /*#__PURE__*/React.createElement("div", { className: (0, _clsx.default)(["font-base text-normal text-cloud-dark leading-normal", type === _consts.default.PAGE_LOADER ? "mt-400" : "ms-300"]) }, text))); }; Loading.displayName = "Loading"; var _default = exports.default = Loading;