@spaced-out/ui-design-system 0.1.101 → 0.1.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.1.103](https://github.com/spaced-out/ui-design-system/compare/v0.1.102...v0.1.103) (2024-07-03)
6
+
7
+
8
+ ### Features
9
+
10
+ * ⭕️ shimmer component ([#233](https://github.com/spaced-out/ui-design-system/issues/233)) ([bad30af](https://github.com/spaced-out/ui-design-system/commit/bad30af1ca6b4b2b713b69b35dc3b78871eba6fe))
11
+
12
+ ### [0.1.102](https://github.com/spaced-out/ui-design-system/compare/v0.1.101...v0.1.102) (2024-07-03)
13
+
14
+
15
+ ### Features
16
+
17
+ * 🌈 form title wrapper gradient button and basic table ([#232](https://github.com/spaced-out/ui-design-system/issues/232)) ([8905147](https://github.com/spaced-out/ui-design-system/commit/89051477ad5320dfb1324f657a1ad745f43269c4))
18
+
5
19
  ### [0.1.101](https://github.com/spaced-out/ui-design-system/compare/v0.1.100...v0.1.101) (2024-06-21)
6
20
 
7
21
 
@@ -150,6 +150,9 @@
150
150
  "720": {
151
151
  "value": "720px"
152
152
  },
153
+ "800": {
154
+ "value": "800px"
155
+ },
153
156
  "880": {
154
157
  "value": "880px"
155
158
  },
@@ -14,12 +14,22 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
14
14
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
15
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
16
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
+ /**
18
+ * Note(Nishant): Although Button supports gradient as a type, its not currently customizable really.
19
+ * This only supports pre-defined gradient that moves from left to right.
20
+ * If someone wants to add more gradients, the expectation is that they would add it through a wrapper className.
21
+ *
22
+ * We could have taken an extra prop to take in the Gradient colors but that should not be encouraged
23
+ * as it would add an additional overhead on the component to figure out exact color values from string tokens
24
+ * and since this is rarely used type anyway, it should be avoided.
25
+ */
17
26
  const BUTTON_TYPES = Object.freeze({
18
27
  primary: 'primary',
19
28
  secondary: 'secondary',
20
29
  tertiary: 'tertiary',
21
30
  ghost: 'ghost',
22
- danger: 'danger'
31
+ danger: 'danger',
32
+ gradient: 'gradient'
23
33
  });
24
34
  exports.BUTTON_TYPES = BUTTON_TYPES;
25
35
  const BUTTON_ACTION_TYPE = Object.freeze({
@@ -33,14 +43,16 @@ const ButtonTypeToIconColorMap = {
33
43
  secondary: 'clickable',
34
44
  tertiary: 'primary',
35
45
  ghost: 'primary',
36
- danger: 'inversePrimary'
46
+ danger: 'inversePrimary',
47
+ gradient: 'inversePrimary'
37
48
  };
38
49
  const ButtonTypeToLoaderColorMap = {
39
50
  primary: 'colorTextInversePrimary',
40
51
  secondary: 'colorTextClickable',
41
52
  tertiary: 'colorTextPrimary',
42
53
  ghost: 'colorTextPrimary',
43
- danger: 'colorTextInversePrimary'
54
+ danger: 'colorTextInversePrimary',
55
+ gradient: 'colorTextInversePrimary'
44
56
  };
45
57
  const UnstyledButton = /*#__PURE__*/React.forwardRef((_ref, ref) => {
46
58
  let {
@@ -98,6 +110,7 @@ const Button = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
98
110
  [_ButtonModule.default.tertiary]: type === 'tertiary',
99
111
  [_ButtonModule.default.ghost]: type === 'ghost',
100
112
  [_ButtonModule.default.danger]: type === 'danger',
113
+ [_ButtonModule.default.gradient]: type === 'gradient',
101
114
  [_ButtonModule.default.disabled]: disabled,
102
115
  [_ButtonModule.default.small]: size === 'small',
103
116
  [_ButtonModule.default.medium]: size === 'medium',
@@ -13,12 +13,22 @@ import css from './Button.module.css';
13
13
 
14
14
  type ClassNames = $ReadOnly<{wrapper?: string, icon?: string, text?: string}>;
15
15
 
16
+ /**
17
+ * Note(Nishant): Although Button supports gradient as a type, its not currently customizable really.
18
+ * This only supports pre-defined gradient that moves from left to right.
19
+ * If someone wants to add more gradients, the expectation is that they would add it through a wrapper className.
20
+ *
21
+ * We could have taken an extra prop to take in the Gradient colors but that should not be encouraged
22
+ * as it would add an additional overhead on the component to figure out exact color values from string tokens
23
+ * and since this is rarely used type anyway, it should be avoided.
24
+ */
16
25
  export const BUTTON_TYPES = Object.freeze({
17
26
  primary: 'primary',
18
27
  secondary: 'secondary',
19
28
  tertiary: 'tertiary',
20
29
  ghost: 'ghost',
21
30
  danger: 'danger',
31
+ gradient: 'gradient',
22
32
  });
23
33
 
24
34
  export const BUTTON_ACTION_TYPE = Object.freeze({
@@ -66,6 +76,7 @@ const ButtonTypeToIconColorMap = {
66
76
  tertiary: 'primary',
67
77
  ghost: 'primary',
68
78
  danger: 'inversePrimary',
79
+ gradient: 'inversePrimary',
69
80
  };
70
81
 
71
82
  const ButtonTypeToLoaderColorMap = {
@@ -74,6 +85,7 @@ const ButtonTypeToLoaderColorMap = {
74
85
  tertiary: 'colorTextPrimary',
75
86
  ghost: 'colorTextPrimary',
76
87
  danger: 'colorTextInversePrimary',
88
+ gradient: 'colorTextInversePrimary',
77
89
  };
78
90
 
79
91
  export const UnstyledButton: React$AbstractComponent<
@@ -146,6 +158,7 @@ export const Button: React$AbstractComponent<ButtonProps, HTMLButtonElement> =
146
158
  [css.tertiary]: type === 'tertiary',
147
159
  [css.ghost]: type === 'ghost',
148
160
  [css.danger]: type === 'danger',
161
+ [css.gradient]: type === 'gradient',
149
162
  [css.disabled]: disabled,
150
163
  [css.small]: size === 'small',
151
164
  [css.medium]: size === 'medium',
@@ -29,7 +29,10 @@
29
29
  colorTextClickable,
30
30
  colorTextDisabled,
31
31
 
32
- colorBorderSecondary
32
+ colorBorderSecondary,
33
+
34
+ colorFillPrimary,
35
+ colorInformation
33
36
 
34
37
  ) from '../../styles/variables/_color.css';
35
38
 
@@ -151,6 +154,16 @@ button {
151
154
  background-color: colorButtonFillPrimaryPressed;
152
155
  }
153
156
 
157
+ /* Currently Gradient Buttons don't support hover / active states */
158
+ .gradient {
159
+ color: colorTextInversePrimary;
160
+ background-image: linear-gradient(
161
+ to right,
162
+ colorFillPrimary,
163
+ colorInformation
164
+ );
165
+ }
166
+
154
167
  .secondary {
155
168
  color: colorTextClickable;
156
169
  background-color: colorButtonFillSecondaryEnabled;
@@ -231,6 +244,7 @@ button {
231
244
  color: colorTextDisabled;
232
245
  background-color: colorFillDisabled;
233
246
  border: initial;
247
+ background-image: initial;
234
248
  }
235
249
 
236
250
  .hidden {
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FormTitleWrapper = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _classify = _interopRequireDefault(require("../../utils/classify"));
9
+ var _Icon = require("../Icon");
10
+ var _FormTitleWrapperModule = _interopRequireDefault(require("./FormTitleWrapper.module.css"));
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+
15
+ const FormTitleWrapper = /*#__PURE__*/React.forwardRef((_ref, ref) => {
16
+ let {
17
+ classNames,
18
+ iconType,
19
+ iconName,
20
+ iconSize = 'small',
21
+ iconColor,
22
+ title,
23
+ rightSlot
24
+ } = _ref;
25
+ return /*#__PURE__*/React.createElement("div", {
26
+ ref: ref,
27
+ "data-testid": "FormTitleWrapper",
28
+ className: _FormTitleWrapperModule.default.container
29
+ }, /*#__PURE__*/React.createElement("div", {
30
+ className: (0, _classify.default)(_FormTitleWrapperModule.default.leftSection, classNames?.wrapper)
31
+ }, !!iconName && /*#__PURE__*/React.createElement(_Icon.Icon, {
32
+ type: iconType,
33
+ name: iconName,
34
+ size: iconSize,
35
+ color: iconColor
36
+ }), /*#__PURE__*/React.createElement("div", {
37
+ className: (0, _classify.default)(_FormTitleWrapperModule.default.componentHousing, classNames?.title)
38
+ }, title)), /*#__PURE__*/React.createElement("div", {
39
+ className: (0, _classify.default)(_FormTitleWrapperModule.default.rightSection, classNames?.rightSlot)
40
+ }, rightSlot));
41
+ });
42
+ exports.FormTitleWrapper = FormTitleWrapper;
@@ -0,0 +1,68 @@
1
+ // @flow strict
2
+
3
+ import * as React from 'react';
4
+
5
+ import type {ColorTypes} from '../../types/typography';
6
+ import classify from '../../utils/classify';
7
+ import type {IconSize, IconType} from '../Icon';
8
+ import {Icon} from '../Icon';
9
+
10
+ import css from './FormTitleWrapper.module.css';
11
+
12
+
13
+ type ClassNames = $ReadOnly<{
14
+ wrapper?: string,
15
+ title?: string,
16
+ rightSlot?: string,
17
+ }>;
18
+
19
+ export type FormTitleWrapperProps = {
20
+ classNames?: ClassNames,
21
+ iconType?: IconType,
22
+ iconName?: string,
23
+ iconSize?: IconSize,
24
+ iconColor?: ColorTypes,
25
+ title: React.Node, // Should always atleast have a title
26
+ rightSlot?: React.Node,
27
+ };
28
+
29
+ export const FormTitleWrapper: React$AbstractComponent<
30
+ FormTitleWrapperProps,
31
+ HTMLDivElement,
32
+ > = React.forwardRef<FormTitleWrapperProps, HTMLDivElement>(
33
+ (
34
+ {
35
+ classNames,
36
+ iconType,
37
+ iconName,
38
+ iconSize = 'small',
39
+ iconColor,
40
+ title,
41
+ rightSlot,
42
+ }: FormTitleWrapperProps,
43
+ ref,
44
+ ) => (
45
+ <div ref={ref} data-testid="FormTitleWrapper" className={css.container}>
46
+ <div className={classify(css.leftSection, classNames?.wrapper)}>
47
+ {!!iconName && (
48
+ <Icon
49
+ type={iconType}
50
+ name={iconName}
51
+ size={iconSize}
52
+ color={iconColor}
53
+ />
54
+ )}
55
+ {/* This is to safeguard semantics as it internally composes from a subTitleSmall className
56
+ we don't fix the component here as <SubtitleSmall> resolves to <h4> and since title is a React.Node,
57
+ this would break semantics in case custom components are passed inside
58
+ */}
59
+ <div className={classify(css.componentHousing, classNames?.title)}>
60
+ {title}
61
+ </div>
62
+ </div>
63
+ <div className={classify(css.rightSection, classNames?.rightSlot)}>
64
+ {rightSlot}
65
+ </div>
66
+ </div>
67
+ ),
68
+ );
@@ -0,0 +1,24 @@
1
+ @value (colorFillPrimary) from '../../styles/variables/_color.css';
2
+ @value (sizeFluid) from '../../styles/variables/_size.css';
3
+ @value (spaceSmall, spaceXSmall) from '../../styles/variables/_space.css';
4
+
5
+ .container {
6
+ display: flex;
7
+ composes: borderTopPrimary from '../../styles/border.module.css';
8
+ justify-content: space-between;
9
+ align-items: center;
10
+ width: sizeFluid;
11
+ padding-top: spaceSmall;
12
+ padding-bottom: spaceSmall;
13
+ }
14
+
15
+ .leftSection {
16
+ display: flex;
17
+ align-items: center;
18
+ gap: spaceXSmall;
19
+ }
20
+
21
+ .componentHousing {
22
+ display: flex;
23
+ composes: subTitleSmall from '../../styles/typography.module.css';
24
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _FormTitleWrapper = require("./FormTitleWrapper");
7
+ Object.keys(_FormTitleWrapper).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _FormTitleWrapper[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _FormTitleWrapper[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,3 @@
1
+ // @flow strict
2
+
3
+ export * from './FormTitleWrapper';
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Shimmer = exports.SHIMMER_TYPE_TO_BORDER_RADIUS_MAP = exports.SHIMMER_TYPES = exports.KPIShimmer = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _border = require("../../styles/variables/_border");
9
+ var _size = require("../../styles/variables/_size");
10
+ var _classify = _interopRequireDefault(require("../../utils/classify"));
11
+ var _string = require("../../utils/string");
12
+ var _ShimmerModule = _interopRequireDefault(require("./Shimmer.module.css"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+
17
+ const SHIMMER_TYPES = Object.freeze({
18
+ text: 'text',
19
+ rounded: 'rounded',
20
+ circular: 'circular',
21
+ rectangular: 'rectangular'
22
+ });
23
+ exports.SHIMMER_TYPES = SHIMMER_TYPES;
24
+ const SHIMMER_TYPE_TO_BORDER_RADIUS_MAP = Object.freeze({
25
+ text: _border.borderRadiusXSmall,
26
+ rounded: _border.borderRadiusMedium,
27
+ circular: _border.borderRadiusCircle,
28
+ rectangular: _border.borderRadiusNone
29
+ });
30
+ exports.SHIMMER_TYPE_TO_BORDER_RADIUS_MAP = SHIMMER_TYPE_TO_BORDER_RADIUS_MAP;
31
+ const Shimmer = /*#__PURE__*/React.forwardRef((_ref, ref) => {
32
+ let {
33
+ classNames,
34
+ show = true,
35
+ type = SHIMMER_TYPES.text,
36
+ children,
37
+ width = _size.size40,
38
+ height = _size.sizeFluid,
39
+ borderRadius
40
+ } = _ref;
41
+ if (!show) {
42
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
43
+ }
44
+ const borderRadiusValue = borderRadius ?? SHIMMER_TYPE_TO_BORDER_RADIUS_MAP[type];
45
+ return /*#__PURE__*/React.createElement("span", {
46
+ ref: ref,
47
+ "data-testid": "Shimmer",
48
+ className: (0, _classify.default)(_ShimmerModule.default.wrapper, _ShimmerModule.default[type], classNames?.wrapper),
49
+ style: {
50
+ '--width': (0, _string.appendPx)(width),
51
+ '--height': (0, _string.appendPx)(height),
52
+ '--border-radius': (0, _string.appendPx)(borderRadiusValue)
53
+ }
54
+ });
55
+ });
56
+ exports.Shimmer = Shimmer;
57
+ const KPIShimmer = _ref2 => {
58
+ let {
59
+ textWidth = 150
60
+ } = _ref2;
61
+ return /*#__PURE__*/React.createElement("div", {
62
+ className: _ShimmerModule.default.kpiBox
63
+ }, /*#__PURE__*/React.createElement("div", {
64
+ className: _ShimmerModule.default.section
65
+ }, /*#__PURE__*/React.createElement(Shimmer, {
66
+ type: "rounded",
67
+ width: 60,
68
+ height: 60
69
+ })), /*#__PURE__*/React.createElement("div", {
70
+ className: _ShimmerModule.default.section
71
+ }, /*#__PURE__*/React.createElement(Shimmer, {
72
+ type: "text",
73
+ width: textWidth,
74
+ height: 15
75
+ }), /*#__PURE__*/React.createElement(Shimmer, {
76
+ type: "text",
77
+ width: textWidth,
78
+ height: 25
79
+ }), /*#__PURE__*/React.createElement(Shimmer, {
80
+ type: "text",
81
+ width: textWidth,
82
+ height: 15
83
+ })));
84
+ };
85
+ exports.KPIShimmer = KPIShimmer;
@@ -0,0 +1,97 @@
1
+ // @flow strict
2
+
3
+ import * as React from 'react';
4
+
5
+ import {
6
+ borderRadiusCircle,
7
+ borderRadiusMedium,
8
+ borderRadiusNone,
9
+ borderRadiusXSmall,
10
+ } from '../../styles/variables/_border';
11
+ import {size40, sizeFluid} from '../../styles/variables/_size';
12
+ import classify from '../../utils/classify';
13
+ import {appendPx} from '../../utils/string';
14
+
15
+ import css from './Shimmer.module.css';
16
+
17
+
18
+ type ClassNames = $ReadOnly<{wrapper?: string}>;
19
+
20
+ export const SHIMMER_TYPES = Object.freeze({
21
+ text: 'text',
22
+ rounded: 'rounded',
23
+ circular: 'circular',
24
+ rectangular: 'rectangular',
25
+ });
26
+
27
+ export const SHIMMER_TYPE_TO_BORDER_RADIUS_MAP = Object.freeze({
28
+ text: borderRadiusXSmall,
29
+ rounded: borderRadiusMedium,
30
+ circular: borderRadiusCircle,
31
+ rectangular: borderRadiusNone,
32
+ });
33
+
34
+ export type ShimmerType = $Values<typeof SHIMMER_TYPES>;
35
+
36
+ export type ShimmerProps = {
37
+ classNames?: ClassNames,
38
+ show?: boolean,
39
+ type?: ShimmerType,
40
+ width?: number | string,
41
+ height?: number | string,
42
+ borderRadius?: number | string,
43
+ children?: React.Node,
44
+ };
45
+
46
+ export const Shimmer: React$AbstractComponent<ShimmerProps, HTMLSpanElement> =
47
+ React.forwardRef<ShimmerProps, HTMLSpanElement>(
48
+ (
49
+ {
50
+ classNames,
51
+ show = true,
52
+ type = SHIMMER_TYPES.text,
53
+ children,
54
+ width = size40,
55
+ height = sizeFluid,
56
+ borderRadius,
57
+ }: ShimmerProps,
58
+ ref,
59
+ ) => {
60
+ if (!show) {
61
+ return <>{children}</>;
62
+ }
63
+
64
+ const borderRadiusValue =
65
+ borderRadius ?? SHIMMER_TYPE_TO_BORDER_RADIUS_MAP[type];
66
+
67
+ return (
68
+ <span
69
+ ref={ref}
70
+ data-testid="Shimmer"
71
+ className={classify(css.wrapper, css[type], classNames?.wrapper)}
72
+ style={{
73
+ '--width': appendPx(width),
74
+ '--height': appendPx(height),
75
+ '--border-radius': appendPx(borderRadiusValue),
76
+ }}
77
+ ></span>
78
+ );
79
+ },
80
+ );
81
+
82
+ export type KPIShimmerProps = {
83
+ textWidth?: number | string,
84
+ };
85
+
86
+ export const KPIShimmer = ({textWidth = 150}: KPIShimmerProps): React.Node => (
87
+ <div className={css.kpiBox}>
88
+ <div className={css.section}>
89
+ <Shimmer type="rounded" width={60} height={60}></Shimmer>
90
+ </div>
91
+ <div className={css.section}>
92
+ <Shimmer type="text" width={textWidth} height={15}></Shimmer>
93
+ <Shimmer type="text" width={textWidth} height={25}></Shimmer>
94
+ <Shimmer type="text" width={textWidth} height={15}></Shimmer>
95
+ </div>
96
+ </div>
97
+ );
@@ -0,0 +1,63 @@
1
+ @value (colorFillPrimary, colorNeutralLightest, colorNeutralLight, colorBackgroundTertiary) from '../../styles/variables/_color.css';
2
+ @value (spaceXSmall, spaceNone, spaceLarge, spaceMedium, spaceSmall) from '../../styles/variables/_space.css';
3
+ @value (sizeFluid, size40, size252) from '../../styles/variables/_size.css';
4
+ @value (borderRadiusXSmall, borderRadiusMedium) from '../../styles/variables/_border.css';
5
+ @value (opacity20, opacity40, opacity60) from '../../styles/variables/_opacity.css';
6
+ @value (motionDurationSlowest) from '../../styles/variables/_motion.css';
7
+
8
+ @value backgroundSizeInitial: calc(sizeFluid * 2);
9
+ @value backgroundSizeFinal: calc(sizeFluid * -2);
10
+ @value motionDuration: calc(motionDurationSlowest * 1.5);
11
+
12
+ .wrapper {
13
+ --width: size40;
14
+ --border-radius: borderRadiusXSmall;
15
+ --height: sizeFluid;
16
+ display: flex;
17
+ height: var(--height);
18
+ width: var(--width);
19
+ border-radius: var(--border-radius);
20
+ background: linear-gradient(
21
+ to right,
22
+ colorNeutralLightest opacity20,
23
+ colorNeutralLight opacity40,
24
+ colorNeutralLightest opacity60
25
+ );
26
+ background-size: backgroundSizeInitial sizeFluid;
27
+ animation: shimmer motionDuration infinite linear;
28
+ vertical-align: middle;
29
+ }
30
+
31
+ .text {
32
+ margin: spaceNone spaceXSmall;
33
+ }
34
+
35
+ .kpiBox {
36
+ display: flex;
37
+ composes: borderPrimary from '../../styles/border.module.css';
38
+ min-width: size252;
39
+ width: fit-content;
40
+ height: fit-content;
41
+ align-items: center;
42
+ gap: spaceSmall;
43
+ background-color: colorBackgroundTertiary;
44
+ border-radius: borderRadiusMedium;
45
+ padding: spaceLarge spaceMedium;
46
+ }
47
+
48
+ .section {
49
+ display: flex;
50
+ width: sizeFluid;
51
+ flex-flow: column;
52
+ gap: spaceXSmall;
53
+ align-items: center;
54
+ }
55
+
56
+ @keyframes shimmer {
57
+ from {
58
+ background-position: backgroundSizeInitial spaceNone;
59
+ }
60
+ to {
61
+ background-position: backgroundSizeFinal spaceNone;
62
+ }
63
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _Shimmer = require("./Shimmer");
7
+ Object.keys(_Shimmer).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _Shimmer[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _Shimmer[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,3 @@
1
+ // @flow strict
2
+
3
+ export * from './Shimmer';
@@ -256,6 +256,17 @@ Object.keys(_FocusManagerWithArrowKeyNavigation).forEach(function (key) {
256
256
  }
257
257
  });
258
258
  });
259
+ var _FormTitleWrapper = require("./FormTitleWrapper");
260
+ Object.keys(_FormTitleWrapper).forEach(function (key) {
261
+ if (key === "default" || key === "__esModule") return;
262
+ if (key in exports && exports[key] === _FormTitleWrapper[key]) return;
263
+ Object.defineProperty(exports, key, {
264
+ enumerable: true,
265
+ get: function () {
266
+ return _FormTitleWrapper[key];
267
+ }
268
+ });
269
+ });
259
270
  var _Grid = require("./Grid");
260
271
  Object.keys(_Grid).forEach(function (key) {
261
272
  if (key === "default" || key === "__esModule") return;
@@ -443,6 +454,17 @@ Object.keys(_SearchInput).forEach(function (key) {
443
454
  }
444
455
  });
445
456
  });
457
+ var _Shimmer = require("./Shimmer");
458
+ Object.keys(_Shimmer).forEach(function (key) {
459
+ if (key === "default" || key === "__esModule") return;
460
+ if (key in exports && exports[key] === _Shimmer[key]) return;
461
+ Object.defineProperty(exports, key, {
462
+ enumerable: true,
463
+ get: function () {
464
+ return _Shimmer[key];
465
+ }
466
+ });
467
+ });
446
468
  var _SideMenuLink = require("./SideMenuLink");
447
469
  Object.keys(_SideMenuLink).forEach(function (key) {
448
470
  if (key === "default" || key === "__esModule") return;
@@ -23,6 +23,7 @@ export * from './ErrorMessage';
23
23
  export * from './FileUpload';
24
24
  export * from './FocusManager';
25
25
  export * from './FocusManagerWithArrowKeyNavigation';
26
+ export * from './FormTitleWrapper';
26
27
  export * from './Grid';
27
28
  export * from './Icon';
28
29
  export * from './InContextAlert';
@@ -40,6 +41,7 @@ export * from './Pagination';
40
41
  export * from './Panel';
41
42
  export * from './RadioButton';
42
43
  export * from './SearchInput';
44
+ export * from './Shimmer';
43
45
  export * from './SideMenuLink';
44
46
  export * from './StatusIndicator';
45
47
  export * from './Stepper';
@@ -476,6 +476,8 @@
476
476
 
477
477
  @value size720: 720px;
478
478
 
479
+ @value size800: 800px;
480
+
479
481
  @value size880: 880px;
480
482
 
481
483
  @value size960: 960px;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.colorTextTertiary = exports.colorTextSuccess = exports.colorTextSecondary = exports.colorTextPrimary = exports.colorTextNeutral = exports.colorTextInverseSecondary = exports.colorTextInversePrimary = exports.colorTextInformation = exports.colorTextFavorite = exports.colorTextDisabled = exports.colorTextDanger = exports.colorTextClickable = exports.colorSuccessLightest = exports.colorSuccessLight = exports.colorSuccessDarkest = exports.colorSuccessDark = exports.colorSuccess = exports.colorSubMenuStar = exports.colorSubMenuBackgroundDefault = exports.colorSideMenuIconDefault = exports.colorSideMenuIconActive = exports.colorSideMenuBackgroundSelected = exports.colorSideMenuBackgroundHovered = exports.colorSideMenuBackgroundDefault = exports.colorSideMenuAccountBarFill = exports.colorNeutralLightest = exports.colorNeutralLight = exports.colorNeutralDarkest = exports.colorNeutralDark = exports.colorNeutral = exports.colorInformationLightest = exports.colorInformationLight = exports.colorInformationDarkest = exports.colorInformationDark = exports.colorInformation = exports.colorGroupMenuTextDefault = exports.colorGroupMenuBackgroundSelected = exports.colorGroupMenuBackgroundHovered = exports.colorGroupMenuBackgroundDefault = exports.colorGrayLightest = exports.colorFocusPrimary = exports.colorFocusDanger = exports.colorFillSecondary = exports.colorFillPrimary = exports.colorFillNone = exports.colorFillInversePrimary = exports.colorFillDisabled = exports.colorDataViz8 = exports.colorDataViz7 = exports.colorDataViz6 = exports.colorDataViz5 = exports.colorDataViz4 = exports.colorDataViz3 = exports.colorDataViz2 = exports.colorDataViz1 = exports.colorDangerLightest = exports.colorDangerLight = exports.colorDangerDarkest = exports.colorDangerDark = exports.colorDanger = exports.colorButtonFillTertiaryPressed = exports.colorButtonFillTertiaryHovered = exports.colorButtonFillTertiaryEnabled = exports.colorButtonFillTableActionPressed = exports.colorButtonFillTableActionHovered = exports.colorButtonFillTableActionEnabled = exports.colorButtonFillTableActionBorder = exports.colorButtonFillSecondaryPressed = exports.colorButtonFillSecondaryHovered = exports.colorButtonFillSecondaryEnabled = exports.colorButtonFillPrimaryPressed = exports.colorButtonFillPrimaryHovered = exports.colorButtonFillPrimaryEnabled = exports.colorButtonFillGhostPressed = exports.colorButtonFillGhostHovered = exports.colorButtonFillGhostEnabled = exports.colorButtonFillDangerPressed = exports.colorButtonFillDangerHovered = exports.colorButtonFillDangerEnabled = exports.colorBorderTertiary = exports.colorBorderSecondary = exports.colorBorderPrimary = exports.colorBorderDanger = exports.colorBackgroundTertiary = exports.colorBackgroundSecondary = exports.colorBackgroundPrimary = exports.colorBackgroundBrand = exports.colorBackdropFill = exports.borderWidthTertiary = exports.borderWidthSecondary = exports.borderWidthPrimary = exports.borderWidthNone = exports.borderRadiusXSmall = exports.borderRadiusXLarge = exports.borderRadiusSmall = exports.borderRadiusRadioButton = exports.borderRadiusNone = exports.borderRadiusMedium = exports.borderRadiusLarge = exports.borderRadiusCircle = void 0;
7
7
  exports.size2 = exports.size180 = exports.size18 = exports.size160 = exports.size140 = exports.size1280 = exports.size125 = exports.size12 = exports.size110 = exports.size100 = exports.size10 = exports.shadowBoxShadow4Y = exports.shadowBoxShadow4X = exports.shadowBoxShadow4Type = exports.shadowBoxShadow4Spread = exports.shadowBoxShadow4Color = exports.shadowBoxShadow4Blur = exports.shadowBoxShadow3Y = exports.shadowBoxShadow3X = exports.shadowBoxShadow3Type = exports.shadowBoxShadow3Spread = exports.shadowBoxShadow3Color = exports.shadowBoxShadow3Blur = exports.shadowBoxShadow2Y = exports.shadowBoxShadow2X = exports.shadowBoxShadow2Type = exports.shadowBoxShadow2Spread = exports.shadowBoxShadow2Color = exports.shadowBoxShadow2Blur = exports.shadowBoxShadow1Y = exports.shadowBoxShadow1X = exports.shadowBoxShadow1Type = exports.shadowBoxShadow1Spread = exports.shadowBoxShadow1Color = exports.shadowBoxShadow1Blur = exports.opacity95 = exports.opacity90 = exports.opacity85 = exports.opacity80 = exports.opacity70 = exports.opacity60 = exports.opacity50 = exports.opacity5 = exports.opacity40 = exports.opacity30 = exports.opacity20 = exports.opacity15 = exports.opacity100 = exports.opacity10 = exports.opacity0 = exports.motionEaseInEaseOut = exports.motionDurationSlowest = exports.motionDurationSlower = exports.motionDurationSlow = exports.motionDurationNormal = exports.motionDurationFast = exports.fontWeightMedium = exports.fontWeightBook = exports.fontTextDecorationNone = exports.fontTextCaseNone = exports.fontSize46 = exports.fontSize36 = exports.fontSize26 = exports.fontSize24 = exports.fontSize18 = exports.fontSize16 = exports.fontSize14 = exports.fontSize13 = exports.fontSize12 = exports.fontParagraphSpacing0 = exports.fontLineHeight170 = exports.fontLineHeight150 = exports.fontLineHeight140 = exports.fontLineHeight130 = exports.fontLineHeight125 = exports.fontLineHeight120 = exports.fontLineHeight100 = exports.fontLetterSpacingMinus4 = exports.fontLetterSpacingMinus3 = exports.fontLetterSpacingMinus2 = exports.fontLetterSpacingMinus1 = exports.fontLetterSpacing4 = exports.fontLetterSpacing2 = exports.fontLetterSpacing1 = exports.fontLetterSpacing0 = exports.fontFamilyCentra = exports.elevationTooltip = exports.elevationToast = exports.elevationNone = exports.elevationModal = exports.elevationMenu = exports.elevationCard = exports.elevationBackdrop = exports.colorWarningLightest = exports.colorWarningLight = exports.colorWarningDarkest = exports.colorWarningDark = exports.colorWarning = exports.colorTooltipFill = exports.colorTextWarning = void 0;
8
- exports.spaceXXSmall = exports.spaceXXLarge = exports.spaceXSmall = exports.spaceXLarge = exports.spaceSmall = exports.spaceNone = exports.spaceNegHalfFluid = exports.spaceNegFluid = exports.spaceMedium = exports.spaceLarge = exports.spaceHalfFluid = exports.spaceFluid = exports.sizeFullViewportWidth = exports.sizeFullViewportHeight = exports.sizeFluid = exports.size960 = exports.size90 = exports.size880 = exports.size8 = exports.size720 = exports.size70 = exports.size660 = exports.size66 = exports.size640 = exports.size60 = exports.size580 = exports.size58 = exports.size540 = exports.size500 = exports.size50 = exports.size5 = exports.size480 = exports.size48 = exports.size44 = exports.size42 = exports.size400 = exports.size40 = exports.size4 = exports.size380 = exports.size38 = exports.size36 = exports.size34 = exports.size320 = exports.size32 = exports.size300 = exports.size30 = exports.size28 = exports.size276 = exports.size260 = exports.size26 = exports.size252 = exports.size240 = exports.size24 = exports.size228 = exports.size22 = exports.size200 = exports.size20 = void 0;
8
+ exports.spaceXXSmall = exports.spaceXXLarge = exports.spaceXSmall = exports.spaceXLarge = exports.spaceSmall = exports.spaceNone = exports.spaceNegHalfFluid = exports.spaceNegFluid = exports.spaceMedium = exports.spaceLarge = exports.spaceHalfFluid = exports.spaceFluid = exports.sizeFullViewportWidth = exports.sizeFullViewportHeight = exports.sizeFluid = exports.size960 = exports.size90 = exports.size880 = exports.size800 = exports.size8 = exports.size720 = exports.size70 = exports.size660 = exports.size66 = exports.size640 = exports.size60 = exports.size580 = exports.size58 = exports.size540 = exports.size500 = exports.size50 = exports.size5 = exports.size480 = exports.size48 = exports.size44 = exports.size42 = exports.size400 = exports.size40 = exports.size4 = exports.size380 = exports.size38 = exports.size36 = exports.size34 = exports.size320 = exports.size32 = exports.size300 = exports.size30 = exports.size28 = exports.size276 = exports.size260 = exports.size26 = exports.size252 = exports.size240 = exports.size24 = exports.size228 = exports.size22 = exports.size200 = exports.size20 = void 0;
9
9
 
10
10
  const borderWidthNone = '0px';
11
11
  exports.borderWidthNone = borderWidthNone;
@@ -485,6 +485,8 @@ const size660 = '660px';
485
485
  exports.size660 = size660;
486
486
  const size720 = '720px';
487
487
  exports.size720 = size720;
488
+ const size800 = '800px';
489
+ exports.size800 = size800;
488
490
  const size880 = '880px';
489
491
  exports.size880 = size880;
490
492
  const size960 = '960px';
@@ -478,6 +478,8 @@ export const size660 = '660px';
478
478
 
479
479
  export const size720 = '720px';
480
480
 
481
+ export const size800 = '800px';
482
+
481
483
  export const size880 = '880px';
482
484
 
483
485
  export const size960 = '960px';
@@ -98,6 +98,8 @@
98
98
 
99
99
  @value size720: 720px;
100
100
 
101
+ @value size800: 800px;
102
+
101
103
  @value size880: 880px;
102
104
 
103
105
  @value size960: 960px;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.sizeFullViewportWidth = exports.sizeFullViewportHeight = exports.sizeFluid = exports.size960 = exports.size90 = exports.size880 = exports.size8 = exports.size720 = exports.size70 = exports.size660 = exports.size66 = exports.size640 = exports.size60 = exports.size580 = exports.size58 = exports.size540 = exports.size500 = exports.size50 = exports.size5 = exports.size480 = exports.size48 = exports.size44 = exports.size42 = exports.size400 = exports.size40 = exports.size4 = exports.size380 = exports.size38 = exports.size36 = exports.size34 = exports.size320 = exports.size32 = exports.size300 = exports.size30 = exports.size28 = exports.size276 = exports.size260 = exports.size26 = exports.size252 = exports.size240 = exports.size24 = exports.size228 = exports.size22 = exports.size200 = exports.size20 = exports.size2 = exports.size180 = exports.size18 = exports.size160 = exports.size140 = exports.size1280 = exports.size125 = exports.size12 = exports.size110 = exports.size100 = exports.size10 = void 0;
6
+ exports.sizeFullViewportWidth = exports.sizeFullViewportHeight = exports.sizeFluid = exports.size960 = exports.size90 = exports.size880 = exports.size800 = exports.size8 = exports.size720 = exports.size70 = exports.size660 = exports.size66 = exports.size640 = exports.size60 = exports.size580 = exports.size58 = exports.size540 = exports.size500 = exports.size50 = exports.size5 = exports.size480 = exports.size48 = exports.size44 = exports.size42 = exports.size400 = exports.size40 = exports.size4 = exports.size380 = exports.size38 = exports.size36 = exports.size34 = exports.size320 = exports.size32 = exports.size300 = exports.size30 = exports.size28 = exports.size276 = exports.size260 = exports.size26 = exports.size252 = exports.size240 = exports.size24 = exports.size228 = exports.size22 = exports.size200 = exports.size20 = exports.size2 = exports.size180 = exports.size18 = exports.size160 = exports.size140 = exports.size1280 = exports.size125 = exports.size12 = exports.size110 = exports.size100 = exports.size10 = void 0;
7
7
 
8
8
  const size2 = '2px';
9
9
  exports.size2 = size2;
@@ -105,6 +105,8 @@ const size660 = '660px';
105
105
  exports.size660 = size660;
106
106
  const size720 = '720px';
107
107
  exports.size720 = size720;
108
+ const size800 = '800px';
109
+ exports.size800 = size800;
108
110
  const size880 = '880px';
109
111
  exports.size880 = size880;
110
112
  const size960 = '960px';
@@ -100,6 +100,8 @@ export const size660 = '660px';
100
100
 
101
101
  export const size720 = '720px';
102
102
 
103
+ export const size800 = '800px';
104
+
103
105
  export const size880 = '880px';
104
106
 
105
107
  export const size960 = '960px';
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.truncateString = exports.formatWord = exports.escapeRegExp = exports.capitalize = void 0;
6
+ exports.truncateString = exports.formatWord = exports.escapeRegExp = exports.capitalize = exports.appendPx = void 0;
7
7
 
8
8
  const capitalize = word => {
9
9
  if (!word) {
@@ -22,4 +22,11 @@ const truncateString = (inputString, maxLength) => {
22
22
  }
23
23
  return inputString;
24
24
  };
25
- exports.truncateString = truncateString;
25
+ exports.truncateString = truncateString;
26
+ const appendPx = value => {
27
+ if (typeof value === 'number') {
28
+ return `${value}px`;
29
+ }
30
+ return value ?? '';
31
+ };
32
+ exports.appendPx = appendPx;
@@ -24,3 +24,10 @@ export const truncateString = (
24
24
  }
25
25
  return inputString;
26
26
  };
27
+
28
+ export const appendPx = (value?: number | string): string => {
29
+ if (typeof value === 'number') {
30
+ return `${value}px`;
31
+ }
32
+ return value ?? '';
33
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spaced-out/ui-design-system",
3
- "version": "0.1.101",
3
+ "version": "0.1.103",
4
4
  "main": "index.js",
5
5
  "description": "Sense UI components library",
6
6
  "author": {