@huma-finance/widgets 0.0.10 → 0.0.11

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 (169) hide show
  1. package/.env.example +2 -2
  2. package/.eslintignore +2 -2
  3. package/.eslintrc.js +64 -64
  4. package/.prettierignore +4 -4
  5. package/.prettierrc.js +16 -16
  6. package/API.md +331 -331
  7. package/LICENSE +660 -660
  8. package/README.md +48 -48
  9. package/babel.config.js +15 -15
  10. package/config-overrides.js +9 -9
  11. package/cosmos.config.json +7 -7
  12. package/cypress/e2e/01-invoice-factoring-borrow.test.ts +62 -62
  13. package/cypress/support/e2e.ts +76 -76
  14. package/cypress/support/ethereum.ts +142 -142
  15. package/cypress/tsconfig.json +9 -9
  16. package/cypress/utils/index.ts +54 -54
  17. package/cypress.config.ts +20 -20
  18. package/dist/assets/output-15e10f9f.css +44 -0
  19. package/dist/cjs/assets/output-15e10f9f.css +44 -0
  20. package/dist/cjs/index.cjs +7731 -0
  21. package/dist/cjs/index.cjs.map +1 -0
  22. package/dist/index.d.ts +211 -0
  23. package/dist/index.js +7687 -0
  24. package/dist/index.js.map +1 -0
  25. package/jsdoc2md.json +20 -20
  26. package/package.json +4 -4
  27. package/public/index.html +40 -40
  28. package/public/manifest.json +25 -25
  29. package/public/robots.txt +3 -3
  30. package/rollup.config.js +81 -81
  31. package/src/components/Activity.tsx +123 -123
  32. package/src/components/AllowListModal.tsx +113 -113
  33. package/src/components/ApolloWrapper.tsx +15 -15
  34. package/src/components/ApproveAllowanceModal.tsx +118 -118
  35. package/src/components/BottomButton.tsx +31 -31
  36. package/src/components/ChooseAmountModal.tsx +315 -315
  37. package/src/components/CreditLine/borrow/1-Evaluation.tsx +158 -159
  38. package/src/components/CreditLine/borrow/2-AllowList.tsx +34 -34
  39. package/src/components/CreditLine/borrow/3-ChooseAmount.tsx +74 -74
  40. package/src/components/CreditLine/borrow/4-ApproveAllowance.tsx +29 -29
  41. package/src/components/CreditLine/borrow/5-Transfer.tsx +30 -30
  42. package/src/components/CreditLine/borrow/6-Success.tsx +30 -30
  43. package/src/components/CreditLine/borrow/index.tsx +119 -119
  44. package/src/components/CreditLine/payment/1-ChooseAmount.tsx +67 -67
  45. package/src/components/CreditLine/payment/2-ApproveAllowance.tsx +23 -23
  46. package/src/components/CreditLine/payment/3-Transfer.tsx +34 -34
  47. package/src/components/CreditLine/payment/4-Success.tsx +39 -39
  48. package/src/components/CreditLine/payment/index.tsx +94 -94
  49. package/src/components/ErrorModal.tsx +132 -132
  50. package/src/components/Factoring/FactoredList.tsx +143 -143
  51. package/src/components/Factoring/UpcomingList.tsx +90 -90
  52. package/src/components/Factoring/index.ts +2 -2
  53. package/src/components/HumaLoading.tsx +68 -68
  54. package/src/components/HumaTable.tsx +158 -158
  55. package/src/components/InvoiceFactoring/borrow/1-Evaluation.tsx +52 -46
  56. package/src/components/InvoiceFactoring/borrow/2-AllowList.tsx +34 -34
  57. package/src/components/InvoiceFactoring/borrow/3-ChooseAmount.tsx +86 -86
  58. package/src/components/InvoiceFactoring/borrow/4-ConfirmTransfer.tsx +104 -104
  59. package/src/components/InvoiceFactoring/borrow/5-ApproveNFT.tsx +55 -55
  60. package/src/components/InvoiceFactoring/borrow/6-Transfer.tsx +34 -34
  61. package/src/components/InvoiceFactoring/borrow/7-Success.tsx +20 -20
  62. package/src/components/InvoiceFactoring/borrow/index.tsx +96 -96
  63. package/src/components/InvoiceFactoring/payment/1-ChooseAmount.tsx +67 -67
  64. package/src/components/InvoiceFactoring/payment/2-ApproveAllowance.tsx +23 -23
  65. package/src/components/InvoiceFactoring/payment/3-Transfer.tsx +34 -34
  66. package/src/components/InvoiceFactoring/payment/4-Success.tsx +23 -23
  67. package/src/components/InvoiceFactoring/payment/index.tsx +86 -86
  68. package/src/components/Lend/supply/1-Evaluation.tsx +86 -86
  69. package/src/components/Lend/supply/2-ChooseAmount.tsx +70 -70
  70. package/src/components/Lend/supply/3-ApproveAllowance.tsx +25 -25
  71. package/src/components/Lend/supply/4-ConfirmTransfer.tsx +104 -104
  72. package/src/components/Lend/supply/6-Transfer.tsx +32 -32
  73. package/src/components/Lend/supply/7-Success.tsx +49 -49
  74. package/src/components/Lend/supply/index.tsx +144 -144
  75. package/src/components/Lend/withdraw/1-CheckWithdrawble.tsx +73 -73
  76. package/src/components/Lend/withdraw/2-ChooseAmount.tsx +50 -50
  77. package/src/components/Lend/withdraw/3-Transfer.tsx +32 -32
  78. package/src/components/Lend/withdraw/4-Success.tsx +49 -49
  79. package/src/components/Lend/withdraw/index.tsx +101 -101
  80. package/src/components/LoadingModal.tsx +49 -49
  81. package/src/components/StreamFactoring/borrow/1-Evaluation.tsx +47 -57
  82. package/src/components/StreamFactoring/borrow/2-ChooseAmount.tsx +124 -124
  83. package/src/components/StreamFactoring/borrow/3-ConfirmTransfer.tsx +104 -104
  84. package/src/components/StreamFactoring/borrow/4-ApproveAllowance.tsx +65 -65
  85. package/src/components/StreamFactoring/borrow/5-Permit.tsx +144 -144
  86. package/src/components/StreamFactoring/borrow/6-Transfer.tsx +37 -37
  87. package/src/components/StreamFactoring/borrow/7-Success.tsx +20 -20
  88. package/src/components/StreamFactoring/borrow/index.tsx +94 -95
  89. package/src/components/StreamFactoring/payment/ChooseAmount.tsx +54 -54
  90. package/src/components/StreamFactoring/payment/Success.tsx +23 -23
  91. package/src/components/StreamFactoring/payment/Transfer.tsx +34 -34
  92. package/src/components/StreamFactoring/payment/index.tsx +66 -66
  93. package/src/components/SuperfluidFactoring/SuperfluidFactoredList.tsx +61 -61
  94. package/src/components/SuperfluidFactoring/SuperfluidUpcomingList.tsx +185 -185
  95. package/src/components/SuperfluidFactoring/index.tsx +85 -85
  96. package/src/components/TxDoneModal.tsx +83 -83
  97. package/src/components/TxSendModal.tsx +59 -59
  98. package/src/components/ViewOnExplorer.tsx +26 -26
  99. package/src/components/WidgetWrapper.tsx +74 -74
  100. package/src/components/WrapperModal.tsx +54 -54
  101. package/src/components/buttons/TableActionButton.tsx +36 -36
  102. package/src/components/buttons/index.ts +1 -1
  103. package/src/components/humaModal/HumaModal.tsx +68 -68
  104. package/src/components/humaModal/HumaModalHeader.tsx +70 -70
  105. package/src/components/humaModal/index.tsx +2 -2
  106. package/src/components/icons/approve-lender.svg +30 -30
  107. package/src/components/icons/auto-payback.svg +40 -40
  108. package/src/components/icons/check-circle.svg +3 -3
  109. package/src/components/icons/check-green.svg +3 -3
  110. package/src/components/icons/check.svg +10 -10
  111. package/src/components/icons/donut.svg +904 -904
  112. package/src/components/icons/ellipse.svg +3 -3
  113. package/src/components/icons/huma-full.svg +22 -22
  114. package/src/components/icons/huma.svg +15 -15
  115. package/src/components/icons/index.tsx +93 -93
  116. package/src/components/icons/loader.svg +229 -229
  117. package/src/components/icons/metamask.svg +31 -31
  118. package/src/components/icons/polygon.svg +16 -16
  119. package/src/components/icons/receipt.svg +3 -3
  120. package/src/components/icons/separator.svg +3 -3
  121. package/src/components/icons/sorry.svg +31 -31
  122. package/src/components/icons/usdc.svg +5 -5
  123. package/src/components/icons/wallet-connect.svg +11 -11
  124. package/src/cosmos/CreditLineBorrow.fixture.tsx +85 -85
  125. package/src/cosmos/CreditLinePayment.fixture.tsx +49 -49
  126. package/src/cosmos/InvoiceFactoringBorrow.fixture.tsx +111 -111
  127. package/src/cosmos/InvoiceFactoringPayment.fixture.tsx +67 -67
  128. package/src/cosmos/LendSupply.fixture.tsx +75 -75
  129. package/src/cosmos/LendWithdraw.fixture.tsx +43 -43
  130. package/src/cosmos/SDKTesting.fixture.tsx +557 -516
  131. package/src/cosmos/SuperfluidFactoringBorrow.fixture.tsx +12 -12
  132. package/src/cosmos/WalletWrapper.tsx +52 -52
  133. package/src/cosmos/abis/InvoiceNFT.json +644 -644
  134. package/src/cosmos/abis/ReceivableFactoringPool.json +1529 -1529
  135. package/src/cosmos/utils/index.ts +169 -169
  136. package/src/fonts/Recoleta/Recoleta-Black.otf +0 -0
  137. package/src/fonts/Recoleta/Recoleta-Bold.otf +0 -0
  138. package/src/fonts/Recoleta/Recoleta-Light.otf +0 -0
  139. package/src/fonts/Recoleta/Recoleta-Medium.otf +0 -0
  140. package/src/fonts/Recoleta/Recoleta-Regular.otf +0 -0
  141. package/src/fonts/Recoleta/Recoleta-RegularDEMO.otf +0 -0
  142. package/src/fonts/Recoleta/Recoleta-SemiBold.otf +0 -0
  143. package/src/fonts/Recoleta/Recoleta-Thin.otf +0 -0
  144. package/src/hooks/useEA.ts +72 -72
  145. package/src/hooks/useRedux.ts +6 -6
  146. package/src/index.css +61 -61
  147. package/src/index.tsx +219 -213
  148. package/src/react-app-env.d.ts +1 -1
  149. package/src/reportWebVitals.ts +15 -15
  150. package/src/setupTests.ts +6 -6
  151. package/src/store/index.ts +27 -27
  152. package/src/store/widgets.reducers.ts +120 -120
  153. package/src/store/widgets.selectors.ts +3 -3
  154. package/src/store/widgets.store.ts +55 -55
  155. package/src/theme/breakpoints.ts +10 -10
  156. package/src/theme/components.ts +70 -70
  157. package/src/theme/coreThemeConstants.ts +29 -29
  158. package/src/theme/cssMixins.ts +92 -92
  159. package/src/theme/hooks/useGetSizes.ts +31 -31
  160. package/src/theme/index.ts +24 -24
  161. package/src/theme/palette.ts +150 -150
  162. package/src/theme/shape.ts +7 -7
  163. package/src/theme/theme.types.ts +80 -80
  164. package/src/theme/typography.ts +117 -117
  165. package/src/utilTypes.d.ts +29 -29
  166. package/src/utils/env.ts +9 -9
  167. package/tsconfig.build.json +7 -7
  168. package/tsconfig.json +32 -32
  169. package/webpack.cosmos.js +54 -54
@@ -1,315 +1,315 @@
1
- import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'
2
- import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp'
3
- import {
4
- Box,
5
- Button,
6
- css,
7
- Divider,
8
- Input,
9
- Slider,
10
- useTheme,
11
- } from '@mui/material'
12
- import { useMQ } from '@huma-finance/shared'
13
- import React from 'react'
14
-
15
- import { IconType } from '../utilTypes'
16
- import { WrapperModal } from './WrapperModal'
17
-
18
- type Props = {
19
- title: string
20
- tokenIcon?: IconType
21
- description1?: string
22
- description2?: string
23
- currentAmount: number
24
- sliderMax: number
25
- tokenSymbol: string
26
- topLeft?: string
27
- topRight?: string
28
- downLeft?: string
29
- downRight?: string
30
- actionText?: string
31
- hideTerms?: boolean
32
- payoffAmount?: number
33
- type?: 'slider' | 'input'
34
- handleChangeAmount: (amount: number) => void
35
- handleAction: () => void
36
- }
37
-
38
- export function ChooseAmountModal({
39
- title,
40
- tokenIcon,
41
- description1,
42
- description2,
43
- currentAmount,
44
- sliderMax,
45
- tokenSymbol,
46
- topLeft,
47
- topRight,
48
- downLeft,
49
- downRight,
50
- actionText = 'accept terms',
51
- payoffAmount,
52
- hideTerms = false,
53
- type = 'slider',
54
- handleChangeAmount,
55
- handleAction,
56
- }: Props): React.ReactElement {
57
- const theme = useTheme()
58
- const { isXsSize } = useMQ()
59
-
60
- const styles = {
61
- subTitle: css`
62
- font-family: 'Uni-Neue-Regular';
63
- `,
64
- description2: css`
65
- ${theme.cssMixins.rowCentered};
66
- font-family: 'Uni-Neue-Regular';
67
- font-size: 16px;
68
- color: #a8a1b2;
69
- margin-top: 16px;
70
- `,
71
- chosenAmountWrapper: css`
72
- ${theme.cssMixins.rowCentered};
73
- background: linear-gradient(232.71deg, #a363f4 4.17%, #ff6a8a 178.69%);
74
- background-clip: text;
75
- -webkit-text-fill-color: transparent;
76
- font-weight: 700;
77
- font-size: 32px;
78
- margin-bottom: 10px;
79
- margin-top: 30px;
80
- `,
81
- chosenAmount: css`
82
- font-family: 'Inter-Bold';
83
- font-size: 32px;
84
- `,
85
- chosenAmountSymbol: css`
86
- font-size: 75%;
87
- margin-left: 5px;
88
- letter-spacing: 0.1px;
89
- `,
90
- inputAmountWrapper: css`
91
- margin-bottom: 10px;
92
- margin-top: 30px;
93
- `,
94
- inputAmount: css`
95
- ${theme.cssMixins.rowSpaceBetweened};
96
- `,
97
- inputField: css`
98
- width: 100%;
99
- `,
100
- maxButton: css`
101
- width: 80px;
102
- `,
103
- amountAvailable: css`
104
- ${theme.cssMixins.rowVCentered};
105
- margin-top: 5px;
106
- margin-bottom: 100px;
107
- font-size: 16px;
108
- & > svg {
109
- margin-right: 5px;
110
- }
111
- `,
112
- tokenIcon: {
113
- width: '16px',
114
- height: '16px',
115
- },
116
- editIcon: css`
117
- color: ${theme.palette.primary.main};
118
- cursor: pointer;
119
- display: inline-grid;
120
- vertical-align: middle;
121
- & > svg {
122
- font-size: 24px;
123
- }
124
- & > svg:first-of-type {
125
- margin-bottom: -10px;
126
- }
127
- `,
128
- input: css`
129
- font-size: 18px;
130
- -webkit-text-fill-color: ${theme.palette.primary.main};
131
- `,
132
- slider: css`
133
- margin-bottom: 54px;
134
- &.MuiSlider-root {
135
- height: 8px !important;
136
- color: #e9e9e9;
137
- }
138
- & .MuiSlider-track {
139
- height: 8px !important;
140
- background: linear-gradient(232.71deg, #a363f4 4.17%, #ff6a8a 178.69%);
141
- border-radius: 8px;
142
- }
143
- & .MuiSlider-thumb::before {
144
- background: #ffffff;
145
- border: 1px solid #f9f9f9;
146
- box-shadow: 1px 1px 12px 2px rgba(163, 100, 244, 0.6);
147
- border-radius: 50px;
148
- width: 24px;
149
- height: 24px;
150
- }
151
- `,
152
- info: css`
153
- font-family: 'Uni-Neue-Regular';
154
- ${theme.cssMixins.rowSpaceBetweened};
155
- font-weight: 400;
156
- font-size: 16px;
157
- color: #423b46;
158
- `,
159
- divider: css`
160
- margin: 16px 0;
161
- background: #49505b;
162
- border-color: #e9e3f1;
163
- `,
164
- okButton: css`
165
- font-family: 'Uni-Neue-Bold';
166
- width: 100%;
167
- position: absolute;
168
- bottom: ${isXsSize ? 20 : 0}px;
169
- `,
170
- terms: css`
171
- ${theme.cssMixins.rowHCentered};
172
- font-weight: 400;
173
- font-size: 12px;
174
- color: #a8a1b2;
175
- margin-top: 8px;
176
- letter-spacing: 0px;
177
- width: 100%;
178
- position: absolute;
179
- bottom: -22px;
180
- `,
181
- }
182
-
183
- const handleSliderChange = (event: Event, newValue: number | number[]) => {
184
- handleChangeAmount(newValue as number)
185
- }
186
-
187
- const handleInputChange = (
188
- event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,
189
- ) => {
190
- // @ts-ignore
191
- handleChangeAmount(event.target.value)
192
- }
193
-
194
- const handleSetMax = () => {
195
- handleChangeAmount(sliderMax)
196
- }
197
-
198
- const handleIncrement = () => {
199
- const newAmount = currentAmount + 1
200
- if (newAmount <= sliderMax) {
201
- handleChangeAmount(newAmount)
202
- }
203
- }
204
-
205
- const handleDecrement = () => {
206
- const newAmount = currentAmount - 1
207
- if (newAmount >= 0) {
208
- handleChangeAmount(newAmount)
209
- }
210
- }
211
-
212
- const handlePayoff = () => {
213
- if (payoffAmount) {
214
- handleChangeAmount(payoffAmount)
215
- }
216
- }
217
-
218
- const subTitle = (
219
- <Box component='span'>
220
- <Box component='span' css={styles.subTitle}>
221
- {description1}
222
- </Box>
223
- {payoffAmount && (
224
- <Button
225
- sx={{ fontSize: '12px' }}
226
- variant='text'
227
- size='small'
228
- onClick={handlePayoff}
229
- className='choose-amount-modal-select-payoff-btn'
230
- >
231
- Pay Off
232
- </Button>
233
- )}
234
- </Box>
235
- )
236
-
237
- return (
238
- <WrapperModal title={title} subTitle={subTitle}>
239
- {type === 'slider' && (
240
- <>
241
- <Box css={styles.chosenAmountWrapper}>
242
- <Box css={styles.chosenAmount}>
243
- {Number(currentAmount).toFixed(2)}
244
- <Box component='span' css={styles.chosenAmountSymbol}>
245
- {tokenSymbol}
246
- </Box>
247
- <Box component='span' css={styles.editIcon}>
248
- <ArrowDropUpIcon
249
- onClick={handleIncrement}
250
- className='choose-amount-modal-increment-icon'
251
- />
252
- <ArrowDropDownIcon onClick={handleDecrement} />
253
- </Box>
254
- </Box>
255
- </Box>
256
- <Slider
257
- max={sliderMax}
258
- min={0}
259
- css={styles.slider}
260
- aria-label='Amount'
261
- value={currentAmount}
262
- onChange={handleSliderChange}
263
- />
264
- </>
265
- )}
266
- {type === 'input' && (
267
- <Box css={styles.inputAmountWrapper}>
268
- <Box css={styles.inputAmount}>
269
- <Input
270
- css={styles.inputField}
271
- type='number'
272
- value={currentAmount}
273
- onChange={handleInputChange}
274
- />
275
- <Button
276
- variant='contained'
277
- css={styles.maxButton}
278
- onClick={handleSetMax}
279
- >
280
- Max
281
- </Button>
282
- </Box>
283
- <Box css={styles.amountAvailable}>
284
- {tokenIcon && React.createElement(tokenIcon, styles.tokenIcon)}
285
- <Box>{Number(sliderMax).toFixed(2)} Available</Box>
286
- </Box>
287
- </Box>
288
- )}
289
- <Box css={styles.info}>
290
- <Box>{topLeft}</Box>
291
- <Box>{topRight}</Box>
292
- </Box>
293
- {topLeft && downLeft && <Divider css={styles.divider} />}
294
- <Box css={styles.info}>
295
- <Box>{downLeft}</Box>
296
- <Box>{downRight}</Box>
297
- </Box>
298
- <Box css={styles.description2}>{description2}</Box>
299
- <Button
300
- className='choose-amount-modal-action-btn'
301
- variant='contained'
302
- css={styles.okButton}
303
- onClick={handleAction}
304
- disabled={currentAmount === 0 || currentAmount > sliderMax}
305
- >
306
- {actionText.toUpperCase()}
307
- </Button>
308
- {!hideTerms && (
309
- <Box css={styles.terms}>
310
- By clicking {actionText}, you agree to Huma’s Terms of Service.
311
- </Box>
312
- )}
313
- </WrapperModal>
314
- )
315
- }
1
+ import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'
2
+ import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp'
3
+ import {
4
+ Box,
5
+ Button,
6
+ css,
7
+ Divider,
8
+ Input,
9
+ Slider,
10
+ useTheme,
11
+ } from '@mui/material'
12
+ import { useMQ } from '@huma-finance/shared'
13
+ import React from 'react'
14
+
15
+ import { IconType } from '../utilTypes'
16
+ import { WrapperModal } from './WrapperModal'
17
+
18
+ type Props = {
19
+ title: string
20
+ tokenIcon?: IconType
21
+ description1?: string
22
+ description2?: string
23
+ currentAmount: number
24
+ sliderMax: number
25
+ tokenSymbol: string
26
+ topLeft?: string
27
+ topRight?: string
28
+ downLeft?: string
29
+ downRight?: string
30
+ actionText?: string
31
+ hideTerms?: boolean
32
+ payoffAmount?: number
33
+ type?: 'slider' | 'input'
34
+ handleChangeAmount: (amount: number) => void
35
+ handleAction: () => void
36
+ }
37
+
38
+ export function ChooseAmountModal({
39
+ title,
40
+ tokenIcon,
41
+ description1,
42
+ description2,
43
+ currentAmount,
44
+ sliderMax,
45
+ tokenSymbol,
46
+ topLeft,
47
+ topRight,
48
+ downLeft,
49
+ downRight,
50
+ actionText = 'accept terms',
51
+ payoffAmount,
52
+ hideTerms = false,
53
+ type = 'slider',
54
+ handleChangeAmount,
55
+ handleAction,
56
+ }: Props): React.ReactElement {
57
+ const theme = useTheme()
58
+ const { isXsSize } = useMQ()
59
+
60
+ const styles = {
61
+ subTitle: css`
62
+ font-family: 'Uni-Neue-Regular';
63
+ `,
64
+ description2: css`
65
+ ${theme.cssMixins.rowCentered};
66
+ font-family: 'Uni-Neue-Regular';
67
+ font-size: 16px;
68
+ color: #a8a1b2;
69
+ margin-top: 16px;
70
+ `,
71
+ chosenAmountWrapper: css`
72
+ ${theme.cssMixins.rowCentered};
73
+ background: linear-gradient(232.71deg, #a363f4 4.17%, #ff6a8a 178.69%);
74
+ background-clip: text;
75
+ -webkit-text-fill-color: transparent;
76
+ font-weight: 700;
77
+ font-size: 32px;
78
+ margin-bottom: 10px;
79
+ margin-top: 30px;
80
+ `,
81
+ chosenAmount: css`
82
+ font-family: 'Inter-Bold';
83
+ font-size: 32px;
84
+ `,
85
+ chosenAmountSymbol: css`
86
+ font-size: 75%;
87
+ margin-left: 5px;
88
+ letter-spacing: 0.1px;
89
+ `,
90
+ inputAmountWrapper: css`
91
+ margin-bottom: 10px;
92
+ margin-top: 30px;
93
+ `,
94
+ inputAmount: css`
95
+ ${theme.cssMixins.rowSpaceBetweened};
96
+ `,
97
+ inputField: css`
98
+ width: 100%;
99
+ `,
100
+ maxButton: css`
101
+ width: 80px;
102
+ `,
103
+ amountAvailable: css`
104
+ ${theme.cssMixins.rowVCentered};
105
+ margin-top: 5px;
106
+ margin-bottom: 100px;
107
+ font-size: 16px;
108
+ & > svg {
109
+ margin-right: 5px;
110
+ }
111
+ `,
112
+ tokenIcon: {
113
+ width: '16px',
114
+ height: '16px',
115
+ },
116
+ editIcon: css`
117
+ color: ${theme.palette.primary.main};
118
+ cursor: pointer;
119
+ display: inline-grid;
120
+ vertical-align: middle;
121
+ & > svg {
122
+ font-size: 24px;
123
+ }
124
+ & > svg:first-of-type {
125
+ margin-bottom: -10px;
126
+ }
127
+ `,
128
+ input: css`
129
+ font-size: 18px;
130
+ -webkit-text-fill-color: ${theme.palette.primary.main};
131
+ `,
132
+ slider: css`
133
+ margin-bottom: 54px;
134
+ &.MuiSlider-root {
135
+ height: 8px !important;
136
+ color: #e9e9e9;
137
+ }
138
+ & .MuiSlider-track {
139
+ height: 8px !important;
140
+ background: linear-gradient(232.71deg, #a363f4 4.17%, #ff6a8a 178.69%);
141
+ border-radius: 8px;
142
+ }
143
+ & .MuiSlider-thumb::before {
144
+ background: #ffffff;
145
+ border: 1px solid #f9f9f9;
146
+ box-shadow: 1px 1px 12px 2px rgba(163, 100, 244, 0.6);
147
+ border-radius: 50px;
148
+ width: 24px;
149
+ height: 24px;
150
+ }
151
+ `,
152
+ info: css`
153
+ font-family: 'Uni-Neue-Regular';
154
+ ${theme.cssMixins.rowSpaceBetweened};
155
+ font-weight: 400;
156
+ font-size: 16px;
157
+ color: #423b46;
158
+ `,
159
+ divider: css`
160
+ margin: 16px 0;
161
+ background: #49505b;
162
+ border-color: #e9e3f1;
163
+ `,
164
+ okButton: css`
165
+ font-family: 'Uni-Neue-Bold';
166
+ width: 100%;
167
+ position: absolute;
168
+ bottom: ${isXsSize ? 20 : 0}px;
169
+ `,
170
+ terms: css`
171
+ ${theme.cssMixins.rowHCentered};
172
+ font-weight: 400;
173
+ font-size: 12px;
174
+ color: #a8a1b2;
175
+ margin-top: 8px;
176
+ letter-spacing: 0px;
177
+ width: 100%;
178
+ position: absolute;
179
+ bottom: -22px;
180
+ `,
181
+ }
182
+
183
+ const handleSliderChange = (event: Event, newValue: number | number[]) => {
184
+ handleChangeAmount(newValue as number)
185
+ }
186
+
187
+ const handleInputChange = (
188
+ event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,
189
+ ) => {
190
+ // @ts-ignore
191
+ handleChangeAmount(event.target.value)
192
+ }
193
+
194
+ const handleSetMax = () => {
195
+ handleChangeAmount(sliderMax)
196
+ }
197
+
198
+ const handleIncrement = () => {
199
+ const newAmount = currentAmount + 1
200
+ if (newAmount <= sliderMax) {
201
+ handleChangeAmount(newAmount)
202
+ }
203
+ }
204
+
205
+ const handleDecrement = () => {
206
+ const newAmount = currentAmount - 1
207
+ if (newAmount >= 0) {
208
+ handleChangeAmount(newAmount)
209
+ }
210
+ }
211
+
212
+ const handlePayoff = () => {
213
+ if (payoffAmount) {
214
+ handleChangeAmount(payoffAmount)
215
+ }
216
+ }
217
+
218
+ const subTitle = (
219
+ <Box component='span'>
220
+ <Box component='span' css={styles.subTitle}>
221
+ {description1}
222
+ </Box>
223
+ {payoffAmount && (
224
+ <Button
225
+ sx={{ fontSize: '12px' }}
226
+ variant='text'
227
+ size='small'
228
+ onClick={handlePayoff}
229
+ className='choose-amount-modal-select-payoff-btn'
230
+ >
231
+ Pay Off
232
+ </Button>
233
+ )}
234
+ </Box>
235
+ )
236
+
237
+ return (
238
+ <WrapperModal title={title} subTitle={subTitle}>
239
+ {type === 'slider' && (
240
+ <>
241
+ <Box css={styles.chosenAmountWrapper}>
242
+ <Box css={styles.chosenAmount}>
243
+ {Number(currentAmount).toFixed(2)}
244
+ <Box component='span' css={styles.chosenAmountSymbol}>
245
+ {tokenSymbol}
246
+ </Box>
247
+ <Box component='span' css={styles.editIcon}>
248
+ <ArrowDropUpIcon
249
+ onClick={handleIncrement}
250
+ className='choose-amount-modal-increment-icon'
251
+ />
252
+ <ArrowDropDownIcon onClick={handleDecrement} />
253
+ </Box>
254
+ </Box>
255
+ </Box>
256
+ <Slider
257
+ max={sliderMax}
258
+ min={0}
259
+ css={styles.slider}
260
+ aria-label='Amount'
261
+ value={currentAmount}
262
+ onChange={handleSliderChange}
263
+ />
264
+ </>
265
+ )}
266
+ {type === 'input' && (
267
+ <Box css={styles.inputAmountWrapper}>
268
+ <Box css={styles.inputAmount}>
269
+ <Input
270
+ css={styles.inputField}
271
+ type='number'
272
+ value={currentAmount}
273
+ onChange={handleInputChange}
274
+ />
275
+ <Button
276
+ variant='contained'
277
+ css={styles.maxButton}
278
+ onClick={handleSetMax}
279
+ >
280
+ Max
281
+ </Button>
282
+ </Box>
283
+ <Box css={styles.amountAvailable}>
284
+ {tokenIcon && React.createElement(tokenIcon, styles.tokenIcon)}
285
+ <Box>{Number(sliderMax).toFixed(2)} Available</Box>
286
+ </Box>
287
+ </Box>
288
+ )}
289
+ <Box css={styles.info}>
290
+ <Box>{topLeft}</Box>
291
+ <Box>{topRight}</Box>
292
+ </Box>
293
+ {topLeft && downLeft && <Divider css={styles.divider} />}
294
+ <Box css={styles.info}>
295
+ <Box>{downLeft}</Box>
296
+ <Box>{downRight}</Box>
297
+ </Box>
298
+ <Box css={styles.description2}>{description2}</Box>
299
+ <Button
300
+ className='choose-amount-modal-action-btn'
301
+ variant='contained'
302
+ css={styles.okButton}
303
+ onClick={handleAction}
304
+ disabled={currentAmount === 0 || currentAmount > sliderMax}
305
+ >
306
+ {actionText.toUpperCase()}
307
+ </Button>
308
+ {!hideTerms && (
309
+ <Box css={styles.terms}>
310
+ By clicking {actionText}, you agree to Huma’s Terms of Service.
311
+ </Box>
312
+ )}
313
+ </WrapperModal>
314
+ )
315
+ }