@spaced-out/ui-design-system 0.5.36 → 0.5.38

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 (38) hide show
  1. package/.cspell/custom-words.txt +1 -0
  2. package/.github/workflows/publish_to_npm.yml +1 -1
  3. package/CHANGELOG.md +15 -0
  4. package/design-tokens/size/base-size.json +12 -0
  5. package/lib/components/ScrollingLoader/ScrollingLoader.d.ts +35 -0
  6. package/lib/components/ScrollingLoader/ScrollingLoader.d.ts.map +1 -0
  7. package/lib/components/ScrollingLoader/ScrollingLoader.js +205 -0
  8. package/lib/components/ScrollingLoader/ScrollingLoader.module.css +283 -0
  9. package/lib/components/ScrollingLoader/index.d.ts +2 -0
  10. package/lib/components/ScrollingLoader/index.d.ts.map +1 -0
  11. package/lib/components/ScrollingLoader/index.js +16 -0
  12. package/lib/components/StageArrows/StageArrow/StageArrow.d.ts +36 -0
  13. package/lib/components/StageArrows/StageArrow/StageArrow.d.ts.map +1 -0
  14. package/lib/components/StageArrows/StageArrow/StageArrow.js +96 -0
  15. package/lib/components/StageArrows/StageArrow/StageArrow.module.css +157 -0
  16. package/lib/components/StageArrows/StageArrow/index.d.ts +2 -0
  17. package/lib/components/StageArrows/StageArrow/index.d.ts.map +1 -0
  18. package/lib/components/StageArrows/StageArrow/index.js +16 -0
  19. package/lib/components/StageArrows/StageArrows.d.ts +15 -0
  20. package/lib/components/StageArrows/StageArrows.d.ts.map +1 -0
  21. package/lib/components/StageArrows/StageArrows.js +60 -0
  22. package/lib/components/StageArrows/StageArrows.module.css +12 -0
  23. package/lib/components/StageArrows/index.d.ts +3 -0
  24. package/lib/components/StageArrows/index.d.ts.map +1 -0
  25. package/lib/components/StageArrows/index.js +27 -0
  26. package/lib/components/index.d.ts +2 -0
  27. package/lib/components/index.d.ts.map +1 -1
  28. package/lib/components/index.js +22 -0
  29. package/lib/styles/index.css +8 -0
  30. package/lib/styles/index.d.ts +4 -0
  31. package/lib/styles/index.d.ts.map +1 -1
  32. package/lib/styles/index.js +5 -1
  33. package/lib/styles/variables/_size.css +8 -0
  34. package/lib/styles/variables/_size.d.ts +4 -0
  35. package/lib/styles/variables/_size.d.ts.map +1 -1
  36. package/lib/styles/variables/_size.js +5 -1
  37. package/mcp/package.json +1 -1
  38. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  Aaiun
2
2
  Aditya
3
+ aditya-senapati
3
4
  aditya-kaushal
4
5
  Aliasify
5
6
  amet
@@ -24,7 +24,7 @@ jobs:
24
24
  - name: Check Permissions
25
25
  id: check-permissions
26
26
  env:
27
- ALLOWED_USERS: superrover, Anant-Raj, diwakersurya, ashwini-sensehq, vish-sah, VishalBarnawal, sanskar-s, VivekJangid, sharad-kushwah, Swatantramishra1, bhatiarush27, darsh-mecwan-sense, keshavsensehq, SahilShrivastava1, aditya-kaushal, LakshayKumar-1
27
+ ALLOWED_USERS: superrover, Anant-Raj, diwakersurya, ashwini-sensehq, vish-sah, VishalBarnawal, sanskar-s, VivekJangid, sharad-kushwah, Swatantramishra1, bhatiarush27, darsh-mecwan-sense, keshavsensehq, SahilShrivastava1, aditya-kaushal, LakshayKumar-1, aditya-senapati
28
28
  if: ${{ !contains(env.ALLOWED_USERS, github.actor) }}
29
29
  run: |
30
30
  echo "You don't have correct permissions to do this release"
package/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
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.5.38](https://github.com/spaced-out/ui-design-system/compare/v0.5.37...v0.5.38) (2025-12-19)
6
+
7
+
8
+ ### Features
9
+
10
+ * **ScrollingLoader:** Add animated loading component with skeleton rows and cycling text ([#453](https://github.com/spaced-out/ui-design-system/issues/453)) ([6b489cc](https://github.com/spaced-out/ui-design-system/commit/6b489ccc9195c36908779be8e2d64589cbe2aae0))
11
+
12
+ ### [0.5.37](https://github.com/spaced-out/ui-design-system/compare/v0.5.36...v0.5.37) (2025-12-18)
13
+
14
+
15
+ ### Features
16
+
17
+ * **GDS-519:** Stage Arrows ([#410](https://github.com/spaced-out/ui-design-system/issues/410)) ([16e40a8](https://github.com/spaced-out/ui-design-system/commit/16e40a85168d100eef29874ab30ff64f1041ff89))
18
+ * github permission for genesis ([#452](https://github.com/spaced-out/ui-design-system/issues/452)) ([33b49cd](https://github.com/spaced-out/ui-design-system/commit/33b49cdd0819d01984efb03d95bfef30ef9b92f8))
19
+
5
20
  ### [0.5.36](https://github.com/spaced-out/ui-design-system/compare/v0.5.35...v0.5.36) (2025-12-15)
6
21
 
7
22
 
@@ -18,6 +18,9 @@
18
18
  "12":{
19
19
  "value": "12px"
20
20
  },
21
+ "16":{
22
+ "value": "16px"
23
+ },
21
24
  "18": {
22
25
  "value": "18px"
23
26
  },
@@ -96,6 +99,9 @@
96
99
  "140": {
97
100
  "value": "140px"
98
101
  },
102
+ "150": {
103
+ "value": "150px"
104
+ },
99
105
  "160": {
100
106
  "value": "160px"
101
107
  },
@@ -120,6 +126,9 @@
120
126
  "276": {
121
127
  "value": "276px"
122
128
  },
129
+ "284": {
130
+ "value": "284px"
131
+ },
123
132
  "300": {
124
133
  "value": "300px"
125
134
  },
@@ -132,6 +141,9 @@
132
141
  "400": {
133
142
  "value": "400px"
134
143
  },
144
+ "426": {
145
+ "value": "426px"
146
+ },
135
147
  "480": {
136
148
  "value": "480px"
137
149
  },
@@ -0,0 +1,35 @@
1
+ import type { Flow } from 'flow-to-typescript-codemod';
2
+ export declare const SCROLLING_LOADER_SIZE: Readonly<{
3
+ medium: "medium";
4
+ large: "large";
5
+ fluid: "fluid";
6
+ }>;
7
+ export type ScrollingLoaderSize = (typeof SCROLLING_LOADER_SIZE)[keyof typeof SCROLLING_LOADER_SIZE];
8
+ type ClassNames = Readonly<{
9
+ wrapper?: string;
10
+ skeletonContainer?: string;
11
+ textContainer?: string;
12
+ }>;
13
+ export interface IconItem {
14
+ name: string;
15
+ type?: 'regular' | 'solid' | 'duotone' | 'brands';
16
+ }
17
+ export interface ScrollingLoaderProps {
18
+ /** List of icons to display in skeleton rows */
19
+ iconList: IconItem[];
20
+ /** List of text messages to cycle through */
21
+ textList: string[];
22
+ /** Size variant of the loader */
23
+ size?: ScrollingLoaderSize;
24
+ /** Custom class names for styling */
25
+ classNames?: ClassNames;
26
+ /** Test ID for the component */
27
+ testId?: string;
28
+ /** Animation duration in ms for each text item (default: 2500) */
29
+ textAnimationDuration?: number;
30
+ /** Whether to loop through texts or stop at the last one (default: false) */
31
+ loopTexts?: boolean;
32
+ }
33
+ export declare const ScrollingLoader: Flow.AbstractComponent<ScrollingLoaderProps, HTMLDivElement>;
34
+ export {};
35
+ //# sourceMappingURL=ScrollingLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollingLoader.d.ts","sourceRoot":"","sources":["../../../src/components/ScrollingLoader/ScrollingLoader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,4BAA4B,CAAC;AAUrD,eAAO,MAAM,qBAAqB;;;;EAIhC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAErE,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iCAAiC;IACjC,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,qCAAqC;IACrC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAClD,oBAAoB,EACpB,cAAc,CAqOf,CAAC"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ScrollingLoader = exports.SCROLLING_LOADER_SIZE = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _classify = _interopRequireDefault(require("../../utils/classify"));
9
+ var _qa = require("../../utils/qa");
10
+ var _SemanticIcon = require("../Icon/SemanticIcon");
11
+ var _ScrollingLoaderModule = _interopRequireDefault(require("./ScrollingLoader.module.css"));
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
+ const SCROLLING_LOADER_SIZE = exports.SCROLLING_LOADER_SIZE = Object.freeze({
16
+ medium: 'medium',
17
+ large: 'large',
18
+ fluid: 'fluid'
19
+ });
20
+ const ScrollingLoader = exports.ScrollingLoader = /*#__PURE__*/React.forwardRef((_ref, ref) => {
21
+ let {
22
+ iconList,
23
+ textList,
24
+ size = SCROLLING_LOADER_SIZE.medium,
25
+ classNames,
26
+ testId,
27
+ textAnimationDuration = 2500,
28
+ loopTexts = false
29
+ } = _ref;
30
+ // Track active and exiting text indices for animation
31
+ const [activeIndex, setActiveIndex] = React.useState(0);
32
+ const [exitingIndex, setExitingIndex] = React.useState(null);
33
+
34
+ // Ref to track active index for interval callback (avoids stale closure)
35
+ const activeIndexRef = React.useRef(0);
36
+
37
+ // Ref to track textList length for interval callback (supports streaming without restart)
38
+ const textListLengthRef = React.useRef(textList.length);
39
+
40
+ // Ref to track loopTexts for interval callback (avoids stale closure)
41
+ const loopTextsRef = React.useRef(loopTexts);
42
+
43
+ // Ref to track the timeout for clearing exiting state
44
+ const exitingTimeoutRef = React.useRef(null);
45
+
46
+ // Create extended icon list for infinite scroll effect with unique IDs
47
+ const extendedIconList = React.useMemo(() =>
48
+ // Duplicate the list to create seamless looping
49
+ [...iconList, ...iconList].map((icon, idx) => ({
50
+ ...icon,
51
+ id: `${icon.name}-${idx < iconList.length ? 'a' : 'b'}-${idx % iconList.length}`
52
+ })), [iconList]);
53
+ const skeletonAnimationDuration = iconList.length * 1.5;
54
+
55
+ // Create text items with unique IDs
56
+ const textItems = React.useMemo(() => textList.map((text, idx) => ({
57
+ text,
58
+ id: `text-${idx}-${text.slice(0, 10).replace(/\s/g, '')}`,
59
+ index: idx
60
+ })), [textList]);
61
+
62
+ // Keep textList length ref in sync (supports streaming without restarting interval)
63
+ React.useEffect(() => {
64
+ textListLengthRef.current = textList.length;
65
+ }, [textList.length]);
66
+
67
+ // Keep loopTexts ref in sync
68
+ React.useEffect(() => {
69
+ loopTextsRef.current = loopTexts;
70
+ }, [loopTexts]);
71
+
72
+ // Reset indices when textList length decreases and current index is out of bounds
73
+ // This prevents invisible text when switching to a shorter list
74
+ React.useEffect(() => {
75
+ if (activeIndexRef.current >= textList.length) {
76
+ activeIndexRef.current = 0;
77
+ setActiveIndex(0);
78
+ setExitingIndex(null);
79
+ }
80
+ }, [textList.length]);
81
+
82
+ // Animation interval - uses refs to support streaming without restart
83
+ React.useEffect(() => {
84
+ const interval = setInterval(() => {
85
+ const currentLength = textListLengthRef.current;
86
+ const shouldLoop = loopTextsRef.current;
87
+
88
+ // Only animate if we have multiple items
89
+ if (currentLength <= 1) {
90
+ return;
91
+ }
92
+ const currentIndex = activeIndexRef.current;
93
+ const isAtLastItem = currentIndex === currentLength - 1;
94
+
95
+ // If not looping and at the last item, don't advance
96
+ if (!shouldLoop && isAtLastItem) {
97
+ return;
98
+ }
99
+ const nextIndex = (currentIndex + 1) % currentLength;
100
+
101
+ // Set exiting index to current
102
+ setExitingIndex(currentIndex);
103
+
104
+ // Clear any existing timeout before creating a new one
105
+ if (exitingTimeoutRef.current !== null) {
106
+ clearTimeout(exitingTimeoutRef.current);
107
+ }
108
+
109
+ // Clear exiting state after animation completes
110
+ exitingTimeoutRef.current = setTimeout(() => {
111
+ setExitingIndex(null);
112
+ }, 350);
113
+
114
+ // Update ref and state
115
+ activeIndexRef.current = nextIndex;
116
+ setActiveIndex(nextIndex);
117
+ }, textAnimationDuration);
118
+ return () => {
119
+ clearInterval(interval);
120
+ // Clean up any pending timeout on unmount
121
+ if (exitingTimeoutRef.current !== null) {
122
+ clearTimeout(exitingTimeoutRef.current);
123
+ }
124
+ };
125
+ }, [textAnimationDuration]);
126
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
127
+ ref: ref,
128
+ "data-testid": (0, _qa.generateTestId)({
129
+ base: testId,
130
+ slot: 'wrapper'
131
+ }),
132
+ className: (0, _classify.default)(_ScrollingLoaderModule.default.wrapper, {
133
+ [_ScrollingLoaderModule.default.medium]: size === SCROLLING_LOADER_SIZE.medium,
134
+ [_ScrollingLoaderModule.default.large]: size === SCROLLING_LOADER_SIZE.large,
135
+ [_ScrollingLoaderModule.default.fluid]: size === SCROLLING_LOADER_SIZE.fluid
136
+ }, classNames?.wrapper),
137
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
138
+ "data-testid": (0, _qa.generateTestId)({
139
+ base: testId,
140
+ slot: 'skeleton'
141
+ }),
142
+ className: (0, _classify.default)(_ScrollingLoaderModule.default.skeletonContainer, classNames?.skeletonContainer),
143
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
144
+ className: _ScrollingLoaderModule.default.skeletonScroller,
145
+ style: {
146
+ '--animation-duration': `${skeletonAnimationDuration}s`
147
+ },
148
+ children: extendedIconList.map(icon => /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
149
+ className: (0, _classify.default)(_ScrollingLoaderModule.default.skeletonRow, {
150
+ [_ScrollingLoaderModule.default.skeletonRowSmall]: size === SCROLLING_LOADER_SIZE.medium,
151
+ [_ScrollingLoaderModule.default.skeletonRowLarge]: size === SCROLLING_LOADER_SIZE.large || size === SCROLLING_LOADER_SIZE.fluid
152
+ }),
153
+ "data-testid": (0, _qa.generateTestId)({
154
+ base: testId,
155
+ slot: `skeleton-row-${icon.id}`
156
+ }),
157
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SemanticIcon.SemanticIcon, {
158
+ name: icon.name,
159
+ type: icon.type || 'regular',
160
+ size: size === SCROLLING_LOADER_SIZE.medium ? 'small' : 'medium',
161
+ semantic: "neutral",
162
+ testId: (0, _qa.generateTestId)({
163
+ base: testId,
164
+ slot: `icon-${icon.id}`
165
+ })
166
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
167
+ className: _ScrollingLoaderModule.default.skeletonBars,
168
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
169
+ className: _ScrollingLoaderModule.default.skeletonBarTitle
170
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
171
+ className: _ScrollingLoaderModule.default.skeletonBarSubtitle
172
+ })]
173
+ })]
174
+ }, icon.id))
175
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
176
+ className: _ScrollingLoaderModule.default.gradientTop
177
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
178
+ className: _ScrollingLoaderModule.default.gradientBottom
179
+ })]
180
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
181
+ "data-testid": (0, _qa.generateTestId)({
182
+ base: testId,
183
+ slot: 'text'
184
+ }),
185
+ className: (0, _classify.default)(_ScrollingLoaderModule.default.textContainer, classNames?.textContainer),
186
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
187
+ className: _ScrollingLoaderModule.default.textScroller,
188
+ children: textItems.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
189
+ className: (0, _classify.default)(_ScrollingLoaderModule.default.textItem, {
190
+ [_ScrollingLoaderModule.default.textItemMedium]: size === SCROLLING_LOADER_SIZE.medium,
191
+ [_ScrollingLoaderModule.default.textItemLarge]: size === SCROLLING_LOADER_SIZE.large || size === SCROLLING_LOADER_SIZE.fluid,
192
+ [_ScrollingLoaderModule.default.textItemStatic]: textList.length <= 1,
193
+ [_ScrollingLoaderModule.default.textItemActive]: textList.length > 1 && item.index === activeIndex,
194
+ [_ScrollingLoaderModule.default.textItemExiting]: textList.length > 1 && item.index === exitingIndex
195
+ }),
196
+ "data-testid": (0, _qa.generateTestId)({
197
+ base: testId,
198
+ slot: `text-item-${item.id}`
199
+ }),
200
+ children: item.text
201
+ }, item.id))
202
+ })
203
+ })]
204
+ });
205
+ });
@@ -0,0 +1,283 @@
1
+ @value (
2
+ colorBackgroundTertiary,
3
+ colorBackgroundSecondary,
4
+ colorBorderTertiary,
5
+ colorTextPrimary,
6
+ colorFillNone
7
+ ) from '../../styles/variables/_color.css';
8
+
9
+ @value (
10
+ spaceNone,
11
+ spaceXXSmall,
12
+ spaceXSmall,
13
+ spaceSmall,
14
+ spaceMedium,
15
+ spaceFluid,
16
+ spaceNegHalfFluid
17
+ ) from '../../styles/variables/_space.css';
18
+
19
+ @value (
20
+ size8,
21
+ size12,
22
+ size16,
23
+ size20,
24
+ size24,
25
+ size34,
26
+ size42,
27
+ size90,
28
+ size100,
29
+ size150,
30
+ size200,
31
+ size240,
32
+ size260,
33
+ size276,
34
+ size284,
35
+ size300,
36
+ size320,
37
+ size426,
38
+ sizeFluid
39
+ ) from '../../styles/variables/_size.css';
40
+
41
+ @value (
42
+ borderRadiusXSmall,
43
+ borderRadiusMedium,
44
+ borderWidthPrimary
45
+ ) from '../../styles/variables/_border.css';
46
+
47
+ @value (
48
+ motionDurationNormal,
49
+ motionDurationSlow,
50
+ motionEaseInEaseOut
51
+ ) from '../../styles/variables/_motion.css';
52
+
53
+ @value (
54
+ opacity0,
55
+ opacity100
56
+ ) from '../../styles/variables/_opacity.css';
57
+
58
+ @value (
59
+ fontWeightMedium
60
+ ) from '../../styles/variables/_font.css';
61
+
62
+ .wrapper {
63
+ display: flex;
64
+ flex-direction: column;
65
+ align-items: center;
66
+ gap: spaceMedium;
67
+ }
68
+
69
+ .medium {
70
+ width: size284;
71
+ }
72
+
73
+ .large {
74
+ width: size426;
75
+ }
76
+
77
+ .fluid {
78
+ width: sizeFluid;
79
+ }
80
+
81
+ /* Skeleton Container */
82
+ .skeletonContainer {
83
+ position: relative;
84
+ width: sizeFluid;
85
+ overflow: hidden;
86
+ border: borderWidthPrimary dashed colorBorderTertiary;
87
+ border-radius: borderRadiusMedium;
88
+ background-color: colorBackgroundTertiary;
89
+ }
90
+
91
+ /* Size-specific skeleton container heights */
92
+ .medium .skeletonContainer {
93
+ height: size200;
94
+ }
95
+
96
+ .large .skeletonContainer,
97
+ .fluid .skeletonContainer {
98
+ height: size300;
99
+ }
100
+
101
+ .skeletonScroller {
102
+ --animation-duration: 9s;
103
+ display: flex;
104
+ flex-direction: column;
105
+ gap: spaceMedium;
106
+ animation: scrollUp var(--animation-duration) linear infinite;
107
+ }
108
+
109
+ /* Size-specific skeleton scroller padding */
110
+ .medium .skeletonScroller {
111
+ padding: spaceSmall;
112
+ }
113
+
114
+ .large .skeletonScroller,
115
+ .fluid .skeletonScroller {
116
+ padding: spaceMedium;
117
+ }
118
+
119
+ .skeletonRow {
120
+ display: flex;
121
+ align-items: center;
122
+ gap: spaceXSmall;
123
+ flex-shrink: 0;
124
+ }
125
+
126
+ .skeletonRowSmall {
127
+ gap: spaceXSmall;
128
+ }
129
+
130
+ .skeletonRowLarge {
131
+ gap: spaceSmall;
132
+ }
133
+
134
+ .skeletonBars {
135
+ display: flex;
136
+ flex-direction: column;
137
+ gap: spaceXSmall;
138
+ flex: 1;
139
+ }
140
+
141
+ .skeletonBarTitle {
142
+ width: size90;
143
+ height: size12;
144
+ background-color: colorBackgroundSecondary;
145
+ border-radius: borderRadiusXSmall;
146
+ }
147
+
148
+ .skeletonBarSubtitle {
149
+ width: sizeFluid;
150
+ height: size8;
151
+ background-color: colorBackgroundSecondary;
152
+ border-radius: borderRadiusXSmall;
153
+ }
154
+
155
+ .skeletonRowLarge .skeletonBarTitle {
156
+ height: calc(size8 * 2);
157
+ }
158
+
159
+ .skeletonRowLarge .skeletonBarSubtitle {
160
+ height: size12;
161
+ }
162
+
163
+ /* Gradient Overlays */
164
+ .gradientTop {
165
+ position: absolute;
166
+ top: calc(borderWidthPrimary * -1);
167
+ left: calc(borderWidthPrimary * -1);
168
+ right: calc(borderWidthPrimary * -1);
169
+ background: linear-gradient(
170
+ to bottom,
171
+ colorBackgroundTertiary opacity0,
172
+ colorFillNone opacity100
173
+ );
174
+ pointer-events: none;
175
+ }
176
+
177
+ .gradientBottom {
178
+ position: absolute;
179
+ bottom: calc(borderWidthPrimary * -1);
180
+ left: calc(borderWidthPrimary * -1);
181
+ right: calc(borderWidthPrimary * -1);
182
+ background: linear-gradient(
183
+ to top,
184
+ colorBackgroundTertiary opacity0,
185
+ colorFillNone opacity100
186
+ );
187
+ pointer-events: none;
188
+ }
189
+
190
+ /* Size-specific gradient overlay heights (50% of container height) */
191
+ .medium .gradientTop,
192
+ .medium .gradientBottom {
193
+ height: size100;
194
+ }
195
+
196
+ .large .gradientTop,
197
+ .large .gradientBottom,
198
+ .fluid .gradientTop,
199
+ .fluid .gradientBottom {
200
+ height: size150;
201
+ }
202
+
203
+ /* Text Container */
204
+ .textContainer {
205
+ display: flex;
206
+ justify-content: center;
207
+ align-items: center;
208
+ position: relative;
209
+ width: sizeFluid;
210
+ overflow: hidden;
211
+ }
212
+
213
+ /* Size-specific text container heights */
214
+ .medium .textContainer {
215
+ height: calc(size20 + borderWidthPrimary);
216
+ }
217
+
218
+ .large .textContainer,
219
+ .fluid .textContainer {
220
+ height: size24;
221
+ }
222
+
223
+ .textScroller {
224
+ position: absolute;
225
+ top: spaceNone;
226
+ left: spaceNone;
227
+ right: spaceNone;
228
+ bottom: spaceNone;
229
+ display: flex;
230
+ justify-content: center;
231
+ align-items: center;
232
+ }
233
+
234
+ .textItem {
235
+ position: absolute;
236
+ white-space: nowrap;
237
+ color: colorTextPrimary;
238
+ font-weight: fontWeightMedium;
239
+ opacity: opacity0;
240
+ transform: translateY(spaceFluid);
241
+ /* No transition by default - allows instant reset without animation */
242
+ }
243
+
244
+ /* Size-specific text typography - applied conditionally via TSX */
245
+ .textItemMedium {
246
+ composes: bodyMedium from '../../styles/typography.module.css';
247
+ }
248
+
249
+ .textItemLarge {
250
+ composes: bodyLarge from '../../styles/typography.module.css';
251
+ }
252
+
253
+ /* Active state - text sliding in and visible */
254
+ .textItemActive {
255
+ opacity: opacity100;
256
+ transform: translateY(spaceNone);
257
+ transition: opacity motionDurationNormal motionEaseInEaseOut,
258
+ transform motionDurationNormal motionEaseInEaseOut;
259
+ }
260
+
261
+ /* Exiting state - text sliding out upward */
262
+ .textItemExiting {
263
+ opacity: opacity0;
264
+ transform: translateY(spaceNegHalfFluid);
265
+ transition: opacity motionDurationNormal motionEaseInEaseOut,
266
+ transform motionDurationNormal motionEaseInEaseOut;
267
+ }
268
+
269
+ /* Static state for single item - no animation */
270
+ .textItemStatic {
271
+ opacity: opacity100;
272
+ transform: translateY(spaceNone);
273
+ }
274
+
275
+ /* Scroll Animation */
276
+ @keyframes scrollUp {
277
+ 0% {
278
+ transform: translateY(spaceNone);
279
+ }
280
+ 100% {
281
+ transform: translateY(spaceNegHalfFluid);
282
+ }
283
+ }
@@ -0,0 +1,2 @@
1
+ export * from '../../components/ScrollingLoader/ScrollingLoader';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ScrollingLoader/index.ts"],"names":[],"mappings":"AAAA,cAAc,gDAAgD,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _ScrollingLoader = require("./ScrollingLoader");
7
+ Object.keys(_ScrollingLoader).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _ScrollingLoader[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _ScrollingLoader[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import type { Flow } from 'flow-to-typescript-codemod';
3
+ import type { IconType } from '../../../components/Icon';
4
+ import type { BaseTooltipProps } from '../../../components/Tooltip/Tooltip';
5
+ type ClassNames = Readonly<{
6
+ wrapper?: string;
7
+ icon?: string;
8
+ }>;
9
+ export declare const STAGE_ARROW_TYPE: Readonly<{
10
+ primary: "primary";
11
+ danger: "danger";
12
+ success: "success";
13
+ warning: "warning";
14
+ information: "information";
15
+ }>;
16
+ export type StageArrowType = (typeof STAGE_ARROW_TYPE)[keyof typeof STAGE_ARROW_TYPE];
17
+ export interface StageArrowProps {
18
+ id: string;
19
+ type?: StageArrowType;
20
+ disabled?: boolean;
21
+ iconLeftName?: string;
22
+ iconLeftType?: IconType;
23
+ iconRightName?: string;
24
+ iconRightType?: IconType;
25
+ classNames?: ClassNames;
26
+ isEndStageArrow?: boolean;
27
+ isStartStageArrow?: boolean;
28
+ onStageArrowClick?: ((id: string, e?: React.SyntheticEvent<HTMLElement> | null | undefined) => unknown) | null | undefined;
29
+ children: React.ReactNode;
30
+ tooltip?: BaseTooltipProps;
31
+ testId?: string;
32
+ locked?: boolean;
33
+ }
34
+ export declare const StageArrow: Flow.AbstractComponent<StageArrowProps, HTMLButtonElement>;
35
+ export {};
36
+ //# sourceMappingURL=StageArrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StageArrow.d.ts","sourceRoot":"","sources":["../../../../src/components/StageArrows/StageArrow/StageArrow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,4BAA4B,CAAC;AAOrD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AAOrE,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,cAAc,GACxB,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EACd,CAAC,CACC,EAAE,EAAE,MAAM,EACV,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,KACrD,OAAO,CAAC,GACb,IAAI,GACJ,SAAS,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAC7C,eAAe,EACf,iBAAiB,CAsFlB,CAAC"}