ferns-ui 0.47.9 → 1.0.0-beta.0

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 (402) hide show
  1. package/dist/Accordion.d.ts +3 -0
  2. package/dist/Accordion.js +31 -0
  3. package/dist/Accordion.js.map +1 -0
  4. package/dist/ActionSheet.d.ts +9 -10
  5. package/dist/ActionSheet.js +8 -6
  6. package/dist/ActionSheet.js.map +1 -1
  7. package/dist/AddressField.d.ts +3 -0
  8. package/dist/AddressField.js +33 -0
  9. package/dist/AddressField.js.map +1 -0
  10. package/dist/Avatar.d.ts +2 -2
  11. package/dist/Avatar.js +132 -96
  12. package/dist/Avatar.js.map +1 -1
  13. package/dist/Badge.d.ts +1 -1
  14. package/dist/Badge.js +90 -20
  15. package/dist/Badge.js.map +1 -1
  16. package/dist/Banner.d.ts +1 -1
  17. package/dist/Banner.js +89 -51
  18. package/dist/Banner.js.map +1 -1
  19. package/dist/Body.js +4 -4
  20. package/dist/Body.js.map +1 -1
  21. package/dist/BooleanField.d.ts +3 -0
  22. package/dist/BooleanField.js +90 -0
  23. package/dist/BooleanField.js.map +1 -0
  24. package/dist/Box.js +80 -80
  25. package/dist/Box.js.map +1 -1
  26. package/dist/Button.d.ts +2 -2
  27. package/dist/Button.js +87 -109
  28. package/dist/Button.js.map +1 -1
  29. package/dist/Card.js +2 -2
  30. package/dist/Card.js.map +1 -1
  31. package/dist/CheckBox.d.ts +2 -2
  32. package/dist/CheckBox.js +23 -35
  33. package/dist/CheckBox.js.map +1 -1
  34. package/dist/Common.d.ts +1071 -406
  35. package/dist/Common.js +39 -3
  36. package/dist/Common.js.map +1 -1
  37. package/dist/CommonIconTypes.d.ts +3 -0
  38. package/dist/CommonIconTypes.js +2 -0
  39. package/dist/CommonIconTypes.js.map +1 -0
  40. package/dist/CustomSelectField.d.ts +3 -0
  41. package/dist/CustomSelectField.js +64 -0
  42. package/dist/CustomSelectField.js.map +1 -0
  43. package/dist/DateTimeActionSheet.d.ts +1 -1
  44. package/dist/DateTimeActionSheet.js +177 -156
  45. package/dist/DateTimeActionSheet.js.map +1 -1
  46. package/dist/DateTimeField.d.ts +3 -3
  47. package/dist/DateTimeField.js +140 -30
  48. package/dist/DateTimeField.js.map +1 -1
  49. package/dist/DateUtilities.js.map +1 -1
  50. package/dist/DateUtilities.test.js +2 -1
  51. package/dist/DateUtilities.test.js.map +1 -1
  52. package/dist/DecimalRangeActionSheet.js +3 -15
  53. package/dist/DecimalRangeActionSheet.js.map +1 -1
  54. package/dist/DismissButton.d.ts +3 -0
  55. package/dist/DismissButton.js +14 -0
  56. package/dist/DismissButton.js.map +1 -0
  57. package/dist/EmailField.d.ts +3 -0
  58. package/dist/EmailField.js +52 -0
  59. package/dist/EmailField.js.map +1 -0
  60. package/dist/ErrorBoundary.d.ts +1 -1
  61. package/dist/ErrorPage.js +2 -2
  62. package/dist/ErrorPage.js.map +1 -1
  63. package/dist/FernsProvider.js +1 -1
  64. package/dist/FernsProvider.js.map +1 -1
  65. package/dist/Field.d.ts +2 -2
  66. package/dist/Field.js +67 -136
  67. package/dist/Field.js.map +1 -1
  68. package/dist/Heading.js +37 -16
  69. package/dist/Heading.js.map +1 -1
  70. package/dist/HeightActionSheet.js +3 -7
  71. package/dist/HeightActionSheet.js.map +1 -1
  72. package/dist/Hyperlink.js +7 -1
  73. package/dist/Hyperlink.js.map +1 -1
  74. package/dist/Icon.d.ts +1 -2
  75. package/dist/Icon.js +8 -10
  76. package/dist/Icon.js.map +1 -1
  77. package/dist/IconButton.d.ts +2 -2
  78. package/dist/IconButton.js +93 -92
  79. package/dist/IconButton.js.map +1 -1
  80. package/dist/InfoTooltipButton.d.ts +1 -1
  81. package/dist/InfoTooltipButton.js +2 -2
  82. package/dist/InfoTooltipButton.js.map +1 -1
  83. package/dist/Link.d.ts +1 -1
  84. package/dist/Link.js +7 -3
  85. package/dist/Link.js.map +1 -1
  86. package/dist/MobileAddressAutoComplete.js +8 -8
  87. package/dist/MobileAddressAutoComplete.js.map +1 -1
  88. package/dist/Modal.d.ts +2 -2
  89. package/dist/Modal.js +95 -80
  90. package/dist/Modal.js.map +1 -1
  91. package/dist/MultiselectField.d.ts +3 -0
  92. package/dist/MultiselectField.js +49 -0
  93. package/dist/MultiselectField.js.map +1 -0
  94. package/dist/NumberField.d.ts +3 -0
  95. package/dist/NumberField.js +49 -0
  96. package/dist/NumberField.js.map +1 -0
  97. package/dist/NumberPickerActionSheet.js +2 -2
  98. package/dist/NumberPickerActionSheet.js.map +1 -1
  99. package/dist/OpenAPIContext.js.map +1 -1
  100. package/dist/Page.js +6 -6
  101. package/dist/Page.js.map +1 -1
  102. package/dist/Pagination.d.ts +2 -8
  103. package/dist/Pagination.js +107 -13
  104. package/dist/Pagination.js.map +1 -1
  105. package/dist/PasswordField.d.ts +2 -0
  106. package/dist/PasswordField.js +6 -0
  107. package/dist/PasswordField.js.map +1 -0
  108. package/dist/PhoneNumberField.d.ts +3 -0
  109. package/dist/PhoneNumberField.js +79 -0
  110. package/dist/PhoneNumberField.js.map +1 -0
  111. package/dist/PickerSelect.d.ts +6 -67
  112. package/dist/PickerSelect.js +145 -115
  113. package/dist/PickerSelect.js.map +1 -1
  114. package/dist/Radio.d.ts +3 -0
  115. package/dist/Radio.js +21 -0
  116. package/dist/Radio.js.map +1 -0
  117. package/dist/RadioField.d.ts +3 -0
  118. package/dist/RadioField.js +22 -0
  119. package/dist/RadioField.js.map +1 -0
  120. package/dist/SegmentedControl.d.ts +1 -1
  121. package/dist/SegmentedControl.js +35 -67
  122. package/dist/SegmentedControl.js.map +1 -1
  123. package/dist/SelectField.d.ts +3 -0
  124. package/dist/SelectField.js +20 -0
  125. package/dist/SelectField.js.map +1 -0
  126. package/dist/SideDrawer.js +8 -2
  127. package/dist/SideDrawer.js.map +1 -1
  128. package/dist/Signature.d.ts +1 -0
  129. package/dist/Signature.js +8 -7
  130. package/dist/Signature.js.map +1 -1
  131. package/dist/Signature.native.js +8 -7
  132. package/dist/Signature.native.js.map +1 -1
  133. package/dist/SignatureField.d.ts +3 -0
  134. package/dist/SignatureField.js +54 -0
  135. package/dist/SignatureField.js.map +1 -0
  136. package/dist/Spinner.js +17 -2
  137. package/dist/Spinner.js.map +1 -1
  138. package/dist/SplitPage.d.ts +1 -1
  139. package/dist/SplitPage.js +10 -10
  140. package/dist/SplitPage.js.map +1 -1
  141. package/dist/SplitPage.native.js +7 -7
  142. package/dist/SplitPage.native.js.map +1 -1
  143. package/dist/TapToEdit.d.ts +3 -3
  144. package/dist/TapToEdit.js +40 -32
  145. package/dist/TapToEdit.js.map +1 -1
  146. package/dist/Text.d.ts +1 -1
  147. package/dist/Text.js +70 -64
  148. package/dist/Text.js.map +1 -1
  149. package/dist/TextArea.d.ts +1 -1
  150. package/dist/TextArea.js +2 -14
  151. package/dist/TextArea.js.map +1 -1
  152. package/dist/TextField.d.ts +2 -2
  153. package/dist/TextField.js +89 -206
  154. package/dist/TextField.js.map +1 -1
  155. package/dist/TextFieldNumberActionSheet.js +2 -2
  156. package/dist/TextFieldNumberActionSheet.js.map +1 -1
  157. package/dist/Theme.d.ts +87 -3
  158. package/dist/Theme.js +197 -98
  159. package/dist/Theme.js.map +1 -1
  160. package/dist/TimezonePicker.js +3 -5
  161. package/dist/TimezonePicker.js.map +1 -1
  162. package/dist/Toast.d.ts +18 -5
  163. package/dist/Toast.js +130 -31
  164. package/dist/Toast.js.map +1 -1
  165. package/dist/Tooltip.d.ts +2 -2
  166. package/dist/Tooltip.js +189 -89
  167. package/dist/Tooltip.js.map +1 -1
  168. package/dist/UnifiedAddressAutoComplete.js +2 -2
  169. package/dist/UnifiedAddressAutoComplete.js.map +1 -1
  170. package/dist/Unifier.js.map +1 -1
  171. package/dist/Utilities.js +5 -3
  172. package/dist/Utilities.js.map +1 -1
  173. package/dist/WebAddressAutocomplete.js +2 -2
  174. package/dist/WebAddressAutocomplete.js.map +1 -1
  175. package/dist/fieldElements/FieldError.d.ts +6 -0
  176. package/dist/fieldElements/FieldError.js +14 -0
  177. package/dist/fieldElements/FieldError.js.map +1 -0
  178. package/dist/fieldElements/FieldHelperText.d.ts +6 -0
  179. package/dist/fieldElements/FieldHelperText.js +11 -0
  180. package/dist/fieldElements/FieldHelperText.js.map +1 -0
  181. package/dist/fieldElements/FieldTitle.d.ts +6 -0
  182. package/dist/fieldElements/FieldTitle.js +19 -0
  183. package/dist/fieldElements/FieldTitle.js.map +1 -0
  184. package/dist/fieldElements/index.d.ts +3 -0
  185. package/dist/fieldElements/index.js +4 -0
  186. package/dist/fieldElements/index.js.map +1 -0
  187. package/dist/icons/MobileIcon.d.ts +3 -0
  188. package/dist/icons/MobileIcon.js +24 -0
  189. package/dist/icons/MobileIcon.js.map +1 -0
  190. package/dist/icons/OfflineIcon.d.ts +3 -0
  191. package/dist/icons/OfflineIcon.js +23 -0
  192. package/dist/icons/OfflineIcon.js.map +1 -0
  193. package/dist/icons/OnlineIcon.d.ts +3 -0
  194. package/dist/icons/OnlineIcon.js +24 -0
  195. package/dist/icons/OnlineIcon.js.map +1 -0
  196. package/dist/icons/OutOfficeIcon.d.ts +3 -0
  197. package/dist/icons/OutOfficeIcon.js +24 -0
  198. package/dist/icons/OutOfficeIcon.js.map +1 -0
  199. package/dist/icons/index.d.ts +4 -0
  200. package/dist/icons/index.js +5 -0
  201. package/dist/icons/index.js.map +1 -0
  202. package/dist/index.d.ts +28 -14
  203. package/dist/index.js +28 -14
  204. package/dist/index.js.map +1 -1
  205. package/dist/setupTests.d.ts +1 -0
  206. package/dist/setupTests.js +1 -1
  207. package/dist/setupTests.js.map +1 -1
  208. package/dist/{Table.d.ts → table/Table.d.ts} +2 -2
  209. package/dist/{Table.js → table/Table.js} +18 -10
  210. package/dist/table/Table.js.map +1 -0
  211. package/dist/table/TableBadge.d.ts +6 -0
  212. package/dist/table/TableBadge.js +22 -0
  213. package/dist/table/TableBadge.js.map +1 -0
  214. package/dist/table/TableBoolean.d.ts +6 -0
  215. package/dist/table/TableBoolean.js +39 -0
  216. package/dist/table/TableBoolean.js.map +1 -0
  217. package/dist/table/TableDate.d.ts +3 -0
  218. package/dist/table/TableDate.js +26 -0
  219. package/dist/table/TableDate.js.map +1 -0
  220. package/dist/{TableHeader.d.ts → table/TableHeader.d.ts} +1 -1
  221. package/dist/{TableHeader.js → table/TableHeader.js} +2 -2
  222. package/dist/table/TableHeader.js.map +1 -0
  223. package/dist/{TableHeaderCell.d.ts → table/TableHeaderCell.d.ts} +2 -2
  224. package/dist/table/TableHeaderCell.js +58 -0
  225. package/dist/table/TableHeaderCell.js.map +1 -0
  226. package/dist/table/TableIconButton.d.ts +3 -0
  227. package/dist/table/TableIconButton.js +42 -0
  228. package/dist/table/TableIconButton.js.map +1 -0
  229. package/dist/table/TableNumber.d.ts +3 -0
  230. package/dist/table/TableNumber.js +18 -0
  231. package/dist/table/TableNumber.js.map +1 -0
  232. package/dist/{TableRow.d.ts → table/TableRow.d.ts} +1 -1
  233. package/dist/table/TableRow.js +28 -0
  234. package/dist/table/TableRow.js.map +1 -0
  235. package/dist/table/TableText.d.ts +3 -0
  236. package/dist/table/TableText.js +18 -0
  237. package/dist/table/TableText.js.map +1 -0
  238. package/dist/table/TableTitle.d.ts +3 -0
  239. package/dist/table/TableTitle.js +22 -0
  240. package/dist/table/TableTitle.js.map +1 -0
  241. package/dist/{tableContext.d.ts → table/tableContext.d.ts} +1 -1
  242. package/dist/table/tableContext.js.map +1 -0
  243. package/package.json +10 -4
  244. package/src/Accordion.tsx +84 -0
  245. package/src/ActionSheet.tsx +8 -5
  246. package/src/AddressField.tsx +122 -0
  247. package/src/Avatar.tsx +193 -147
  248. package/src/Badge.tsx +107 -49
  249. package/src/Banner.tsx +158 -111
  250. package/src/Body.tsx +4 -4
  251. package/src/BooleanField.tsx +122 -0
  252. package/src/Box.tsx +92 -82
  253. package/src/Button.tsx +151 -167
  254. package/src/Card.tsx +2 -2
  255. package/src/CheckBox.tsx +30 -111
  256. package/src/Common.ts +1304 -2041
  257. package/src/CommonIconTypes.ts +2030 -0
  258. package/src/CustomSelectField.tsx +116 -0
  259. package/src/DateTimeActionSheet.tsx +347 -255
  260. package/src/DateTimeField.tsx +168 -61
  261. package/src/DateUtilities.test.ts +6 -2
  262. package/src/DateUtilities.tsx +1 -1
  263. package/src/DecimalRangeActionSheet.tsx +2 -17
  264. package/src/DismissButton.tsx +31 -0
  265. package/src/EmailField.tsx +70 -0
  266. package/src/ErrorPage.tsx +2 -2
  267. package/src/FernsProvider.tsx +1 -1
  268. package/src/Field.tsx +83 -345
  269. package/src/Heading.tsx +44 -16
  270. package/src/HeightActionSheet.tsx +2 -9
  271. package/src/Hyperlink.tsx +8 -1
  272. package/src/Icon.tsx +22 -14
  273. package/src/IconButton.tsx +188 -156
  274. package/src/InfoTooltipButton.tsx +4 -6
  275. package/src/Link.tsx +14 -5
  276. package/src/MobileAddressAutoComplete.tsx +17 -13
  277. package/src/Modal.tsx +214 -190
  278. package/src/MultiselectField.tsx +103 -0
  279. package/src/NumberField.tsx +55 -0
  280. package/src/NumberPickerActionSheet.tsx +1 -4
  281. package/src/OpenAPIContext.tsx +1 -1
  282. package/src/Page.tsx +9 -13
  283. package/src/Pagination.tsx +171 -36
  284. package/src/PasswordField.tsx +7 -0
  285. package/src/PhoneNumberField.tsx +103 -0
  286. package/src/PickerSelect.tsx +169 -151
  287. package/src/Radio.tsx +33 -0
  288. package/src/RadioField.tsx +43 -0
  289. package/src/SegmentedControl.tsx +44 -96
  290. package/src/SelectField.tsx +41 -0
  291. package/src/SideDrawer.tsx +8 -2
  292. package/src/Signature.native.tsx +16 -9
  293. package/src/Signature.tsx +19 -11
  294. package/src/SignatureField.tsx +92 -0
  295. package/src/Spinner.tsx +16 -2
  296. package/src/SplitPage.native.tsx +9 -7
  297. package/src/SplitPage.tsx +11 -12
  298. package/src/TapToEdit.tsx +67 -39
  299. package/src/Text.tsx +79 -69
  300. package/src/TextArea.tsx +2 -2
  301. package/src/TextField.tsx +133 -285
  302. package/src/TextFieldNumberActionSheet.tsx +1 -4
  303. package/src/Theme.tsx +223 -172
  304. package/src/TimezonePicker.tsx +3 -18
  305. package/src/Toast.tsx +193 -70
  306. package/src/Tooltip.tsx +258 -141
  307. package/src/UnifiedAddressAutoComplete.tsx +3 -3
  308. package/src/Unifier.ts +4 -4
  309. package/src/Utilities.tsx +11 -3
  310. package/src/WebAddressAutocomplete.tsx +2 -3
  311. package/src/fieldElements/FieldError.tsx +24 -0
  312. package/src/fieldElements/FieldHelperText.tsx +20 -0
  313. package/src/fieldElements/FieldTitle.tsx +31 -0
  314. package/src/fieldElements/index.tsx +3 -0
  315. package/src/icons/MobileIcon.tsx +41 -0
  316. package/src/icons/OfflineIcon.tsx +38 -0
  317. package/src/icons/OnlineIcon.tsx +40 -0
  318. package/src/icons/OutOfficeIcon.tsx +37 -0
  319. package/src/icons/index.ts +4 -0
  320. package/src/index.tsx +28 -14
  321. package/src/setupTests.ts +1 -0
  322. package/src/{Table.tsx → table/Table.tsx} +24 -14
  323. package/src/table/TableBadge.tsx +46 -0
  324. package/src/table/TableBoolean.tsx +70 -0
  325. package/src/table/TableDate.tsx +38 -0
  326. package/src/{TableHeader.tsx → table/TableHeader.tsx} +3 -3
  327. package/src/table/TableHeaderCell.tsx +93 -0
  328. package/src/table/TableIconButton.tsx +62 -0
  329. package/src/table/TableNumber.tsx +29 -0
  330. package/src/{TableRow.tsx → table/TableRow.tsx} +28 -25
  331. package/src/table/TableText.tsx +29 -0
  332. package/src/table/TableTitle.tsx +32 -0
  333. package/src/{tableContext.tsx → table/tableContext.tsx} +1 -1
  334. package/dist/BlurBox.d.ts +0 -5
  335. package/dist/BlurBox.js +0 -28
  336. package/dist/BlurBox.js.map +0 -1
  337. package/dist/BlurBox.native.d.ts +0 -6
  338. package/dist/BlurBox.native.js +0 -30
  339. package/dist/BlurBox.native.js.map +0 -1
  340. package/dist/CustomSelect.d.ts +0 -3
  341. package/dist/CustomSelect.js +0 -47
  342. package/dist/CustomSelect.js.map +0 -1
  343. package/dist/DateTimeField.android.d.ts +0 -3
  344. package/dist/DateTimeField.android.js +0 -67
  345. package/dist/DateTimeField.android.js.map +0 -1
  346. package/dist/DateTimeField.ios.d.ts +0 -3
  347. package/dist/DateTimeField.ios.js +0 -49
  348. package/dist/DateTimeField.ios.js.map +0 -1
  349. package/dist/FieldWithLabels.d.ts +0 -3
  350. package/dist/FieldWithLabels.js +0 -8
  351. package/dist/FieldWithLabels.js.map +0 -1
  352. package/dist/Form.d.ts +0 -16
  353. package/dist/Form.js +0 -89
  354. package/dist/Form.js.map +0 -1
  355. package/dist/HeaderButtons.d.ts +0 -31
  356. package/dist/HeaderButtons.js +0 -53
  357. package/dist/HeaderButtons.js.map +0 -1
  358. package/dist/Mask.d.ts +0 -2
  359. package/dist/Mask.js +0 -19
  360. package/dist/Mask.js.map +0 -1
  361. package/dist/Pill.d.ts +0 -3
  362. package/dist/Pill.js +0 -8
  363. package/dist/Pill.js.map +0 -1
  364. package/dist/Pog.d.ts +0 -3
  365. package/dist/Pog.js +0 -48
  366. package/dist/Pog.js.map +0 -1
  367. package/dist/ProgressBar.d.ts +0 -3
  368. package/dist/ProgressBar.js +0 -35
  369. package/dist/ProgressBar.js.map +0 -1
  370. package/dist/SelectList.d.ts +0 -27
  371. package/dist/SelectList.js +0 -56
  372. package/dist/SelectList.js.map +0 -1
  373. package/dist/Switch.d.ts +0 -3
  374. package/dist/Switch.js +0 -20
  375. package/dist/Switch.js.map +0 -1
  376. package/dist/Table.js.map +0 -1
  377. package/dist/TableHeader.js.map +0 -1
  378. package/dist/TableHeaderCell.js +0 -36
  379. package/dist/TableHeaderCell.js.map +0 -1
  380. package/dist/TableRow.js +0 -30
  381. package/dist/TableRow.js.map +0 -1
  382. package/dist/WithLabel.d.ts +0 -3
  383. package/dist/WithLabel.js +0 -15
  384. package/dist/WithLabel.js.map +0 -1
  385. package/dist/tableContext.js.map +0 -1
  386. package/src/BlurBox.native.tsx +0 -40
  387. package/src/BlurBox.tsx +0 -31
  388. package/src/CustomSelect.tsx +0 -80
  389. package/src/DateTimeField.android.tsx +0 -103
  390. package/src/DateTimeField.ios.tsx +0 -85
  391. package/src/FieldWithLabels.tsx +0 -36
  392. package/src/Form.tsx +0 -175
  393. package/src/HeaderButtons.tsx +0 -107
  394. package/src/Mask.tsx +0 -21
  395. package/src/Pill.tsx +0 -22
  396. package/src/Pog.tsx +0 -75
  397. package/src/ProgressBar.tsx +0 -47
  398. package/src/SelectList.tsx +0 -109
  399. package/src/Switch.tsx +0 -18
  400. package/src/TableHeaderCell.tsx +0 -72
  401. package/src/WithLabel.tsx +0 -45
  402. /package/dist/{tableContext.js → table/tableContext.js} +0 -0
package/src/TapToEdit.tsx CHANGED
@@ -1,9 +1,9 @@
1
- import React, {ReactElement, useState} from "react";
1
+ import React, {ReactElement, useEffect, useState} from "react";
2
2
  import {Linking} from "react-native";
3
3
 
4
4
  import {Box} from "./Box";
5
5
  import {Button} from "./Button";
6
- import {TapToEditProps} from "./Common";
6
+ import {AddressInterface, BoxProps, FieldProps, TapToEditProps} from "./Common";
7
7
  import {Field} from "./Field";
8
8
  import {Icon} from "./Icon";
9
9
  // import {useOpenAPISpec} from "./OpenAPIContext";
@@ -23,9 +23,9 @@ const TapToEditTitle = ({
23
23
  }): ReactElement => {
24
24
  const Title = (
25
25
  <Box flex="grow" justifyContent="center">
26
- <Text weight="bold">{title}:</Text>
26
+ <Text bold>{title}:</Text>
27
27
  {Boolean(description && !showDescriptionAsTooltip && !onlyShowDescriptionWhileEditing) && (
28
- <Text color="gray" size="sm">
28
+ <Text color="secondaryLight" size="sm">
29
29
  {description}
30
30
  </Text>
31
31
  )}
@@ -33,7 +33,7 @@ const TapToEditTitle = ({
33
33
  );
34
34
  if (showDescriptionAsTooltip) {
35
35
  return (
36
- <Tooltip idealDirection="top" text={description}>
36
+ <Tooltip idealPosition="top" text={description}>
37
37
  {Title}
38
38
  </Tooltip>
39
39
  );
@@ -42,7 +42,7 @@ const TapToEditTitle = ({
42
42
  }
43
43
  };
44
44
 
45
- export function formatAddress(address: any, asString = false): string {
45
+ export function formatAddress(address: AddressInterface, asString = false): string {
46
46
  let city = "";
47
47
  if (address?.city) {
48
48
  city = address?.state || address.zipcode ? `${address.city}, ` : `${address.city}`;
@@ -62,7 +62,7 @@ export function formatAddress(address: any, asString = false): string {
62
62
  const addressLineOne = address?.address1 ?? "";
63
63
  const addressLineTwo = address?.address2 ?? "";
64
64
  const addressLineThree = `${city}${state}${zip}`;
65
- const addressLineFour = `${countyName}${address?.countyCode ? ` [${countyCode}]` : ""}`;
65
+ const addressLineFour = `${countyName}${address?.countyCode ? ` (${countyCode})` : ""}`;
66
66
 
67
67
  if (!asString) {
68
68
  // Only add new lines if lines before and after are not empty to avoid awkward whitespace
@@ -83,7 +83,6 @@ export function formatAddress(address: any, asString = false): string {
83
83
  export const TapToEdit = ({
84
84
  value,
85
85
  setValue,
86
- placeholder,
87
86
  title,
88
87
  onSave,
89
88
  editable = true,
@@ -100,8 +99,14 @@ export const TapToEdit = ({
100
99
  ...fieldProps
101
100
  }: TapToEditProps): ReactElement => {
102
101
  const [editing, setEditing] = useState(false);
103
- const [initialValue] = useState(value);
102
+ const [initialValue, setInitialValue] = useState();
104
103
  const description: string | undefined = propsDescription;
104
+ // setInitialValue is called after initial render to handle the case where the value is updated
105
+ useEffect(() => {
106
+ setInitialValue(value);
107
+ // do not update if value changes
108
+ // eslint-disable-next-line react-hooks/exhaustive-deps
109
+ }, []);
105
110
 
106
111
  if (editable && !setValue) {
107
112
  throw new Error("setValue is required if editable is true");
@@ -116,25 +121,24 @@ export const TapToEdit = ({
116
121
  <Field
117
122
  helperText={description}
118
123
  label={title}
119
- placeholder={placeholder}
124
+ type={(fieldProps?.type ?? "text") as NonNullable<FieldProps["type"]>}
120
125
  value={value}
121
- onChange={setValue}
122
- {...fieldProps}
126
+ onChange={setValue ?? (() => {})}
127
+ {...(fieldProps as any)}
123
128
  />
124
129
  )}
125
130
  {editing && !isEditing && (
126
131
  <Box direction="row">
127
132
  <Button
128
- color="blue"
129
- confirmationHeading={confirmationHeading}
130
133
  confirmationText={confirmationText}
131
- inline
134
+ modalTitle={confirmationHeading}
132
135
  text="Save"
133
136
  withConfirmation={withConfirmation}
134
137
  onClick={async (): Promise<void> => {
135
138
  if (!onSave) {
136
139
  console.error("No onSave provided for editable TapToEdit");
137
140
  } else {
141
+ setInitialValue(value);
138
142
  await onSave(value);
139
143
  }
140
144
  setEditing(false);
@@ -142,9 +146,8 @@ export const TapToEdit = ({
142
146
  />
143
147
  <Box marginLeft={2}>
144
148
  <Button
145
- color="red"
146
- inline
147
149
  text="Cancel"
150
+ variant="muted"
148
151
  onClick={(): void => {
149
152
  if (setValue) {
150
153
  setValue(initialValue);
@@ -166,18 +169,18 @@ export const TapToEdit = ({
166
169
  // If no transform, try and display the value reasonably.
167
170
  if (fieldProps?.type === "boolean") {
168
171
  displayValue = value ? "Yes" : "No";
169
- } else if (fieldProps?.type === "percent") {
170
- // Prevent floating point errors from showing up by using parseFloat and precision.
171
- // Pass through parseFloat again to trim off insignificant zeroes.
172
- displayValue = `${parseFloat(parseFloat(String(value * 100)).toPrecision(7))}%`;
173
- } else if (fieldProps?.type === "currency") {
174
- // TODO: support currencies other than USD in Field and related components.
175
- const formatter = new Intl.NumberFormat("en-US", {
176
- style: "currency",
177
- currency: "USD",
178
- minimumFractionDigits: 2, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)
179
- });
180
- displayValue = formatter.format(value);
172
+ // } else if (fieldProps?.type === "percent") {
173
+ // // Prevent floating point errors from showing up by using parseFloat and precision.
174
+ // // Pass through parseFloat again to trim off insignificant zeroes.
175
+ // displayValue = `${parseFloat(parseFloat(String(value * 100)).toPrecision(7))}%`;
176
+ // } else if (fieldProps?.type === "currency") {
177
+ // // TODO: support currencies other than USD in Field and related components.
178
+ // const formatter = new Intl.NumberFormat("en-US", {
179
+ // style: "currency",
180
+ // currency: "USD",
181
+ // minimumFractionDigits: 2, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)
182
+ // });
183
+ // displayValue = formatter.format(value);
181
184
  } else if (fieldProps?.type === "multiselect") {
182
185
  // ???
183
186
  displayValue = value.join(", ");
@@ -189,7 +192,7 @@ export const TapToEdit = ({
189
192
  } catch (error) {
190
193
  // Don't print an error message for empty values.
191
194
  if (value) {
192
- console.debug(`Invalid URL: ${value}`);
195
+ console.debug(`Invalid URL: $value`);
193
196
  }
194
197
  displayValue = value;
195
198
  }
@@ -221,7 +224,7 @@ export const TapToEdit = ({
221
224
  paddingX={3}
222
225
  paddingY={2}
223
226
  width="100%"
224
- {...rowBoxProps}
227
+ {...(rowBoxProps as Exclude<BoxProps, "onClick">)}
225
228
  >
226
229
  <Box direction="row" width="100%">
227
230
  <TapToEditTitle
@@ -231,7 +234,12 @@ export const TapToEdit = ({
231
234
  title={title}
232
235
  />
233
236
  <Box direction="row" flex="grow" justifyContent="end" marginLeft={2}>
234
- <Box justifyContent="start" onClick={isClickable ? openLink : undefined}>
237
+ <Box
238
+ accessibilityHint=""
239
+ accessibilityLabel="Link"
240
+ justifyContent="start"
241
+ onClick={isClickable ? openLink : undefined}
242
+ >
235
243
  {Boolean(fieldProps?.type !== "textarea") && (
236
244
  <Text align="right" underline={isClickable}>
237
245
  {displayValue}
@@ -239,18 +247,38 @@ export const TapToEdit = ({
239
247
  )}
240
248
  </Box>
241
249
  {editable && (
242
- <Box marginLeft={2} width={16} onClick={(): void => setEditing(true)}>
243
- <Icon color="darkGray" name="edit" prefix="far" size="md" />
250
+ <Box
251
+ accessibilityHint=""
252
+ accessibilityLabel="Edit"
253
+ marginLeft={2}
254
+ width={16}
255
+ onClick={(): void => setEditing(true)}
256
+ >
257
+ <Icon iconName="pencil" size="md" />
244
258
  </Box>
245
259
  )}
246
260
  </Box>
247
261
  </Box>
248
262
  {fieldProps?.type === "textarea" && (
249
- <Box marginTop={2} paddingY={2} width="100%">
250
- <Text align="left" underline={isClickable}>
251
- {displayValue}
252
- </Text>
253
- </Box>
263
+ <>
264
+ <Box marginTop={2} paddingY={2} width="100%">
265
+ <Text align="left" underline={isClickable}>
266
+ {displayValue}
267
+ </Text>
268
+ </Box>
269
+ {editable && (
270
+ <Box
271
+ accessibilityHint=""
272
+ accessibilityLabel="Edit"
273
+ alignSelf="end"
274
+ marginLeft={2}
275
+ width={16}
276
+ onClick={(): void => setEditing(true)}
277
+ >
278
+ <Icon color="primary" iconName="pencil" size="md" />
279
+ </Box>
280
+ )}
281
+ </>
254
282
  )}
255
283
  </Box>
256
284
  );
package/src/Text.tsx CHANGED
@@ -1,108 +1,118 @@
1
- import React, {useContext} from "react";
2
- import {Text as NativeText, TextStyle} from "react-native";
1
+ import {
2
+ Nunito_400Regular,
3
+ Nunito_400Regular_Italic,
4
+ Nunito_500Medium,
5
+ Nunito_500Medium_Italic,
6
+ Nunito_700Bold,
7
+ Nunito_700Bold_Italic,
8
+ useFonts,
9
+ } from "@expo-google-fonts/nunito";
10
+ import React from "react";
11
+ import {Platform, Text as NativeText, TextStyle} from "react-native";
3
12
 
4
13
  import {TextProps} from "./Common";
5
14
  import {Hyperlink} from "./Hyperlink";
6
- import {ThemeContext} from "./Theme";
15
+ import {useTheme} from "./Theme";
7
16
 
8
- const fontSizes = {
9
- xs: 10,
10
- sm: 12,
11
- md: 14,
12
- lg: 16,
17
+ const fontSizeAndWeightWeb = {
18
+ sm: {size: 12, weight: "regular"},
19
+ md: {size: 16, weight: "regular"},
20
+ lg: {size: 18, weight: "medium"},
21
+ xl: {size: 20, weight: "medium"},
13
22
  };
14
23
 
24
+ const fontSizeAndWeighMobile = {
25
+ sm: {size: 10, weight: "regular"},
26
+ md: {size: 14, weight: "regular"},
27
+ lg: {size: 16, weight: "medium"},
28
+ xl: {size: 18, weight: "medium"},
29
+ };
30
+
31
+ const fontSizes = Platform.OS === "web" ? fontSizeAndWeightWeb : fontSizeAndWeighMobile;
32
+
15
33
  export const Text = ({
16
34
  align = "left",
35
+ bold,
17
36
  children,
18
37
  color,
19
- inline = false,
20
38
  italic = false,
21
- overflow,
22
39
  size = "md",
23
40
  truncate = false,
24
- font,
25
- onPress,
26
41
  underline,
27
42
  numberOfLines,
28
43
  skipLinking,
29
44
  testID,
30
- weight = "normal",
31
45
  }: TextProps): React.ReactElement => {
32
- const {theme} = useContext(ThemeContext);
46
+ const {theme} = useTheme();
33
47
 
34
- function propsToStyle(): any {
35
- const style: TextStyle = {};
36
- if (overflow) {
37
- console.warn(
38
- "Text overflow is deprecated. Use `truncate` to cut off the text and add ellipse, otherwise breakWord is the default."
39
- );
40
- }
41
- let computedFont = "primary";
42
- if (font === "primary" || !font) {
43
- if (weight === "bold") {
44
- computedFont = "primaryBoldFont";
45
- } else {
46
- computedFont = "primaryFont";
47
- }
48
- } else if (font === "secondary") {
49
- if (weight === "bold") {
50
- computedFont = "secondaryBoldFont";
51
- } else {
52
- computedFont = "secondaryFont";
53
- }
54
- } else if (font === "button") {
55
- computedFont = "buttonFont";
56
- } else if (font === "title") {
57
- computedFont = "titleFont";
58
- } else if (font === "accent") {
59
- if (weight === "bold") {
60
- computedFont = "accentBoldFont";
61
- } else {
62
- computedFont = "accentFont";
63
- }
64
- }
65
- if (weight === "bold") {
66
- style.fontWeight = "bold";
67
- }
48
+ // TODO: make fonts part of theme.
49
+ const [fontsLoaded] = useFonts({
50
+ "text-bold": Nunito_700Bold,
51
+ "text-bold-italic": Nunito_700Bold_Italic,
52
+ "text-medium": Nunito_500Medium,
53
+ "text-medium-italic": Nunito_500Medium_Italic,
54
+ text: Nunito_400Regular,
55
+ "text-regular": Nunito_400Regular,
56
+ "text-regular-italic": Nunito_400Regular_Italic,
57
+ });
68
58
 
69
- style.fontFamily = theme[computedFont as keyof typeof theme];
59
+ // TODO: How should we handle unloaded fonts.
60
+ if (!fontsLoaded) {
61
+ // eslint-disable-next-line react-native/no-raw-text
62
+ return <NativeText />;
63
+ }
70
64
 
71
- style.fontSize = fontSizes[size || "md"];
72
- if (align) {
73
- style.textAlign = align;
74
- }
75
- if (color) {
76
- style.color = theme[color];
77
- } else {
78
- style.color = theme.darkGray;
79
- }
65
+ const style: TextStyle = {};
80
66
 
81
- if (italic) {
82
- style.fontStyle = "italic";
67
+ if (size === "sm" || size === "md") {
68
+ if (bold && italic) {
69
+ style.fontFamily = "text-bold-italic";
70
+ } else if (italic) {
71
+ style.fontFamily = "text-regular-italic";
72
+ } else if (bold) {
73
+ style.fontFamily = "text-bold";
74
+ } else {
75
+ style.fontFamily = "text-regular";
83
76
  }
84
- if (underline) {
85
- style.textDecorationLine = "underline";
77
+ } else {
78
+ if (bold && italic) {
79
+ style.fontFamily = "text-bold-italic";
80
+ } else if (italic) {
81
+ style.fontFamily = "text-medium-italic";
82
+ } else if (bold) {
83
+ style.fontFamily = "text-bold";
84
+ } else {
85
+ style.fontFamily = "text-medium";
86
86
  }
87
- // TODO: might be useful for wrapping/truncating
88
- // if (numberOfLines !== 1 && !inline) {
89
- // style.flexWrap = "wrap";
90
- // }
87
+ }
91
88
 
92
- return style;
89
+ style.fontSize = fontSizes[size].size;
90
+ if (align) {
91
+ style.textAlign = align;
92
+ }
93
+ if (color) {
94
+ style.color = theme.text[color];
95
+ } else {
96
+ style.color = theme.text.primary;
93
97
  }
94
98
 
99
+ if (italic) {
100
+ style.fontStyle = "italic";
101
+ }
102
+ if (underline) {
103
+ style.textDecorationLine = "underline";
104
+ }
95
105
  let lines = 0;
96
106
  if (numberOfLines && truncate && numberOfLines > 1) {
97
107
  console.error(`Cannot truncate Text and have ${numberOfLines} lines`);
98
108
  }
99
109
  if (numberOfLines) {
100
110
  lines = numberOfLines;
101
- } else if (inline || truncate) {
111
+ } else if (truncate) {
102
112
  lines = 1;
103
113
  }
104
114
  const inner = (
105
- <NativeText numberOfLines={lines} style={propsToStyle()} testID={testID} onPress={onPress}>
115
+ <NativeText numberOfLines={lines} style={style} testID={testID}>
106
116
  {children}
107
117
  </NativeText>
108
118
  );
package/src/TextArea.tsx CHANGED
@@ -3,6 +3,6 @@ import React from "react";
3
3
  import {TextAreaProps} from "./Common";
4
4
  import {TextField} from "./TextField";
5
5
 
6
- export const TextArea = ({height, ...rest}: TextAreaProps): React.ReactElement => {
7
- return <TextField {...rest} height={height ?? 100} multiline />;
6
+ export const TextArea = (props: TextAreaProps): React.ReactElement => {
7
+ return <TextField {...props} multiline type="text" />;
8
8
  };