jfs-components 0.0.73 → 0.0.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -6
- package/lib/commonjs/components/AccountCard/AccountCard.js +247 -0
- package/lib/commonjs/components/AppBar/AppBar.js +17 -11
- package/lib/commonjs/components/CardBankAccount/CardBankAccount.js +18 -2
- package/lib/commonjs/components/CheckboxItem/CheckboxItem.js +40 -25
- package/lib/commonjs/components/Dropdown/Dropdown.js +214 -0
- package/lib/commonjs/components/DropdownInput/DropdownInput.js +542 -0
- package/lib/commonjs/components/FormField/FormField.js +328 -178
- package/lib/commonjs/components/LottieIntroBlock/LottieIntroBlock.js +150 -0
- package/lib/commonjs/components/PageHero/PageHero.js +153 -0
- package/lib/commonjs/components/PoweredByLabel/PoweredByLabel.js +135 -0
- package/lib/commonjs/components/PoweredByLabel/finvu.png +0 -0
- package/lib/commonjs/components/Text/Text.js +9 -2
- package/lib/commonjs/components/Tooltip/Tooltip.js +34 -27
- package/lib/commonjs/components/index.js +60 -0
- package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/module/components/AccountCard/AccountCard.js +241 -0
- package/lib/module/components/AppBar/AppBar.js +17 -11
- package/lib/module/components/CardBankAccount/CardBankAccount.js +17 -2
- package/lib/module/components/CheckboxItem/CheckboxItem.js +41 -26
- package/lib/module/components/Dropdown/Dropdown.js +206 -0
- package/lib/module/components/DropdownInput/DropdownInput.js +536 -0
- package/lib/module/components/FormField/FormField.js +330 -180
- package/lib/module/components/LottieIntroBlock/LottieIntroBlock.js +144 -0
- package/lib/module/components/PageHero/PageHero.js +147 -0
- package/lib/module/components/PoweredByLabel/PoweredByLabel.js +130 -0
- package/lib/module/components/PoweredByLabel/finvu.png +0 -0
- package/lib/module/components/Text/Text.js +9 -2
- package/lib/module/components/Tooltip/Tooltip.js +34 -27
- package/lib/module/components/index.js +7 -1
- package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/module/icons/registry.js +1 -1
- package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +81 -0
- package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +9 -2
- package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +18 -2
- package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +62 -0
- package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +107 -0
- package/lib/typescript/src/components/FormField/FormField.d.ts +76 -19
- package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +58 -0
- package/lib/typescript/src/components/PageHero/PageHero.d.ts +53 -0
- package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +70 -0
- package/lib/typescript/src/components/Text/Text.d.ts +12 -2
- package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +13 -2
- package/lib/typescript/src/components/index.d.ts +7 -1
- package/lib/typescript/src/icons/registry.d.ts +1 -1
- package/package.json +1 -3
- package/src/components/AccountCard/AccountCard.tsx +376 -0
- package/src/components/AppBar/AppBar.tsx +25 -14
- package/src/components/CardBankAccount/CardBankAccount.tsx +29 -3
- package/src/components/CheckboxItem/CheckboxItem.tsx +65 -30
- package/src/components/Dropdown/Dropdown.tsx +331 -0
- package/src/components/DropdownInput/DropdownInput.tsx +819 -0
- package/src/components/FormField/FormField.tsx +542 -215
- package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +202 -0
- package/src/components/PageHero/PageHero.tsx +200 -0
- package/src/components/PoweredByLabel/PoweredByLabel.tsx +221 -0
- package/src/components/PoweredByLabel/finvu.png +0 -0
- package/src/components/Text/Text.tsx +24 -3
- package/src/components/Tooltip/Tooltip.tsx +50 -25
- package/src/components/index.ts +15 -1
- package/src/design-tokens/Coin Variables-variables-full.json +1 -1
- package/src/icons/registry.ts +1 -1
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Dropdown = Dropdown;
|
|
7
|
+
exports.DropdownItem = DropdownItem;
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
var _figmaVariablesResolver = require("../../design-tokens/figma-variables-resolver");
|
|
12
|
+
var _JFSThemeProvider = require("../../design-tokens/JFSThemeProvider");
|
|
13
|
+
var _reactUtils = require("../../utils/react-utils");
|
|
14
|
+
var _Icon = _interopRequireDefault(require("../../icons/Icon"));
|
|
15
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
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); }
|
|
18
|
+
const IS_WEB = _reactNative.Platform.OS === 'web';
|
|
19
|
+
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// DropdownItem
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
function useDropdownItemTokens(modes) {
|
|
25
|
+
return (0, _react.useMemo)(() => {
|
|
26
|
+
// The `dropdownItem/background` token aliases through the
|
|
27
|
+
// `Dropdown Item State` collection (Idle | Selected), so we resolve
|
|
28
|
+
// both possibilities up-front and pick at render time.
|
|
29
|
+
const idleBackground = (0, _figmaVariablesResolver.getVariableByName)('dropdownItem/background', {
|
|
30
|
+
...modes,
|
|
31
|
+
'Dropdown Item State': 'Idle'
|
|
32
|
+
}) || '#ffffff';
|
|
33
|
+
const selectedBackground = (0, _figmaVariablesResolver.getVariableByName)('dropdownItem/background', {
|
|
34
|
+
...modes,
|
|
35
|
+
'Dropdown Item State': 'Selected'
|
|
36
|
+
}) || '#f5f5f5';
|
|
37
|
+
const foreground = (0, _figmaVariablesResolver.getVariableByName)('dropdownItem/foreground', modes) || '#000000';
|
|
38
|
+
const fontFamily = (0, _figmaVariablesResolver.getVariableByName)('dropdownItem/fontFamily', modes) || 'JioType Var';
|
|
39
|
+
const fontSize = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdownItem/fontSize', modes), 10) || 16;
|
|
40
|
+
const fontWeight = (0, _figmaVariablesResolver.getVariableByName)('dropdownItem/fontWeight', modes) || '400';
|
|
41
|
+
const lineHeight = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdownItem/lineHeight', modes), 10) || 19;
|
|
42
|
+
const gap = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdownItem/gap', modes), 10) || 8;
|
|
43
|
+
const paddingHorizontal = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdownItem/padding/horizontal', modes), 10) || 12;
|
|
44
|
+
const paddingVertical = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdownItem/padding/vertical', modes), 10) || 12;
|
|
45
|
+
return {
|
|
46
|
+
idleBackground,
|
|
47
|
+
selectedBackground,
|
|
48
|
+
foreground,
|
|
49
|
+
fontFamily,
|
|
50
|
+
fontSize,
|
|
51
|
+
fontWeight,
|
|
52
|
+
lineHeight,
|
|
53
|
+
gap,
|
|
54
|
+
paddingHorizontal,
|
|
55
|
+
paddingVertical
|
|
56
|
+
};
|
|
57
|
+
}, [modes]);
|
|
58
|
+
}
|
|
59
|
+
function DropdownItem({
|
|
60
|
+
label,
|
|
61
|
+
value = null,
|
|
62
|
+
selected = false,
|
|
63
|
+
disabled = false,
|
|
64
|
+
leading,
|
|
65
|
+
trailing,
|
|
66
|
+
onPress,
|
|
67
|
+
children,
|
|
68
|
+
modes: propModes = _reactUtils.EMPTY_MODES,
|
|
69
|
+
style,
|
|
70
|
+
labelStyle,
|
|
71
|
+
accessibilityLabel,
|
|
72
|
+
accessibilityHint
|
|
73
|
+
}) {
|
|
74
|
+
const {
|
|
75
|
+
modes: globalModes
|
|
76
|
+
} = (0, _JFSThemeProvider.useTokens)();
|
|
77
|
+
const modes = (0, _react.useMemo)(() => ({
|
|
78
|
+
...globalModes,
|
|
79
|
+
...propModes
|
|
80
|
+
}), [globalModes, propModes]);
|
|
81
|
+
const tokens = useDropdownItemTokens(modes);
|
|
82
|
+
const [isHovered, setIsHovered] = (0, _react.useState)(false);
|
|
83
|
+
const handlePress = (0, _react.useCallback)(() => {
|
|
84
|
+
if (disabled) return;
|
|
85
|
+
onPress?.(value);
|
|
86
|
+
}, [disabled, onPress, value]);
|
|
87
|
+
const containerStyle = (0, _react.useCallback)(({
|
|
88
|
+
pressed
|
|
89
|
+
}) => {
|
|
90
|
+
const showSelected = pressed || isHovered && IS_WEB || selected;
|
|
91
|
+
const base = {
|
|
92
|
+
flexDirection: 'row',
|
|
93
|
+
alignItems: 'center',
|
|
94
|
+
gap: tokens.gap,
|
|
95
|
+
paddingHorizontal: tokens.paddingHorizontal,
|
|
96
|
+
paddingVertical: tokens.paddingVertical,
|
|
97
|
+
backgroundColor: showSelected ? tokens.selectedBackground : tokens.idleBackground,
|
|
98
|
+
opacity: disabled ? 0.4 : 1,
|
|
99
|
+
width: '100%'
|
|
100
|
+
};
|
|
101
|
+
return [base, style];
|
|
102
|
+
}, [tokens.gap, tokens.paddingHorizontal, tokens.paddingVertical, tokens.idleBackground, tokens.selectedBackground, isHovered, selected, disabled, style]);
|
|
103
|
+
const textStyle = {
|
|
104
|
+
color: tokens.foreground,
|
|
105
|
+
fontFamily: tokens.fontFamily,
|
|
106
|
+
fontSize: tokens.fontSize,
|
|
107
|
+
fontWeight: tokens.fontWeight,
|
|
108
|
+
lineHeight: tokens.lineHeight,
|
|
109
|
+
flexShrink: 1
|
|
110
|
+
};
|
|
111
|
+
const processedLeading = leading ? (0, _reactUtils.cloneChildrenWithModes)(_react.default.Children.toArray(leading), modes) : null;
|
|
112
|
+
const customTrailing = trailing ? (0, _reactUtils.cloneChildrenWithModes)(_react.default.Children.toArray(trailing), modes) : null;
|
|
113
|
+
const showDefaultCheck = !trailing && selected;
|
|
114
|
+
const fallbackA11yLabel = accessibilityLabel || (typeof label === 'string' ? label : 'Dropdown item');
|
|
115
|
+
const a11yProps = {
|
|
116
|
+
accessibilityRole: 'menuitem',
|
|
117
|
+
accessibilityLabel: fallbackA11yLabel,
|
|
118
|
+
accessibilityState: {
|
|
119
|
+
selected,
|
|
120
|
+
disabled
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
if (accessibilityHint) {
|
|
124
|
+
a11yProps.accessibilityHint = accessibilityHint;
|
|
125
|
+
}
|
|
126
|
+
const handleHoverIn = (0, _react.useCallback)(() => {
|
|
127
|
+
if (IS_WEB && !disabled) setIsHovered(true);
|
|
128
|
+
}, [disabled]);
|
|
129
|
+
const handleHoverOut = (0, _react.useCallback)(() => {
|
|
130
|
+
if (IS_WEB) setIsHovered(false);
|
|
131
|
+
}, []);
|
|
132
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
|
|
133
|
+
onPress: handlePress,
|
|
134
|
+
disabled: disabled,
|
|
135
|
+
onHoverIn: handleHoverIn,
|
|
136
|
+
onHoverOut: handleHoverOut,
|
|
137
|
+
style: containerStyle,
|
|
138
|
+
...a11yProps,
|
|
139
|
+
children: [processedLeading, children != null ? children : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
140
|
+
style: [textStyle, labelStyle],
|
|
141
|
+
numberOfLines: 1,
|
|
142
|
+
children: label
|
|
143
|
+
}), customTrailing, showDefaultCheck && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
|
|
144
|
+
name: "ic_confirm",
|
|
145
|
+
size: 16,
|
|
146
|
+
color: tokens.foreground
|
|
147
|
+
})]
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
// Dropdown (popup surface)
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* `Dropdown` is the visual surface (popup) that contains a list of
|
|
157
|
+
* `DropdownItem`s. It is responsible for the background, rounded corners,
|
|
158
|
+
* elevation/shadow, and clipping. Use it standalone for menu UIs, or rely on
|
|
159
|
+
* `DropdownInput` which composes it into a form-field experience.
|
|
160
|
+
*/
|
|
161
|
+
function Dropdown({
|
|
162
|
+
children,
|
|
163
|
+
maxHeight,
|
|
164
|
+
modes: propModes = _reactUtils.EMPTY_MODES,
|
|
165
|
+
style,
|
|
166
|
+
accessibilityLabel
|
|
167
|
+
}) {
|
|
168
|
+
const {
|
|
169
|
+
modes: globalModes
|
|
170
|
+
} = (0, _JFSThemeProvider.useTokens)();
|
|
171
|
+
const modes = (0, _react.useMemo)(() => ({
|
|
172
|
+
...globalModes,
|
|
173
|
+
...propModes
|
|
174
|
+
}), [globalModes, propModes]);
|
|
175
|
+
const radius = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdown/radius', modes), 10) || 8;
|
|
176
|
+
const background = (0, _figmaVariablesResolver.getVariableByName)('dropdown/background', modes) || '#ffffff';
|
|
177
|
+
const shadowColor = (0, _figmaVariablesResolver.getVariableByName)('dropdown/shadow/color', modes) || 'rgba(0, 0, 0, 0.08)';
|
|
178
|
+
const shadowOffsetX = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdown/shadow/offsetX', modes), 10) || 0;
|
|
179
|
+
const shadowOffsetY = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdown/shadow/offsetY', modes), 10) || 4;
|
|
180
|
+
const shadowBlur = parseInt((0, _figmaVariablesResolver.getVariableByName)('dropdown/shadow/blur', modes), 10) || 16;
|
|
181
|
+
const containerStyle = {
|
|
182
|
+
backgroundColor: background,
|
|
183
|
+
borderRadius: radius,
|
|
184
|
+
overflow: 'hidden',
|
|
185
|
+
shadowColor,
|
|
186
|
+
shadowOffset: {
|
|
187
|
+
width: shadowOffsetX,
|
|
188
|
+
height: shadowOffsetY
|
|
189
|
+
},
|
|
190
|
+
shadowOpacity: 1,
|
|
191
|
+
shadowRadius: shadowBlur / 2,
|
|
192
|
+
elevation: 4
|
|
193
|
+
};
|
|
194
|
+
const content = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
195
|
+
style: {
|
|
196
|
+
flexDirection: 'column'
|
|
197
|
+
},
|
|
198
|
+
children: (0, _reactUtils.cloneChildrenWithModes)(children, modes)
|
|
199
|
+
});
|
|
200
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
201
|
+
style: [containerStyle, style],
|
|
202
|
+
accessibilityRole: "menu",
|
|
203
|
+
accessibilityLabel: accessibilityLabel || 'Dropdown menu',
|
|
204
|
+
children: maxHeight != null ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
205
|
+
style: {
|
|
206
|
+
maxHeight
|
|
207
|
+
},
|
|
208
|
+
showsVerticalScrollIndicator: true,
|
|
209
|
+
keyboardShouldPersistTaps: "handled",
|
|
210
|
+
children: content
|
|
211
|
+
}) : content
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
var _default = exports.default = Dropdown;
|