jfs-components 0.1.54 → 0.1.56
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/.cursor/D2C-SCREEN.md +2 -1
- package/.cursor/commands/D2C.md +2 -1
- package/CHANGELOG.md +11 -0
- package/lib/commonjs/components/ButtonGroup/ButtonGroup.js +16 -26
- package/lib/commonjs/components/CardCTA/CardCTA.js +36 -12
- package/lib/commonjs/components/Carousel/Carousel.js +33 -13
- package/lib/commonjs/components/CircularProgressBarDoted/CircularProgressBarDoted.js +1 -1
- package/lib/commonjs/design-tokens/figma-modes.generated.js +10 -9
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/commonjs/utils/react-utils.js +4 -1
- package/lib/module/components/ButtonGroup/ButtonGroup.js +17 -27
- package/lib/module/components/CardCTA/CardCTA.js +36 -12
- package/lib/module/components/Carousel/Carousel.js +33 -13
- package/lib/module/components/CircularProgressBarDoted/CircularProgressBarDoted.js +1 -1
- package/lib/module/design-tokens/figma-modes.generated.js +10 -9
- package/lib/module/icons/registry.js +1 -1
- package/lib/module/utils/react-utils.js +4 -1
- package/lib/typescript/src/components/ButtonGroup/ButtonGroup.d.ts +5 -5
- package/lib/typescript/src/components/CardCTA/CardCTA.d.ts +14 -1
- package/lib/typescript/src/components/Carousel/Carousel.d.ts +30 -2
- package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +1 -0
- package/lib/typescript/src/icons/registry.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/ButtonGroup/ButtonGroup.tsx +22 -24
- package/src/components/CardCTA/CardCTA.tsx +66 -20
- package/src/components/Carousel/Carousel.tsx +67 -12
- package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +1 -1
- package/src/design-tokens/figma-modes.generated.ts +10 -9
- package/src/icons/registry.ts +1 -1
- package/src/utils/react-utils.ts +8 -1
|
@@ -69,8 +69,11 @@ function cloneChildrenWithModes(children, modes, forcedModes) {
|
|
|
69
69
|
} : modes;
|
|
70
70
|
let processedChildren;
|
|
71
71
|
if (hasChildren) {
|
|
72
|
+
// Descendants inherit this child's merged modes, not the ancestor's
|
|
73
|
+
// raw modes — so nested containers (e.g. ButtonGroup Neutral inside
|
|
74
|
+
// a CardCTA slot that injects Secondary) can cascade correctly.
|
|
72
75
|
const childArray = _react.default.Children.toArray(childChildren);
|
|
73
|
-
const processed = cloneChildrenWithModes(childArray,
|
|
76
|
+
const processed = cloneChildrenWithModes(childArray, mergedModes, forcedModes);
|
|
74
77
|
processedChildren = processed.length === 1 ? processed[0] : processed;
|
|
75
78
|
}
|
|
76
79
|
result.push(/*#__PURE__*/_react.default.cloneElement(child, {
|
|
@@ -3,21 +3,21 @@
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { View } from 'react-native';
|
|
5
5
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
6
|
-
import { EMPTY_MODES, flattenChildren } from '../../utils/react-utils';
|
|
6
|
+
import { EMPTY_MODES, cloneChildrenWithModes, flattenChildren } from '../../utils/react-utils';
|
|
7
7
|
import IconButton from '../IconButton/IconButton';
|
|
8
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
9
|
/**
|
|
10
10
|
* ButtonGroup component that aggregates multiple buttons (e.g., IconButton)
|
|
11
11
|
* and handles their layout and styling/theming via design tokens.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* Non-IconButton children (e.g
|
|
15
|
-
* available space
|
|
13
|
+
* Group `modes` cascade to every child (and nested slot children). A child's
|
|
14
|
+
* own `modes` still win on conflict. Non-IconButton children (e.g. Button) are
|
|
15
|
+
* stretched to fill available space; IconButton children keep intrinsic width.
|
|
16
16
|
*
|
|
17
17
|
* @component
|
|
18
18
|
* @example
|
|
19
19
|
* ```jsx
|
|
20
|
-
* <ButtonGroup modes={{"Color Mode": "Light"}}>
|
|
20
|
+
* <ButtonGroup modes={{"Color Mode": "Light", AppearanceBrand: "Neutral"}}>
|
|
21
21
|
* <IconButton iconName="ic_qr_code" />
|
|
22
22
|
* <Button label="Pay" />
|
|
23
23
|
* </ButtonGroup>
|
|
@@ -28,12 +28,9 @@ function ButtonGroup({
|
|
|
28
28
|
modes = EMPTY_MODES,
|
|
29
29
|
style
|
|
30
30
|
}) {
|
|
31
|
-
// Resolve design tokens
|
|
32
31
|
const gap = getVariableByName('buttonGroup/gap', modes) ?? 12;
|
|
33
32
|
const paddingHorizontal = getVariableByName('buttonGroup/padding/horizontal', modes) ?? 0;
|
|
34
33
|
const paddingVertical = getVariableByName('buttonGroup/padding/vertical', modes) ?? 0;
|
|
35
|
-
|
|
36
|
-
// Container style
|
|
37
34
|
const containerStyle = {
|
|
38
35
|
flexDirection: 'row',
|
|
39
36
|
alignItems: 'center',
|
|
@@ -41,27 +38,20 @@ function ButtonGroup({
|
|
|
41
38
|
paddingHorizontal: paddingHorizontal,
|
|
42
39
|
paddingVertical: paddingVertical
|
|
43
40
|
};
|
|
44
|
-
|
|
45
|
-
// Flatten children to handle Fragments properly
|
|
46
41
|
const flatChildren = flattenChildren(children);
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const mergedModes = {
|
|
52
|
-
...modes,
|
|
53
|
-
...childModes
|
|
54
|
-
};
|
|
55
|
-
const isIconButton = element.type === IconButton;
|
|
56
|
-
const stretchStyle = isIconButton ? undefined : {
|
|
57
|
-
flex: 1
|
|
58
|
-
};
|
|
59
|
-
return /*#__PURE__*/React.cloneElement(element, {
|
|
60
|
-
modes: mergedModes,
|
|
61
|
-
style: [stretchStyle, element.props.style]
|
|
62
|
-
});
|
|
42
|
+
const cascadedChildren = cloneChildrenWithModes(flatChildren, modes);
|
|
43
|
+
const childrenWithModes = React.Children.map(cascadedChildren, child => {
|
|
44
|
+
if (! /*#__PURE__*/React.isValidElement(child)) {
|
|
45
|
+
return child;
|
|
63
46
|
}
|
|
64
|
-
|
|
47
|
+
const element = child;
|
|
48
|
+
const isIconButton = element.type === IconButton;
|
|
49
|
+
const stretchStyle = isIconButton ? undefined : {
|
|
50
|
+
flex: 1
|
|
51
|
+
};
|
|
52
|
+
return /*#__PURE__*/React.cloneElement(element, {
|
|
53
|
+
style: [stretchStyle, element.props.style]
|
|
54
|
+
});
|
|
65
55
|
});
|
|
66
56
|
return /*#__PURE__*/_jsx(View, {
|
|
67
57
|
style: [containerStyle, style],
|
|
@@ -41,6 +41,8 @@ function CardCTA({
|
|
|
41
41
|
onPressButton,
|
|
42
42
|
ratingLabel = '+28 Rating',
|
|
43
43
|
showRatingActions = true,
|
|
44
|
+
showButton = true,
|
|
45
|
+
ratingMediaAlign = 'center',
|
|
44
46
|
onPressLike,
|
|
45
47
|
onPressDislike,
|
|
46
48
|
headline = 'Headline',
|
|
@@ -127,11 +129,14 @@ function CardCTA({
|
|
|
127
129
|
AppearanceBrand: 'Secondary',
|
|
128
130
|
'Button / Size': 'S'
|
|
129
131
|
};
|
|
132
|
+
// Rating footer IconButtons are Neutral / S / Low per Figma. Apply those
|
|
133
|
+
// AFTER cascaded modes so card-level AppearanceBrand (often Secondary)
|
|
134
|
+
// cannot override the footer chrome.
|
|
130
135
|
const iconButtonModes = {
|
|
136
|
+
...modes,
|
|
131
137
|
'Button / Size': 'S',
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
...modes
|
|
138
|
+
Emphasis: 'Low',
|
|
139
|
+
AppearanceBrand: 'Neutral'
|
|
135
140
|
};
|
|
136
141
|
const effectiveButtonLabel = buttonLabel ?? (isRating ? 'Save' : 'Button');
|
|
137
142
|
const nonWrappingButtonLabel = effectiveButtonLabel.replace(/\s/g, '\u00A0');
|
|
@@ -204,7 +209,14 @@ function CardCTA({
|
|
|
204
209
|
borderWidth: borderSize,
|
|
205
210
|
borderColor,
|
|
206
211
|
flexDirection: isRating || isSip ? 'column' : 'row',
|
|
207
|
-
overflow: 'visible'
|
|
212
|
+
overflow: 'visible',
|
|
213
|
+
// Rating cards fill equal-height carousel slots and pin the footer down
|
|
214
|
+
// when free space exists; intrinsic height is unchanged when not stretched.
|
|
215
|
+
...(isRating ? {
|
|
216
|
+
alignSelf: 'stretch',
|
|
217
|
+
justifyContent: 'space-between',
|
|
218
|
+
flexGrow: 1
|
|
219
|
+
} : {})
|
|
208
220
|
};
|
|
209
221
|
|
|
210
222
|
// NOTE: `minWidth: 0` + explicit `flexShrink: 1` are required on native.
|
|
@@ -353,16 +365,23 @@ function CardCTA({
|
|
|
353
365
|
paddingHorizontal: ratingContentPaddingH,
|
|
354
366
|
paddingVertical: ratingContentPaddingV,
|
|
355
367
|
gap: ratingContentGap,
|
|
356
|
-
alignItems: 'flex-start'
|
|
368
|
+
alignItems: 'flex-start',
|
|
369
|
+
alignSelf: 'stretch'
|
|
370
|
+
};
|
|
371
|
+
const ratingMediaStyle = {
|
|
372
|
+
alignSelf: 'stretch',
|
|
373
|
+
width: '100%',
|
|
374
|
+
alignItems: ratingMediaAlign === 'center' ? 'center' : 'flex-start'
|
|
357
375
|
};
|
|
358
376
|
const ratingFooterStyle = {
|
|
359
377
|
flexDirection: 'row',
|
|
360
378
|
alignItems: 'flex-start',
|
|
361
|
-
justifyContent: 'space-between',
|
|
379
|
+
justifyContent: showButton ? 'space-between' : 'flex-start',
|
|
362
380
|
paddingHorizontal: ratingFooterPaddingH,
|
|
363
381
|
paddingTop: ratingFooterPaddingTop,
|
|
364
382
|
paddingBottom: ratingFooterPaddingBottom,
|
|
365
|
-
overflow: 'visible'
|
|
383
|
+
overflow: 'visible',
|
|
384
|
+
alignSelf: 'stretch'
|
|
366
385
|
};
|
|
367
386
|
const buttonLabelStyle = {
|
|
368
387
|
flexGrow: 0,
|
|
@@ -446,9 +465,12 @@ function CardCTA({
|
|
|
446
465
|
style: [containerStyle, style],
|
|
447
466
|
children: [/*#__PURE__*/_jsxs(View, {
|
|
448
467
|
style: ratingContentStyle,
|
|
449
|
-
children: [
|
|
450
|
-
|
|
451
|
-
modes:
|
|
468
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
469
|
+
style: ratingMediaStyle,
|
|
470
|
+
children: ratingBadgeSlot ? cloneChildrenWithModes(ratingBadgeSlot, modes) : /*#__PURE__*/_jsx(Badge, {
|
|
471
|
+
label: ratingLabel,
|
|
472
|
+
modes: modes
|
|
473
|
+
})
|
|
452
474
|
}), /*#__PURE__*/_jsxs(View, {
|
|
453
475
|
style: textWrapStyle,
|
|
454
476
|
children: [/*#__PURE__*/_jsx(Text, {
|
|
@@ -461,7 +483,7 @@ function CardCTA({
|
|
|
461
483
|
})]
|
|
462
484
|
}), /*#__PURE__*/_jsxs(View, {
|
|
463
485
|
style: ratingFooterStyle,
|
|
464
|
-
children: [/*#__PURE__*/_jsx(View, {
|
|
486
|
+
children: [showButton ? /*#__PURE__*/_jsx(View, {
|
|
465
487
|
style: ratingButtonWrapStyle,
|
|
466
488
|
children: buttonSlot ? cloneChildrenWithModes(buttonSlot, buttonModes) : /*#__PURE__*/_jsx(Button, {
|
|
467
489
|
label: effectiveButtonLabel,
|
|
@@ -470,17 +492,19 @@ function CardCTA({
|
|
|
470
492
|
style: ratingButtonStyle,
|
|
471
493
|
renderContent: renderButtonContent(ratingButtonLabelStyle)
|
|
472
494
|
})
|
|
473
|
-
}), showRatingActions ? ratingActionsSlot ? cloneChildrenWithModes(ratingActionsSlot, iconButtonModes) : /*#__PURE__*/_jsxs(ButtonGroup, {
|
|
495
|
+
}) : null, showRatingActions ? ratingActionsSlot ? cloneChildrenWithModes(ratingActionsSlot, iconButtonModes) : /*#__PURE__*/_jsxs(ButtonGroup, {
|
|
474
496
|
modes: iconButtonModes,
|
|
475
497
|
children: [/*#__PURE__*/_jsx(IconButton, {
|
|
476
498
|
iconName: "ic_like",
|
|
477
499
|
accessibilityLabel: "Like",
|
|
500
|
+
modes: iconButtonModes,
|
|
478
501
|
...(onPressLike ? {
|
|
479
502
|
onPress: onPressLike
|
|
480
503
|
} : {})
|
|
481
504
|
}), /*#__PURE__*/_jsx(IconButton, {
|
|
482
505
|
iconName: "ic_dislike",
|
|
483
506
|
accessibilityLabel: "Dislike",
|
|
507
|
+
modes: iconButtonModes,
|
|
484
508
|
...(onPressDislike ? {
|
|
485
509
|
onPress: onPressDislike
|
|
486
510
|
} : {})
|
|
@@ -37,8 +37,12 @@ export function Carousel({
|
|
|
37
37
|
loop = true,
|
|
38
38
|
gap: gapProp,
|
|
39
39
|
itemWidth: itemWidthProp,
|
|
40
|
+
itemInset,
|
|
41
|
+
bleedHorizontal,
|
|
40
42
|
paddingHorizontal: paddingHorizontalProp,
|
|
41
43
|
paddingVertical: paddingVerticalProp,
|
|
44
|
+
equalHeight = true,
|
|
45
|
+
maxHeight: maxHeightProp,
|
|
42
46
|
type = 'Default',
|
|
43
47
|
onIndexChange,
|
|
44
48
|
style
|
|
@@ -50,7 +54,7 @@ export function Carousel({
|
|
|
50
54
|
const containerPaddingH = parseFloat(getVariableByName('carousel/padding/horizontal', modes));
|
|
51
55
|
const containerPaddingV = parseFloat(getVariableByName('carousel/padding/vertical', modes));
|
|
52
56
|
// Outer container max height per Figma (`carousel/maxHeight`).
|
|
53
|
-
const
|
|
57
|
+
const tokenMaxHeight = parseFloat(getVariableByName('carousel/maxHeight', modes));
|
|
54
58
|
// Gap between AutoplayControl and NumberPagination in the Numbered overlay.
|
|
55
59
|
const controlGap = parseFloat(getVariableByName('carouselControl/gap', modes));
|
|
56
60
|
|
|
@@ -79,15 +83,18 @@ export function Carousel({
|
|
|
79
83
|
const items = useMemo(() => React.Children.toArray(children).filter(React.isValidElement), [children]);
|
|
80
84
|
const totalItems = items.length;
|
|
81
85
|
|
|
82
|
-
// Effective item width:
|
|
86
|
+
// Effective item width: explicit prop, itemInset derivation, or token peek.
|
|
83
87
|
// For the Numbered variant the items are full-bleed (no peek padding).
|
|
84
88
|
const effectiveItemWidth = useMemo(() => {
|
|
85
89
|
if (itemWidthProp != null) return itemWidthProp;
|
|
86
90
|
if (containerWidth === 0) return 0;
|
|
87
91
|
if (isNumbered) return containerWidth;
|
|
92
|
+
if (itemInset != null) {
|
|
93
|
+
return Math.max(0, containerWidth - itemInset * 2);
|
|
94
|
+
}
|
|
88
95
|
// Full-width minus peekOffset on each side
|
|
89
96
|
return containerWidth - containerPaddingH * 4;
|
|
90
|
-
}, [itemWidthProp, containerWidth, containerPaddingH, isNumbered]);
|
|
97
|
+
}, [itemWidthProp, itemInset, containerWidth, containerPaddingH, isNumbered]);
|
|
91
98
|
|
|
92
99
|
// Snap interval = item width + gap
|
|
93
100
|
const snapInterval = effectiveItemWidth + gap;
|
|
@@ -221,14 +228,20 @@ export function Carousel({
|
|
|
221
228
|
}, [isPlaying, startAutoPlay, clearAutoPlay]);
|
|
222
229
|
|
|
223
230
|
// ---- Render ----
|
|
224
|
-
//
|
|
225
|
-
// token
|
|
226
|
-
|
|
227
|
-
const effectivePaddingH = isNumbered ? 0 : paddingHorizontalProp ?? containerPaddingH;
|
|
231
|
+
// Padding priority: Numbered → 0; itemInset → inset; explicit padding →
|
|
232
|
+
// verbatim; else token (legacy ×2 peek is applied via item width, not here).
|
|
233
|
+
const effectivePaddingH = isNumbered ? 0 : itemInset ?? paddingHorizontalProp ?? containerPaddingH;
|
|
228
234
|
const effectivePaddingV = isNumbered ? 0 : paddingVerticalProp ?? containerPaddingV;
|
|
235
|
+
|
|
236
|
+
// Equal-height rows hug content — don't clip with the token maxHeight unless
|
|
237
|
+
// the caller opts into a numeric max (or disables equalHeight for legacy strips).
|
|
238
|
+
const resolvedMaxHeight = isNumbered ? undefined : maxHeightProp === false ? undefined : typeof maxHeightProp === 'number' ? maxHeightProp : equalHeight ? undefined : tokenMaxHeight;
|
|
229
239
|
const outerStyle = {
|
|
230
240
|
paddingVertical: effectivePaddingV,
|
|
231
|
-
maxHeight:
|
|
241
|
+
maxHeight: resolvedMaxHeight,
|
|
242
|
+
...(bleedHorizontal != null ? {
|
|
243
|
+
marginHorizontal: -Math.abs(bleedHorizontal)
|
|
244
|
+
} : {}),
|
|
232
245
|
// Numbered needs relative positioning for the floating controls overlay.
|
|
233
246
|
...(isNumbered ? {
|
|
234
247
|
overflow: 'hidden'
|
|
@@ -237,8 +250,8 @@ export function Carousel({
|
|
|
237
250
|
const contentContainerStyle = {
|
|
238
251
|
paddingHorizontal: effectivePaddingH,
|
|
239
252
|
gap,
|
|
240
|
-
//
|
|
241
|
-
alignItems: 'flex-start'
|
|
253
|
+
// Stretch so every slide matches the tallest (default). Opt out with equalHeight={false}.
|
|
254
|
+
alignItems: equalHeight ? 'stretch' : 'flex-start'
|
|
242
255
|
};
|
|
243
256
|
return /*#__PURE__*/_jsx(CarouselContext.Provider, {
|
|
244
257
|
value: contextValue,
|
|
@@ -269,7 +282,10 @@ export function Carousel({
|
|
|
269
282
|
flexGrow: 0,
|
|
270
283
|
flexShrink: 0,
|
|
271
284
|
flexBasis: effectiveItemWidth > 0 ? effectiveItemWidth : 'auto',
|
|
272
|
-
overflow: 'hidden'
|
|
285
|
+
overflow: 'hidden',
|
|
286
|
+
...(equalHeight ? {
|
|
287
|
+
alignSelf: 'stretch'
|
|
288
|
+
} : {})
|
|
273
289
|
};
|
|
274
290
|
|
|
275
291
|
// The cloned style forces the child's outer node to also honor the
|
|
@@ -278,8 +294,12 @@ export function Carousel({
|
|
|
278
294
|
const childOverrideStyle = {
|
|
279
295
|
width: effectiveItemWidth > 0 ? effectiveItemWidth : undefined,
|
|
280
296
|
maxWidth: effectiveItemWidth > 0 ? effectiveItemWidth : undefined,
|
|
281
|
-
flexGrow: 0,
|
|
282
|
-
flexShrink: 0
|
|
297
|
+
flexGrow: equalHeight ? 1 : 0,
|
|
298
|
+
flexShrink: 0,
|
|
299
|
+
...(equalHeight ? {
|
|
300
|
+
alignSelf: 'stretch',
|
|
301
|
+
height: '100%'
|
|
302
|
+
} : {})
|
|
283
303
|
};
|
|
284
304
|
|
|
285
305
|
// Pass modes down to children
|
|
@@ -71,7 +71,7 @@ function CircularProgressBarDoted({
|
|
|
71
71
|
const activeDots = normalizedValue <= 0 ? 0 : Math.ceil(normalizedValue / 100 * resolvedDotCount);
|
|
72
72
|
const dotShadowSize = toNumber(getVariableByName('circularProgressBarDoted/dot/shadow/size', modes), 6);
|
|
73
73
|
const baseDotSize = toNumber(getVariableByName('circularProgressBarDoted/dot/size', modes), 6);
|
|
74
|
-
const dotSize = baseDotSize + dotShadowSize;
|
|
74
|
+
const dotSize = baseDotSize + dotShadowSize * 2;
|
|
75
75
|
const outerDotSize = dotSize;
|
|
76
76
|
const ringSize = layoutSize;
|
|
77
77
|
const ringRadius = Math.max(0, (ringSize - outerDotSize) / 2);
|
|
@@ -198,6 +198,7 @@ export const FIGMA_MODES = {
|
|
|
198
198
|
"NavArrow Direction": ["Left&Right", "Top&Bottom"],
|
|
199
199
|
"NoteInput / Output": ["Default"],
|
|
200
200
|
"Nudge / Output": ["Default"],
|
|
201
|
+
"Nudge Border Radius ": ["Default", "Pill"],
|
|
201
202
|
"Nudge padding": ["Default", "None"],
|
|
202
203
|
"number pagination": ["Default"],
|
|
203
204
|
"Numpad / Output": ["Default"],
|
|
@@ -322,19 +323,19 @@ export const FIGMA_COMPONENT_MODES = {
|
|
|
322
323
|
"AvatarGroup": ["Avatar Size", "Badge Size", "Context4"],
|
|
323
324
|
"Badge": ["AppearanceBrand", "AppearanceSystem", "Badge Size", "Color Mode", "Emphasis", "Semantic Intent"],
|
|
324
325
|
"Balance": ["Color Mode", "Context3"],
|
|
325
|
-
"BenefitCard": ["AppearanceBrand", "AppearanceSystem", "Avatar Size", "Badge Size", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Context4", "Emphasis", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap", "Text Appearance", "Text Sizes", "Weight"],
|
|
326
|
+
"BenefitCard": ["AppearanceBrand", "AppearanceSystem", "Avatar Size", "Badge Size", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Context4", "Emphasis", "Nudge Border Radius ", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap", "Text Appearance", "Text Sizes", "Weight"],
|
|
326
327
|
"BottomNav": ["Color Mode"],
|
|
327
328
|
"BottomNavItem": ["BottomNavItem / State", "Color Mode"],
|
|
328
329
|
"BrandChip": ["Avatar Size", "Badge Size", "Color Mode", "context 10", "Context4", "Profile Card Appearance"],
|
|
329
330
|
"BubbleChart": ["Appearance / DataViz", "Color Mode", "Context", "context 10", "Emphasis / DataViz", "Profile Card Appearance", "Text Appearance"],
|
|
330
331
|
"Button": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Emphasis", "Page type", "Profile Card Appearance", "Semantic Intent"],
|
|
331
332
|
"Card": ["AppearanceBrand", "AppearanceSystem", "Card Container", "Color Mode", "context 8", "Gap", "Page type", "Semantic Intent"],
|
|
332
|
-
"CardAdvisory": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "circularProgressBar Size", "Color Mode", "Context", "context 10", "Emphasis", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap"],
|
|
333
|
+
"CardAdvisory": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "circularProgressBar Size", "Color Mode", "Context", "context 10", "Emphasis", "Nudge Border Radius ", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap"],
|
|
333
334
|
"CardBankAccount": ["AppearanceBrand", "AppearanceSystem", "Avatar Size", "Badge Size", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Context4", "context5", "Emphasis", "List Item Style", "Page type", "Profile Card Appearance", "Semantic Intent", "Text Appearance", "Text Sizes", "Weight"],
|
|
334
335
|
"CardCTA": ["AppearanceBrand", "AppearanceSystem", "Avatar Size", "Badge Size", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "context 8", "context 9", "Context4", "Emphasis", "Icon Capsule Size", "MediaBlock", "Page type", "Profile Card Appearance", "Semantic Intent"],
|
|
335
336
|
"CardFeedback": ["AppearanceBrand", "AppearanceSystem", "Color Mode"],
|
|
336
|
-
"CardFinancialCondition": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "circularProgressBar Size", "Color Mode", "Context", "context 10", "Emphasis", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap"],
|
|
337
|
-
"CardInsight": ["Appearance / DataViz", "AppearanceBrand", "AppearanceSystem", "Badge Size", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "context 8", "Emphasis", "Emphasis / DataViz", "LinearProgress Size", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap", "Text Appearance"],
|
|
337
|
+
"CardFinancialCondition": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "circularProgressBar Size", "Color Mode", "Context", "context 10", "Emphasis", "Nudge Border Radius ", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap"],
|
|
338
|
+
"CardInsight": ["Appearance / DataViz", "AppearanceBrand", "AppearanceSystem", "Badge Size", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "context 8", "Emphasis", "Emphasis / DataViz", "LinearProgress Size", "Nudge Border Radius ", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap", "Text Appearance"],
|
|
338
339
|
"CardProviderInfo": ["AppearanceBrand", "Avatar Size", "Badge Size", "Color Mode", "context 10", "Context4", "Profile Card Appearance"],
|
|
339
340
|
"Carousel": ["peekOffset"],
|
|
340
341
|
"CarouselCardAccounts": ["peekOffset"],
|
|
@@ -345,7 +346,7 @@ export const FIGMA_COMPONENT_MODES = {
|
|
|
345
346
|
"CheckboxItem": ["Color Mode", "Context", "Slot gap"],
|
|
346
347
|
"ChipSelect": ["ChipSelect State", "Color Mode"],
|
|
347
348
|
"CircularProgressBar": ["AppearanceBrand", "AppearanceSystem", "circularProgressBar Size", "Color Mode", "Emphasis", "Semantic Intent"],
|
|
348
|
-
"CircularRating": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Emphasis", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap"],
|
|
349
|
+
"CircularRating": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Emphasis", "Nudge Border Radius ", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap"],
|
|
349
350
|
"ClusterBubble": ["Appearance / DataViz", "Color Mode", "Context", "context 10", "Emphasis / DataViz", "Profile Card Appearance", "Text Appearance"],
|
|
350
351
|
"CompareTable": ["Accordion States", "AppearanceBrand", "Button / Size", "Button / State", "Color Mode", "Emphasis", "Page type", "Radius"],
|
|
351
352
|
"ComparisonBar": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Emphasis", "Icon Capsule Size", "Page type", "Profile Card Appearance", "Radius", "Semantic Intent"],
|
|
@@ -373,7 +374,7 @@ export const FIGMA_COMPONENT_MODES = {
|
|
|
373
374
|
"HeroSection": ["AppearanceBrand", "Button / Size", "Button / State", "Color Mode", "context 9", "context7", "Emphasis", "FormField States", "InputState", "Page type", "Status"],
|
|
374
375
|
"HoldingsCard": ["AppearanceBrand", "Color Mode"],
|
|
375
376
|
"HStack": ["Context", "Padding", "Page type", "Slot gap", "Stack Context"],
|
|
376
|
-
"Icon": ["AppearanceBrand", "
|
|
377
|
+
"Icon": ["AppearanceBrand", "Badge Size", "Color Mode", "context 10", "Context4", "Emphasis", "Page type", "Profile Card Appearance", "Semantic Intent"],
|
|
377
378
|
"IconButton": ["AppearanceBrand", "Button / Size", "Button / State", "Color Mode", "Emphasis", "Page type"],
|
|
378
379
|
"IconCapsule": ["AppearanceBrand", "AppearanceSystem", "Color Mode", "Context", "Emphasis", "Icon Capsule Size", "Page type", "Semantic Intent"],
|
|
379
380
|
"InputSearch": ["Color Mode", "FormField States", "InputState", "Status"],
|
|
@@ -388,12 +389,12 @@ export const FIGMA_COMPONENT_MODES = {
|
|
|
388
389
|
"MediaCard": ["Contrast Context"],
|
|
389
390
|
"MerchantProfile": ["Avatar Size", "Badge Size", "Color Mode", "context 10", "Context4", "Profile Card Appearance"],
|
|
390
391
|
"MessageField": ["Color Mode", "FormField States"],
|
|
391
|
-
"MetricData": ["AppearanceBrand", "
|
|
392
|
+
"MetricData": ["AppearanceBrand", "Badge Size", "Color Mode", "context 10", "Context4", "Emphasis", "Page type", "Profile Card Appearance", "Semantic Intent"],
|
|
392
393
|
"MetricLegendItem": ["Appearance / DataViz", "Color Mode", "Emphasis / DataViz"],
|
|
393
394
|
"MoneyValue": ["Color Mode", "Context3"],
|
|
394
395
|
"MonthlyStatusGrid": ["Appearance / DataViz", "Calendar Glyph State", "Color Mode", "Emphasis / DataViz"],
|
|
395
396
|
"NavArrow": ["Color Mode", "context 10", "Context2", "context5", "List Item Style", "NavArrow Direction", "Page type", "Profile Card Appearance"],
|
|
396
|
-
"Nudge": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Emphasis", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap"],
|
|
397
|
+
"Nudge": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Emphasis", "Nudge Border Radius ", "Nudge padding", "Page type", "Profile Card Appearance", "Semantic Intent", "Slot gap"],
|
|
397
398
|
"OTP": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Emphasis", "FormField States", "Input/PINSlot States", "Page type", "Profile Card Appearance", "Semantic Intent", "Status"],
|
|
398
399
|
"PageHero": ["AppearanceBrand", "AppearanceSystem", "Button / Size", "Button / State", "Button Glass State", "Button type", "Color Mode", "Context", "context 10", "Emphasis", "Page type", "PageHero Size", "Profile Card Appearance", "Semantic Intent", "Video / Output"],
|
|
399
400
|
"PaymentFeedback": ["AppearanceBrand", "AppearanceSystem", "Color Mode", "Context", "Emphasis", "Icon Capsule Size", "Page type", "Semantic Intent"],
|
|
@@ -439,7 +440,7 @@ export const FIGMA_COMPONENT_MODES = {
|
|
|
439
440
|
"TransactionBubble": ["Color Mode", "context 10", "Context2", "Context3", "context5", "List Item Style", "NavArrow Direction", "Page type", "Profile Card Appearance", "Transaction Status"],
|
|
440
441
|
"TransactionStatus": ["Transaction Status"],
|
|
441
442
|
"UpiHandle": ["Color Mode", "context 10", "Profile Card Appearance", "UPI Handle Image"],
|
|
442
|
-
"ValueBackMetric": ["AppearanceBrand", "
|
|
443
|
+
"ValueBackMetric": ["AppearanceBrand", "Badge Size", "Color Mode", "Context", "context 10", "Context4", "Emphasis", "Page type", "Profile Card Appearance", "Semantic Intent", "Text Appearance", "Text Sizes", "Weight"],
|
|
443
444
|
"VStack": ["Context", "Padding", "Page type", "Slot gap", "Stack Context"]
|
|
444
445
|
};
|
|
445
446
|
|