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.
Files changed (63) hide show
  1. package/CHANGELOG.md +23 -6
  2. package/lib/commonjs/components/AccountCard/AccountCard.js +247 -0
  3. package/lib/commonjs/components/AppBar/AppBar.js +17 -11
  4. package/lib/commonjs/components/CardBankAccount/CardBankAccount.js +18 -2
  5. package/lib/commonjs/components/CheckboxItem/CheckboxItem.js +40 -25
  6. package/lib/commonjs/components/Dropdown/Dropdown.js +214 -0
  7. package/lib/commonjs/components/DropdownInput/DropdownInput.js +542 -0
  8. package/lib/commonjs/components/FormField/FormField.js +328 -178
  9. package/lib/commonjs/components/LottieIntroBlock/LottieIntroBlock.js +150 -0
  10. package/lib/commonjs/components/PageHero/PageHero.js +153 -0
  11. package/lib/commonjs/components/PoweredByLabel/PoweredByLabel.js +135 -0
  12. package/lib/commonjs/components/PoweredByLabel/finvu.png +0 -0
  13. package/lib/commonjs/components/Text/Text.js +9 -2
  14. package/lib/commonjs/components/Tooltip/Tooltip.js +34 -27
  15. package/lib/commonjs/components/index.js +60 -0
  16. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
  17. package/lib/commonjs/icons/registry.js +1 -1
  18. package/lib/module/components/AccountCard/AccountCard.js +241 -0
  19. package/lib/module/components/AppBar/AppBar.js +17 -11
  20. package/lib/module/components/CardBankAccount/CardBankAccount.js +17 -2
  21. package/lib/module/components/CheckboxItem/CheckboxItem.js +41 -26
  22. package/lib/module/components/Dropdown/Dropdown.js +206 -0
  23. package/lib/module/components/DropdownInput/DropdownInput.js +536 -0
  24. package/lib/module/components/FormField/FormField.js +330 -180
  25. package/lib/module/components/LottieIntroBlock/LottieIntroBlock.js +144 -0
  26. package/lib/module/components/PageHero/PageHero.js +147 -0
  27. package/lib/module/components/PoweredByLabel/PoweredByLabel.js +130 -0
  28. package/lib/module/components/PoweredByLabel/finvu.png +0 -0
  29. package/lib/module/components/Text/Text.js +9 -2
  30. package/lib/module/components/Tooltip/Tooltip.js +34 -27
  31. package/lib/module/components/index.js +7 -1
  32. package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
  33. package/lib/module/icons/registry.js +1 -1
  34. package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +81 -0
  35. package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +9 -2
  36. package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +18 -2
  37. package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +62 -0
  38. package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +107 -0
  39. package/lib/typescript/src/components/FormField/FormField.d.ts +76 -19
  40. package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +58 -0
  41. package/lib/typescript/src/components/PageHero/PageHero.d.ts +53 -0
  42. package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +70 -0
  43. package/lib/typescript/src/components/Text/Text.d.ts +12 -2
  44. package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +13 -2
  45. package/lib/typescript/src/components/index.d.ts +7 -1
  46. package/lib/typescript/src/icons/registry.d.ts +1 -1
  47. package/package.json +1 -3
  48. package/src/components/AccountCard/AccountCard.tsx +376 -0
  49. package/src/components/AppBar/AppBar.tsx +25 -14
  50. package/src/components/CardBankAccount/CardBankAccount.tsx +29 -3
  51. package/src/components/CheckboxItem/CheckboxItem.tsx +65 -30
  52. package/src/components/Dropdown/Dropdown.tsx +331 -0
  53. package/src/components/DropdownInput/DropdownInput.tsx +819 -0
  54. package/src/components/FormField/FormField.tsx +542 -215
  55. package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +202 -0
  56. package/src/components/PageHero/PageHero.tsx +200 -0
  57. package/src/components/PoweredByLabel/PoweredByLabel.tsx +221 -0
  58. package/src/components/PoweredByLabel/finvu.png +0 -0
  59. package/src/components/Text/Text.tsx +24 -3
  60. package/src/components/Tooltip/Tooltip.tsx +50 -25
  61. package/src/components/index.ts +15 -1
  62. package/src/design-tokens/Coin Variables-variables-full.json +1 -1
  63. 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;