ferns-ui 0.36.4 → 0.36.5

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 (77) hide show
  1. package/package.json +3 -4
  2. package/src/ActionSheet.tsx +1231 -0
  3. package/src/Avatar.tsx +317 -0
  4. package/src/Badge.tsx +65 -0
  5. package/src/Banner.tsx +124 -0
  6. package/src/BlurBox.native.tsx +40 -0
  7. package/src/BlurBox.tsx +31 -0
  8. package/src/Body.tsx +32 -0
  9. package/src/Box.tsx +308 -0
  10. package/src/Button.tsx +219 -0
  11. package/src/Card.tsx +23 -0
  12. package/src/CheckBox.tsx +118 -0
  13. package/src/Common.ts +2743 -0
  14. package/src/Constants.ts +53 -0
  15. package/src/CustomSelect.tsx +85 -0
  16. package/src/DateTimeActionSheet.tsx +409 -0
  17. package/src/DateTimeField.android.tsx +101 -0
  18. package/src/DateTimeField.ios.tsx +83 -0
  19. package/src/DateTimeField.tsx +69 -0
  20. package/src/DecimalRangeActionSheet.tsx +113 -0
  21. package/src/ErrorBoundary.tsx +37 -0
  22. package/src/ErrorPage.tsx +44 -0
  23. package/src/FernsProvider.tsx +21 -0
  24. package/src/Field.tsx +299 -0
  25. package/src/FieldWithLabels.tsx +36 -0
  26. package/src/FlatList.tsx +2 -0
  27. package/src/Form.tsx +182 -0
  28. package/src/HeaderButtons.tsx +107 -0
  29. package/src/Heading.tsx +53 -0
  30. package/src/HeightActionSheet.tsx +104 -0
  31. package/src/Hyperlink.tsx +181 -0
  32. package/src/Icon.tsx +24 -0
  33. package/src/IconButton.tsx +165 -0
  34. package/src/Image.tsx +50 -0
  35. package/src/ImageBackground.tsx +14 -0
  36. package/src/InfoTooltipButton.tsx +23 -0
  37. package/src/Layer.tsx +17 -0
  38. package/src/Link.tsx +17 -0
  39. package/src/Mask.tsx +21 -0
  40. package/src/MediaQuery.ts +46 -0
  41. package/src/Meta.tsx +9 -0
  42. package/src/Modal.tsx +248 -0
  43. package/src/ModalSheet.tsx +58 -0
  44. package/src/NumberPickerActionSheet.tsx +66 -0
  45. package/src/Page.tsx +133 -0
  46. package/src/Permissions.ts +44 -0
  47. package/src/PickerSelect.tsx +553 -0
  48. package/src/Pill.tsx +24 -0
  49. package/src/Pog.tsx +87 -0
  50. package/src/ProgressBar.tsx +55 -0
  51. package/src/ScrollView.tsx +2 -0
  52. package/src/SegmentedControl.tsx +102 -0
  53. package/src/SelectList.tsx +89 -0
  54. package/src/SideDrawer.tsx +62 -0
  55. package/src/Spinner.tsx +20 -0
  56. package/src/SplitPage.native.tsx +160 -0
  57. package/src/SplitPage.tsx +302 -0
  58. package/src/Switch.tsx +19 -0
  59. package/src/Table.tsx +87 -0
  60. package/src/TableHeader.tsx +36 -0
  61. package/src/TableHeaderCell.tsx +76 -0
  62. package/src/TableRow.tsx +87 -0
  63. package/src/TapToEdit.tsx +221 -0
  64. package/src/Text.tsx +131 -0
  65. package/src/TextArea.tsx +16 -0
  66. package/src/TextField.tsx +401 -0
  67. package/src/TextFieldNumberActionSheet.tsx +61 -0
  68. package/src/Toast.tsx +106 -0
  69. package/src/Tooltip.tsx +269 -0
  70. package/src/UnifiedScreens.ts +24 -0
  71. package/src/Unifier.ts +371 -0
  72. package/src/Utilities.tsx +159 -0
  73. package/src/WithLabel.tsx +57 -0
  74. package/src/dayjsExtended.ts +10 -0
  75. package/src/index.tsx +1346 -0
  76. package/src/polyfill.d.ts +11 -0
  77. package/src/tableContext.tsx +80 -0
package/src/Common.ts ADDED
@@ -0,0 +1,2743 @@
1
+ import React, {ReactElement, ReactNode, SyntheticEvent} from "react";
2
+ import {ListRenderItemInfo} from "react-native";
3
+
4
+ export interface BaseProfile {
5
+ email: string;
6
+ id: string;
7
+ backOffice: {
8
+ testUser?: boolean;
9
+ };
10
+ }
11
+
12
+ export interface TrackingConfig {
13
+ MIXPANEL_TOKEN: string;
14
+ SENTRY_WEB_DSN: string;
15
+ SENTRY_MOBILE_DSN: string;
16
+ USER_PROPERTY_KEYS: string[];
17
+ }
18
+
19
+ export interface IConfig extends TrackingConfig {
20
+ FEEDBACK_URL: string;
21
+ PRIVACY_POLICY_URL: string;
22
+ // The collection name to store profiles in for Firebase/redux.
23
+ PROFILE_COLLECTION: string;
24
+ TERMS_URL: string;
25
+ BASE_URL: string;
26
+ PRODUCTION: boolean;
27
+
28
+ // Useful for generating:
29
+ // http://paletton.com/#uid=72Q0u0kw0u8khBrpJx0z7nUEPiG
30
+ primaryLighterColor: string;
31
+ primaryLightColor: string;
32
+ primaryColor: string;
33
+ primaryDarkColor: string;
34
+ primaryDarkerColor: string;
35
+
36
+ secondaryLighterColor: string;
37
+ secondaryLightColor: string;
38
+ secondaryColor: string;
39
+ secondaryDarkColor: string;
40
+ secondaryDarkerColor: string;
41
+
42
+ accentLighterColor: string;
43
+ accentLightColor: string;
44
+ accentColor: string;
45
+ accentDarkColor: string;
46
+ accentDarkerColor: string;
47
+
48
+ tertiaryLighterColor: string;
49
+ tertiaryLightColor: string;
50
+ tertiaryColor: string;
51
+ tertiaryDarkColor: string;
52
+ tertiaryDarkerColor: string;
53
+
54
+ // firebaseConfig: any;
55
+
56
+ neutral900: string;
57
+ neutral800: string;
58
+ neutral700: string;
59
+ neutral600: string;
60
+ neutral500: string;
61
+ neutral400: string;
62
+ neutral300: string;
63
+ neutral200: string;
64
+ neutral100: string;
65
+ neutral90: string;
66
+ neutral80: string;
67
+ neutral70: string;
68
+ neutral60: string;
69
+ neutral50: string;
70
+ neutral40: string;
71
+ neutral30: string;
72
+ neutral20: string;
73
+ neutral10: string;
74
+ }
75
+
76
+ // For using a theme.
77
+ export interface UnifiedTheme {
78
+ // TODO: make these configurable.
79
+ blue: string;
80
+ darkGray: string;
81
+ eggplant: string;
82
+ gray: string;
83
+ green: string;
84
+ springGreen: string;
85
+ lightGray: string;
86
+ maroon: string;
87
+ midnight: string;
88
+ navy: string;
89
+ olive: string;
90
+ orange: string;
91
+ orchid: string;
92
+ pine: string;
93
+ purple: string;
94
+ red: string;
95
+ watermelon: string;
96
+ white: string;
97
+ black: string;
98
+
99
+ primaryLighter: string;
100
+ primaryLight: string;
101
+ primary: string;
102
+ primaryDark: string;
103
+ primaryDarker: string;
104
+
105
+ secondaryLighter: string;
106
+ secondaryLight: string;
107
+ secondary: string;
108
+ secondaryDark: string;
109
+ secondaryDarker: string;
110
+
111
+ accentLighter: string;
112
+ accentLight: string;
113
+ accent: string;
114
+ accentDark: string;
115
+ accentDarker: string;
116
+
117
+ tertiaryLighter: string;
118
+ tertiaryLight: string;
119
+ tertiary: string;
120
+ tertiaryDark: string;
121
+ tertiaryDarker: string;
122
+
123
+ neutral900: string;
124
+ neutral800: string;
125
+ neutral700: string;
126
+ neutral600: string;
127
+ neutral500: string;
128
+ neutral400: string;
129
+ neutral300: string;
130
+ neutral200: string;
131
+ neutral100: string;
132
+ neutral90: string;
133
+ neutral80: string;
134
+ neutral70: string;
135
+ neutral60: string;
136
+ neutral50: string;
137
+ neutral40: string;
138
+ neutral30: string;
139
+ neutral20: string;
140
+ neutral10: string;
141
+
142
+ primaryFont: string;
143
+ primaryBoldFont: string;
144
+ secondaryFont: string;
145
+ secondaryBoldFont: string;
146
+ buttonFont: string;
147
+ accentFont: string;
148
+ accentBoldFont: string;
149
+ titleFont: string;
150
+ }
151
+
152
+ export type Font =
153
+ | "primary"
154
+ | "primaryBold"
155
+ | "secondary"
156
+ | "secondaryBold"
157
+ | "accent"
158
+ | "accentBold"
159
+ | "title"
160
+ | "button";
161
+
162
+ // type Sizes = "small" | "xsmall" | "sm" | "small" | "medium" | "lg" | "large";
163
+
164
+ export type Direction = "up" | "right" | "down" | "left";
165
+ export type Color =
166
+ | "blue"
167
+ | "darkGray"
168
+ | "eggplant"
169
+ | "gray"
170
+ | "green"
171
+ | "springGreen"
172
+ | "lightGray"
173
+ | "maroon"
174
+ | "midnight"
175
+ | "navy"
176
+ | "olive"
177
+ | "orange"
178
+ | "orchid"
179
+ | "pine"
180
+ | "purple"
181
+ | "red"
182
+ | "watermelon"
183
+ | "white"
184
+ | "black";
185
+ export type ThemeColor =
186
+ | "primaryLighter"
187
+ | "primaryLight"
188
+ | "primary"
189
+ | "primaryDark"
190
+ | "primaryDarker"
191
+ | "secondaryLighter"
192
+ | "secondaryLight"
193
+ | "secondary"
194
+ | "secondaryDark"
195
+ | "secondaryDarker"
196
+ | "tertiaryLighter"
197
+ | "tertiaryLight"
198
+ | "tertiary"
199
+ | "tertiaryDark"
200
+ | "tertiaryDarker"
201
+ | "accentLighter"
202
+ | "accentLight"
203
+ | "accent"
204
+ | "accentDark"
205
+ | "accentDarker";
206
+ export type NeutralColor =
207
+ | "neutral900"
208
+ | "neutral800"
209
+ | "neutral700"
210
+ | "neutral600"
211
+ | "neutral500"
212
+ | "neutral400"
213
+ | "neutral300"
214
+ | "neutral200"
215
+ | "neutral100"
216
+ | "neutral90"
217
+ | "neutral80"
218
+ | "neutral70"
219
+ | "neutral60"
220
+ | "neutral50"
221
+ | "neutral40"
222
+ | "neutral30"
223
+ | "neutral20"
224
+ | "neutral10";
225
+ export type AllColors = Color | ThemeColor | NeutralColor;
226
+
227
+ export interface OnChangeResult {
228
+ event?: SyntheticEvent<any>;
229
+ value: string;
230
+ }
231
+ export type OnChangeCallback = (result: OnChangeResult) => void;
232
+
233
+ // Update if we start supporting more icon packs from Expo Icons.
234
+ export type IconName = FontAwesome5IconName;
235
+
236
+ export type FontAwesome5IconName =
237
+ | "500px"
238
+ | "accessible-icon"
239
+ | "accusoft"
240
+ | "acquisitions-incorporated"
241
+ | "ad"
242
+ | "address-book"
243
+ | "address-card"
244
+ | "adjust"
245
+ | "adn"
246
+ | "adversal"
247
+ | "affiliatetheme"
248
+ | "air-freshener"
249
+ | "airbnb"
250
+ | "algolia"
251
+ | "align-center"
252
+ | "align-justify"
253
+ | "align-left"
254
+ | "align-right"
255
+ | "alipay"
256
+ | "allergies"
257
+ | "amazon"
258
+ | "amazon-pay"
259
+ | "ambulance"
260
+ | "american-sign-language-interpreting"
261
+ | "amilia"
262
+ | "anchor"
263
+ | "android"
264
+ | "angellist"
265
+ | "angle-double-down"
266
+ | "angle-double-left"
267
+ | "angle-double-right"
268
+ | "angle-double-up"
269
+ | "angle-down"
270
+ | "angle-left"
271
+ | "angle-right"
272
+ | "angle-up"
273
+ | "angry"
274
+ | "angrycreative"
275
+ | "angular"
276
+ | "ankh"
277
+ | "app-store"
278
+ | "app-store-ios"
279
+ | "apper"
280
+ | "apple"
281
+ | "apple-alt"
282
+ | "apple-pay"
283
+ | "archive"
284
+ | "archway"
285
+ | "arrow-alt-circle-down"
286
+ | "arrow-alt-circle-left"
287
+ | "arrow-alt-circle-right"
288
+ | "arrow-alt-circle-up"
289
+ | "arrow-circle-down"
290
+ | "arrow-circle-left"
291
+ | "arrow-circle-right"
292
+ | "arrow-circle-up"
293
+ | "arrow-down"
294
+ | "arrow-left"
295
+ | "arrow-right"
296
+ | "arrow-up"
297
+ | "arrows-alt"
298
+ | "arrows-alt-h"
299
+ | "arrows-alt-v"
300
+ | "artstation"
301
+ | "assistive-listening-systems"
302
+ | "asterisk"
303
+ | "asymmetrik"
304
+ | "at"
305
+ | "atlas"
306
+ | "atlassian"
307
+ | "atom"
308
+ | "audible"
309
+ | "audio-description"
310
+ | "autoprefixer"
311
+ | "avianex"
312
+ | "aviato"
313
+ | "award"
314
+ | "aws"
315
+ | "baby"
316
+ | "baby-carriage"
317
+ | "backspace"
318
+ | "backward"
319
+ | "bacon"
320
+ | "bacteria"
321
+ | "bacterium"
322
+ | "bahai"
323
+ | "balance-scale"
324
+ | "balance-scale-left"
325
+ | "balance-scale-right"
326
+ | "ban"
327
+ | "band-aid"
328
+ | "bandcamp"
329
+ | "barcode"
330
+ | "bars"
331
+ | "baseball-ball"
332
+ | "basketball-ball"
333
+ | "bath"
334
+ | "battery-empty"
335
+ | "battery-full"
336
+ | "battery-half"
337
+ | "battery-quarter"
338
+ | "battery-three-quarters"
339
+ | "battle-net"
340
+ | "bed"
341
+ | "beer"
342
+ | "behance"
343
+ | "behance-square"
344
+ | "bell"
345
+ | "bell-slash"
346
+ | "bezier-curve"
347
+ | "bible"
348
+ | "bicycle"
349
+ | "biking"
350
+ | "bimobject"
351
+ | "binoculars"
352
+ | "biohazard"
353
+ | "birthday-cake"
354
+ | "bitbucket"
355
+ | "bitcoin"
356
+ | "bity"
357
+ | "black-tie"
358
+ | "blackberry"
359
+ | "blender"
360
+ | "blender-phone"
361
+ | "blind"
362
+ | "blog"
363
+ | "blogger"
364
+ | "blogger-b"
365
+ | "bluetooth"
366
+ | "bluetooth-b"
367
+ | "bold"
368
+ | "bolt"
369
+ | "bomb"
370
+ | "bone"
371
+ | "bong"
372
+ | "book"
373
+ | "book-dead"
374
+ | "book-medical"
375
+ | "book-open"
376
+ | "book-reader"
377
+ | "bookmark"
378
+ | "bootstrap"
379
+ | "border-all"
380
+ | "border-none"
381
+ | "border-style"
382
+ | "bowling-ball"
383
+ | "box"
384
+ | "box-open"
385
+ | "box-tissue"
386
+ | "boxes"
387
+ | "braille"
388
+ | "brain"
389
+ | "bread-slice"
390
+ | "briefcase"
391
+ | "briefcase-medical"
392
+ | "broadcast-tower"
393
+ | "broom"
394
+ | "brush"
395
+ | "btc"
396
+ | "buffer"
397
+ | "bug"
398
+ | "building"
399
+ | "bullhorn"
400
+ | "bullseye"
401
+ | "burn"
402
+ | "buromobelexperte"
403
+ | "bus"
404
+ | "bus-alt"
405
+ | "business-time"
406
+ | "buy-n-large"
407
+ | "buysellads"
408
+ | "calculator"
409
+ | "calendar"
410
+ | "calendar-alt"
411
+ | "calendar-check"
412
+ | "calendar-day"
413
+ | "calendar-minus"
414
+ | "calendar-plus"
415
+ | "calendar-times"
416
+ | "calendar-week"
417
+ | "camera"
418
+ | "camera-retro"
419
+ | "campground"
420
+ | "canadian-maple-leaf"
421
+ | "candy-cane"
422
+ | "cannabis"
423
+ | "capsules"
424
+ | "car"
425
+ | "car-alt"
426
+ | "car-battery"
427
+ | "car-crash"
428
+ | "car-side"
429
+ | "caravan"
430
+ | "caret-down"
431
+ | "caret-left"
432
+ | "caret-right"
433
+ | "caret-square-down"
434
+ | "caret-square-left"
435
+ | "caret-square-right"
436
+ | "caret-square-up"
437
+ | "caret-up"
438
+ | "carrot"
439
+ | "cart-arrow-down"
440
+ | "cart-plus"
441
+ | "cash-register"
442
+ | "cat"
443
+ | "cc-amazon-pay"
444
+ | "cc-amex"
445
+ | "cc-apple-pay"
446
+ | "cc-diners-club"
447
+ | "cc-discover"
448
+ | "cc-jcb"
449
+ | "cc-mastercard"
450
+ | "cc-paypal"
451
+ | "cc-stripe"
452
+ | "cc-visa"
453
+ | "centercode"
454
+ | "centos"
455
+ | "certificate"
456
+ | "chair"
457
+ | "chalkboard"
458
+ | "chalkboard-teacher"
459
+ | "charging-station"
460
+ | "chart-area"
461
+ | "chart-bar"
462
+ | "chart-line"
463
+ | "chart-pie"
464
+ | "check"
465
+ | "check-circle"
466
+ | "check-double"
467
+ | "check-square"
468
+ | "cheese"
469
+ | "chess"
470
+ | "chess-bishop"
471
+ | "chess-board"
472
+ | "chess-king"
473
+ | "chess-knight"
474
+ | "chess-pawn"
475
+ | "chess-queen"
476
+ | "chess-rook"
477
+ | "chevron-circle-down"
478
+ | "chevron-circle-left"
479
+ | "chevron-circle-right"
480
+ | "chevron-circle-up"
481
+ | "chevron-down"
482
+ | "chevron-left"
483
+ | "chevron-right"
484
+ | "chevron-up"
485
+ | "child"
486
+ | "chrome"
487
+ | "chromecast"
488
+ | "church"
489
+ | "circle"
490
+ | "circle-notch"
491
+ | "city"
492
+ | "clinic-medical"
493
+ | "clipboard"
494
+ | "clipboard-check"
495
+ | "clipboard-list"
496
+ | "clock"
497
+ | "clone"
498
+ | "closed-captioning"
499
+ | "cloud"
500
+ | "cloud-download-alt"
501
+ | "cloud-meatball"
502
+ | "cloud-moon"
503
+ | "cloud-moon-rain"
504
+ | "cloud-rain"
505
+ | "cloud-showers-heavy"
506
+ | "cloud-sun"
507
+ | "cloud-sun-rain"
508
+ | "cloud-upload-alt"
509
+ | "cloudflare"
510
+ | "cloudscale"
511
+ | "cloudsmith"
512
+ | "cloudversify"
513
+ | "cocktail"
514
+ | "code"
515
+ | "code-branch"
516
+ | "codepen"
517
+ | "codiepie"
518
+ | "coffee"
519
+ | "cog"
520
+ | "cogs"
521
+ | "coins"
522
+ | "columns"
523
+ | "comment"
524
+ | "comment-alt"
525
+ | "comment-dollar"
526
+ | "comment-dots"
527
+ | "comment-medical"
528
+ | "comment-slash"
529
+ | "comments"
530
+ | "comments-dollar"
531
+ | "compact-disc"
532
+ | "compass"
533
+ | "compress"
534
+ | "compress-alt"
535
+ | "compress-arrows-alt"
536
+ | "concierge-bell"
537
+ | "confluence"
538
+ | "connectdevelop"
539
+ | "contao"
540
+ | "cookie"
541
+ | "cookie-bite"
542
+ | "copy"
543
+ | "copyright"
544
+ | "cotton-bureau"
545
+ | "couch"
546
+ | "cpanel"
547
+ | "creative-commons"
548
+ | "creative-commons-by"
549
+ | "creative-commons-nc"
550
+ | "creative-commons-nc-eu"
551
+ | "creative-commons-nc-jp"
552
+ | "creative-commons-nd"
553
+ | "creative-commons-pd"
554
+ | "creative-commons-pd-alt"
555
+ | "creative-commons-remix"
556
+ | "creative-commons-sa"
557
+ | "creative-commons-sampling"
558
+ | "creative-commons-sampling-plus"
559
+ | "creative-commons-share"
560
+ | "creative-commons-zero"
561
+ | "credit-card"
562
+ | "critical-role"
563
+ | "crop"
564
+ | "crop-alt"
565
+ | "cross"
566
+ | "crosshairs"
567
+ | "crow"
568
+ | "crown"
569
+ | "crutch"
570
+ | "css3"
571
+ | "css3-alt"
572
+ | "cube"
573
+ | "cubes"
574
+ | "cut"
575
+ | "cuttlefish"
576
+ | "d-and-d"
577
+ | "d-and-d-beyond"
578
+ | "dailymotion"
579
+ | "dashcube"
580
+ | "database"
581
+ | "deaf"
582
+ | "deezer"
583
+ | "delicious"
584
+ | "democrat"
585
+ | "deploydog"
586
+ | "deskpro"
587
+ | "desktop"
588
+ | "dev"
589
+ | "deviantart"
590
+ | "dharmachakra"
591
+ | "dhl"
592
+ | "diagnoses"
593
+ | "diaspora"
594
+ | "dice"
595
+ | "dice-d20"
596
+ | "dice-d6"
597
+ | "dice-five"
598
+ | "dice-four"
599
+ | "dice-one"
600
+ | "dice-six"
601
+ | "dice-three"
602
+ | "dice-two"
603
+ | "digg"
604
+ | "digital-ocean"
605
+ | "digital-tachograph"
606
+ | "directions"
607
+ | "discord"
608
+ | "discourse"
609
+ | "disease"
610
+ | "divide"
611
+ | "dizzy"
612
+ | "dna"
613
+ | "dochub"
614
+ | "docker"
615
+ | "dog"
616
+ | "dollar-sign"
617
+ | "dolly"
618
+ | "dolly-flatbed"
619
+ | "donate"
620
+ | "door-closed"
621
+ | "door-open"
622
+ | "dot-circle"
623
+ | "dove"
624
+ | "download"
625
+ | "draft2digital"
626
+ | "drafting-compass"
627
+ | "dragon"
628
+ | "draw-polygon"
629
+ | "dribbble"
630
+ | "dribbble-square"
631
+ | "dropbox"
632
+ | "drum"
633
+ | "drum-steelpan"
634
+ | "drumstick-bite"
635
+ | "drupal"
636
+ | "dumbbell"
637
+ | "dumpster"
638
+ | "dumpster-fire"
639
+ | "dungeon"
640
+ | "dyalog"
641
+ | "earlybirds"
642
+ | "ebay"
643
+ | "edge"
644
+ | "edge-legacy"
645
+ | "edit"
646
+ | "egg"
647
+ | "eject"
648
+ | "elementor"
649
+ | "ellipsis-h"
650
+ | "ellipsis-v"
651
+ | "ello"
652
+ | "ember"
653
+ | "empire"
654
+ | "envelope"
655
+ | "envelope-open"
656
+ | "envelope-open-text"
657
+ | "envelope-square"
658
+ | "envira"
659
+ | "equals"
660
+ | "eraser"
661
+ | "erlang"
662
+ | "ethereum"
663
+ | "ethernet"
664
+ | "etsy"
665
+ | "euro-sign"
666
+ | "evernote"
667
+ | "exchange-alt"
668
+ | "exclamation"
669
+ | "exclamation-circle"
670
+ | "exclamation-triangle"
671
+ | "expand"
672
+ | "expand-alt"
673
+ | "expand-arrows-alt"
674
+ | "expeditedssl"
675
+ | "external-link-alt"
676
+ | "external-link-square-alt"
677
+ | "eye"
678
+ | "eye-dropper"
679
+ | "eye-slash"
680
+ | "facebook"
681
+ | "facebook-f"
682
+ | "facebook-messenger"
683
+ | "facebook-square"
684
+ | "fan"
685
+ | "fantasy-flight-games"
686
+ | "fast-backward"
687
+ | "fast-forward"
688
+ | "faucet"
689
+ | "fax"
690
+ | "feather"
691
+ | "feather-alt"
692
+ | "fedex"
693
+ | "fedora"
694
+ | "female"
695
+ | "fighter-jet"
696
+ | "figma"
697
+ | "file"
698
+ | "file-alt"
699
+ | "file-archive"
700
+ | "file-audio"
701
+ | "file-code"
702
+ | "file-contract"
703
+ | "file-csv"
704
+ | "file-download"
705
+ | "file-excel"
706
+ | "file-export"
707
+ | "file-image"
708
+ | "file-import"
709
+ | "file-invoice"
710
+ | "file-invoice-dollar"
711
+ | "file-medical"
712
+ | "file-medical-alt"
713
+ | "file-pdf"
714
+ | "file-powerpoint"
715
+ | "file-prescription"
716
+ | "file-signature"
717
+ | "file-upload"
718
+ | "file-video"
719
+ | "file-word"
720
+ | "fill"
721
+ | "fill-drip"
722
+ | "film"
723
+ | "filter"
724
+ | "fingerprint"
725
+ | "fire"
726
+ | "fire-alt"
727
+ | "fire-extinguisher"
728
+ | "firefox"
729
+ | "firefox-browser"
730
+ | "first-aid"
731
+ | "first-order"
732
+ | "first-order-alt"
733
+ | "firstdraft"
734
+ | "fish"
735
+ | "fist-raised"
736
+ | "flag"
737
+ | "flag-checkered"
738
+ | "flag-usa"
739
+ | "flask"
740
+ | "flickr"
741
+ | "flipboard"
742
+ | "flushed"
743
+ | "fly"
744
+ | "folder"
745
+ | "folder-minus"
746
+ | "folder-open"
747
+ | "folder-plus"
748
+ | "font"
749
+ | "font-awesome"
750
+ | "font-awesome-alt"
751
+ | "font-awesome-flag"
752
+ | "font-awesome-logo-full"
753
+ | "fonticons"
754
+ | "fonticons-fi"
755
+ | "football-ball"
756
+ | "fort-awesome"
757
+ | "fort-awesome-alt"
758
+ | "forumbee"
759
+ | "forward"
760
+ | "foursquare"
761
+ | "free-code-camp"
762
+ | "freebsd"
763
+ | "frog"
764
+ | "frown"
765
+ | "frown-open"
766
+ | "fulcrum"
767
+ | "funnel-dollar"
768
+ | "futbol"
769
+ | "galactic-republic"
770
+ | "galactic-senate"
771
+ | "gamepad"
772
+ | "gas-pump"
773
+ | "gavel"
774
+ | "gem"
775
+ | "genderless"
776
+ | "get-pocket"
777
+ | "gg"
778
+ | "gg-circle"
779
+ | "ghost"
780
+ | "gift"
781
+ | "gifts"
782
+ | "git"
783
+ | "git-alt"
784
+ | "git-square"
785
+ | "github"
786
+ | "github-alt"
787
+ | "github-square"
788
+ | "gitkraken"
789
+ | "gitlab"
790
+ | "gitter"
791
+ | "glass-cheers"
792
+ | "glass-martini"
793
+ | "glass-martini-alt"
794
+ | "glass-whiskey"
795
+ | "glasses"
796
+ | "glide"
797
+ | "glide-g"
798
+ | "globe"
799
+ | "globe-africa"
800
+ | "globe-americas"
801
+ | "globe-asia"
802
+ | "globe-europe"
803
+ | "gofore"
804
+ | "golf-ball"
805
+ | "goodreads"
806
+ | "goodreads-g"
807
+ | "google"
808
+ | "google-drive"
809
+ | "google-pay"
810
+ | "google-play"
811
+ | "google-plus"
812
+ | "google-plus-g"
813
+ | "google-plus-square"
814
+ | "google-wallet"
815
+ | "gopuram"
816
+ | "graduation-cap"
817
+ | "gratipay"
818
+ | "grav"
819
+ | "greater-than"
820
+ | "greater-than-equal"
821
+ | "grimace"
822
+ | "grin"
823
+ | "grin-alt"
824
+ | "grin-beam"
825
+ | "grin-beam-sweat"
826
+ | "grin-hearts"
827
+ | "grin-squint"
828
+ | "grin-squint-tears"
829
+ | "grin-stars"
830
+ | "grin-tears"
831
+ | "grin-tongue"
832
+ | "grin-tongue-squint"
833
+ | "grin-tongue-wink"
834
+ | "grin-wink"
835
+ | "grip-horizontal"
836
+ | "grip-lines"
837
+ | "grip-lines-vertical"
838
+ | "grip-vertical"
839
+ | "gripfire"
840
+ | "grunt"
841
+ | "guilded"
842
+ | "guitar"
843
+ | "gulp"
844
+ | "h-square"
845
+ | "hacker-news"
846
+ | "hacker-news-square"
847
+ | "hackerrank"
848
+ | "hamburger"
849
+ | "hammer"
850
+ | "hamsa"
851
+ | "hand-holding"
852
+ | "hand-holding-heart"
853
+ | "hand-holding-medical"
854
+ | "hand-holding-usd"
855
+ | "hand-holding-water"
856
+ | "hand-lizard"
857
+ | "hand-middle-finger"
858
+ | "hand-paper"
859
+ | "hand-peace"
860
+ | "hand-point-down"
861
+ | "hand-point-left"
862
+ | "hand-point-right"
863
+ | "hand-point-up"
864
+ | "hand-pointer"
865
+ | "hand-rock"
866
+ | "hand-scissors"
867
+ | "hand-sparkles"
868
+ | "hand-spock"
869
+ | "hands"
870
+ | "hands-helping"
871
+ | "hands-wash"
872
+ | "handshake"
873
+ | "handshake-alt-slash"
874
+ | "handshake-slash"
875
+ | "hanukiah"
876
+ | "hard-hat"
877
+ | "hashtag"
878
+ | "hat-cowboy"
879
+ | "hat-cowboy-side"
880
+ | "hat-wizard"
881
+ | "hdd"
882
+ | "head-side-cough"
883
+ | "head-side-cough-slash"
884
+ | "head-side-mask"
885
+ | "head-side-virus"
886
+ | "heading"
887
+ | "headphones"
888
+ | "headphones-alt"
889
+ | "headset"
890
+ | "heart"
891
+ | "heart-broken"
892
+ | "heartbeat"
893
+ | "helicopter"
894
+ | "highlighter"
895
+ | "hiking"
896
+ | "hippo"
897
+ | "hips"
898
+ | "hire-a-helper"
899
+ | "history"
900
+ | "hive"
901
+ | "hockey-puck"
902
+ | "holly-berry"
903
+ | "home"
904
+ | "hooli"
905
+ | "hornbill"
906
+ | "horse"
907
+ | "horse-head"
908
+ | "hospital"
909
+ | "hospital-alt"
910
+ | "hospital-symbol"
911
+ | "hospital-user"
912
+ | "hot-tub"
913
+ | "hotdog"
914
+ | "hotel"
915
+ | "hotjar"
916
+ | "hourglass"
917
+ | "hourglass-end"
918
+ | "hourglass-half"
919
+ | "hourglass-start"
920
+ | "house-damage"
921
+ | "house-user"
922
+ | "houzz"
923
+ | "hryvnia"
924
+ | "html5"
925
+ | "hubspot"
926
+ | "i-cursor"
927
+ | "ice-cream"
928
+ | "icicles"
929
+ | "icons"
930
+ | "id-badge"
931
+ | "id-card"
932
+ | "id-card-alt"
933
+ | "ideal"
934
+ | "igloo"
935
+ | "image"
936
+ | "images"
937
+ | "imdb"
938
+ | "inbox"
939
+ | "indent"
940
+ | "industry"
941
+ | "infinity"
942
+ | "info"
943
+ | "info-circle"
944
+ | "innosoft"
945
+ | "instagram"
946
+ | "instagram-square"
947
+ | "instalod"
948
+ | "intercom"
949
+ | "internet-explorer"
950
+ | "invision"
951
+ | "ioxhost"
952
+ | "italic"
953
+ | "itch-io"
954
+ | "itunes"
955
+ | "itunes-note"
956
+ | "java"
957
+ | "jedi"
958
+ | "jedi-order"
959
+ | "jenkins"
960
+ | "jira"
961
+ | "joget"
962
+ | "joint"
963
+ | "joomla"
964
+ | "journal-whills"
965
+ | "js"
966
+ | "js-square"
967
+ | "jsfiddle"
968
+ | "kaaba"
969
+ | "kaggle"
970
+ | "key"
971
+ | "keybase"
972
+ | "keyboard"
973
+ | "keycdn"
974
+ | "khanda"
975
+ | "kickstarter"
976
+ | "kickstarter-k"
977
+ | "kiss"
978
+ | "kiss-beam"
979
+ | "kiss-wink-heart"
980
+ | "kiwi-bird"
981
+ | "korvue"
982
+ | "landmark"
983
+ | "language"
984
+ | "laptop"
985
+ | "laptop-code"
986
+ | "laptop-house"
987
+ | "laptop-medical"
988
+ | "laravel"
989
+ | "lastfm"
990
+ | "lastfm-square"
991
+ | "laugh"
992
+ | "laugh-beam"
993
+ | "laugh-squint"
994
+ | "laugh-wink"
995
+ | "layer-group"
996
+ | "leaf"
997
+ | "leanpub"
998
+ | "lemon"
999
+ | "less"
1000
+ | "less-than"
1001
+ | "less-than-equal"
1002
+ | "level-down-alt"
1003
+ | "level-up-alt"
1004
+ | "life-ring"
1005
+ | "lightbulb"
1006
+ | "line"
1007
+ | "link"
1008
+ | "linkedin"
1009
+ | "linkedin-in"
1010
+ | "linode"
1011
+ | "linux"
1012
+ | "lira-sign"
1013
+ | "list"
1014
+ | "list-alt"
1015
+ | "list-ol"
1016
+ | "list-ul"
1017
+ | "location-arrow"
1018
+ | "lock"
1019
+ | "lock-open"
1020
+ | "long-arrow-alt-down"
1021
+ | "long-arrow-alt-left"
1022
+ | "long-arrow-alt-right"
1023
+ | "long-arrow-alt-up"
1024
+ | "low-vision"
1025
+ | "luggage-cart"
1026
+ | "lungs"
1027
+ | "lungs-virus"
1028
+ | "lyft"
1029
+ | "magento"
1030
+ | "magic"
1031
+ | "magnet"
1032
+ | "mail-bulk"
1033
+ | "mailchimp"
1034
+ | "male"
1035
+ | "mandalorian"
1036
+ | "map"
1037
+ | "map-marked"
1038
+ | "map-marked-alt"
1039
+ | "map-marker"
1040
+ | "map-marker-alt"
1041
+ | "map-pin"
1042
+ | "map-signs"
1043
+ | "markdown"
1044
+ | "marker"
1045
+ | "mars"
1046
+ | "mars-double"
1047
+ | "mars-stroke"
1048
+ | "mars-stroke-h"
1049
+ | "mars-stroke-v"
1050
+ | "mask"
1051
+ | "mastodon"
1052
+ | "maxcdn"
1053
+ | "mdb"
1054
+ | "medal"
1055
+ | "medapps"
1056
+ | "medium"
1057
+ | "medium-m"
1058
+ | "medkit"
1059
+ | "medrt"
1060
+ | "meetup"
1061
+ | "megaport"
1062
+ | "meh"
1063
+ | "meh-blank"
1064
+ | "meh-rolling-eyes"
1065
+ | "memory"
1066
+ | "mendeley"
1067
+ | "menorah"
1068
+ | "mercury"
1069
+ | "meteor"
1070
+ | "microblog"
1071
+ | "microchip"
1072
+ | "microphone"
1073
+ | "microphone-alt"
1074
+ | "microphone-alt-slash"
1075
+ | "microphone-slash"
1076
+ | "microscope"
1077
+ | "microsoft"
1078
+ | "minus"
1079
+ | "minus-circle"
1080
+ | "minus-square"
1081
+ | "mitten"
1082
+ | "mix"
1083
+ | "mixcloud"
1084
+ | "mixer"
1085
+ | "mizuni"
1086
+ | "mobile"
1087
+ | "mobile-alt"
1088
+ | "modx"
1089
+ | "monero"
1090
+ | "money-bill"
1091
+ | "money-bill-alt"
1092
+ | "money-bill-wave"
1093
+ | "money-bill-wave-alt"
1094
+ | "money-check"
1095
+ | "money-check-alt"
1096
+ | "monument"
1097
+ | "moon"
1098
+ | "mortar-pestle"
1099
+ | "mosque"
1100
+ | "motorcycle"
1101
+ | "mountain"
1102
+ | "mouse"
1103
+ | "mouse-pointer"
1104
+ | "mug-hot"
1105
+ | "music"
1106
+ | "napster"
1107
+ | "neos"
1108
+ | "network-wired"
1109
+ | "neuter"
1110
+ | "newspaper"
1111
+ | "nimblr"
1112
+ | "node"
1113
+ | "node-js"
1114
+ | "not-equal"
1115
+ | "notes-medical"
1116
+ | "npm"
1117
+ | "ns8"
1118
+ | "nutritionix"
1119
+ | "object-group"
1120
+ | "object-ungroup"
1121
+ | "octopus-deploy"
1122
+ | "odnoklassniki"
1123
+ | "odnoklassniki-square"
1124
+ | "oil-can"
1125
+ | "old-republic"
1126
+ | "om"
1127
+ | "opencart"
1128
+ | "openid"
1129
+ | "opera"
1130
+ | "optin-monster"
1131
+ | "orcid"
1132
+ | "osi"
1133
+ | "otter"
1134
+ | "outdent"
1135
+ | "page4"
1136
+ | "pagelines"
1137
+ | "pager"
1138
+ | "paint-brush"
1139
+ | "paint-roller"
1140
+ | "palette"
1141
+ | "palfed"
1142
+ | "pallet"
1143
+ | "paper-plane"
1144
+ | "paperclip"
1145
+ | "parachute-box"
1146
+ | "paragraph"
1147
+ | "parking"
1148
+ | "passport"
1149
+ | "pastafarianism"
1150
+ | "paste"
1151
+ | "patreon"
1152
+ | "pause"
1153
+ | "pause-circle"
1154
+ | "paw"
1155
+ | "paypal"
1156
+ | "peace"
1157
+ | "pen"
1158
+ | "pen-alt"
1159
+ | "pen-fancy"
1160
+ | "pen-nib"
1161
+ | "pen-square"
1162
+ | "pencil-alt"
1163
+ | "pencil-ruler"
1164
+ | "penny-arcade"
1165
+ | "people-arrows"
1166
+ | "people-carry"
1167
+ | "pepper-hot"
1168
+ | "perbyte"
1169
+ | "percent"
1170
+ | "percentage"
1171
+ | "periscope"
1172
+ | "person-booth"
1173
+ | "phabricator"
1174
+ | "phoenix-framework"
1175
+ | "phoenix-squadron"
1176
+ | "phone"
1177
+ | "phone-alt"
1178
+ | "phone-slash"
1179
+ | "phone-square"
1180
+ | "phone-square-alt"
1181
+ | "phone-volume"
1182
+ | "photo-video"
1183
+ | "php"
1184
+ | "pied-piper"
1185
+ | "pied-piper-alt"
1186
+ | "pied-piper-hat"
1187
+ | "pied-piper-pp"
1188
+ | "pied-piper-square"
1189
+ | "piggy-bank"
1190
+ | "pills"
1191
+ | "pinterest"
1192
+ | "pinterest-p"
1193
+ | "pinterest-square"
1194
+ | "pizza-slice"
1195
+ | "place-of-worship"
1196
+ | "plane"
1197
+ | "plane-arrival"
1198
+ | "plane-departure"
1199
+ | "plane-slash"
1200
+ | "play"
1201
+ | "play-circle"
1202
+ | "playstation"
1203
+ | "plug"
1204
+ | "plus"
1205
+ | "plus-circle"
1206
+ | "plus-square"
1207
+ | "podcast"
1208
+ | "poll"
1209
+ | "poll-h"
1210
+ | "poo"
1211
+ | "poo-storm"
1212
+ | "poop"
1213
+ | "portrait"
1214
+ | "pound-sign"
1215
+ | "power-off"
1216
+ | "pray"
1217
+ | "praying-hands"
1218
+ | "prescription"
1219
+ | "prescription-bottle"
1220
+ | "prescription-bottle-alt"
1221
+ | "print"
1222
+ | "procedures"
1223
+ | "product-hunt"
1224
+ | "project-diagram"
1225
+ | "pump-medical"
1226
+ | "pump-soap"
1227
+ | "pushed"
1228
+ | "puzzle-piece"
1229
+ | "python"
1230
+ | "qq"
1231
+ | "qrcode"
1232
+ | "question"
1233
+ | "question-circle"
1234
+ | "quidditch"
1235
+ | "quinscape"
1236
+ | "quora"
1237
+ | "quote-left"
1238
+ | "quote-right"
1239
+ | "quran"
1240
+ | "r-project"
1241
+ | "radiation"
1242
+ | "radiation-alt"
1243
+ | "rainbow"
1244
+ | "random"
1245
+ | "raspberry-pi"
1246
+ | "ravelry"
1247
+ | "react"
1248
+ | "reacteurope"
1249
+ | "readme"
1250
+ | "rebel"
1251
+ | "receipt"
1252
+ | "record-vinyl"
1253
+ | "recycle"
1254
+ | "red-river"
1255
+ | "reddit"
1256
+ | "reddit-alien"
1257
+ | "reddit-square"
1258
+ | "redhat"
1259
+ | "redo"
1260
+ | "redo-alt"
1261
+ | "registered"
1262
+ | "remove-format"
1263
+ | "renren"
1264
+ | "reply"
1265
+ | "reply-all"
1266
+ | "replyd"
1267
+ | "republican"
1268
+ | "researchgate"
1269
+ | "resolving"
1270
+ | "restroom"
1271
+ | "retweet"
1272
+ | "rev"
1273
+ | "ribbon"
1274
+ | "ring"
1275
+ | "road"
1276
+ | "robot"
1277
+ | "rocket"
1278
+ | "rocketchat"
1279
+ | "rockrms"
1280
+ | "route"
1281
+ | "rss"
1282
+ | "rss-square"
1283
+ | "ruble-sign"
1284
+ | "ruler"
1285
+ | "ruler-combined"
1286
+ | "ruler-horizontal"
1287
+ | "ruler-vertical"
1288
+ | "running"
1289
+ | "rupee-sign"
1290
+ | "rust"
1291
+ | "sad-cry"
1292
+ | "sad-tear"
1293
+ | "safari"
1294
+ | "salesforce"
1295
+ | "sass"
1296
+ | "satellite"
1297
+ | "satellite-dish"
1298
+ | "save"
1299
+ | "schlix"
1300
+ | "school"
1301
+ | "screwdriver"
1302
+ | "scribd"
1303
+ | "scroll"
1304
+ | "sd-card"
1305
+ | "search"
1306
+ | "search-dollar"
1307
+ | "search-location"
1308
+ | "search-minus"
1309
+ | "search-plus"
1310
+ | "searchengin"
1311
+ | "seedling"
1312
+ | "sellcast"
1313
+ | "sellsy"
1314
+ | "server"
1315
+ | "servicestack"
1316
+ | "shapes"
1317
+ | "share"
1318
+ | "share-alt"
1319
+ | "share-alt-square"
1320
+ | "share-square"
1321
+ | "shekel-sign"
1322
+ | "shield-alt"
1323
+ | "shield-virus"
1324
+ | "ship"
1325
+ | "shipping-fast"
1326
+ | "shirtsinbulk"
1327
+ | "shoe-prints"
1328
+ | "shopify"
1329
+ | "shopping-bag"
1330
+ | "shopping-basket"
1331
+ | "shopping-cart"
1332
+ | "shopware"
1333
+ | "shower"
1334
+ | "shuttle-van"
1335
+ | "sign"
1336
+ | "sign-in-alt"
1337
+ | "sign-language"
1338
+ | "sign-out-alt"
1339
+ | "signal"
1340
+ | "signature"
1341
+ | "sim-card"
1342
+ | "simplybuilt"
1343
+ | "sink"
1344
+ | "sistrix"
1345
+ | "sitemap"
1346
+ | "sith"
1347
+ | "skating"
1348
+ | "sketch"
1349
+ | "skiing"
1350
+ | "skiing-nordic"
1351
+ | "skull"
1352
+ | "skull-crossbones"
1353
+ | "skyatlas"
1354
+ | "skype"
1355
+ | "slack"
1356
+ | "slack-hash"
1357
+ | "slash"
1358
+ | "sleigh"
1359
+ | "sliders-h"
1360
+ | "slideshare"
1361
+ | "smile"
1362
+ | "smile-beam"
1363
+ | "smile-wink"
1364
+ | "smog"
1365
+ | "smoking"
1366
+ | "smoking-ban"
1367
+ | "sms"
1368
+ | "snapchat"
1369
+ | "snapchat-ghost"
1370
+ | "snapchat-square"
1371
+ | "snowboarding"
1372
+ | "snowflake"
1373
+ | "snowman"
1374
+ | "snowplow"
1375
+ | "soap"
1376
+ | "socks"
1377
+ | "solar-panel"
1378
+ | "sort"
1379
+ | "sort-alpha-down"
1380
+ | "sort-alpha-down-alt"
1381
+ | "sort-alpha-up"
1382
+ | "sort-alpha-up-alt"
1383
+ | "sort-amount-down"
1384
+ | "sort-amount-down-alt"
1385
+ | "sort-amount-up"
1386
+ | "sort-amount-up-alt"
1387
+ | "sort-down"
1388
+ | "sort-numeric-down"
1389
+ | "sort-numeric-down-alt"
1390
+ | "sort-numeric-up"
1391
+ | "sort-numeric-up-alt"
1392
+ | "sort-up"
1393
+ | "soundcloud"
1394
+ | "sourcetree"
1395
+ | "spa"
1396
+ | "space-shuttle"
1397
+ | "speakap"
1398
+ | "speaker-deck"
1399
+ | "spell-check"
1400
+ | "spider"
1401
+ | "spinner"
1402
+ | "splotch"
1403
+ | "spotify"
1404
+ | "spray-can"
1405
+ | "square"
1406
+ | "square-full"
1407
+ | "square-root-alt"
1408
+ | "squarespace"
1409
+ | "stack-exchange"
1410
+ | "stack-overflow"
1411
+ | "stackpath"
1412
+ | "stamp"
1413
+ | "star"
1414
+ | "star-and-crescent"
1415
+ | "star-half"
1416
+ | "star-half-alt"
1417
+ | "star-of-david"
1418
+ | "star-of-life"
1419
+ | "staylinked"
1420
+ | "steam"
1421
+ | "steam-square"
1422
+ | "steam-symbol"
1423
+ | "step-backward"
1424
+ | "step-forward"
1425
+ | "stethoscope"
1426
+ | "sticker-mule"
1427
+ | "sticky-note"
1428
+ | "stop"
1429
+ | "stop-circle"
1430
+ | "stopwatch"
1431
+ | "stopwatch-20"
1432
+ | "store"
1433
+ | "store-alt"
1434
+ | "store-alt-slash"
1435
+ | "store-slash"
1436
+ | "strava"
1437
+ | "stream"
1438
+ | "street-view"
1439
+ | "strikethrough"
1440
+ | "stripe"
1441
+ | "stripe-s"
1442
+ | "stroopwafel"
1443
+ | "studiovinari"
1444
+ | "stumbleupon"
1445
+ | "stumbleupon-circle"
1446
+ | "subscript"
1447
+ | "subway"
1448
+ | "suitcase"
1449
+ | "suitcase-rolling"
1450
+ | "sun"
1451
+ | "superpowers"
1452
+ | "superscript"
1453
+ | "supple"
1454
+ | "surprise"
1455
+ | "suse"
1456
+ | "swatchbook"
1457
+ | "swift"
1458
+ | "swimmer"
1459
+ | "swimming-pool"
1460
+ | "symfony"
1461
+ | "synagogue"
1462
+ | "sync"
1463
+ | "sync-alt"
1464
+ | "syringe"
1465
+ | "table"
1466
+ | "table-tennis"
1467
+ | "tablet"
1468
+ | "tablet-alt"
1469
+ | "tablets"
1470
+ | "tachometer-alt"
1471
+ | "tag"
1472
+ | "tags"
1473
+ | "tape"
1474
+ | "tasks"
1475
+ | "taxi"
1476
+ | "teamspeak"
1477
+ | "teeth"
1478
+ | "teeth-open"
1479
+ | "telegram"
1480
+ | "telegram-plane"
1481
+ | "temperature-high"
1482
+ | "temperature-low"
1483
+ | "tencent-weibo"
1484
+ | "tenge"
1485
+ | "terminal"
1486
+ | "text-height"
1487
+ | "text-width"
1488
+ | "th"
1489
+ | "th-large"
1490
+ | "th-list"
1491
+ | "the-red-yeti"
1492
+ | "theater-masks"
1493
+ | "themeco"
1494
+ | "themeisle"
1495
+ | "thermometer"
1496
+ | "thermometer-empty"
1497
+ | "thermometer-full"
1498
+ | "thermometer-half"
1499
+ | "thermometer-quarter"
1500
+ | "thermometer-three-quarters"
1501
+ | "think-peaks"
1502
+ | "thumbs-down"
1503
+ | "thumbs-up"
1504
+ | "thumbtack"
1505
+ | "ticket-alt"
1506
+ | "tiktok"
1507
+ | "times"
1508
+ | "times-circle"
1509
+ | "tint"
1510
+ | "tint-slash"
1511
+ | "tired"
1512
+ | "toggle-off"
1513
+ | "toggle-on"
1514
+ | "toilet"
1515
+ | "toilet-paper"
1516
+ | "toilet-paper-slash"
1517
+ | "toolbox"
1518
+ | "tools"
1519
+ | "tooth"
1520
+ | "torah"
1521
+ | "torii-gate"
1522
+ | "tractor"
1523
+ | "trade-federation"
1524
+ | "trademark"
1525
+ | "traffic-light"
1526
+ | "trailer"
1527
+ | "train"
1528
+ | "tram"
1529
+ | "transgender"
1530
+ | "transgender-alt"
1531
+ | "trash"
1532
+ | "trash-alt"
1533
+ | "trash-restore"
1534
+ | "trash-restore-alt"
1535
+ | "tree"
1536
+ | "trello"
1537
+ | "tripadvisor"
1538
+ | "trophy"
1539
+ | "truck"
1540
+ | "truck-loading"
1541
+ | "truck-monster"
1542
+ | "truck-moving"
1543
+ | "truck-pickup"
1544
+ | "tshirt"
1545
+ | "tty"
1546
+ | "tumblr"
1547
+ | "tumblr-square"
1548
+ | "tv"
1549
+ | "twitch"
1550
+ | "twitter"
1551
+ | "twitter-square"
1552
+ | "typo3"
1553
+ | "uber"
1554
+ | "ubuntu"
1555
+ | "uikit"
1556
+ | "umbraco"
1557
+ | "umbrella"
1558
+ | "umbrella-beach"
1559
+ | "uncharted"
1560
+ | "underline"
1561
+ | "undo"
1562
+ | "undo-alt"
1563
+ | "uniregistry"
1564
+ | "unity"
1565
+ | "universal-access"
1566
+ | "university"
1567
+ | "unlink"
1568
+ | "unlock"
1569
+ | "unlock-alt"
1570
+ | "unsplash"
1571
+ | "untappd"
1572
+ | "upload"
1573
+ | "ups"
1574
+ | "usb"
1575
+ | "user"
1576
+ | "user-alt"
1577
+ | "user-alt-slash"
1578
+ | "user-astronaut"
1579
+ | "user-check"
1580
+ | "user-circle"
1581
+ | "user-clock"
1582
+ | "user-cog"
1583
+ | "user-edit"
1584
+ | "user-friends"
1585
+ | "user-graduate"
1586
+ | "user-injured"
1587
+ | "user-lock"
1588
+ | "user-md"
1589
+ | "user-minus"
1590
+ | "user-ninja"
1591
+ | "user-nurse"
1592
+ | "user-plus"
1593
+ | "user-secret"
1594
+ | "user-shield"
1595
+ | "user-slash"
1596
+ | "user-tag"
1597
+ | "user-tie"
1598
+ | "user-times"
1599
+ | "users"
1600
+ | "users-cog"
1601
+ | "users-slash"
1602
+ | "usps"
1603
+ | "ussunnah"
1604
+ | "utensil-spoon"
1605
+ | "utensils"
1606
+ | "vaadin"
1607
+ | "vector-square"
1608
+ | "venus"
1609
+ | "venus-double"
1610
+ | "venus-mars"
1611
+ | "vest"
1612
+ | "vest-patches"
1613
+ | "viacoin"
1614
+ | "viadeo"
1615
+ | "viadeo-square"
1616
+ | "vial"
1617
+ | "vials"
1618
+ | "viber"
1619
+ | "video"
1620
+ | "video-slash"
1621
+ | "vihara"
1622
+ | "vimeo"
1623
+ | "vimeo-square"
1624
+ | "vimeo-v"
1625
+ | "vine"
1626
+ | "virus"
1627
+ | "virus-slash"
1628
+ | "viruses"
1629
+ | "vk"
1630
+ | "vnv"
1631
+ | "voicemail"
1632
+ | "volleyball-ball"
1633
+ | "volume-down"
1634
+ | "volume-mute"
1635
+ | "volume-off"
1636
+ | "volume-up"
1637
+ | "vote-yea"
1638
+ | "vr-cardboard"
1639
+ | "vuejs"
1640
+ | "walking"
1641
+ | "wallet"
1642
+ | "warehouse"
1643
+ | "watchman-monitoring"
1644
+ | "water"
1645
+ | "wave-square"
1646
+ | "waze"
1647
+ | "weebly"
1648
+ | "weibo"
1649
+ | "weight"
1650
+ | "weight-hanging"
1651
+ | "weixin"
1652
+ | "whatsapp"
1653
+ | "whatsapp-square"
1654
+ | "wheelchair"
1655
+ | "whmcs"
1656
+ | "wifi"
1657
+ | "wikipedia-w"
1658
+ | "wind"
1659
+ | "window-close"
1660
+ | "window-maximize"
1661
+ | "window-minimize"
1662
+ | "window-restore"
1663
+ | "windows"
1664
+ | "wine-bottle"
1665
+ | "wine-glass"
1666
+ | "wine-glass-alt"
1667
+ | "wix"
1668
+ | "wizards-of-the-coast"
1669
+ | "wodu"
1670
+ | "wolf-pack-battalion"
1671
+ | "won-sign"
1672
+ | "wordpress"
1673
+ | "wordpress-simple"
1674
+ | "wpbeginner"
1675
+ | "wpexplorer"
1676
+ | "wpforms"
1677
+ | "wpressr"
1678
+ | "wrench"
1679
+ | "x-ray"
1680
+ | "xbox"
1681
+ | "xing"
1682
+ | "xing-square"
1683
+ | "y-combinator"
1684
+ | "yahoo"
1685
+ | "yammer"
1686
+ | "yandex"
1687
+ | "yandex-international"
1688
+ | "yarn"
1689
+ | "yelp"
1690
+ | "yen-sign"
1691
+ | "yin-yang"
1692
+ | "yoast"
1693
+ | "youtube"
1694
+ | "youtube-square"
1695
+ | "zhihu";
1696
+
1697
+ export type AlignContent = "start" | "end" | "center" | "between" | "around" | "stretch";
1698
+ export type AlignSelf = "auto" | "start" | "end" | "center" | "baseline" | "stretch";
1699
+ export type AlignItems = "start" | "end" | "center" | "baseline" | "stretch";
1700
+ export type JustifyContent = "start" | "end" | "center" | "between" | "around";
1701
+
1702
+ export type UnsignedUpTo12 = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
1703
+ export type SignedUpTo12 =
1704
+ | -12
1705
+ | -11
1706
+ | -10
1707
+ | -9
1708
+ | -8
1709
+ | -7
1710
+ | -6
1711
+ | -5
1712
+ | -4
1713
+ | -3
1714
+ | -2
1715
+ | -1
1716
+ | UnsignedUpTo12;
1717
+ export type Margin = SignedUpTo12 | "auto";
1718
+ export const SPACING = 4;
1719
+
1720
+ export type TextFieldType =
1721
+ | "date"
1722
+ | "datetime"
1723
+ | "decimal"
1724
+ | "decimalRange"
1725
+ | "email"
1726
+ | "height"
1727
+ | "password"
1728
+ | "phoneNumber"
1729
+ | "number"
1730
+ | "numberRange"
1731
+ | "search"
1732
+ | "text"
1733
+ | "time"
1734
+ | "url"
1735
+ | "username";
1736
+
1737
+ export type IconSize = "xs" | "sm" | "md" | "lg" | "xl";
1738
+
1739
+ export const iconSizeToNumber = (size?: IconSize) => {
1740
+ return {
1741
+ xs: 8,
1742
+ sm: 12,
1743
+ md: 14,
1744
+ lg: 20,
1745
+ xl: 26,
1746
+ }[size || "md"];
1747
+ };
1748
+
1749
+ export const iconNumberToSize = (size = 16): IconSize => {
1750
+ let iconSize: IconSize;
1751
+ if (size < 8) {
1752
+ iconSize = "xs";
1753
+ } else if (size < 12) {
1754
+ iconSize = "sm";
1755
+ } else if (size < 14) {
1756
+ iconSize = "md";
1757
+ } else if (size < 20) {
1758
+ iconSize = "lg";
1759
+ } else {
1760
+ iconSize = "xl";
1761
+ }
1762
+ return iconSize;
1763
+ };
1764
+
1765
+ export function getSectionColor(section: "Breakfast" | "Lunch" | "Dinner" | "Snack" | "workouts") {
1766
+ return ({
1767
+ Breakfast: "orchid",
1768
+ Lunch: "blue",
1769
+ Dinner: "orange",
1770
+ Snack: "red",
1771
+ "Second Snack": "red",
1772
+ Workout: "pine",
1773
+ workouts: "pine",
1774
+ }[section] || "blue") as Color;
1775
+ }
1776
+
1777
+ export type TextSize = "sm" | "md" | "lg";
1778
+ export type TextColor =
1779
+ | "blue"
1780
+ | "darkGray"
1781
+ | "eggplant"
1782
+ | "gray"
1783
+ | "green"
1784
+ | "lightGray"
1785
+ | "maroon"
1786
+ | "midnight"
1787
+ | "navy"
1788
+ | "olive"
1789
+ | "orange"
1790
+ | "orchid"
1791
+ | "pine"
1792
+ | "purple"
1793
+ | "red"
1794
+ | "watermelon"
1795
+ | "white"; // default "darkGray"
1796
+
1797
+ export type ButtonColor =
1798
+ | "blue"
1799
+ | "gray"
1800
+ | "red"
1801
+ // | "transparent"
1802
+ | "white"
1803
+ | "primary"
1804
+ | "secondary"
1805
+ | "accent"
1806
+ | "tertiary";
1807
+ // | "twitter"
1808
+ // | "facebook"
1809
+ // | "google";
1810
+
1811
+ export type IconPrefix = "far" | "fas";
1812
+ // | "ant"
1813
+ // | "entypo"
1814
+ // | "evil"
1815
+ // | "material"
1816
+ // | "material-community";
1817
+ // | "ionicon"
1818
+ // | "octicon"
1819
+ // | "zocial"
1820
+ // | "simple-line"
1821
+ // | "feather";
1822
+
1823
+ export interface ActionBannerProps {
1824
+ /** The text to show in the banner. */
1825
+ text: string;
1826
+ color?: AllColors;
1827
+ textColor?: TextColor;
1828
+ negativeXMargin?: number;
1829
+ onClick: () => void;
1830
+ shape?: Rounding;
1831
+ }
1832
+
1833
+ export interface BlurBoxProps extends BoxProps {
1834
+ blurType?: "regular" | "dark" | "prominent";
1835
+ }
1836
+
1837
+ export interface LayerProps {
1838
+ children: ReactChildren;
1839
+ }
1840
+
1841
+ export interface ModalProps {
1842
+ header?: React.ReactNode;
1843
+ accessibilityModalLabel: string;
1844
+ children?: ReactChildren;
1845
+ closeOnOutsideClick?: boolean;
1846
+ footer?: ReactChild;
1847
+ heading?: string | ReactChild;
1848
+ onDismiss: () => void;
1849
+ role?: "alertdialog" | "dialog";
1850
+ size?: "sm" | "md" | "lg" | number;
1851
+ }
1852
+
1853
+ export interface BoxProps {
1854
+ alignContent?: AlignContent;
1855
+ alignItems?: AlignItems;
1856
+ alignSelf?: AlignSelf;
1857
+ bottom?: boolean;
1858
+ children?: ReactChildren;
1859
+ color?: BoxColor;
1860
+ column?: UnsignedUpTo12;
1861
+ smColumn?: UnsignedUpTo12;
1862
+ mdColumn?: UnsignedUpTo12;
1863
+ lgColumn?: UnsignedUpTo12;
1864
+ dangerouslySetInlineStyle?: {
1865
+ __style: {
1866
+ [key: string]: any;
1867
+ };
1868
+ };
1869
+ direction?: "row" | "column";
1870
+ smDirection?: "row" | "column";
1871
+ mdDirection?: "row" | "column";
1872
+ lgDirection?: "row" | "column";
1873
+ display?: "none" | "flex" | "block" | "inlineBlock" | "visuallyHidden";
1874
+ smDisplay?: "none" | "flex" | "block" | "inlineBlock" | "visuallyHidden";
1875
+ mdDisplay?: "none" | "flex" | "block" | "inlineBlock" | "visuallyHidden";
1876
+ lgDisplay?: "none" | "flex" | "block" | "inlineBlock" | "visuallyHidden";
1877
+ fit?: boolean;
1878
+ flex?: "grow" | "shrink" | "none";
1879
+ height?: number | string;
1880
+ justifyContent?: "start" | "end" | "center" | "between" | "around";
1881
+ left?: boolean;
1882
+ margin?: SignedUpTo12;
1883
+ smMargin?: SignedUpTo12;
1884
+ mdMargin?: SignedUpTo12;
1885
+ lgMargin?: SignedUpTo12;
1886
+ marginBottom?: SignedUpTo12;
1887
+ smMarginBottom?: SignedUpTo12;
1888
+ mdMarginBottom?: SignedUpTo12;
1889
+ lgMarginBottom?: SignedUpTo12;
1890
+ marginEnd?: SignedUpTo12;
1891
+ smMarginEnd?: SignedUpTo12;
1892
+ mdMarginEnd?: SignedUpTo12;
1893
+ lgMarginEnd?: SignedUpTo12;
1894
+ marginLeft?: SignedUpTo12;
1895
+ smMarginLeft?: SignedUpTo12;
1896
+ mdMarginLeft?: SignedUpTo12;
1897
+ lgMarginLeft?: SignedUpTo12;
1898
+ marginRight?: SignedUpTo12;
1899
+ smMarginRight?: SignedUpTo12;
1900
+ mdMarginRight?: SignedUpTo12;
1901
+ lgMarginRight?: SignedUpTo12;
1902
+ marginStart?: SignedUpTo12;
1903
+ smMarginStart?: SignedUpTo12;
1904
+ mdMarginStart?: SignedUpTo12;
1905
+ lgMarginStart?: SignedUpTo12;
1906
+ marginTop?: SignedUpTo12;
1907
+ smMarginTop?: SignedUpTo12;
1908
+ mdMarginTop?: SignedUpTo12;
1909
+ lgMarginTop?: SignedUpTo12;
1910
+ maxHeight?: number | string;
1911
+ maxWidth?: number | string;
1912
+ minHeight?: number | string;
1913
+ minWidth?: number | string;
1914
+ overflow?: "visible" | "hidden" | "scroll" | "scrollX" | "scrollY" | "auto";
1915
+ padding?: UnsignedUpTo12;
1916
+ smPadding?: UnsignedUpTo12;
1917
+ mdPadding?: UnsignedUpTo12;
1918
+ lgPadding?: UnsignedUpTo12;
1919
+ paddingX?: UnsignedUpTo12;
1920
+ smPaddingX?: UnsignedUpTo12;
1921
+ mdPaddingX?: UnsignedUpTo12;
1922
+ lgPaddingX?: UnsignedUpTo12;
1923
+ paddingY?: UnsignedUpTo12;
1924
+ smPaddingY?: UnsignedUpTo12;
1925
+ mdPaddingY?: UnsignedUpTo12;
1926
+ lgPaddingY?: UnsignedUpTo12;
1927
+ position?: "static" | "absolute" | "relative" | "fixed";
1928
+ right?: boolean;
1929
+ rounding?: "pill" | "circle" | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
1930
+ top?: boolean;
1931
+ width?: number | string;
1932
+ wrap?: boolean;
1933
+ zIndex?: number | "auto";
1934
+
1935
+ onClick?: () => void | Promise<void>;
1936
+ className?: string;
1937
+ style?: any;
1938
+ onHoverStart?: () => void | Promise<void>;
1939
+ onHoverEnd?: () => void | Promise<void>;
1940
+ scroll?: boolean;
1941
+ shadow?: boolean;
1942
+ border?: AllColors;
1943
+ borderBottom?: AllColors;
1944
+ borderTop?: AllColors;
1945
+ borderLeft?: AllColors;
1946
+ borderRight?: AllColors;
1947
+
1948
+ avoidKeyboard?: boolean;
1949
+ keyboardOffset?: number;
1950
+ scrollRef?: React.RefObject<any>;
1951
+ onScroll?: (offsetY: number) => void;
1952
+ onLayout?: (event: LayoutChangeEvent) => void;
1953
+ testID?: string;
1954
+ }
1955
+
1956
+ export type BoxColor = AllColors | "transparent";
1957
+
1958
+ export interface DrawerProps {
1959
+ animationOpenTime: number;
1960
+ animationCloseTime: number;
1961
+ direction: Direction;
1962
+ dismissWhenTouchOutside?: boolean;
1963
+ fadeOpacity?: number;
1964
+ drawerScreenWidth: number;
1965
+ drawerScreenHeight: number;
1966
+ style?: any;
1967
+ parent: any;
1968
+ dismiss?: any;
1969
+ }
1970
+
1971
+ export type DrawerDirection = "left" | "right" | "bottom" | "top";
1972
+
1973
+ export interface ErrorBoundaryProps {
1974
+ onError?: (error: Error, stack: any) => void;
1975
+ children?: ReactNode;
1976
+ }
1977
+
1978
+ export interface FaceBookButtonProps {
1979
+ errorMessageColor?: "red" | "white";
1980
+ signUp: boolean;
1981
+ }
1982
+
1983
+ export interface IconProps {
1984
+ prefix?: IconPrefix; // For support FA solid/regular/light/duotone, as well as other icon packs in the future.
1985
+ name: IconName;
1986
+ color?: AllColors;
1987
+ size?: IconSize;
1988
+ iconStyle?: any;
1989
+ containerStyle?: any;
1990
+ }
1991
+
1992
+ export interface NavigatorProps {
1993
+ config?: any;
1994
+ }
1995
+
1996
+ export type TooltipDirection = "top" | "bottom" | "left" | "right";
1997
+
1998
+ export type IndicatorDirection = "topLeft" | "topRight" | "bottomLeft" | "bottomRight";
1999
+
2000
+ export interface PillProps {
2001
+ text: string;
2002
+ color: AllColors;
2003
+ enabled?: boolean;
2004
+ onClick: (enabled: boolean) => void;
2005
+ }
2006
+
2007
+ export interface SegmentedControlProps {
2008
+ items: string[];
2009
+ onChange?: ({activeIndex}: {activeIndex: number | number[]}) => void;
2010
+ selectedItemIndex?: number;
2011
+ selectedItemIndexes?: number[];
2012
+ responsive?: boolean;
2013
+ size?: "md" | "lg"; // defaults to md
2014
+ multiselect?: boolean;
2015
+ selectLimit?: number;
2016
+ }
2017
+
2018
+ // Shared props for fields with labels, subtext, and error messages.
2019
+ export interface FieldWithLabelsProps {
2020
+ errorMessage?: string;
2021
+ errorMessageColor?: AllColors; // Default: red.
2022
+ label?: string;
2023
+ labelColor?: AllColors;
2024
+ helperText?: string;
2025
+ helperTextColor?: AllColors;
2026
+ children?: ReactChildren;
2027
+ }
2028
+
2029
+ export interface DateTimeFieldProps extends FieldWithLabelsProps {
2030
+ label?: string;
2031
+ mode: "date" | "time" | "datetime";
2032
+ value: Date;
2033
+ onChange: (date: Date) => void;
2034
+ dateFormat?: string;
2035
+ pickerType?: "default" | "compact" | "inline" | "spinner";
2036
+ }
2037
+
2038
+ export interface TextFieldProps extends FieldWithLabelsProps {
2039
+ innerRef?: any;
2040
+ id?: string;
2041
+ onChange: OnChangeCallback;
2042
+ autoComplete?: "current-password" | "on" | "off" | "username";
2043
+ disabled?: boolean;
2044
+
2045
+ idealErrorDirection?: Direction;
2046
+ name?: string;
2047
+ onBlur?: OnChangeCallback;
2048
+ onFocus?: OnChangeCallback;
2049
+ placeholder?: string;
2050
+ type?: TextFieldType;
2051
+ value?: string;
2052
+ style?: any;
2053
+ // If type === search, indicates whether to show the search icon or spinner
2054
+ searching?: boolean;
2055
+
2056
+ returnKeyType?: "done" | "go" | "next" | "search" | "send";
2057
+
2058
+ // TODO: still needed?
2059
+ autoFocus?: boolean;
2060
+ grow?: boolean;
2061
+ // react-native-autofocus
2062
+ inputRef?: any;
2063
+ onSubmitEditing?: any;
2064
+ onEnter?: any;
2065
+ // blurOnSubmit defaults to true
2066
+ // if blurOnSubmit is false and multiline is true, return will create a new line
2067
+ blurOnSubmit?: boolean;
2068
+ multiline?: boolean;
2069
+ rows?: number;
2070
+ height?: number;
2071
+ paddingX?: number;
2072
+ paddingY?: number;
2073
+
2074
+ // Required for type=numberRange
2075
+ min?: number;
2076
+ max?: number;
2077
+ }
2078
+
2079
+ export type TextAreaProps = TextFieldProps;
2080
+
2081
+ export interface SubmittingFormProps {
2082
+ onSubmitEditting: () => void;
2083
+ }
2084
+
2085
+ export interface SwitchProps extends FieldWithLabelsProps {
2086
+ id?: string;
2087
+ onChange: (value: boolean) => void;
2088
+ disabled?: boolean;
2089
+ name?: string;
2090
+ switched: boolean;
2091
+ // Pattern Addition
2092
+ label?: string;
2093
+ }
2094
+
2095
+ export interface SpinnerProps {
2096
+ size?: "sm" | "md";
2097
+ color?: Color;
2098
+ }
2099
+
2100
+ export interface MaskProps {
2101
+ children?: ReactChildren;
2102
+ shape?: "circle" | "rounded" | "square";
2103
+ height?: number | string;
2104
+ width?: number | string;
2105
+ maxHeight?: number | string;
2106
+ maxWidth?: number | string;
2107
+ rounding?: "circle" | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
2108
+ willChangeTransform?: boolean;
2109
+ wash?: boolean;
2110
+ }
2111
+
2112
+ export interface IconRowProps {
2113
+ icon: string;
2114
+ label: string;
2115
+ value: string;
2116
+ }
2117
+
2118
+ export interface LinkProps {
2119
+ href: string;
2120
+ inline?: boolean;
2121
+ children?: ReactChild;
2122
+ onClick?: () => void;
2123
+ target?: null | "blank";
2124
+ }
2125
+
2126
+ export type Rounding = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | "circle" | "pill";
2127
+
2128
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
2129
+ export interface HeadingProps {
2130
+ align?: "left" | "right" | "center" | "justify"; // default "left"
2131
+ children?: React.ReactNode;
2132
+ color?: AllColors;
2133
+ overflow?: "normal" | "breakWord"; // default "breakWord"
2134
+ size?: "sm" | "md" | "lg";
2135
+ truncate?: boolean; // default false
2136
+ }
2137
+
2138
+ export interface MetaProps {
2139
+ itemProp?: string;
2140
+ content?: string;
2141
+ itemType?: string;
2142
+ key?: string;
2143
+ property?: string;
2144
+ children?: ReactNode;
2145
+ }
2146
+
2147
+ export interface ImageProps {
2148
+ alt?: string;
2149
+ color: BoxColor;
2150
+ naturalHeight?: number;
2151
+ naturalWidth?: number;
2152
+ maxWidth?: number;
2153
+ maxHeight?: number;
2154
+ src: string;
2155
+ children?: ReactChildren;
2156
+ fit?: "cover" | "contain" | "none";
2157
+ onError?: () => void;
2158
+ onLoad?: () => void;
2159
+ size?: string;
2160
+ srcSet?: string;
2161
+ fullWidth?: boolean;
2162
+ style?: any;
2163
+ }
2164
+
2165
+ export interface SearchButtonProps {
2166
+ color: ButtonColor;
2167
+ onClick: () => void;
2168
+ }
2169
+
2170
+ export interface BackButtonInterface {
2171
+ onBack: () => void;
2172
+ }
2173
+
2174
+ export interface CheckBoxProps {
2175
+ onChange: ({value}: {value: boolean}) => void;
2176
+ checked?: boolean;
2177
+ disabled?: boolean;
2178
+ hasError?: boolean;
2179
+ indeterminate?: boolean;
2180
+ name?: string;
2181
+ onClick?: any;
2182
+ size?: "sm" | "md";
2183
+ color?: AllColors;
2184
+ radio?: boolean;
2185
+
2186
+ label?: string;
2187
+ subLabel?: string;
2188
+ labelColor?: AllColors;
2189
+ }
2190
+
2191
+ export interface BodyProps {
2192
+ scroll?: boolean;
2193
+ loading?: boolean;
2194
+ useBox?: boolean; // defaults false
2195
+ style?: any;
2196
+ padding?: UnsignedUpTo12;
2197
+ height?: number | string;
2198
+ avoidKeyboard?: boolean; // default true
2199
+ children?: ReactNode;
2200
+ }
2201
+
2202
+ export interface ChatPaneProps {
2203
+ messagesView: any;
2204
+ textFormView: any;
2205
+ ref: any;
2206
+ }
2207
+
2208
+ export interface ScrollViewProps {
2209
+ scrollTo?: (
2210
+ y?: number | {x?: number; y?: number; animated?: boolean},
2211
+ x?: number,
2212
+ animated?: boolean
2213
+ ) => void;
2214
+ /**
2215
+ * These styles will be applied to the scroll view content container which
2216
+ * wraps all of the child views. Example:
2217
+ *
2218
+ * return (
2219
+ * <ScrollView contentContainerStyle={styles.contentContainer}>
2220
+ * </ScrollView>
2221
+ * );
2222
+ * ...
2223
+ * const styles = StyleSheet.create({
2224
+ * contentContainer: {
2225
+ * paddingVertical: 20
2226
+ * }
2227
+ * });
2228
+ */
2229
+ contentContainerStyle?: any;
2230
+
2231
+ /**
2232
+ * When true the scroll view's children are arranged horizontally in a row
2233
+ * instead of vertically in a column. The default value is false.
2234
+ */
2235
+ horizontal?: boolean | null;
2236
+
2237
+ /**
2238
+ * If sticky headers should stick at the bottom instead of the top of the
2239
+ * ScrollView. This is usually used with inverted ScrollViews.
2240
+ */
2241
+ // invertStickyHeaders?: boolean;
2242
+
2243
+ /**
2244
+ * Determines whether the keyboard gets dismissed in response to a drag.
2245
+ * - 'none' (the default) drags do not dismiss the keyboard.
2246
+ * - 'onDrag' the keyboard is dismissed when a drag begins.
2247
+ * - 'interactive' the keyboard is dismissed interactively with the drag
2248
+ * and moves in synchrony with the touch; dragging upwards cancels the
2249
+ * dismissal.
2250
+ */
2251
+ // keyboardDismissMode?: "none" | "interactive" | "on-drag";
2252
+
2253
+ /**
2254
+ * Determines when the keyboard should stay visible after a tap.
2255
+ * - 'never' (the default), tapping outside of the focused text input when the keyboard is up dismisses the keyboard. When this happens, children won't receive the tap.
2256
+ * - 'always', the keyboard will not dismiss automatically, and the scroll view will not catch taps, but children of the scroll view can catch taps.
2257
+ * - 'handled', the keyboard will not dismiss automatically when the tap was handled by a children, (or captured by an ancestor).
2258
+ * - false, deprecated, use 'never' instead
2259
+ * - true, deprecated, use 'always' instead
2260
+ */
2261
+ keyboardShouldPersistTaps?: boolean | "always" | "never" | "handled";
2262
+
2263
+ /**
2264
+ * Called when scrollable content view of the ScrollView changes.
2265
+ * Handler function is passed the content width and content height as parameters: (contentWidth, contentHeight)
2266
+ * It's implemented using onLayout handler attached to the content container which this ScrollView renders.
2267
+ *
2268
+ */
2269
+ // onContentSizeChange?: (w: number, h: number) => void;
2270
+
2271
+ /**
2272
+ * Fires at most once per frame during scrolling.
2273
+ * The frequency of the events can be contolled using the scrollEventThrottle prop.
2274
+ */
2275
+ onScroll?: (event: any) => void;
2276
+
2277
+ /**
2278
+ * Fires if a user initiates a scroll gesture.
2279
+ */
2280
+ // onScrollBeginDrag?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
2281
+
2282
+ /**
2283
+ * Fires when a user has finished scrolling.
2284
+ */
2285
+ // onScrollEndDrag?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
2286
+
2287
+ /**
2288
+ * Fires when scroll view has finished moving
2289
+ */
2290
+ // onMomentumScrollEnd?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
2291
+
2292
+ /**
2293
+ * Fires when scroll view has begun moving
2294
+ */
2295
+ // onMomentumScrollBegin?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
2296
+
2297
+ /**
2298
+ * When true the scroll view stops on multiples of the scroll view's size
2299
+ * when scrolling. This can be used for horizontal pagination. The default
2300
+ * value is false.
2301
+ */
2302
+ // pagingEnabled?: boolean;
2303
+
2304
+ /**
2305
+ * When false, the content does not scroll. The default value is true
2306
+ */
2307
+ // scrollEnabled?: boolean; // true
2308
+
2309
+ /**
2310
+ * Experimental: When true offscreen child views (whose `overflow` value is
2311
+ * `hidden`) are removed from their native backing superview when offscreen.
2312
+ * This canimprove scrolling performance on long lists. The default value is
2313
+ * false.
2314
+ */
2315
+ // removeClippedSubviews?: boolean;
2316
+
2317
+ /**
2318
+ * When true, shows a horizontal scroll indicator.
2319
+ */
2320
+ // showsHorizontalScrollIndicator?: boolean;
2321
+
2322
+ /**
2323
+ * When true, shows a vertical scroll indicator.
2324
+ */
2325
+ // showsVerticalScrollIndicator?: boolean;
2326
+
2327
+ /**
2328
+ * Style
2329
+ */
2330
+ style?: any;
2331
+
2332
+ /**
2333
+ * A RefreshControl component, used to provide pull-to-refresh
2334
+ * functionality for the ScrollView.
2335
+ */
2336
+ // refreshControl?: React.ReactElement<RefreshControlProps>;
2337
+
2338
+ /**
2339
+ * When `snapToInterval` is set, `snapToAlignment` will define the relationship of the the snapping to the scroll view.
2340
+ * - `start` (the default) will align the snap at the left (horizontal) or top (vertical)
2341
+ * - `center` will align the snap in the center
2342
+ * - `end` will align the snap at the right (horizontal) or bottom (vertical)
2343
+ */
2344
+ // snapToAlignment?: "start" | "center" | "end";
2345
+
2346
+ /**
2347
+ * When set, causes the scroll view to stop at multiples of the value of `snapToInterval`.
2348
+ * This can be used for paginating through children that have lengths smaller than the scroll view.
2349
+ * Used in combination with `snapToAlignment` and `decelerationRate="fast"`. Overrides less
2350
+ * configurable `pagingEnabled` prop.
2351
+ */
2352
+ // snapToInterval?: number;
2353
+
2354
+ /**
2355
+ * When set, causes the scroll view to stop at the defined offsets. This can be used for
2356
+ * paginating through variously sized children that have lengths smaller than the scroll view.
2357
+ * Typically used in combination with `decelerationRate="fast"`. Overrides less configurable
2358
+ * `pagingEnabled` and `snapToInterval` props.
2359
+ */
2360
+ // snapToOffsets?: number[];
2361
+
2362
+ /**
2363
+ * Use in conjuction with `snapToOffsets`. By default, the beginning of the list counts as a
2364
+ * snap offset. Set `snapToStart` to false to disable this behavior and allow the list to scroll
2365
+ * freely between its start and the first `snapToOffsets` offset. The default value is true.
2366
+ */
2367
+ // snapToStart?: boolean;
2368
+
2369
+ /**
2370
+ * Use in conjuction with `snapToOffsets`. By default, the end of the list counts as a snap
2371
+ * offset. Set `snapToEnd` to false to disable this behavior and allow the list to scroll freely
2372
+ * between its end and the last `snapToOffsets` offset. The default value is true.
2373
+ */
2374
+ // snapToEnd?: boolean;
2375
+
2376
+ /**
2377
+ * When true, the scroll view stops on the next index (in relation to scroll position at release)
2378
+ * regardless of how fast the gesture is. This can be used for horizontal pagination when the page
2379
+ * is less than the width of the ScrollView. The default value is false.
2380
+ */
2381
+ // disableIntervalMomentum?: boolean;
2382
+
2383
+ /**
2384
+ * When true, the default JS pan responder on the ScrollView is disabled, and full control over
2385
+ * touches inside the ScrollView is left to its child components. This is particularly useful
2386
+ * if `snapToInterval` is enabled, since it does not follow typical touch patterns. Do not use
2387
+ * this on regular ScrollView use cases without `snapToInterval` as it may cause unexpected
2388
+ * touches to occur while scrolling. The default value is false.
2389
+ */
2390
+ // disableScrollViewPanResponder?: boolean;
2391
+ // scrollToEnd(options?: {animated: boolean}): void;
2392
+ // getScrollResponder(): JSX.Element;
2393
+ // getScrollableNode(): any;
2394
+ }
2395
+
2396
+ type ItemT = any;
2397
+ type ViewStyle = any;
2398
+ export interface StyleProp {
2399
+ [key: string]: any;
2400
+ }
2401
+
2402
+ interface LayoutRectangle {
2403
+ x: number;
2404
+ y: number;
2405
+ width: number;
2406
+ height: number;
2407
+ }
2408
+
2409
+ interface LayoutChangeEvent {
2410
+ nativeEvent: {
2411
+ layout: LayoutRectangle;
2412
+ };
2413
+ }
2414
+
2415
+ interface RenderItemData {
2416
+ item: any;
2417
+ index: number;
2418
+ }
2419
+
2420
+ export interface FlatListProps extends ScrollViewProps {
2421
+ /**
2422
+ * Rendered in between each item, but not at the top or bottom
2423
+ */
2424
+ ItemSeparatorComponent?: React.ComponentType<any> | null;
2425
+
2426
+ /**
2427
+ * Rendered when the list is empty.
2428
+ */
2429
+ ListEmptyComponent?: React.ComponentType<any> | React.ReactElement | null;
2430
+
2431
+ /**
2432
+ * Rendered at the very end of the list.
2433
+ */
2434
+ ListFooterComponent?: React.ComponentType<any> | React.ReactElement | null;
2435
+
2436
+ /**
2437
+ * Styling for internal View for ListFooterComponent
2438
+ */
2439
+ ListFooterComponentStyle?: ViewStyle | null;
2440
+
2441
+ /**
2442
+ * Rendered at the very beginning of the list.
2443
+ */
2444
+ ListHeaderComponent?: React.ComponentType<any> | React.ReactElement | null;
2445
+
2446
+ /**
2447
+ * Styling for internal View for ListHeaderComponent
2448
+ */
2449
+ ListHeaderComponentStyle?: ViewStyle | null;
2450
+
2451
+ /**
2452
+ * Optional custom style for multi-item rows generated when numColumns > 1
2453
+ */
2454
+ columnWrapperStyle?: StyleProp;
2455
+
2456
+ /**
2457
+ * Determines when the keyboard should stay visible after a tap.
2458
+ * - 'never' (the default), tapping outside of the focused text input when the keyboard is up dismisses the keyboard. When this happens, children won't receive the tap.
2459
+ * - 'always', the keyboard will not dismiss automatically, and the scroll view will not catch taps, but children of the scroll view can catch taps.
2460
+ * - 'handled', the keyboard will not dismiss automatically when the tap was handled by a children, (or captured by an ancestor).
2461
+ * - false, deprecated, use 'never' instead
2462
+ * - true, deprecated, use 'always' instead
2463
+ */
2464
+ keyboardShouldPersistTaps?: boolean | "always" | "never" | "handled";
2465
+
2466
+ /**
2467
+ * Multiple columns can only be rendered with `horizontal={false}` and will zig-zag like a `flexWrap` layout.
2468
+ * Items should all be the same height - masonry layouts are not supported.
2469
+ */
2470
+ numColumns?: number;
2471
+
2472
+ /**
2473
+ * The default accessor functions assume this is an Array<{key: string}> but you can override
2474
+ * getItem, getItemCount, and keyExtractor to handle any type of index-based data.
2475
+ */
2476
+ data?: any;
2477
+
2478
+ /**
2479
+ * `debug` will turn on extra logging and visual overlays to aid with debugging both usage and
2480
+ * implementation, but with a significant perf hit.
2481
+ */
2482
+ debug?: boolean;
2483
+
2484
+ /**
2485
+ * DEPRECATED: Virtualization provides significant performance and memory optimizations, but fully
2486
+ * unmounts react instances that are outside of the render window. You should only need to disable
2487
+ * this for debugging purposes.
2488
+ */
2489
+ disableVirtualization?: boolean;
2490
+
2491
+ /**
2492
+ * A marker property for telling the list to re-render (since it implements `PureComponent`). If
2493
+ * any of your `renderItem`, Header, Footer, etc. functions depend on anything outside of the
2494
+ * `data` prop, stick it here and treat it immutably.
2495
+ */
2496
+ extraData?: any;
2497
+
2498
+ /**
2499
+ * A generic accessor for extracting an item from any sort of data blob.
2500
+ */
2501
+ getItem?: (data: any, index: number) => ItemT;
2502
+
2503
+ /**
2504
+ * Determines how many items are in the data blob.
2505
+ */
2506
+ getItemCount?: (data: any) => number;
2507
+
2508
+ getItemLayout?: (
2509
+ data: any,
2510
+ index: number
2511
+ ) => {
2512
+ length: number;
2513
+ offset: number;
2514
+ index: number;
2515
+ };
2516
+
2517
+ horizontal?: boolean | null;
2518
+
2519
+ /**
2520
+ * How many items to render in the initial batch. This should be enough to fill the screen but not
2521
+ * much more. Note these items will never be unmounted as part of the windowed rendering in order
2522
+ * to improve perceived performance of scroll-to-top actions.
2523
+ */
2524
+ initialNumToRender?: number;
2525
+
2526
+ /**
2527
+ * Instead of starting at the top with the first item, start at `initialScrollIndex`. This
2528
+ * disables the "scroll to top" optimization that keeps the first `initialNumToRender` items
2529
+ * always rendered and immediately renders the items starting at this initial index. Requires
2530
+ * `getItemLayout` to be implemented.
2531
+ */
2532
+ initialScrollIndex?: number | null;
2533
+
2534
+ /**
2535
+ * Reverses the direction of scroll. Uses scale transforms of -1.
2536
+ */
2537
+ inverted?: boolean | null;
2538
+
2539
+ keyExtractor?: (item: ItemT, index: number) => string;
2540
+
2541
+ listKey?: string;
2542
+
2543
+ /**
2544
+ * The maximum number of items to render in each incremental render batch. The more rendered at
2545
+ * once, the better the fill rate, but responsiveness my suffer because rendering content may
2546
+ * interfere with responding to button taps or other interactions.
2547
+ */
2548
+ maxToRenderPerBatch?: number;
2549
+
2550
+ onEndReached?: ((info: {distanceFromEnd: number}) => void) | null;
2551
+
2552
+ onEndReachedThreshold?: number | null;
2553
+
2554
+ onLayout?: (event: LayoutChangeEvent) => void;
2555
+
2556
+ /**
2557
+ * If provided, a standard RefreshControl will be added for "Pull to Refresh" functionality. Make
2558
+ * sure to also set the `refreshing` prop correctly.
2559
+ */
2560
+ onRefresh?: (() => void) | null;
2561
+
2562
+ /**
2563
+ * Used to handle failures when scrolling to an index that has not been measured yet.
2564
+ * Recommended action is to either compute your own offset and `scrollTo` it, or scroll as far
2565
+ * as possible and then try again after more items have been rendered.
2566
+ */
2567
+ onScrollToIndexFailed?: (info: {
2568
+ index: number;
2569
+ highestMeasuredFrameIndex: number;
2570
+ averageItemLength: number;
2571
+ }) => void;
2572
+
2573
+ /**
2574
+ * Called when the viewability of rows changes, as defined by the
2575
+ * `viewabilityConfig` prop.
2576
+ */
2577
+ onViewableItemsChanged?: ((info: {viewableItems: any[]; changed: any[]}) => void) | null;
2578
+
2579
+ /**
2580
+ * Set this when offset is needed for the loading indicator to show correctly.
2581
+ * @platform android
2582
+ */
2583
+ progressViewOffset?: number;
2584
+
2585
+ /**
2586
+ * Set this true while waiting for new data from a refresh.
2587
+ */
2588
+ refreshing?: boolean | null;
2589
+
2590
+ /**
2591
+ * Note: may have bugs (missing content) in some circumstances - use at your own risk.
2592
+ *
2593
+ * This may improve scroll performance for large lists.
2594
+ */
2595
+ removeClippedSubviews?: boolean;
2596
+
2597
+ /**
2598
+ * Render a custom scroll component, e.g. with a differently styled `RefreshControl`.
2599
+ */
2600
+ renderScrollComponent?: (props: ScrollViewProps) => React.ReactElement<ScrollViewProps>;
2601
+
2602
+ /**
2603
+ * Amount of time between low-pri item render batches, e.g. for rendering items quite a ways off
2604
+ * screen. Similar fill rate/responsiveness tradeoff as `maxToRenderPerBatch`.
2605
+ */
2606
+ updateCellsBatchingPeriod?: number;
2607
+
2608
+ viewabilityConfig?: any;
2609
+
2610
+ viewabilityConfigCallbackPairs?: any;
2611
+
2612
+ /**
2613
+ * Determines the maximum number of items rendered outside of the visible area, in units of
2614
+ * visible lengths. So if your list fills the screen, then `windowSize={21}` (the default) will
2615
+ * render the visible screen area plus up to 10 screens above and 10 below the viewport. Reducing
2616
+ * this number will reduce memory consumption and may improve performance, but will increase the
2617
+ * chance that fast scrolling may reveal momentary blank areas of unrendered content.
2618
+ */
2619
+ windowSize?: number;
2620
+
2621
+ renderItem: (info: RenderItemData) => React.ReactElement | null;
2622
+ }
2623
+
2624
+ export interface PickerProps {
2625
+ onValueChange?: (itemValue: any, itemPosition: number) => void;
2626
+ selectedValue?: any;
2627
+ style?: StyleProp;
2628
+ testID?: string;
2629
+ itemStyle?: StyleProp;
2630
+ enabled?: boolean;
2631
+ mode?: "dialog" | "dropdown";
2632
+ prompt?: string;
2633
+ }
2634
+
2635
+ export interface SplitPageProps {
2636
+ /**
2637
+ * can accept either one React Child or any array of ReactChild. If this is not provided,
2638
+ * renderContent must return one or many ReactChild.
2639
+ */
2640
+ children?: ReactChild | ReactChild[] | null;
2641
+ /**
2642
+ * The names of the tabs that will be generated per ReactChild provided. Tabs will not be generated if renderContent is provided in place of children
2643
+ */
2644
+ tabs?: string[];
2645
+ // The select limit for the number of tabs that can be selected
2646
+ selectLimit?: number;
2647
+ // Provide in mobile if you have a bottomTabBar so that split page can adjust accordingly
2648
+ bottomNavBarHeight?: number;
2649
+ // boolean to initiate and handle state from the app that has imported ferns-ui
2650
+ showItemList?: boolean;
2651
+ loading?: boolean;
2652
+ color?: Color;
2653
+ keyboardOffset?: number;
2654
+ renderListViewItem: (itemInfo: ListRenderItemInfo<any>) => ReactElement | null;
2655
+ renderListViewHeader?: () => ReactElement | null;
2656
+ renderContent?: (index?: number) => ReactElement | ReactElement[] | null;
2657
+ listViewData: any[];
2658
+ listViewExtraData?: any;
2659
+ listViewWidth?: number;
2660
+ renderChild?: () => ReactChild;
2661
+ onSelectionChange?: (value?: any) => void | Promise<void>;
2662
+ }
2663
+
2664
+ export type LogLevel = "fatal" | "error" | "warning" | "info" | "debug" | "critical";
2665
+ export type PermissionKind =
2666
+ | "location"
2667
+ | "locationAlways"
2668
+ | "camera"
2669
+ | "microphone"
2670
+ | "photo"
2671
+ | "contacts"
2672
+ | "event"
2673
+ | "reminder"
2674
+ | "bluetooth"
2675
+ | "notification"
2676
+ | "backgroundRefresh"
2677
+ | "speechRecognition"
2678
+ | "mediaLibrary"
2679
+ | "motion";
2680
+ export type PermissionStatus =
2681
+ | "authorized"
2682
+ | "denied"
2683
+ | "softDenied"
2684
+ | "restricted"
2685
+ | "undetermined";
2686
+
2687
+ export interface TrackingProperties {
2688
+ [name: string]: any;
2689
+ }
2690
+
2691
+ export function isTestUser(profile?: BaseProfile) {
2692
+ return (
2693
+ profile &&
2694
+ profile.email &&
2695
+ (profile.email.indexOf("nang.io") > -1 || profile.email.indexOf("example.com") > -1)
2696
+ );
2697
+ }
2698
+
2699
+ export interface TrackerInterface {
2700
+ initFinished: boolean;
2701
+ init: (config: TrackingConfig) => void;
2702
+ trackPages: () => void;
2703
+ setUser: (user: BaseProfile) => void;
2704
+ setUserProperty: (property: string, value: string | {object: {[id: string]: any}}) => void;
2705
+ track: (eventName: string, properties?: TrackingProperties) => void;
2706
+ trackNavigation: (screen: string, properties?: TrackingProperties) => void;
2707
+ trackLogin: (method: string, success: boolean, properties?: TrackingProperties) => void;
2708
+ trackSignup: (method: string, success: boolean, properties?: TrackingProperties) => void;
2709
+ trackSignOut: () => void;
2710
+ log: (message: string, properties?: TrackingProperties, level?: LogLevel) => void;
2711
+ error: (message: string, properties?: TrackingProperties) => void;
2712
+ warn: (message: string, properties?: TrackingProperties) => void;
2713
+ debug: (message: string, properties?: TrackingProperties) => void;
2714
+ handleErrorAlert: (text: string, exception?: Error, showAlert?: boolean) => void;
2715
+ trackPermission: (kind: PermissionKind, status: PermissionStatus, requested: boolean) => void;
2716
+ updateAppInfo: () => void;
2717
+ }
2718
+
2719
+ export interface NavConfig {
2720
+ url?: string;
2721
+ wrapper?: (component: any) => any;
2722
+ store?: any;
2723
+ provider?: any;
2724
+ }
2725
+
2726
+ export interface ProgressBarProps {
2727
+ color: Color;
2728
+ completed: number;
2729
+ }
2730
+
2731
+ export interface AddressInterface {
2732
+ address1: string;
2733
+ address2?: string;
2734
+ city: string;
2735
+ state: string;
2736
+ zipcode: string;
2737
+ }
2738
+
2739
+ // TODO: Tighten up type to exclude string, which is almost never an acceptable type for React Native children
2740
+ // (except Heading or Text for example.).
2741
+ export type ReactChild = ReactNode;
2742
+ export type ReactChildren = ReactNode;
2743
+ export type WithChildren<P> = P & {children?: ReactNode};