@kaizen/components 1.65.0 → 1.66.0

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.
Files changed (22) hide show
  1. package/dist/cjs/Loading/LoadingSpinner/LoadingSpinner.cjs +6 -42
  2. package/dist/cjs/Loading/LoadingSpinner/LoadingSpinner.module.css.cjs +10 -0
  3. package/dist/cjs/Loading/LoadingSpinner/subcomponents/SpinnerIcon.cjs +80 -0
  4. package/dist/esm/Loading/LoadingSpinner/LoadingSpinner.mjs +6 -42
  5. package/dist/esm/Loading/LoadingSpinner/LoadingSpinner.module.css.mjs +8 -0
  6. package/dist/esm/Loading/LoadingSpinner/subcomponents/SpinnerIcon.mjs +72 -0
  7. package/dist/styles.css +61 -42
  8. package/dist/types/Loading/LoadingSpinner/LoadingSpinner.d.ts +2 -2
  9. package/dist/types/Loading/LoadingSpinner/subcomponents/SpinnerIcon.d.ts +5 -0
  10. package/dist/types/Loading/LoadingSpinner/subcomponents/index.d.ts +1 -0
  11. package/package.json +1 -1
  12. package/src/Loading/LoadingSpinner/LoadingSpinner.module.css +32 -0
  13. package/src/Loading/LoadingSpinner/LoadingSpinner.tsx +10 -54
  14. package/src/Loading/LoadingSpinner/_docs/LoadingSpinner.mdx +7 -2
  15. package/src/Loading/LoadingSpinner/_docs/LoadingSpinner.stickersheet.stories.tsx +2 -1
  16. package/src/Loading/LoadingSpinner/_docs/LoadingSpinner.stories.tsx +19 -0
  17. package/src/Loading/LoadingSpinner/subcomponents/SpinnerIcon.tsx +87 -0
  18. package/src/Loading/LoadingSpinner/subcomponents/index.ts +1 -0
  19. package/src/__actions__/Button/v3/_docs/Button.stickersheet.stories.tsx +2 -2
  20. package/dist/cjs/Loading/LoadingSpinner/LoadingSpinner.module.scss.cjs +0 -7
  21. package/dist/esm/Loading/LoadingSpinner/LoadingSpinner.module.scss.mjs +0 -5
  22. package/src/Loading/LoadingSpinner/LoadingSpinner.module.scss +0 -16
@@ -4,7 +4,8 @@ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var classnames = require('classnames');
6
6
  var VisuallyHidden = require('../../VisuallyHidden/VisuallyHidden.cjs');
7
- var LoadingSpinner_module = require('./LoadingSpinner.module.scss.cjs');
7
+ var SpinnerIcon = require('./subcomponents/SpinnerIcon.cjs');
8
+ var LoadingSpinner_module = require('./LoadingSpinner.module.css.cjs');
8
9
  function _interopDefault(e) {
9
10
  return e && e.__esModule ? e : {
10
11
  default: e
@@ -25,48 +26,11 @@ var LoadingSpinner = function (_a) {
25
26
  classNameOverride = _a.classNameOverride,
26
27
  props = tslib.__rest(_a, ["accessibilityLabel", "size", "classNameOverride"]);
27
28
  return React__default.default.createElement("div", tslib.__assign({
28
- "data-automation-id": "loading-spinner",
29
- className: classnames__default.default(LoadingSpinner_module.loadingSpinner, classNameOverride),
29
+ className: classnames__default.default(LoadingSpinner_module.loadingSpinner, LoadingSpinner_module[size], classNameOverride),
30
30
  role: "status"
31
- }, props), React__default.default.createElement(VisuallyHidden.VisuallyHidden, null, accessibilityLabel), size === "md" ? React__default.default.createElement("svg", {
32
- className: LoadingSpinner_module.spinner,
33
- "aria-hidden": "true",
34
- viewBox: "0 0 48 48",
35
- width: 48,
36
- fill: "none",
37
- xmlns: "http://www.w3.org/2000/svg"
38
- }, React__default.default.createElement("circle", {
39
- cx: "24",
40
- cy: "24",
41
- r: "22.5",
42
- stroke: "currentColor",
43
- strokeWidth: "3",
44
- strokeOpacity: "0.3"
45
- }), React__default.default.createElement("path", {
46
- fillRule: "evenodd",
47
- clipRule: "evenodd",
48
- fill: "currentColor",
49
- d: "M46.5 24c.8284 0 1.5049-.6734 1.4539-1.5002C47.21 10.44 37.5601.789989 25.5003.0461639 24.6734-.004835 24 .671607 24 1.50003c0 .82843.6738 1.49444 1.5002 1.55277 10.4023.73424 18.7128 9.0447 19.447 19.447C45.0056 23.3262 45.6716 24 46.5 24z"
50
- })) : React__default.default.createElement("svg", {
51
- className: LoadingSpinner_module.spinner,
52
- "aria-hidden": "true",
53
- viewBox: "0 0 24 24",
54
- width: 24,
55
- fill: "none",
56
- xmlns: "http://www.w3.org/2000/svg"
57
- }, React__default.default.createElement("circle", {
58
- cx: "12",
59
- cy: "12",
60
- r: "9",
61
- stroke: "currentColor",
62
- strokeWidth: "2",
63
- strokeOpacity: "0.3"
64
- }), React__default.default.createElement("path", {
65
- fillRule: "evenodd",
66
- clipRule: "evenodd",
67
- fill: "currentColor",
68
- d: "M21.0564 13c.5076 0 .9377-.3851.9431-.8926.0004-.0358.0005-.0716.0005-.1074 0-5.52285-4.4771-10-10-10-.0359 0-.0718.00019-.1076.00057-.5076.00535-.8926.43552-.8926.94308v.11543C10.9998 3.59163 11.4675 4 12 4c4.4183 0 8 3.58172 8 8 0 .5324.4083 1 .9407 1h.1157z"
69
- })));
31
+ }, props), React__default.default.createElement(VisuallyHidden.VisuallyHidden, null, accessibilityLabel), React__default.default.createElement(SpinnerIcon.SpinnerIcon, {
32
+ size: size
33
+ }));
70
34
  };
71
35
  LoadingSpinner.displayName = "LoadingSpinner";
72
36
  exports.LoadingSpinner = LoadingSpinner;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var styles = {
4
+ "loadingSpinner": "LoadingSpinner-module_loadingSpinner__Zc2mJ",
5
+ "xs": "LoadingSpinner-module_xs__y46OT",
6
+ "sm": "LoadingSpinner-module_sm__nkmIa",
7
+ "md": "LoadingSpinner-module_md__OWP2-",
8
+ "spinner": "LoadingSpinner-module_spinner__BKrX0"
9
+ };
10
+ module.exports = styles;
@@ -0,0 +1,80 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var LoadingSpinner_module = require('../LoadingSpinner.module.css.cjs');
5
+ function _interopDefault(e) {
6
+ return e && e.__esModule ? e : {
7
+ default: e
8
+ };
9
+ }
10
+ var React__default = /*#__PURE__*/_interopDefault(React);
11
+ var SmallSpinnerIcon = function () {
12
+ return React__default.default.createElement("svg", {
13
+ className: LoadingSpinner_module.spinner,
14
+ "aria-hidden": "true",
15
+ viewBox: "0 0 24 24",
16
+ fill: "none",
17
+ xmlns: "http://www.w3.org/2000/svg"
18
+ }, React__default.default.createElement("circle", {
19
+ cx: "12",
20
+ cy: "12",
21
+ r: "9",
22
+ stroke: "currentColor",
23
+ strokeWidth: "2",
24
+ strokeOpacity: "0.3"
25
+ }), React__default.default.createElement("path", {
26
+ fillRule: "evenodd",
27
+ clipRule: "evenodd",
28
+ fill: "currentColor",
29
+ d: "M21.0564 13c.5076 0 .9377-.3851.9431-.8926.0004-.0358.0005-.0716.0005-.1074 0-5.52285-4.4771-10-10-10-.0359 0-.0718.00019-.1076.00057-.5076.00535-.8926.43552-.8926.94308v.11543C10.9998 3.59163 11.4675 4 12 4c4.4183 0 8 3.58172 8 8 0 .5324.4083 1 .9407 1h.1157z"
30
+ }));
31
+ };
32
+ var MediumSpinnerIcon = function () {
33
+ return React__default.default.createElement("svg", {
34
+ className: LoadingSpinner_module.spinner,
35
+ "aria-hidden": "true",
36
+ viewBox: "0 0 48 48",
37
+ fill: "none",
38
+ xmlns: "http://www.w3.org/2000/svg"
39
+ }, React__default.default.createElement("circle", {
40
+ cx: "24",
41
+ cy: "24",
42
+ r: "22.5",
43
+ stroke: "currentColor",
44
+ strokeWidth: "3",
45
+ strokeOpacity: "0.3"
46
+ }), React__default.default.createElement("path", {
47
+ fillRule: "evenodd",
48
+ clipRule: "evenodd",
49
+ fill: "currentColor",
50
+ d: "M46.5 24c.8284 0 1.5049-.6734 1.4539-1.5002C47.21 10.44 37.5601.789989 25.5003.0461639 24.6734-.004835 24 .671607 24 1.50003c0 .82843.6738 1.49444 1.5002 1.55277 10.4023.73424 18.7128 9.0447 19.447 19.447C45.0056 23.3262 45.6716 24 46.5 24z"
51
+ }));
52
+ };
53
+ var ExtraSmallSpinnerIcon = function () {
54
+ return React__default.default.createElement("svg", {
55
+ className: LoadingSpinner_module.spinner,
56
+ viewBox: "0 0 16 16",
57
+ fill: "none",
58
+ xmlns: "http://www.w3.org/2000/svg"
59
+ }, React__default.default.createElement("circle", {
60
+ opacity: "0.3",
61
+ cx: "8",
62
+ cy: "8",
63
+ r: "6",
64
+ stroke: "currentColor",
65
+ strokeWidth: "2"
66
+ }), React__default.default.createElement("path", {
67
+ d: "M14 8C14 4.68629 11.3137 2 8 2",
68
+ stroke: "currentColor",
69
+ strokeWidth: "2",
70
+ strokeLinecap: "round",
71
+ strokeLinejoin: "round"
72
+ }));
73
+ };
74
+ var SpinnerIcon = function (_a) {
75
+ var size = _a.size;
76
+ if (size === "xs") return React__default.default.createElement(ExtraSmallSpinnerIcon, null);
77
+ if (size === "sm") return React__default.default.createElement(SmallSpinnerIcon, null);
78
+ return React__default.default.createElement(MediumSpinnerIcon, null);
79
+ };
80
+ exports.SpinnerIcon = SpinnerIcon;
@@ -2,7 +2,8 @@ import { __rest, __assign } from 'tslib';
2
2
  import React from 'react';
3
3
  import classnames from 'classnames';
4
4
  import { VisuallyHidden } from '../../VisuallyHidden/VisuallyHidden.mjs';
5
- import styles from './LoadingSpinner.module.scss.mjs';
5
+ import { SpinnerIcon } from './subcomponents/SpinnerIcon.mjs';
6
+ import styles from './LoadingSpinner.module.css.mjs';
6
7
 
7
8
  /**
8
9
  * {@link https://cultureamp.atlassian.net/wiki/spaces/DesignSystem/pages/3082093253/Loading+Spinner Guidance} |
@@ -17,48 +18,11 @@ const LoadingSpinner = /*#__PURE__*/function () {
17
18
  classNameOverride = _a.classNameOverride,
18
19
  props = __rest(_a, ["accessibilityLabel", "size", "classNameOverride"]);
19
20
  return /*#__PURE__*/React.createElement("div", __assign({
20
- "data-automation-id": "loading-spinner",
21
- className: classnames(styles.loadingSpinner, classNameOverride),
21
+ className: classnames(styles.loadingSpinner, styles[size], classNameOverride),
22
22
  role: "status"
23
- }, props), /*#__PURE__*/React.createElement(VisuallyHidden, null, accessibilityLabel), size === "md" ? ( /*#__PURE__*/React.createElement("svg", {
24
- className: styles.spinner,
25
- "aria-hidden": "true",
26
- viewBox: "0 0 48 48",
27
- width: 48,
28
- fill: "none",
29
- xmlns: "http://www.w3.org/2000/svg"
30
- }, /*#__PURE__*/React.createElement("circle", {
31
- cx: "24",
32
- cy: "24",
33
- r: "22.5",
34
- stroke: "currentColor",
35
- strokeWidth: "3",
36
- strokeOpacity: "0.3"
37
- }), /*#__PURE__*/React.createElement("path", {
38
- fillRule: "evenodd",
39
- clipRule: "evenodd",
40
- fill: "currentColor",
41
- d: "M46.5 24c.8284 0 1.5049-.6734 1.4539-1.5002C47.21 10.44 37.5601.789989 25.5003.0461639 24.6734-.004835 24 .671607 24 1.50003c0 .82843.6738 1.49444 1.5002 1.55277 10.4023.73424 18.7128 9.0447 19.447 19.447C45.0056 23.3262 45.6716 24 46.5 24z"
42
- }))) : ( /*#__PURE__*/React.createElement("svg", {
43
- className: styles.spinner,
44
- "aria-hidden": "true",
45
- viewBox: "0 0 24 24",
46
- width: 24,
47
- fill: "none",
48
- xmlns: "http://www.w3.org/2000/svg"
49
- }, /*#__PURE__*/React.createElement("circle", {
50
- cx: "12",
51
- cy: "12",
52
- r: "9",
53
- stroke: "currentColor",
54
- strokeWidth: "2",
55
- strokeOpacity: "0.3"
56
- }), /*#__PURE__*/React.createElement("path", {
57
- fillRule: "evenodd",
58
- clipRule: "evenodd",
59
- fill: "currentColor",
60
- d: "M21.0564 13c.5076 0 .9377-.3851.9431-.8926.0004-.0358.0005-.0716.0005-.1074 0-5.52285-4.4771-10-10-10-.0359 0-.0718.00019-.1076.00057-.5076.00535-.8926.43552-.8926.94308v.11543C10.9998 3.59163 11.4675 4 12 4c4.4183 0 8 3.58172 8 8 0 .5324.4083 1 .9407 1h.1157z"
61
- }))));
23
+ }, props), /*#__PURE__*/React.createElement(VisuallyHidden, null, accessibilityLabel), /*#__PURE__*/React.createElement(SpinnerIcon, {
24
+ size: size
25
+ }));
62
26
  };
63
27
  LoadingSpinner.displayName = "LoadingSpinner";
64
28
  return LoadingSpinner;
@@ -0,0 +1,8 @@
1
+ var styles = {
2
+ "loadingSpinner": "LoadingSpinner-module_loadingSpinner__Zc2mJ",
3
+ "xs": "LoadingSpinner-module_xs__y46OT",
4
+ "sm": "LoadingSpinner-module_sm__nkmIa",
5
+ "md": "LoadingSpinner-module_md__OWP2-",
6
+ "spinner": "LoadingSpinner-module_spinner__BKrX0"
7
+ };
8
+ export { styles as default };
@@ -0,0 +1,72 @@
1
+ import React from 'react';
2
+ import styles from '../LoadingSpinner.module.css.mjs';
3
+ var SmallSpinnerIcon = function () {
4
+ return /*#__PURE__*/React.createElement("svg", {
5
+ className: styles.spinner,
6
+ "aria-hidden": "true",
7
+ viewBox: "0 0 24 24",
8
+ fill: "none",
9
+ xmlns: "http://www.w3.org/2000/svg"
10
+ }, /*#__PURE__*/React.createElement("circle", {
11
+ cx: "12",
12
+ cy: "12",
13
+ r: "9",
14
+ stroke: "currentColor",
15
+ strokeWidth: "2",
16
+ strokeOpacity: "0.3"
17
+ }), /*#__PURE__*/React.createElement("path", {
18
+ fillRule: "evenodd",
19
+ clipRule: "evenodd",
20
+ fill: "currentColor",
21
+ d: "M21.0564 13c.5076 0 .9377-.3851.9431-.8926.0004-.0358.0005-.0716.0005-.1074 0-5.52285-4.4771-10-10-10-.0359 0-.0718.00019-.1076.00057-.5076.00535-.8926.43552-.8926.94308v.11543C10.9998 3.59163 11.4675 4 12 4c4.4183 0 8 3.58172 8 8 0 .5324.4083 1 .9407 1h.1157z"
22
+ }));
23
+ };
24
+ var MediumSpinnerIcon = function () {
25
+ return /*#__PURE__*/React.createElement("svg", {
26
+ className: styles.spinner,
27
+ "aria-hidden": "true",
28
+ viewBox: "0 0 48 48",
29
+ fill: "none",
30
+ xmlns: "http://www.w3.org/2000/svg"
31
+ }, /*#__PURE__*/React.createElement("circle", {
32
+ cx: "24",
33
+ cy: "24",
34
+ r: "22.5",
35
+ stroke: "currentColor",
36
+ strokeWidth: "3",
37
+ strokeOpacity: "0.3"
38
+ }), /*#__PURE__*/React.createElement("path", {
39
+ fillRule: "evenodd",
40
+ clipRule: "evenodd",
41
+ fill: "currentColor",
42
+ d: "M46.5 24c.8284 0 1.5049-.6734 1.4539-1.5002C47.21 10.44 37.5601.789989 25.5003.0461639 24.6734-.004835 24 .671607 24 1.50003c0 .82843.6738 1.49444 1.5002 1.55277 10.4023.73424 18.7128 9.0447 19.447 19.447C45.0056 23.3262 45.6716 24 46.5 24z"
43
+ }));
44
+ };
45
+ var ExtraSmallSpinnerIcon = function () {
46
+ return /*#__PURE__*/React.createElement("svg", {
47
+ className: styles.spinner,
48
+ viewBox: "0 0 16 16",
49
+ fill: "none",
50
+ xmlns: "http://www.w3.org/2000/svg"
51
+ }, /*#__PURE__*/React.createElement("circle", {
52
+ opacity: "0.3",
53
+ cx: "8",
54
+ cy: "8",
55
+ r: "6",
56
+ stroke: "currentColor",
57
+ strokeWidth: "2"
58
+ }), /*#__PURE__*/React.createElement("path", {
59
+ d: "M14 8C14 4.68629 11.3137 2 8 2",
60
+ stroke: "currentColor",
61
+ strokeWidth: "2",
62
+ strokeLinecap: "round",
63
+ strokeLinejoin: "round"
64
+ }));
65
+ };
66
+ var SpinnerIcon = function (_a) {
67
+ var size = _a.size;
68
+ if (size === "xs") return /*#__PURE__*/React.createElement(ExtraSmallSpinnerIcon, null);
69
+ if (size === "sm") return /*#__PURE__*/React.createElement(SmallSpinnerIcon, null);
70
+ return /*#__PURE__*/React.createElement(MediumSpinnerIcon, null);
71
+ };
72
+ export { SpinnerIcon };
package/dist/styles.css CHANGED
@@ -1,38 +1,4 @@
1
1
  @layer tokens, normalize, reset;@layer tokens{:root{--theme-key:heart;--animation-easing-function-ease-in-out:cubic-bezier(0.455,0.03,0.515,0.955);--animation-easing-function-ease-in:cubic-bezier(0.55,0.085,0.68,0.53);--animation-easing-function-ease-out:cubic-bezier(0.25,0.46,0.45,0.94);--animation-easing-function-linear:linear;--animation-easing-function-bounce-in:cubic-bezier(0.485,0.155,0.24,1.245);--animation-easing-function-bounce-out:cubic-bezier(0.485,0.155,0.515,0.845);--animation-easing-function-bounce-in-out:cubic-bezier(0.76,-0.245,0.24,1.245);--animation-duration-instant:0ms;--animation-duration-immediate:100ms;--animation-duration-rapid:200ms;--animation-duration-fast:300ms;--animation-duration-slow:400ms;--animation-duration-deliberate:700ms;--border-solid-border-width:2px;--border-solid-border-radius:7px;--border-solid-border-style:solid;--border-solid-border-color:#e1e2ea;--border-solid-border-color-rgb:225,226,234;--border-dashed-border-width:2px;--border-dashed-border-radius:7px;--border-dashed-border-style:dashed;--border-borderless-border-width:2px;--border-borderless-border-radius:7px;--border-borderless-border-style:solid;--border-borderless-border-color:transparent;--border-borderless-border-color-rgb:0,0,0;--border-focus-ring-border-width:2px;--border-focus-ring-border-radius:10px;--border-focus-ring-border-style:solid;--border-width-1:1px;--color-purple-100:#f4edf8;--color-purple-100-rgb:244,237,248;--color-purple-200:#dfc9ea;--color-purple-200-rgb:223,201,234;--color-purple-300:#c9a5dd;--color-purple-300-rgb:201,165,221;--color-purple-400:#ae67b1;--color-purple-400-rgb:174,103,177;--color-purple-500:#844587;--color-purple-500-rgb:132,69,135;--color-purple-600:#5f3361;--color-purple-600-rgb:95,51,97;--color-purple-700:#4a234d;--color-purple-700-rgb:74,35,77;--color-purple-800:#2f2438;--color-purple-800-rgb:47,36,56;--color-blue-100:#e6f6ff;--color-blue-100-rgb:230,246,255;--color-blue-200:#bde2f5;--color-blue-200-rgb:189,226,245;--color-blue-300:#73c0e8;--color-blue-300-rgb:115,192,232;--color-blue-400:#008bd6;--color-blue-400-rgb:0,139,214;--color-blue-500:#0168b3;--color-blue-500-rgb:1,104,179;--color-blue-600:#004970;--color-blue-600-rgb:0,73,112;--color-blue-700:#003157;--color-blue-700-rgb:0,49,87;--color-green-100:#e8f8f4;--color-green-100-rgb:232,248,244;--color-green-200:#c4ede2;--color-green-200-rgb:196,237,226;--color-green-300:#8fdbc7;--color-green-300-rgb:143,219,199;--color-green-400:#5dcaad;--color-green-400-rgb:93,202,173;--color-green-500:#3f9a86;--color-green-500-rgb:63,154,134;--color-green-600:#2c7d67;--color-green-600-rgb:44,125,103;--color-green-700:#22594a;--color-green-700-rgb:34,89,74;--color-yellow-100:#fff9e4;--color-yellow-100-rgb:255,249,228;--color-yellow-200:#ffeeb3;--color-yellow-200-rgb:255,238,179;--color-yellow-300:#ffe36e;--color-yellow-300-rgb:255,227,110;--color-yellow-400:#ffca4d;--color-yellow-400-rgb:255,202,77;--color-yellow-500:#ffb600;--color-yellow-500-rgb:255,182,0;--color-yellow-600:#c68600;--color-yellow-600-rgb:198,134,0;--color-yellow-700:#876400;--color-yellow-700-rgb:135,100,0;--color-red-100:#fdeaee;--color-red-100-rgb:253,234,238;--color-red-200:#f9c2cb;--color-red-200-rgb:249,194,203;--color-red-300:#f597a8;--color-red-300-rgb:245,151,168;--color-red-400:#e0707d;--color-red-400-rgb:224,112,125;--color-red-500:#c93b55;--color-red-500-rgb:201,59,85;--color-red-600:#a82433;--color-red-600-rgb:168,36,51;--color-red-700:#6c1e20;--color-red-700-rgb:108,30,32;--color-orange-100:#fff0e8;--color-orange-100-rgb:255,240,232;--color-orange-200:#ffd1b9;--color-orange-200-rgb:255,209,185;--color-orange-300:#ffb08a;--color-orange-300-rgb:255,176,138;--color-orange-400:#ff9461;--color-orange-400-rgb:255,148,97;--color-orange-500:#e96c2f;--color-orange-500-rgb:233,108,47;--color-orange-600:#b74302;--color-orange-600-rgb:183,67,2;--color-orange-700:#903c00;--color-orange-700-rgb:144,60,0;--color-gray-100:#f9f9f9;--color-gray-100-rgb:249,249,249;--color-gray-200:#f4f4f5;--color-gray-200-rgb:244,244,245;--color-gray-300:#eaeaec;--color-gray-300-rgb:234,234,236;--color-gray-400:#cdcdd0;--color-gray-400-rgb:205,205,208;--color-gray-500:#878792;--color-gray-500-rgb:135,135,146;--color-gray-600:#524e56;--color-gray-600-rgb:82,78,86;--color-white:#fff;--color-white-rgb:255,255,255;--color-black:#000;--color-black-rgb:0,0,0;--data-viz-favorable:#7dd5bd;--data-viz-favorable-rgb:125,213,189;--data-viz-unfavorable:#e68d97;--data-viz-unfavorable-rgb:230,141,151;--layout-content-max-width:1392px;--layout-content-max-width-with-sidebar:1080px;--layout-content-side-margin:72px;--layout-mobile-actions-drawer-height:60px;--layout-navigation-bar-height:72px;--layout-breakpoints-medium:768px;--layout-breakpoints-large:1080px;--shadow-small-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 3px 16px 0 rgba(0,0,0,.06);--shadow-large-box-shadow:0 3px 9px 0 rgba(0,0,0,.1),0 8px 40px 0 rgba(0,0,0,.08);--spacing-0:0;--spacing-1:.0625rem;--spacing-2:.125rem;--spacing-4:.25rem;--spacing-6:.375rem;--spacing-8:.5rem;--spacing-12:.75rem;--spacing-16:1rem;--spacing-20:1.25rem;--spacing-24:1.5rem;--spacing-32:2rem;--spacing-40:2.5rem;--spacing-48:3rem;--spacing-56:3.5rem;--spacing-64:4rem;--spacing-72:4.5rem;--spacing-80:5rem;--spacing-96:6rem;--spacing-112:7rem;--spacing-128:8rem;--spacing-160:10rem;--spacing-200:12.5rem;--spacing-240:15rem;--spacing-280:17.5rem;--spacing-320:20rem;--spacing-xs:0.375rem;--spacing-sm:0.75rem;--spacing-md:1.5rem;--spacing-lg:2.25rem;--spacing-xl:3rem;--spacing-xxl:3.75rem;--spacing-xxxl:4.5rem;--spacing-xxxxl:5.25rem;--spacing-xxxxxl:6rem;--typography-data-large-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-data-large-font-weight:700;--typography-data-large-font-size:5.25rem;--typography-data-large-line-height:5.25rem;--typography-data-large-letter-spacing:normal;--typography-data-large-units-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-data-large-units-font-weight:700;--typography-data-large-units-font-size:2.625rem;--typography-data-large-units-line-height:5.25rem;--typography-data-large-units-letter-spacing:normal;--typography-data-medium-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-data-medium-font-weight:700;--typography-data-medium-font-size:3rem;--typography-data-medium-line-height:5rem;--typography-data-medium-letter-spacing:normal;--typography-data-medium-units-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-data-medium-units-font-weight:700;--typography-data-medium-units-font-size:1.5rem;--typography-data-medium-units-line-height:5rem;--typography-data-medium-units-letter-spacing:normal;--typography-data-small-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-data-small-font-weight:700;--typography-data-small-font-size:1.5rem;--typography-data-small-line-height:1.5rem;--typography-data-small-letter-spacing:normal;--typography-data-small-units-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-data-small-units-font-weight:700;--typography-data-small-units-font-size:1.125rem;--typography-data-small-units-line-height:1.5rem;--typography-data-small-units-letter-spacing:normal;--typography-display-0-font-family:"Tiempos Headline",Georgia,serif;--typography-display-0-font-weight:800;--typography-display-0-font-size:4.5rem;--typography-display-0-line-height:5.25rem;--typography-display-0-letter-spacing:0em;--typography-heading-1-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-heading-1-font-weight:500;--typography-heading-1-font-size:2.125rem;--typography-heading-1-line-height:2.625rem;--typography-heading-1-letter-spacing:normal;--typography-heading-2-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-heading-2-font-weight:600;--typography-heading-2-font-size:1.75rem;--typography-heading-2-line-height:2.25rem;--typography-heading-2-letter-spacing:normal;--typography-heading-3-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-heading-3-font-weight:600;--typography-heading-3-font-size:1.375rem;--typography-heading-3-line-height:1.875rem;--typography-heading-3-letter-spacing:normal;--typography-heading-4-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-heading-4-font-weight:600;--typography-heading-4-font-size:1.125rem;--typography-heading-4-line-height:1.5rem;--typography-heading-4-letter-spacing:normal;--typography-heading-5-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-heading-5-font-weight:600;--typography-heading-5-font-size:1rem;--typography-heading-5-line-height:1.5rem;--typography-heading-5-letter-spacing:normal;--typography-heading-6-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-heading-6-font-weight:600;--typography-heading-6-font-size:0.875rem;--typography-heading-6-line-height:1.5rem;--typography-heading-6-letter-spacing:normal;--typography-paragraph-intro-lede-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-paragraph-intro-lede-font-weight:400;--typography-paragraph-intro-lede-font-size:1.25rem;--typography-paragraph-intro-lede-line-height:1.875rem;--typography-paragraph-intro-lede-letter-spacing:0;--typography-paragraph-intro-lede-max-width:975px;--typography-paragraph-body-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-paragraph-body-font-weight:400;--typography-paragraph-body-font-size:1rem;--typography-paragraph-body-line-height:1.5rem;--typography-paragraph-body-letter-spacing:normal;--typography-paragraph-body-max-width:780px;--typography-paragraph-small-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-paragraph-small-font-weight:400;--typography-paragraph-small-font-size:0.875rem;--typography-paragraph-small-line-height:1.125rem;--typography-paragraph-small-letter-spacing:normal;--typography-paragraph-small-max-width:680px;--typography-paragraph-extra-small-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-paragraph-extra-small-font-weight:400;--typography-paragraph-extra-small-font-size:0.75rem;--typography-paragraph-extra-small-line-height:1.125rem;--typography-paragraph-extra-small-letter-spacing:normal;--typography-paragraph-extra-small-max-width:600px;--typography-paragraph-bold-font-weight:600;--typography-button-primary-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-button-primary-font-weight:700;--typography-button-primary-font-size:1.125rem;--typography-button-primary-line-height:1.5rem;--typography-button-primary-letter-spacing:normal;--typography-button-secondary-font-family:"Inter","Noto Sans",Helvetica,Arial,sans-serif;--typography-button-secondary-font-weight:500;--typography-button-secondary-font-size:1rem;--typography-button-secondary-line-height:1.5rem;--typography-button-secondary-letter-spacing:normal}}@layer normalize{html{text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{appearance:none}::-webkit-file-upload-button{appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}}@layer reset{@font-face{font-family:Tiempos Headline;font-weight:800;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/tiempos/tiempos-headline-bold.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/tiempos/tiempos-headline-bold.woff)}@font-face{font-family:Tiempos Headline;font-weight:500;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/tiempos/tiempos-headline-medium.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/tiempos/tiempos-headline-medium.woff)}@font-face{font-family:Greycliff CF;font-weight:300;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/greycliff/greycliff-cf-light.woff) format("woff")}@font-face{font-family:Greycliff CF;font-weight:400;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/greycliff/greycliff-cf-regular.woff) format("woff")}@font-face{font-family:Greycliff CF;font-weight:500;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/greycliff/greycliff-cf-medium.woff) format("woff")}@font-face{font-family:Greycliff CF;font-weight:600;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/greycliff/greycliff-cf-demi-bold.woff) format("woff")}@font-face{font-family:Greycliff CF;font-weight:700;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/greycliff/greycliff-cf-bold.woff) format("woff")}@font-face{font-family:Greycliff CF;font-weight:800;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/greycliff/greycliff-cf-extra-bold.woff) format("woff")}@font-face{font-family:Inter;font-weight:300;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-light.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-light.woff)}@font-face{font-family:Inter;font-weight:400;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-regular.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-regular.woff)}@font-face{font-family:Inter;font-weight:500;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-medium.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-medium.woff)}@font-face{font-family:Inter;font-weight:600;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-demi-bold.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-demi-bold.woff)}@font-face{font-family:Inter;font-weight:700;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-bold.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-bold.woff)}@font-face{font-family:Inter;font-weight:800;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-extra-bold.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/inter/inter-extra-bold.woff)}@font-face{font-family:IBM Plex Mono;src:url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/ibm-plex-mono/ibm-plex-mono-regular.woff2),url(https://d1e7r7b0lb8p4d.cloudfront.net/fonts/ibm-plex-mono/ibm-plex-mono-regular.woff)}}@layer reset{*,:after,:before{border-color:var(--border-solid-border-color,"currentColor");border-style:solid;border-width:0}}
2
- .MenuItem-module_item__DPerF {
3
- font-family: var(--typography-paragraph-body-font-family);
4
- font-size: var(--typography-paragraph-body-font-size);
5
- letter-spacing: var(--typography-paragraph-body-letter-spacing);
6
- font-weight: var(--typography-paragraph-body-font-weight);
7
- line-height: var(--typography-paragraph-body-line-height);
8
- color: rgba(var(--color-purple-800-rgb), 0.7);
9
- padding: var(--spacing-6) var(--spacing-8);
10
- border: var(--border-focus-ring-border-width) var(--border-focus-ring-border-style) transparent;
11
- border-radius: 4px;
12
- display: flex;
13
- gap: 0 var(--spacing-8);
14
- align-items: center;
15
- margin-inline: var(--spacing-6);
16
- text-decoration: none;
17
- cursor: pointer;
18
- }
19
-
20
- .MenuItem-module_iconWrapper__bRdQN {
21
- flex-shrink: 0;
22
- display: flex;
23
- align-items: center;
24
- }
25
-
26
- .MenuItem-module_item__DPerF[data-focused] {
27
- background-color: var(--color-blue-100);
28
- color: var(--color-blue-500);
29
- outline: none;
30
- border-color: var(--color-blue-500);
31
- }
32
-
33
- .MenuItem-module_item__DPerF[data-disabled] {
34
- opacity: 0.3;
35
- }
36
2
  .Button-module_button__QOSYH {
37
3
  --button-min-height-width: var(--spacing-48);
38
4
  --button-padding-x: calc(
@@ -121,9 +87,6 @@
121
87
  --button-icon-size: var(--spacing-16);
122
88
  gap: var(--spacing-8);
123
89
  }
124
- .Focusable-module_focusableWrapper__NfuIi {
125
- display: inline-flex;
126
- }
127
90
  .Menu-module_menu__iHYqh {
128
91
  background-color: var(--color-white);
129
92
  color: var(--color-purple-800);
@@ -154,6 +117,43 @@
154
117
  display: block;
155
118
  margin-block: var(--spacing-6);
156
119
  }
120
+ .MenuItem-module_item__DPerF {
121
+ font-family: var(--typography-paragraph-body-font-family);
122
+ font-size: var(--typography-paragraph-body-font-size);
123
+ letter-spacing: var(--typography-paragraph-body-letter-spacing);
124
+ font-weight: var(--typography-paragraph-body-font-weight);
125
+ line-height: var(--typography-paragraph-body-line-height);
126
+ color: rgba(var(--color-purple-800-rgb), 0.7);
127
+ padding: var(--spacing-6) var(--spacing-8);
128
+ border: var(--border-focus-ring-border-width) var(--border-focus-ring-border-style) transparent;
129
+ border-radius: 4px;
130
+ display: flex;
131
+ gap: 0 var(--spacing-8);
132
+ align-items: center;
133
+ margin-inline: var(--spacing-6);
134
+ text-decoration: none;
135
+ cursor: pointer;
136
+ }
137
+
138
+ .MenuItem-module_iconWrapper__bRdQN {
139
+ flex-shrink: 0;
140
+ display: flex;
141
+ align-items: center;
142
+ }
143
+
144
+ .MenuItem-module_item__DPerF[data-focused] {
145
+ background-color: var(--color-blue-100);
146
+ color: var(--color-blue-500);
147
+ outline: none;
148
+ border-color: var(--color-blue-500);
149
+ }
150
+
151
+ .MenuItem-module_item__DPerF[data-disabled] {
152
+ opacity: 0.3;
153
+ }
154
+ .Focusable-module_focusableWrapper__NfuIi {
155
+ display: inline-flex;
156
+ }
157
157
  /** THIS IS AN AUTOGENERATED FILE **/
158
158
  /** THIS IS AN AUTOGENERATED FILE **/
159
159
  /** THIS IS AN AUTOGENERATED FILE **/
@@ -1098,20 +1098,39 @@
1098
1098
  white-space: nowrap;
1099
1099
  width: 1px;
1100
1100
  }
1101
- /** THIS IS AN AUTOGENERATED FILE **/
1102
- .LoadingSpinner-module_loadingSpinner__4SQsH {
1101
+ .LoadingSpinner-module_loadingSpinner__Zc2mJ {
1102
+ --loading-spinner-size: 48px;
1103
+
1103
1104
  display: flex;
1105
+ width: var(--loading-spinner-size);
1106
+ height: var(--loading-spinner-size);
1107
+ }
1108
+
1109
+ .LoadingSpinner-module_xs__y46OT {
1110
+ --loading-spinner-size: 16px;
1111
+ }
1112
+
1113
+ .LoadingSpinner-module_sm__nkmIa {
1114
+ --loading-spinner-size: 24px;
1104
1115
  }
1105
1116
 
1106
- .LoadingSpinner-module_spinner__bDpy0 {
1107
- animation: LoadingSpinner-module_spinner__bDpy0 var(--animation-duration-deliberate, 700ms) var(--animation-easing-function-ease-in-out, cubic-bezier(0.455, 0.03, 0.515, 0.955)) infinite;
1117
+ .LoadingSpinner-module_md__OWP2- {
1118
+ --loading-spinner-size: 48px;
1108
1119
  }
1109
1120
 
1110
- @keyframes LoadingSpinner-module_spinner__bDpy0 {
1121
+ .LoadingSpinner-module_spinner__BKrX0 {
1122
+ animation: LoadingSpinner-module_spinner__BKrX0 var(--animation-duration-deliberate)
1123
+ var(--animation-easing-function-ease-in-out) infinite;
1124
+ width: 100%;
1125
+ height: 100%;
1126
+ }
1127
+
1128
+ @keyframes LoadingSpinner-module_spinner__BKrX0 {
1111
1129
  100% {
1112
1130
  transform: rotate(360deg);
1113
1131
  }
1114
1132
  }
1133
+
1115
1134
  /** THIS IS AN AUTOGENERATED FILE **/
1116
1135
  /** THIS IS AN AUTOGENERATED FILE **/
1117
1136
  /** THIS IS AN AUTOGENERATED FILE **/
@@ -3,9 +3,9 @@ import { OverrideClassName } from "../../types/OverrideClassName";
3
3
  export type LoadingSpinnerProps = {
4
4
  accessibilityLabel: string;
5
5
  /**
6
- * Generally use "md" unless spinner is inside a form field
6
+ * Generally use "md" unless spinner is inside a form field. @default "md"
7
7
  */
8
- size?: "sm" | "md";
8
+ size?: "xs" | "sm" | "md";
9
9
  } & OverrideClassName<Omit<HTMLAttributes<HTMLDivElement>, "children">>;
10
10
  /**
11
11
  * {@link https://cultureamp.atlassian.net/wiki/spaces/DesignSystem/pages/3082093253/Loading+Spinner Guidance} |
@@ -0,0 +1,5 @@
1
+ type SpinnerIconProps = {
2
+ size: "xs" | "sm" | "md";
3
+ };
4
+ export declare const SpinnerIcon: ({ size }: SpinnerIconProps) => JSX.Element;
5
+ export {};
@@ -0,0 +1 @@
1
+ export * from "./SpinnerIcon";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaizen/components",
3
- "version": "1.65.0",
3
+ "version": "1.66.0",
4
4
  "description": "Kaizen component library",
5
5
  "author": "Geoffrey Chong <geoff.chong@cultureamp.com>",
6
6
  "homepage": "https://cultureamp.design",
@@ -0,0 +1,32 @@
1
+ .loadingSpinner {
2
+ --loading-spinner-size: 48px;
3
+
4
+ display: flex;
5
+ width: var(--loading-spinner-size);
6
+ height: var(--loading-spinner-size);
7
+ }
8
+
9
+ .xs {
10
+ --loading-spinner-size: 16px;
11
+ }
12
+
13
+ .sm {
14
+ --loading-spinner-size: 24px;
15
+ }
16
+
17
+ .md {
18
+ --loading-spinner-size: 48px;
19
+ }
20
+
21
+ .spinner {
22
+ animation: spinner var(--animation-duration-deliberate)
23
+ var(--animation-easing-function-ease-in-out) infinite;
24
+ width: 100%;
25
+ height: 100%;
26
+ }
27
+
28
+ @keyframes spinner {
29
+ 100% {
30
+ transform: rotate(360deg);
31
+ }
32
+ }
@@ -2,14 +2,15 @@ import React, { HTMLAttributes } from "react"
2
2
  import classnames from "classnames"
3
3
  import { VisuallyHidden } from "~components/VisuallyHidden"
4
4
  import { OverrideClassName } from "~components/types/OverrideClassName"
5
- import styles from "./LoadingSpinner.module.scss"
5
+ import { SpinnerIcon } from "./subcomponents"
6
+ import styles from "./LoadingSpinner.module.css"
6
7
 
7
8
  export type LoadingSpinnerProps = {
8
9
  accessibilityLabel: string
9
10
  /**
10
- * Generally use "md" unless spinner is inside a form field
11
+ * Generally use "md" unless spinner is inside a form field. @default "md"
11
12
  */
12
- size?: "sm" | "md"
13
+ size?: "xs" | "sm" | "md"
13
14
  } & OverrideClassName<Omit<HTMLAttributes<HTMLDivElement>, "children">>
14
15
 
15
16
  /**
@@ -23,61 +24,16 @@ export const LoadingSpinner = ({
23
24
  ...props
24
25
  }: LoadingSpinnerProps): JSX.Element => (
25
26
  <div
26
- data-automation-id="loading-spinner"
27
- className={classnames(styles.loadingSpinner, classNameOverride)}
27
+ className={classnames(
28
+ styles.loadingSpinner,
29
+ styles[size],
30
+ classNameOverride
31
+ )}
28
32
  role="status"
29
33
  {...props}
30
34
  >
31
35
  <VisuallyHidden>{accessibilityLabel}</VisuallyHidden>
32
- {size === "md" ? (
33
- <svg
34
- className={styles.spinner}
35
- aria-hidden="true"
36
- viewBox="0 0 48 48"
37
- width={48} // Ideally we'd use spacing tokens converted to unitless values
38
- fill="none"
39
- xmlns="http://www.w3.org/2000/svg"
40
- >
41
- <circle
42
- cx="24"
43
- cy="24"
44
- r="22.5"
45
- stroke="currentColor"
46
- strokeWidth="3"
47
- strokeOpacity="0.3"
48
- />
49
- <path
50
- fillRule="evenodd"
51
- clipRule="evenodd"
52
- fill="currentColor"
53
- d="M46.5 24c.8284 0 1.5049-.6734 1.4539-1.5002C47.21 10.44 37.5601.789989 25.5003.0461639 24.6734-.004835 24 .671607 24 1.50003c0 .82843.6738 1.49444 1.5002 1.55277 10.4023.73424 18.7128 9.0447 19.447 19.447C45.0056 23.3262 45.6716 24 46.5 24z"
54
- />
55
- </svg>
56
- ) : (
57
- <svg
58
- className={styles.spinner}
59
- aria-hidden="true"
60
- viewBox="0 0 24 24"
61
- width={24} // Ideally we'd use spacing tokens converted to unitless values
62
- fill="none"
63
- xmlns="http://www.w3.org/2000/svg"
64
- >
65
- <circle
66
- cx="12"
67
- cy="12"
68
- r="9"
69
- stroke="currentColor"
70
- strokeWidth="2"
71
- strokeOpacity="0.3"
72
- />
73
- <path
74
- fillRule="evenodd"
75
- clipRule="evenodd"
76
- fill="currentColor"
77
- d="M21.0564 13c.5076 0 .9377-.3851.9431-.8926.0004-.0358.0005-.0716.0005-.1074 0-5.52285-4.4771-10-10-10-.0359 0-.0718.00019-.1076.00057-.5076.00535-.8926.43552-.8926.94308v.11543C10.9998 3.59163 11.4675 4 12 4c4.4183 0 8 3.58172 8 8 0 .5324.4083 1 .9407 1h.1157z"
78
- />
79
- </svg>
80
- )}
36
+ <SpinnerIcon size={size} />
81
37
  </div>
82
38
  )
83
39
 
@@ -31,12 +31,17 @@ When inside a button, it is intended to have the same color as the label text.
31
31
 
32
32
  ### ClassNameOverride
33
33
 
34
- Override styles such as the colour of the spinner using `classNameOverride`.
34
+ Override styles, such as the colour of the spinner using `classNameOverride`.
35
35
 
36
36
  <Canvas of={LoadingSpinnerStories.ClassNameOverride} />
37
37
 
38
+ Below is an example of how to apply the current color tokens used in designs.
39
+
40
+ <Canvas of={LoadingSpinnerStories.Colors} />
41
+
38
42
  ### Size
39
43
 
40
- Generally use `"md"` (default value) unless spinner is inside a form field.
44
+ Generally use `"md"` (default value) unless spinner is inside a form field, in which case use `sm`. The `xs` size is for buttons or content dense layouts.
41
45
 
42
46
  <Canvas of={LoadingSpinnerStories.Size} />
47
+
@@ -18,10 +18,11 @@ const StickerSheetTemplate: StickerSheetStory = {
18
18
  render: ({ isReversed }) => (
19
19
  <StickerSheet isReversed={isReversed}>
20
20
  <StickerSheet.Header
21
- headings={['Size "sm"', 'Size "md"', "Custom colour"]}
21
+ headings={['Size "xs"', 'Size "sm"', 'Size "md"', "Custom color"]}
22
22
  />
23
23
  <StickerSheet.Body>
24
24
  <StickerSheet.Row>
25
+ <LoadingSpinner accessibilityLabel="Loading" size="xs" />
25
26
  <LoadingSpinner accessibilityLabel="Loading" size="sm" />
26
27
  <LoadingSpinner accessibilityLabel="Loading" size="md" />
27
28
  <LoadingSpinner
@@ -28,9 +28,28 @@ export const ClassNameOverride: Story = {
28
28
  args: { classNameOverride: "text-green-400" },
29
29
  }
30
30
 
31
+ export const Colors: Story = {
32
+ render: args => (
33
+ <>
34
+ <LoadingSpinner {...args} classNameOverride="text-green-400" />
35
+ <LoadingSpinner {...args} classNameOverride="text-purple-800" />
36
+ <LoadingSpinner {...args} classNameOverride="text-blue-500" />
37
+ <LoadingSpinner {...args} classNameOverride="text-red-500" />
38
+ </>
39
+ ),
40
+ decorators: [
41
+ Story => (
42
+ <div className="flex gap-24">
43
+ <Story />
44
+ </div>
45
+ ),
46
+ ],
47
+ }
48
+
31
49
  export const Size: Story = {
32
50
  render: args => (
33
51
  <>
52
+ <LoadingSpinner {...args} size="xs" />
34
53
  <LoadingSpinner {...args} size="sm" />
35
54
  <LoadingSpinner {...args} size="md" />
36
55
  </>
@@ -0,0 +1,87 @@
1
+ import React from "react"
2
+ import styles from "../LoadingSpinner.module.css"
3
+
4
+ const SmallSpinnerIcon = (): JSX.Element => (
5
+ <svg
6
+ className={styles.spinner}
7
+ aria-hidden="true"
8
+ viewBox="0 0 24 24"
9
+ fill="none"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ >
12
+ <circle
13
+ cx="12"
14
+ cy="12"
15
+ r="9"
16
+ stroke="currentColor"
17
+ strokeWidth="2"
18
+ strokeOpacity="0.3"
19
+ />
20
+ <path
21
+ fillRule="evenodd"
22
+ clipRule="evenodd"
23
+ fill="currentColor"
24
+ d="M21.0564 13c.5076 0 .9377-.3851.9431-.8926.0004-.0358.0005-.0716.0005-.1074 0-5.52285-4.4771-10-10-10-.0359 0-.0718.00019-.1076.00057-.5076.00535-.8926.43552-.8926.94308v.11543C10.9998 3.59163 11.4675 4 12 4c4.4183 0 8 3.58172 8 8 0 .5324.4083 1 .9407 1h.1157z"
25
+ />
26
+ </svg>
27
+ )
28
+
29
+ const MediumSpinnerIcon = (): JSX.Element => (
30
+ <svg
31
+ className={styles.spinner}
32
+ aria-hidden="true"
33
+ viewBox="0 0 48 48"
34
+ fill="none"
35
+ xmlns="http://www.w3.org/2000/svg"
36
+ >
37
+ <circle
38
+ cx="24"
39
+ cy="24"
40
+ r="22.5"
41
+ stroke="currentColor"
42
+ strokeWidth="3"
43
+ strokeOpacity="0.3"
44
+ />
45
+ <path
46
+ fillRule="evenodd"
47
+ clipRule="evenodd"
48
+ fill="currentColor"
49
+ d="M46.5 24c.8284 0 1.5049-.6734 1.4539-1.5002C47.21 10.44 37.5601.789989 25.5003.0461639 24.6734-.004835 24 .671607 24 1.50003c0 .82843.6738 1.49444 1.5002 1.55277 10.4023.73424 18.7128 9.0447 19.447 19.447C45.0056 23.3262 45.6716 24 46.5 24z"
50
+ />
51
+ </svg>
52
+ )
53
+
54
+ const ExtraSmallSpinnerIcon = (): JSX.Element => (
55
+ <svg
56
+ className={styles.spinner}
57
+ viewBox="0 0 16 16"
58
+ fill="none"
59
+ xmlns="http://www.w3.org/2000/svg"
60
+ >
61
+ <circle
62
+ opacity="0.3"
63
+ cx="8"
64
+ cy="8"
65
+ r="6"
66
+ stroke="currentColor"
67
+ strokeWidth="2"
68
+ />
69
+ <path
70
+ d="M14 8C14 4.68629 11.3137 2 8 2"
71
+ stroke="currentColor"
72
+ strokeWidth="2"
73
+ strokeLinecap="round"
74
+ strokeLinejoin="round"
75
+ />
76
+ </svg>
77
+ )
78
+
79
+ type SpinnerIconProps = {
80
+ size: "xs" | "sm" | "md"
81
+ }
82
+
83
+ export const SpinnerIcon = ({ size }: SpinnerIconProps): JSX.Element => {
84
+ if (size === "xs") return <ExtraSmallSpinnerIcon />
85
+ if (size === "sm") return <SmallSpinnerIcon />
86
+ return <MediumSpinnerIcon />
87
+ }
@@ -0,0 +1 @@
1
+ export * from "./SpinnerIcon"
@@ -82,7 +82,7 @@ const StickerSheetTemplate: StickerSheetStory = {
82
82
  <ArrowForwardIcon role="presentation" />
83
83
  </Button>
84
84
  <Button size="small" isDisabled>
85
- <LoadingSpinner size="sm" accessibilityLabel="submitting label" />
85
+ <LoadingSpinner size="xs" accessibilityLabel="submitting label" />
86
86
  </Button>
87
87
  </StickerSheet.Row>
88
88
  <StickerSheet.Row rowTitle="Icon only small">
@@ -93,7 +93,7 @@ const StickerSheetTemplate: StickerSheetStory = {
93
93
  <TrashIcon role="img" aria-label="Remove label" />
94
94
  </Button>
95
95
  <Button size="small" isDisabled>
96
- <LoadingSpinner size="sm" accessibilityLabel="Removing label" />
96
+ <LoadingSpinner size="xs" accessibilityLabel="Removing label" />
97
97
  </Button>
98
98
  </StickerSheet.Row>
99
99
  </StickerSheet.Body>
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- var styles = {
4
- "loadingSpinner": "LoadingSpinner-module_loadingSpinner__4SQsH",
5
- "spinner": "LoadingSpinner-module_spinner__bDpy0"
6
- };
7
- module.exports = styles;
@@ -1,5 +0,0 @@
1
- var styles = {
2
- "loadingSpinner": "LoadingSpinner-module_loadingSpinner__4SQsH",
3
- "spinner": "LoadingSpinner-module_spinner__bDpy0"
4
- };
5
- export { styles as default };
@@ -1,16 +0,0 @@
1
- @import "~@kaizen/design-tokens/sass/animation";
2
-
3
- .loadingSpinner {
4
- display: flex;
5
- }
6
-
7
- .spinner {
8
- animation: spinner $animation-duration-deliberate
9
- $animation-easing-function-ease-in-out infinite;
10
- }
11
-
12
- @keyframes spinner {
13
- 100% {
14
- transform: rotate(360deg);
15
- }
16
- }