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/Field.tsx CHANGED
@@ -1,358 +1,96 @@
1
- import React from "react";
1
+ import React, {FC} from "react";
2
2
 
3
- import {Box} from "./Box";
4
- import {CheckBox} from "./CheckBox";
5
- import {AddressInterface, FieldProps, ReactChildren, TextFieldType} from "./Common";
6
- import {USSTATESLIST} from "./Constants";
7
- import {CustomSelect} from "./CustomSelect";
8
- import {FieldWithLabels} from "./FieldWithLabels";
9
- import {SelectList} from "./SelectList";
3
+ import {AddressField} from "./AddressField";
4
+ import {BooleanField} from "./BooleanField";
5
+ import {
6
+ AddressFieldProps,
7
+ BooleanFieldProps,
8
+ CustomSelectFieldProps,
9
+ DateTimeFieldProps,
10
+ EmailFieldProps,
11
+ FieldProps,
12
+ MultiselectFieldProps,
13
+ NumberFieldProps,
14
+ PhoneNumberFieldProps,
15
+ SelectFieldProps,
16
+ SignatureFieldProps,
17
+ TextAreaProps,
18
+ TextFieldProps,
19
+ TextFieldType,
20
+ } from "./Common";
21
+ import {CustomSelectField} from "./CustomSelectField";
22
+ import {DateTimeField} from "./DateTimeField";
23
+ import {EmailField} from "./EmailField";
24
+ import {MultiselectField} from "./MultiselectField";
25
+ import {NumberField} from "./NumberField";
26
+ import {PhoneNumberField} from "./PhoneNumberField";
27
+ import {SelectField} from "./SelectField";
10
28
  import {Signature} from "./Signature";
11
- import {Switch} from "./Switch";
12
- import {Text} from "./Text";
13
29
  import {TextArea} from "./TextArea";
14
30
  import {TextField} from "./TextField";
15
- import {UnifiedAddressAutoCompleteField} from "./UnifiedAddressAutoComplete";
16
31
 
17
- export const Field = ({
18
- name,
19
- label,
20
- labelColor,
21
- height,
22
- type,
23
- rows,
24
- value,
25
- onChange,
26
- onBlur,
27
- onStart,
28
- onEnd,
29
- options,
30
- placeholder,
31
- disabled,
32
- errorMessage,
33
- errorMessageColor,
34
- helperText,
35
- helperTextColor,
36
- includeCounty = false,
37
- googleMapsApiKey,
38
- googlePlacesMobileStyles,
39
- testID,
40
- transformValue,
41
- }: FieldProps) => {
42
- const handleAddressChange = (field: string, newValue: string) => {
43
- onChange({...value, [field]: newValue});
44
- onBlur && onBlur({...value, [field]: newValue});
45
- };
46
-
47
- const handleAutoCompleteChange = (newValue: AddressInterface) => {
48
- onChange({...value, ...newValue});
49
- };
50
-
51
- const handleSwitchChange = (switchValue: boolean) => {
52
- onChange(switchValue);
53
- onBlur && onBlur(switchValue);
54
- };
55
-
56
- const renderField = (): ReactChildren => {
57
- if (type === "select") {
58
- if (!options) {
59
- console.error("Field with type=select require options");
60
- return undefined;
61
- }
62
- return (
63
- <SelectList
64
- disabled={disabled}
65
- id={name}
66
- options={options}
67
- placeholder={placeholder}
68
- testID={testID}
69
- value={value}
70
- onChange={(result) => {
71
- onChange(result);
72
- onBlur && onBlur(result);
73
- }}
74
- />
75
- );
76
- } else if (type === "multiselect") {
77
- if (options === undefined) {
78
- console.error("Field with type=multiselect require options");
79
- return undefined;
80
- }
81
- return (
82
- <Box width="100%">
83
- {options.map((o) => (
84
- <Box
85
- key={o.label + o.value}
86
- alignItems="center"
87
- direction="row"
88
- justifyContent="between"
89
- width="100%"
90
- >
91
- <Box flex="shrink" marginRight={2}>
92
- <Text weight="bold">{o.label}</Text>
93
- </Box>
94
- <Box>
95
- <CheckBox
96
- key={o.label + o.value}
97
- checked={(value ?? []).includes(o.value)}
98
- disabled={disabled}
99
- name={name}
100
- size="sm"
101
- testID={`${testID}-${o.value}`}
102
- onChange={(result) => {
103
- let newValue;
104
- if (result.value) {
105
- if (value.includes(o.value)) {
106
- console.warn(`Tried to add value that already exists: ${o.value}`);
107
- return;
108
- }
109
- newValue = [...value, o.value];
110
- } else {
111
- newValue = value.filter((v: string) => v !== o.value);
112
- }
113
- onChange(newValue);
114
- onBlur && onBlur(newValue);
115
- }}
116
- />
117
- </Box>
118
- </Box>
119
- ))}
120
- </Box>
121
- );
122
- } else if (type === "textarea") {
123
- return (
124
- <TextArea
125
- disabled={disabled}
126
- height={height ?? 100}
127
- id={name}
128
- placeholder={Boolean(value) ? "" : placeholder}
129
- rows={rows}
130
- testID={testID}
131
- value={String(value)}
132
- onBlur={onBlur}
133
- onChange={(result) => onChange(result.value)}
134
- />
135
- );
136
- } else if (type === "boolean") {
137
- return (
138
- <Switch
139
- disabled={disabled}
140
- id={name}
141
- name={name}
142
- switched={Boolean(value)}
143
- testID={testID}
144
- onChange={(result) => {
145
- handleSwitchChange(result);
146
- }}
147
- />
148
- );
149
- } else if (type && ["date", "time", "datetime"].includes(type)) {
150
- return (
151
- <TextField
152
- disabled={disabled}
153
- id={name}
154
- placeholder={placeholder}
155
- testID={testID}
156
- transformValue={transformValue}
157
- type={type as "date" | "time" | "datetime"}
158
- value={value}
159
- onBlur={(result) => {
160
- onBlur && onBlur(result.value);
161
- }}
162
- onChange={(result) => onChange(result.value)}
163
- />
164
- );
165
- } else if (type === "address") {
166
- const addressValue = value ? value : {};
167
- const {
168
- address1 = "",
169
- address2 = "",
170
- city = "",
171
- state = "",
172
- zipcode = "",
173
- countyName = "",
174
- countyCode = "",
175
- }: AddressInterface = addressValue;
176
- return (
177
- <>
178
- <UnifiedAddressAutoCompleteField
179
- disabled={disabled}
180
- googleMapsApiKey={googleMapsApiKey}
181
- googlePlacesMobileStyles={googlePlacesMobileStyles}
182
- handleAddressChange={(result) => handleAddressChange("address1", result.value)}
183
- handleAutoCompleteChange={(result) => handleAutoCompleteChange(result)}
184
- includeCounty={includeCounty}
185
- inputValue={address1}
186
- testID={`${testID}-address1`}
187
- />
188
- <TextField
189
- disabled={disabled}
190
- id="address2"
191
- label="Apt, suite, etc"
192
- testID={`${testID}-address2`}
193
- type="text"
194
- value={address2}
195
- onChange={(result) => handleAddressChange("address2", result.value)}
196
- />
197
- <TextField
198
- disabled={disabled}
199
- id="city"
200
- label="City"
201
- testID={`${testID}-city`}
202
- type="text"
203
- value={city}
204
- onChange={(result) => handleAddressChange("city", result.value)}
205
- />
206
- <SelectList
207
- disabled={disabled}
208
- id="state"
209
- label="State"
210
- options={USSTATESLIST}
211
- placeholder="Select state"
212
- style={{borderRadius: 16}}
213
- testID={`${testID}-state`}
214
- value={state}
215
- onChange={(result) => {
216
- handleAddressChange("state", result!);
217
- }}
218
- />
219
- <TextField
220
- disabled={disabled}
221
- id="zipcode"
222
- label="Zipcode"
223
- testID={`${testID}-zip`}
224
- type="text"
225
- value={zipcode}
226
- onChange={(result) => handleAddressChange("zipcode", result.value)}
227
- />
228
- {includeCounty && (
229
- <>
230
- <TextField
231
- disabled={disabled}
232
- id="countyName"
233
- label="County Name"
234
- testID={`${testID}-county`}
235
- type="text"
236
- value={countyName}
237
- onChange={(result) => handleAddressChange("countyName", result.value)}
238
- />
239
- <TextField
240
- disabled={disabled}
241
- id="countyCode"
242
- label="County Code"
243
- testID={`${testID}-county-code`}
244
- type="number"
245
- value={countyCode}
246
- onChange={(result) => handleAddressChange("countyCode", result.value)}
247
- />
248
- </>
249
- )}
250
- </>
251
- );
252
- } else if (type === "customSelect") {
253
- if (!options) {
254
- console.error("Field with type=customSelect require options");
255
- return null;
256
- }
257
- return (
258
- <CustomSelect
259
- disabled={disabled}
260
- options={options}
261
- placeholder={placeholder}
262
- value={value}
263
- onChange={(val) => {
264
- onChange(val);
265
- onBlur && onBlur(val);
266
- }}
267
- />
268
- );
269
- } else if (type === "number") {
270
- return (
271
- <TextField
272
- disabled={disabled}
273
- id={name}
274
- placeholder={placeholder}
275
- testID={testID}
276
- type="number"
277
- value={value}
278
- onBlur={(result) => {
279
- onBlur && onBlur(result.value);
280
- }}
281
- onChange={(result) => {
282
- onChange(result.value);
283
- }}
284
- />
285
- );
286
- } else if (type === "signature") {
287
- return <Signature onChange={onChange} onEnd={onEnd} onStart={onStart} />;
288
- } else {
289
- let tfType: TextFieldType = "text";
290
- let tfValue: string = value;
291
- // Number is supported differently because we need fractional numbers and they don't work
292
- // well on iOS.
293
- if (
294
- type &&
295
- ["date", "time", "datetime", "email", "phoneNumber", "password", "url"].includes(type)
296
- ) {
297
- tfType = type as TextFieldType;
298
- } else if (type === "percent" || type === "currency") {
299
- tfType = "text";
300
- }
301
- let autoComplete: "on" | "current-password" | "username" = "on";
32
+ // TODO: put onblur back in any fields that need it
33
+ export const Field: FC<FieldProps> = ({type, ...rest}) => {
34
+ if (type === "select") {
35
+ return (
36
+ <SelectField
37
+ {...(rest as SelectFieldProps)}
38
+ // onChange={(result) => {
39
+ // rest.onChange?.(result);
40
+ // rest.onBlur?.(result);
41
+ // }}
42
+ />
43
+ );
44
+ } else if (type === "multiselect") {
45
+ return <MultiselectField {...(rest as MultiselectFieldProps)} />;
46
+ } else if (type === "textarea") {
47
+ return <TextArea {...(rest as TextAreaProps)} />;
48
+ } else if (type === "boolean") {
49
+ return <BooleanField {...(rest as BooleanFieldProps)} />;
50
+ } else if (type && ["date", "time", "datetime"].includes(type)) {
51
+ return <DateTimeField {...(rest as DateTimeFieldProps)} />;
52
+ } else if (type === "address") {
53
+ return <AddressField {...(rest as AddressFieldProps)} />;
54
+ } else if (type === "customSelect") {
55
+ return (
56
+ <CustomSelectField
57
+ {...(rest as CustomSelectFieldProps)}
58
+ // onChange={(result) => {
59
+ // rest.onChange(result);
60
+ // rest.onBlur && rest.onBlur(result);
61
+ // }}
62
+ />
63
+ );
64
+ } else if (type === "number") {
65
+ return <NumberField {...(rest as NumberFieldProps)} />;
66
+ } else if (type === "signature") {
67
+ return <Signature {...(rest as SignatureFieldProps)} />;
68
+ } else if (type === "email") {
69
+ return <EmailField {...(rest as EmailFieldProps)} />;
70
+ } else if (type === "phoneNumber") {
71
+ return <PhoneNumberField {...(rest as PhoneNumberFieldProps)} />;
72
+ } else {
73
+ let tfType: TextFieldType = "text";
74
+ let autoComplete: "on" | "current-password" | "username" = "on";
75
+ if (type && ["password", "url"].includes(type)) {
76
+ tfType = type as TextFieldType;
77
+ // } else if (type === "percent" || type === "currency") {
78
+ // TODO: Implement percent and currency fields
79
+ // tfType = "text";
80
+ // }
302
81
  if (tfType === "password") {
303
82
  autoComplete = "current-password";
304
83
  } else if (tfType === "email") {
305
84
  autoComplete = "username";
306
85
  }
307
- if (type === "percent") {
308
- tfValue = `${Number(value).toFixed(0)}%`;
309
- } else if (type === "currency") {
310
- tfValue = `$${Number(value).toFixed(2)}`;
311
- }
312
- return (
313
- <TextField
314
- autoComplete={autoComplete}
315
- disabled={disabled}
316
- id={name}
317
- placeholder={placeholder}
318
- testID={testID}
319
- type={
320
- tfType as
321
- | "date"
322
- | "datetime"
323
- | "email"
324
- | "number"
325
- | "password"
326
- | "phoneNumber"
327
- | "text"
328
- | "time"
329
- | "url"
330
- }
331
- value={tfValue}
332
- onBlur={(result) => {
333
- onBlur && onBlur(result.value);
334
- }}
335
- onChange={(result) => onChange(result.value)}
336
- />
337
- );
338
86
  }
339
- };
340
87
 
341
- const children = renderField();
342
- return (
343
- <Box marginBottom={5}>
344
- <FieldWithLabels
345
- {...{
346
- errorMessage,
347
- errorMessageColor,
348
- helperText,
349
- helperTextColor,
350
- label,
351
- labelColor,
352
- }}
353
- >
354
- {children}
355
- </FieldWithLabels>
356
- </Box>
357
- );
88
+ return (
89
+ <TextField
90
+ autoComplete={autoComplete}
91
+ type={tfType as "email" | "password" | "phoneNumber" | "text" | "url"}
92
+ {...(rest as TextFieldProps)}
93
+ />
94
+ );
95
+ }
358
96
  };
package/src/Heading.tsx CHANGED
@@ -1,37 +1,65 @@
1
- import React, {useContext} from "react";
2
- import {StyleProp, Text as NativeText, TextStyle} from "react-native";
1
+ import {
2
+ TitilliumWeb_600SemiBold,
3
+ TitilliumWeb_700Bold,
4
+ useFonts,
5
+ } from "@expo-google-fonts/titillium-web";
6
+ import React from "react";
7
+ import {Platform, StyleProp, Text as NativeText, TextStyle} from "react-native";
3
8
 
4
9
  import {HeadingProps} from "./Common";
5
- import {ThemeContext} from "./Theme";
10
+ import {useTheme} from "./Theme";
6
11
 
7
- const fontSizes = {
8
- sm: 20,
9
- md: 28,
10
- lg: 36,
12
+ const fontSizeAndWeightWeb = {
13
+ sm: {size: 16, weight: "semibold"},
14
+ md: {size: 18, weight: "bold"},
15
+ lg: {size: 24, weight: "bold"},
16
+ xl: {size: 32, weight: "bold"},
11
17
  };
12
18
 
19
+ const fontSizeAndWeighMobile = {
20
+ sm: {size: 14, weight: "semibold"},
21
+ md: {size: 16, weight: "bold"},
22
+ lg: {size: 20, weight: "bold"},
23
+ xl: {size: 28, weight: "bold"},
24
+ };
25
+
26
+ const fontSizes = Platform.OS === "web" ? fontSizeAndWeightWeb : fontSizeAndWeighMobile;
27
+
13
28
  export const Heading = ({
14
29
  align,
15
30
  children,
16
- color,
31
+ color = "primary",
17
32
  size,
18
33
  testID,
19
34
  }: HeadingProps): React.ReactElement => {
20
- const {theme} = useContext(ThemeContext);
35
+ const {theme} = useTheme();
36
+
37
+ // TODO: make fonts part of theme.
38
+ const [fontsLoaded] = useFonts({
39
+ heading: TitilliumWeb_600SemiBold,
40
+ "heading-bold": TitilliumWeb_700Bold,
41
+ "heading-semibold": TitilliumWeb_600SemiBold,
42
+ });
43
+
44
+ // TODO: How should we handle unloaded fonts.
45
+ if (!fontsLoaded) {
46
+ // eslint-disable-next-line react-native/no-raw-text
47
+ return <NativeText>Loading fonts...</NativeText>;
48
+ }
21
49
 
22
50
  const style: StyleProp<TextStyle> = {};
23
51
 
24
- style.fontFamily = theme.titleFont;
52
+ if (size === "sm") {
53
+ style.fontFamily = "heading-semibold";
54
+ } else {
55
+ style.fontFamily = "heading-bold";
56
+ }
25
57
 
26
- style.fontSize = fontSizes[size || "md"];
58
+ style.fontSize = fontSizes[size || "md"].size;
27
59
  if (align) {
28
60
  style.textAlign = align;
29
61
  }
30
- style.color = theme[color ?? "darkGray"];
31
- // TODO: might be useful for wrapping/truncating
32
- // if (numberOfLines !== 1 && !inline) {
33
- // style.flexWrap = "wrap";
34
- // }
62
+ style.color = theme.text[color];
35
63
 
36
64
  const lines = 0;
37
65
  return (
@@ -33,10 +33,7 @@ export class HeightActionSheet extends React.Component<
33
33
  <Box alignItems="end" display="flex" width="100%">
34
34
  <Box width="33%">
35
35
  <Button
36
- color="blue"
37
- size="lg"
38
36
  text="Close"
39
- type="ghost"
40
37
  onClick={() => {
41
38
  this.props.actionSheetRef?.current?.setModalVisible(false);
42
39
  }}
@@ -56,9 +53,7 @@ export class HeightActionSheet extends React.Component<
56
53
  }}
57
54
  onValueChange={(feet) => {
58
55
  this.setState({feet: String(feet)});
59
- this.props.onChange({
60
- value: String(Number(feet) * 12 + Number(this.state.inches)),
61
- });
56
+ this.props.onChange(String(Number(feet) * 12 + Number(this.state.inches)));
62
57
  }}
63
58
  >
64
59
  {range(4, 8).map((n) => {
@@ -79,9 +74,7 @@ export class HeightActionSheet extends React.Component<
79
74
  }}
80
75
  onValueChange={(inches) => {
81
76
  this.setState({inches: String(inches)});
82
- this.props.onChange({
83
- value: String(Number(this.state.feet) * 12 + Number(inches)),
84
- });
77
+ this.props.onChange(String(Number(this.state.feet) * 12 + Number(inches)));
85
78
  }}
86
79
  >
87
80
  {range(0, 12).map((n) => {
package/src/Hyperlink.tsx CHANGED
@@ -27,6 +27,13 @@
27
27
  * SOFTWARE.
28
28
  * */
29
29
 
30
+ /**
31
+ * Hyperlink is used to wrap text that should be clickable.
32
+ * It will automatically detect URLs and open them in the browser. For example,
33
+ * this is great for wrapping text in a chat app so any link in a chat message is clickable.
34
+ * This is different than <Link> which is meant for specifically linking to a URL.
35
+ */
36
+
30
37
  import * as mdurl from "mdurl";
31
38
  import React from "react";
32
39
  import {Linking, Platform, Text, View} from "react-native";
@@ -37,7 +44,7 @@ const linkifyLib = require("linkify-it")();
37
44
 
38
45
  const {OS} = Platform;
39
46
 
40
- // Leaving this as a class component because it was easier to handle the `pasrse(this)` in
47
+ // Leaving this as a class component because it was easier to handle the `parse(this)` in
41
48
  // `render()`
42
49
  class HyperlinkComponent extends React.Component<HyperlinkProps> {
43
50
  isTextNested = (component: any) => {
package/src/Icon.tsx CHANGED
@@ -1,27 +1,35 @@
1
- import {FontAwesome5} from "@expo/vector-icons";
2
- import React, {useContext} from "react";
1
+ import FontAwesome6 from "@expo/vector-icons/FontAwesome6";
2
+ import React from "react";
3
3
 
4
4
  import {IconProps, iconSizeToNumber} from "./Common";
5
- import {ThemeContext} from "./Theme";
6
-
7
- export function initIcons() {
8
- console.debug("Initializing icons");
9
- }
5
+ import {useTheme} from "./Theme";
10
6
 
11
7
  // TODO: Update <Icon /> to be closer to Expo's Vector Icon, letting multiple icon packs be used,
12
8
  // etc.
13
- export const Icon = ({color, size, name, prefix, testID}: IconProps): React.ReactElement => {
14
- const {theme} = useContext(ThemeContext);
15
- const iconColor = theme[color || "primary"];
9
+ // TODO: Add documentation for adding FA6-Pro icons.
10
+ export const Icon = ({
11
+ color = "primary",
12
+ size = "md",
13
+ iconName,
14
+ type = "solid",
15
+ testID,
16
+ }: IconProps): React.ReactElement => {
17
+ const {theme} = useTheme();
18
+ const iconColor = theme.text[color];
16
19
  const iconSize = iconSizeToNumber(size);
17
20
  return (
18
- <FontAwesome5
21
+ <FontAwesome6
22
+ brand={type === "brand"}
19
23
  color={iconColor}
20
- name={name}
21
- regular={prefix === "far"}
24
+ duotone={type === "duotone"}
25
+ light={type === "light" || type === "sharpLight"}
26
+ name={iconName}
27
+ regular={type === "regular"}
28
+ sharp={type === "sharp"}
22
29
  size={iconSize}
23
- solid={!prefix || prefix === "fas"}
30
+ solid={type === "solid" || type === "sharpSolid"}
24
31
  testID={testID}
32
+ thin={type === "thin"}
25
33
  />
26
34
  );
27
35
  };