@sincpro/mobile-ui 3.0.0 → 3.1.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 (308) hide show
  1. package/dist/Actions/Actions.Button.d.ts +6 -6
  2. package/dist/Actions/Actions.Button.js +650 -180
  3. package/dist/Actions/Actions.Dock.d.ts +1 -1
  4. package/dist/Actions/Actions.Dock.js +297 -18
  5. package/dist/Actions/Actions.FAB.js +100 -12
  6. package/dist/Actions/Actions.FilterButton.d.ts +17 -0
  7. package/dist/Actions/Actions.FilterButton.js +263 -33
  8. package/dist/Actions/Actions.IconButton.d.ts +1 -0
  9. package/dist/Actions/Actions.IconButton.js +196 -33
  10. package/dist/Actions/index.js +13 -13
  11. package/dist/Dialog/Confirmation.context.js +82 -16
  12. package/dist/Dialog/Dialog.ActionSheet.js +200 -41
  13. package/dist/Dialog/Dialog.Confirmation.js +168 -31
  14. package/dist/Dialog/Dialog.EditValue.js +449 -61
  15. package/dist/Dialog/Dialog.Sheet.d.ts +7 -3
  16. package/dist/Dialog/Dialog.Sheet.js +231 -15
  17. package/dist/Dialog/OverlayHost.d.ts +23 -0
  18. package/dist/Dialog/OverlayHost.js +196 -0
  19. package/dist/Dialog/SheetSurface.d.ts +24 -0
  20. package/dist/Dialog/SheetSurface.js +441 -0
  21. package/dist/Dialog/dialog-actions.d.ts +17 -0
  22. package/dist/Dialog/dialog-actions.js +59 -0
  23. package/dist/Dialog/index.d.ts +4 -1
  24. package/dist/Dialog/index.js +8 -7
  25. package/dist/Dialog/overlay.store.d.ts +24 -0
  26. package/dist/Dialog/overlay.store.js +59 -0
  27. package/dist/Dialog/requestConfirmation.js +20 -10
  28. package/dist/Display/Display.Accordion.js +185 -13
  29. package/dist/Display/Display.AmountSummary.js +206 -15
  30. package/dist/Display/Display.Avatar.js +93 -31
  31. package/dist/Display/Display.AvatarGroup.js +132 -17
  32. package/dist/Display/Display.Badge.d.ts +18 -2
  33. package/dist/Display/Display.Badge.js +117 -49
  34. package/dist/Display/Display.Card.js +163 -26
  35. package/dist/Display/Display.Carousel.js +459 -105
  36. package/dist/Display/Display.Chip.d.ts +4 -1
  37. package/dist/Display/Display.Chip.js +165 -31
  38. package/dist/Display/Display.CircleButton.d.ts +1 -0
  39. package/dist/Display/Display.CircleButton.js +86 -27
  40. package/dist/Display/Display.CopyableText.js +289 -66
  41. package/dist/Display/Display.CountRecords.js +60 -3
  42. package/dist/Display/Display.DataTable.js +123 -13
  43. package/dist/Display/Display.Date.js +243 -33
  44. package/dist/Display/Display.Divider.d.ts +10 -10
  45. package/dist/Display/Display.Divider.js +67 -20
  46. package/dist/Display/Display.ExpoImage.js +97 -8
  47. package/dist/Display/Display.GradientSurface.d.ts +9 -4
  48. package/dist/Display/Display.GradientSurface.js +196 -46
  49. package/dist/Display/Display.Icon.js +129 -15
  50. package/dist/Display/Display.IconBadge.js +95 -25
  51. package/dist/Display/Display.Image.d.ts +7 -1
  52. package/dist/Display/Display.Image.js +344 -39
  53. package/dist/Display/Display.KeyValue.js +90 -5
  54. package/dist/Display/Display.ListGroup.js +181 -9
  55. package/dist/Display/Display.ListItem.js +324 -28
  56. package/dist/Display/Display.Logo.js +84 -29
  57. package/dist/Display/Display.MediaCard.js +125 -4
  58. package/dist/Display/Display.MediaEmbed.d.ts +0 -5
  59. package/dist/Display/Display.MediaEmbed.js +170 -26
  60. package/dist/Display/Display.MenuButton.d.ts +2 -2
  61. package/dist/Display/Display.MenuButton.js +380 -94
  62. package/dist/Display/Display.MenuCard.js +122 -18
  63. package/dist/Display/Display.MenuGrid.js +43 -3
  64. package/dist/Display/Display.Monetary.js +90 -5
  65. package/dist/Display/Display.Pattern.js +306 -47
  66. package/dist/Display/Display.PriceTag.js +117 -14
  67. package/dist/Display/Display.ProductCard.js +154 -4
  68. package/dist/Display/Display.Rating.js +92 -11
  69. package/dist/Display/Display.SearchHistory.js +132 -6
  70. package/dist/Display/Display.SectionHeader.d.ts +5 -1
  71. package/dist/Display/Display.SectionHeader.js +125 -12
  72. package/dist/Display/Display.Stat.js +62 -3
  73. package/dist/Display/Display.StatCard.js +131 -7
  74. package/dist/Display/Display.StatusBadge.d.ts +29 -0
  75. package/dist/Display/Display.StatusBadge.js +68 -0
  76. package/dist/Display/Display.StatusDot.js +93 -18
  77. package/dist/Display/Display.Story.js +285 -35
  78. package/dist/Display/Display.StoryTray.js +354 -34
  79. package/dist/Display/Display.StoryViewer.js +571 -72
  80. package/dist/Display/Display.SwipeableRow.js +141 -20
  81. package/dist/Display/Display.Tag.d.ts +4 -1
  82. package/dist/Display/Display.Tag.js +66 -4
  83. package/dist/Display/Display.Timeline.js +102 -13
  84. package/dist/Display/Display.Tooltip.js +122 -26
  85. package/dist/Display/chevron.d.ts +6 -0
  86. package/dist/Display/chevron.js +32 -0
  87. package/dist/Display/count-badge.d.ts +21 -0
  88. package/dist/Display/count-badge.js +124 -0
  89. package/dist/Display/group-title.d.ts +10 -0
  90. package/dist/Display/group-title.js +53 -0
  91. package/dist/Display/icon-font.d.ts +3 -0
  92. package/dist/Display/icon-font.ios.d.ts +3 -0
  93. package/dist/Display/icon-font.ios.js +4 -0
  94. package/dist/Display/icon-font.js +7 -0
  95. package/dist/Display/icon-glyphs.d.ts +2 -0
  96. package/dist/Display/icon-glyphs.js +87 -0
  97. package/dist/Display/icon-map.d.ts +5 -1
  98. package/dist/Display/icon-map.js +340 -84
  99. package/dist/Display/icon-registry.d.ts +21 -0
  100. package/dist/Display/icon-registry.js +21 -0
  101. package/dist/Display/index.d.ts +6 -1
  102. package/dist/Display/index.js +53 -48
  103. package/dist/Display/pill.d.ts +16 -0
  104. package/dist/Display/pill.js +47 -0
  105. package/dist/Feedback/ErrorBoundary.js +35 -23
  106. package/dist/Feedback/Feedback.Banner.js +202 -24
  107. package/dist/Feedback/Feedback.DomainSplashScreen.js +246 -70
  108. package/dist/Feedback/Feedback.Empty.js +54 -3
  109. package/dist/Feedback/Feedback.EmptyState.js +114 -5
  110. package/dist/Feedback/Feedback.Error.d.ts +1 -1
  111. package/dist/Feedback/Feedback.Error.js +130 -5
  112. package/dist/Feedback/Feedback.Loading.d.ts +1 -1
  113. package/dist/Feedback/Feedback.Loading.js +70 -3
  114. package/dist/Feedback/Feedback.PermissionCard.js +161 -5
  115. package/dist/Feedback/Feedback.Progress.js +199 -41
  116. package/dist/Feedback/Feedback.ProgressCircle.js +184 -12
  117. package/dist/Feedback/Feedback.Skeleton.js +149 -36
  118. package/dist/Feedback/Feedback.Spinner.js +407 -79
  119. package/dist/Feedback/Feedback.Splash.js +240 -33
  120. package/dist/Feedback/Feedback.State.d.ts +17 -0
  121. package/dist/Feedback/Feedback.State.js +104 -0
  122. package/dist/Feedback/Toast.context.js +883 -167
  123. package/dist/Feedback/index.d.ts +3 -0
  124. package/dist/Feedback/index.js +15 -13
  125. package/dist/Form/Form.Checkbox.js +212 -22
  126. package/dist/Form/Form.ControlledCheckbox.d.ts +1 -1
  127. package/dist/Form/Form.ControlledCheckbox.js +46 -4
  128. package/dist/Form/Form.ControlledDropdown.d.ts +1 -1
  129. package/dist/Form/Form.ControlledDropdown.js +62 -4
  130. package/dist/Form/Form.ControlledInput.d.ts +4 -3
  131. package/dist/Form/Form.ControlledInput.js +72 -4
  132. package/dist/Form/Form.ControlledMonetaryInput.d.ts +6 -3
  133. package/dist/Form/Form.ControlledMonetaryInput.js +50 -4
  134. package/dist/Form/Form.ControlledRadioButton.d.ts +2 -2
  135. package/dist/Form/Form.ControlledRadioButton.js +45 -4
  136. package/dist/Form/Form.DatePicker.js +505 -107
  137. package/dist/Form/Form.Dropdown.js +303 -52
  138. package/dist/Form/Form.ErrorSummary.js +236 -44
  139. package/dist/Form/Form.Field.d.ts +24 -0
  140. package/dist/Form/Form.Field.js +55 -0
  141. package/dist/Form/Form.FractionalQuantityInput.js +508 -96
  142. package/dist/Form/Form.Input.d.ts +17 -3
  143. package/dist/Form/Form.Input.js +478 -29
  144. package/dist/Form/Form.KeyboardForm.d.ts +22 -8
  145. package/dist/Form/Form.KeyboardForm.js +83 -8
  146. package/dist/Form/Form.KeyboardToolbarHost.d.ts +14 -0
  147. package/dist/Form/Form.KeyboardToolbarHost.js +182 -0
  148. package/dist/Form/Form.MonetaryInput.js +164 -17
  149. package/dist/Form/Form.PickerField.d.ts +31 -0
  150. package/dist/Form/Form.PickerField.js +562 -0
  151. package/dist/Form/Form.PinInput.js +150 -15
  152. package/dist/Form/Form.QuantitySelector.js +229 -25
  153. package/dist/Form/Form.RadioButton.js +132 -24
  154. package/dist/Form/Form.Select.js +487 -56
  155. package/dist/Form/Form.Slider.js +133 -10
  156. package/dist/Form/Form.Switch.js +99 -4
  157. package/dist/Form/index.d.ts +11 -6
  158. package/dist/Form/index.js +26 -27
  159. package/dist/Form/input-text.d.ts +7 -0
  160. package/dist/Form/input-text.js +18 -0
  161. package/dist/Navigation/Navigation.AppBar.d.ts +3 -4
  162. package/dist/Navigation/Navigation.AppBar.js +535 -99
  163. package/dist/Navigation/Navigation.BottomNav.js +363 -98
  164. package/dist/Navigation/Navigation.CollapsingHeader.d.ts +28 -13
  165. package/dist/Navigation/Navigation.CollapsingHeader.js +369 -36
  166. package/dist/Navigation/Navigation.FloatingBar.js +71 -11
  167. package/dist/Navigation/Navigation.Menu.js +309 -95
  168. package/dist/Navigation/Navigation.MenuSection.js +80 -11
  169. package/dist/Navigation/Navigation.RowItem.d.ts +4 -2
  170. package/dist/Navigation/Navigation.RowItem.js +93 -8
  171. package/dist/Navigation/Navigation.Search.js +241 -27
  172. package/dist/Navigation/Navigation.SearchBar.d.ts +7 -1
  173. package/dist/Navigation/Navigation.SearchBar.js +218 -29
  174. package/dist/Navigation/Navigation.SearchSuggestions.js +77 -3
  175. package/dist/Navigation/Navigation.SegmentedControl.js +152 -14
  176. package/dist/Navigation/Navigation.Steps.js +105 -11
  177. package/dist/Navigation/Navigation.Tabs.js +449 -41
  178. package/dist/Navigation/index.d.ts +9 -4
  179. package/dist/Navigation/index.js +13 -13
  180. package/dist/Typography/Typography.Heading.js +33 -3
  181. package/dist/Typography/Typography.SelectableText.js +95 -7
  182. package/dist/Typography/Typography.Text.d.ts +4 -2
  183. package/dist/Typography/Typography.Text.js +217 -7
  184. package/dist/Typography/index.js +3 -3
  185. package/dist/branding.js +29 -13
  186. package/dist/icons/AddItemIcon.js +76 -2
  187. package/dist/icons/ArrangeCircle.js +82 -2
  188. package/dist/icons/ArrowDownIcon.js +63 -3
  189. package/dist/icons/ArrowUpIcon.js +63 -3
  190. package/dist/icons/BoxIcon.js +64 -2
  191. package/dist/icons/BoxTimeIcon.js +63 -2
  192. package/dist/icons/CalendarIcon.js +145 -2
  193. package/dist/icons/CardIcon.js +80 -2
  194. package/dist/icons/CashierIcon.js +39 -2
  195. package/dist/icons/CreditIcon.js +76 -3
  196. package/dist/icons/DuoIcon.js +75 -2
  197. package/dist/icons/HomeIcon.js +39 -2
  198. package/dist/icons/HomeIconOutlined.js +53 -2
  199. package/dist/icons/LogoIcon.js +87 -2
  200. package/dist/icons/MoneyReceiveIcon.js +86 -2
  201. package/dist/icons/PinIcon.js +39 -2
  202. package/dist/icons/ProfileIcon.js +47 -2
  203. package/dist/icons/SettingsIcon.js +114 -2
  204. package/dist/icons/SinpeIcon.js +60 -2
  205. package/dist/icons/ToggleOffIcon.js +53 -2
  206. package/dist/icons/WalletMoneyIcon.js +81 -2
  207. package/dist/index.d.ts +1 -0
  208. package/dist/index.js +8 -2
  209. package/dist/layouts/AuthContainer.d.ts +4 -5
  210. package/dist/layouts/AuthContainer.js +231 -7
  211. package/dist/layouts/BottomInset.js +4 -1
  212. package/dist/layouts/Container.d.ts +2 -2
  213. package/dist/layouts/Container.js +45 -3
  214. package/dist/layouts/GradientContainer.js +37 -5
  215. package/dist/layouts/PlainLayout.js +19 -3
  216. package/dist/layouts/ScrollContainer.d.ts +14 -9
  217. package/dist/layouts/ScrollContainer.js +125 -4
  218. package/dist/layouts/edges.d.ts +2 -0
  219. package/dist/layouts/edges.js +1 -0
  220. package/dist/primitives/AspectRatio.js +75 -3
  221. package/dist/primitives/Box.js +45 -3
  222. package/dist/primitives/Pressable.js +95 -5
  223. package/dist/primitives/Row.js +84 -13
  224. package/dist/primitives/Spacer.js +42 -5
  225. package/dist/primitives/Stack.js +66 -7
  226. package/dist/primitives/index.js +1 -1
  227. package/dist/theme/active.js +20 -18
  228. package/dist/theme/build.js +118 -87
  229. package/dist/theme/color.js +87 -87
  230. package/dist/theme/components/ThemedActivityIndicator.d.ts +2 -15
  231. package/dist/theme/components/ThemedActivityIndicator.js +35 -3
  232. package/dist/theme/components/index.js +1 -0
  233. package/dist/theme/contrast.js +32 -33
  234. package/dist/theme/css-vars.js +71 -75
  235. package/dist/theme/dark.js +116 -97
  236. package/dist/theme/default.js +116 -97
  237. package/dist/theme/define.js +16 -12
  238. package/dist/theme/index.d.ts +1 -0
  239. package/dist/theme/index.js +7 -6
  240. package/dist/theme/on-dark-surface.d.ts +12 -0
  241. package/dist/theme/on-dark-surface.js +13 -0
  242. package/dist/theme/theme.js +1 -0
  243. package/dist/theme/tw.js +3 -1
  244. package/dist/theme/types.js +0 -18
  245. package/dist/theme/typography.d.ts +1 -1
  246. package/dist/theme/typography.js +337 -303
  247. package/dist/theme/useTheme.js +12 -3
  248. package/dist/theme/useThemeVars.d.ts +9 -0
  249. package/dist/theme/useThemeVars.js +23 -0
  250. package/dist/theme/validate.js +175 -166
  251. package/dist/tokens/index.js +1 -1
  252. package/dist/tokens/motion.js +30 -13
  253. package/dist/utils/async.d.ts +14 -0
  254. package/dist/utils/async.js +22 -0
  255. package/dist/utils/criteria.js +66 -85
  256. package/dist/utils/date.d.ts +8 -2
  257. package/dist/utils/date.js +63 -50
  258. package/dist/utils/image.js +8 -8
  259. package/dist/utils/intl.d.ts +1 -0
  260. package/dist/utils/intl.js +13 -0
  261. package/dist/utils/keys.js +3 -5
  262. package/dist/utils/monetary.d.ts +1 -0
  263. package/dist/utils/monetary.js +28 -24
  264. package/dist/utils/progress.js +2 -3
  265. package/dist/utils/quantity.js +25 -26
  266. package/dist/utils/reorder.js +11 -20
  267. package/dist/utils/search.d.ts +4 -0
  268. package/dist/utils/search.js +12 -0
  269. package/dist/utils/serializer.js +38 -38
  270. package/dist/utils/useReducedMotion.js +32 -30
  271. package/dist/views/AppSplashView.js +117 -3
  272. package/dist/views/AuthFormView.d.ts +4 -5
  273. package/dist/views/AuthFormView.js +119 -11
  274. package/dist/views/FormViewV2.context.js +75 -23
  275. package/dist/views/FormViewV2.d.ts +4 -5
  276. package/dist/views/FormViewV2.js +658 -92
  277. package/dist/views/ListViewV2.context.js +91 -47
  278. package/dist/views/ListViewV2.d.ts +84 -43
  279. package/dist/views/ListViewV2.js +1350 -200
  280. package/dist/views/Wizard/Wizard.context.js +248 -84
  281. package/dist/views/Wizard/Wizard.js +260 -67
  282. package/dist/views/types/IListView.js +34 -31
  283. package/dist/widgets/CollectionOptions.js +557 -138
  284. package/dist/widgets/FilterBar.js +159 -7
  285. package/dist/widgets/FilterBuilder.js +375 -102
  286. package/dist/widgets/JSONViewer.js +275 -129
  287. package/dist/widgets/PromoBanner.js +336 -42
  288. package/dist/widgets/PromoModal.d.ts +2 -2
  289. package/dist/widgets/PromoModal.js +389 -62
  290. package/dist/widgets/QueryChoice.js +150 -8
  291. package/dist/widgets/QuickActions.js +120 -31
  292. package/dist/widgets/ReorderableList.js +399 -128
  293. package/dist/widgets/TimeZoneSelectorModal.js +458 -51
  294. package/dist/widgets/index.js +3 -3
  295. package/package.json +7 -2
  296. package/tailwind.preset.js +7 -5
  297. package/dist/Form/Form.InputField.d.ts +0 -10
  298. package/dist/Form/Form.InputField.js +0 -38
  299. package/dist/Form/Form.KeyboardToolbar.d.ts +0 -22
  300. package/dist/Form/Form.KeyboardToolbar.js +0 -66
  301. package/dist/Form/Form.PasswordInput.d.ts +0 -9
  302. package/dist/Form/Form.PasswordInput.js +0 -17
  303. package/dist/Form/Form.TextInput.d.ts +0 -8
  304. package/dist/Form/Form.TextInput.js +0 -8
  305. package/dist/primitives/BaseButton.d.ts +0 -150
  306. package/dist/primitives/BaseButton.js +0 -229
  307. package/dist/utils/useSheetTranslation.d.ts +0 -5
  308. package/dist/utils/useSheetTranslation.js +0 -23
@@ -1,361 +1,395 @@
1
- import { IBMPlexMono_400Regular, IBMPlexMono_500Medium, } from "@expo-google-fonts/ibm-plex-mono";
2
- import { IBMPlexSans_300Light, IBMPlexSans_400Regular, IBMPlexSans_500Medium, IBMPlexSans_600SemiBold, IBMPlexSans_700Bold, useFonts, } from "@expo-google-fonts/ibm-plex-sans";
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { IBMPlexMono_400Regular, IBMPlexMono_500Medium } from "@expo-google-fonts/ibm-plex-mono";
3
+ import { IBMPlexSans_300Light, IBMPlexSans_400Regular, IBMPlexSans_500Medium, IBMPlexSans_600SemiBold, IBMPlexSans_700Bold, useFonts } from "@expo-google-fonts/ibm-plex-sans";
4
+ import { ICON_FONTS } from "../Display/icon-font.js";
5
+
6
+ /* -------------------- Font Families ----------------------------------------
7
+ * The DS ships NO font files — it only holds FAMILY NAME strings per role.
8
+ * Each app (or Storybook) loads its own font files and wires them in via
9
+ * `configureFonts({...})`. Safe defaults: IBM Plex Sans and IBM Plex Mono,
10
+ * the same pair web UI uses. Title roles stay on Plex until an app overrides them.
11
+ *
12
+ * `fontFamilies` is a MUTABLE singleton: `configureFonts` does Object.assign
13
+ * in-place so components that read it at render time see the updated values. */
14
+
3
15
  const DEFAULT_FONT_FAMILIES = {
4
- light: "IBMPlexSans_300Light",
5
- regular: "IBMPlexSans_400Regular",
6
- medium: "IBMPlexSans_500Medium",
7
- semiBold: "IBMPlexSans_600SemiBold",
8
- extraBold: "IBMPlexSans_700Bold",
9
- mono: "IBMPlexMono_400Regular",
10
- monoMedium: "IBMPlexMono_500Medium",
11
- titleRegular: "IBMPlexSans_400Regular",
12
- titleMedium: "IBMPlexSans_500Medium",
13
- title: "IBMPlexSans_600SemiBold",
14
- titleBlack: "IBMPlexSans_700Bold",
16
+ light: "IBMPlexSans_300Light",
17
+ regular: "IBMPlexSans_400Regular",
18
+ medium: "IBMPlexSans_500Medium",
19
+ semiBold: "IBMPlexSans_600SemiBold",
20
+ extraBold: "IBMPlexSans_700Bold",
21
+ mono: "IBMPlexMono_400Regular",
22
+ monoMedium: "IBMPlexMono_500Medium",
23
+ titleRegular: "IBMPlexSans_400Regular",
24
+ titleMedium: "IBMPlexSans_500Medium",
25
+ title: "IBMPlexSans_600SemiBold",
26
+ titleBlack: "IBMPlexSans_700Bold"
15
27
  };
16
- export const fontFamilies = { ...DEFAULT_FONT_FAMILIES };
28
+ export const fontFamilies = {
29
+ ...DEFAULT_FONT_FAMILIES
30
+ };
31
+
17
32
  /**
18
33
  * Override DS font family names (role → already-loaded family name).
19
34
  * Mutates the singleton in-place so components pick up the change at render time.
20
35
  * Example: `configureFonts({ title: "YourBrandTitle-Bold", titleBlack: "YourBrandDisplay-Black" })`.
21
36
  */
22
37
  export function configureFonts(overrides) {
23
- Object.assign(fontFamilies, overrides);
38
+ Object.assign(fontFamilies, overrides);
24
39
  }
40
+
25
41
  /** Reset all font roles to the defaults (IBM Plex Sans + IBM Plex Mono). Useful in tests and stories. */
26
42
  export function resetFonts() {
27
- Object.assign(fontFamilies, DEFAULT_FONT_FAMILIES);
43
+ Object.assign(fontFamilies, DEFAULT_FONT_FAMILIES);
28
44
  }
29
45
  export function resolveTextFontFamily(variant, bold = false, semibold = false) {
30
- const variantFamily = fontFamilies[variantFontRole[variant]] ?? typographyVariants[variant].fontFamily;
31
- const isBrandedFace = !variantFamily.startsWith("Inter_") && !variantFamily.startsWith("IBMPlexSans_");
32
- return isBrandedFace
33
- ? variantFamily
34
- : bold
35
- ? fontFamilies.extraBold
36
- : semibold
37
- ? fontFamilies.semiBold
38
- : variantFamily;
46
+ const variantFamily = fontFamilies[variantFontRole[variant]] ?? typographyVariants[variant].fontFamily;
47
+ const isBrandedFace = !variantFamily.startsWith("Inter_") && !variantFamily.startsWith("IBMPlexSans_");
48
+ return isBrandedFace ? variantFamily : bold ? fontFamilies.extraBold : semibold ? fontFamilies.semiBold : variantFamily;
39
49
  }
40
50
  export const fontWeights = {
41
- light: "300",
42
- regular: "400",
43
- medium: "500",
44
- semiBold: "600",
45
- extraBold: "800",
46
- mono: "400",
47
- monoMedium: "500",
48
- titleRegular: "400",
49
- titleMedium: "500",
50
- title: "700",
51
- titleBlack: "900",
51
+ light: "300",
52
+ regular: "400",
53
+ medium: "500",
54
+ semiBold: "600",
55
+ extraBold: "800",
56
+ mono: "400",
57
+ monoMedium: "500",
58
+ titleRegular: "400",
59
+ titleMedium: "500",
60
+ title: "700",
61
+ titleBlack: "900"
52
62
  };
63
+
53
64
  /* -------------------- Font Sizes -------------------- */
54
65
  export const fontSizes = {
55
- xs: 10,
56
- sm: 13,
57
- base: 14,
58
- lg: 16,
59
- xl: 18,
60
- "2xl": 20,
61
- "3xl": 24,
62
- "4xl": 28,
63
- "5xl": 32,
64
- "6xl": 36,
65
- "7xl": 48,
66
- "8xl": 64,
66
+ xs: 10,
67
+ sm: 13,
68
+ base: 14,
69
+ lg: 16,
70
+ xl: 18,
71
+ "2xl": 20,
72
+ "3xl": 24,
73
+ "4xl": 28,
74
+ "5xl": 32,
75
+ "6xl": 36,
76
+ "7xl": 48,
77
+ "8xl": 64
67
78
  };
79
+
68
80
  /* -------------------- Line Heights -------------------- */
69
81
  export const lineHeights = {
70
- none: 1,
71
- tight: 1.25,
72
- snug: 1.375,
73
- normal: 1.5,
74
- relaxed: 1.625,
75
- loose: 2,
82
+ none: 1,
83
+ tight: 1.25,
84
+ snug: 1.375,
85
+ normal: 1.5,
86
+ relaxed: 1.625,
87
+ loose: 2
76
88
  };
89
+
77
90
  /* -------------------- Letter Spacing -------------------- */
78
91
  export const letterSpacing = {
79
- tighter: -0.5,
80
- tight: -0.25,
81
- normal: 0,
82
- wide: 0.25,
83
- wider: 0.5,
84
- widest: 1,
92
+ tighter: -0.5,
93
+ tight: -0.25,
94
+ normal: 0,
95
+ wide: 0.25,
96
+ wider: 0.5,
97
+ widest: 1
85
98
  };
99
+
86
100
  /* -------------------- Typography Variants -------------------- */
87
101
  export const typographyVariants = {
88
- // Display (titleBlack role — typically the brand display typeface)
89
- display: {
90
- fontSize: fontSizes["7xl"],
91
- fontFamily: fontFamilies.titleBlack,
92
- fontWeight: fontWeights.titleBlack,
93
- lineHeight: fontSizes["7xl"] * lineHeights.tight,
94
- letterSpacing: -1.2,
95
- },
96
- // Headings (title role)
97
- h1: {
98
- fontSize: fontSizes["5xl"],
99
- fontFamily: fontFamilies.title,
100
- fontWeight: fontWeights.title,
101
- lineHeight: fontSizes["5xl"] * lineHeights.tight,
102
- letterSpacing: -0.8,
103
- },
104
- h2: {
105
- fontSize: fontSizes["4xl"],
106
- fontFamily: fontFamilies.title,
107
- fontWeight: fontWeights.title,
108
- lineHeight: fontSizes["4xl"] * lineHeights.snug,
109
- letterSpacing: -0.4,
110
- },
111
- h3: {
112
- fontSize: fontSizes["3xl"],
113
- fontFamily: fontFamilies.title,
114
- fontWeight: fontWeights.title,
115
- lineHeight: fontSizes["3xl"] * lineHeights.snug,
116
- letterSpacing: letterSpacing.normal,
117
- },
118
- h4: {
119
- fontSize: fontSizes["2xl"],
120
- fontFamily: fontFamilies.medium,
121
- fontWeight: fontWeights.medium,
122
- lineHeight: fontSizes["2xl"] * lineHeights.normal,
123
- letterSpacing: letterSpacing.normal,
124
- },
125
- h5: {
126
- fontSize: fontSizes.xl,
127
- fontFamily: fontFamilies.medium,
128
- fontWeight: fontWeights.medium,
129
- lineHeight: fontSizes.xl * lineHeights.normal,
130
- letterSpacing: letterSpacing.normal,
131
- },
132
- h6: {
133
- fontSize: fontSizes.lg,
134
- fontFamily: fontFamilies.medium,
135
- fontWeight: fontWeights.medium,
136
- lineHeight: fontSizes.lg * lineHeights.normal,
137
- letterSpacing: letterSpacing.normal,
138
- },
139
- // Body
140
- bodyReadable: {
141
- fontSize: 17,
142
- fontFamily: fontFamilies.regular,
143
- fontWeight: fontWeights.regular,
144
- lineHeight: 17 * lineHeights.normal,
145
- letterSpacing: letterSpacing.normal,
146
- },
147
- bodyLarge: {
148
- fontSize: fontSizes.lg,
149
- fontFamily: fontFamilies.regular,
150
- fontWeight: fontWeights.regular,
151
- lineHeight: fontSizes.lg * lineHeights.relaxed,
152
- letterSpacing: letterSpacing.normal,
153
- },
154
- body: {
155
- fontSize: fontSizes.base,
156
- fontFamily: fontFamilies.regular,
157
- fontWeight: fontWeights.regular,
158
- lineHeight: fontSizes.base * lineHeights.relaxed,
159
- letterSpacing: letterSpacing.normal,
160
- },
161
- bodySmall: {
162
- fontSize: fontSizes.sm,
163
- fontFamily: fontFamilies.regular,
164
- fontWeight: fontWeights.regular,
165
- lineHeight: fontSizes.sm * lineHeights.normal,
166
- letterSpacing: letterSpacing.normal,
167
- },
168
- // Label
169
- label: {
170
- fontSize: fontSizes.base,
171
- fontFamily: fontFamilies.medium,
172
- fontWeight: fontWeights.medium,
173
- lineHeight: fontSizes.base * lineHeights.normal,
174
- letterSpacing: letterSpacing.wide,
175
- },
176
- labelSmall: {
177
- fontSize: fontSizes.sm,
178
- fontFamily: fontFamilies.medium,
179
- fontWeight: fontWeights.medium,
180
- lineHeight: fontSizes.sm * lineHeights.normal,
181
- letterSpacing: letterSpacing.wide,
182
- },
183
- // Data — amounts, SKU, % (Fira Code mono, medium weight). DS role "data".
184
- data: {
185
- fontSize: fontSizes.lg,
186
- fontFamily: fontFamilies.monoMedium,
187
- fontWeight: fontWeights.monoMedium,
188
- lineHeight: fontSizes.lg * lineHeights.tight,
189
- letterSpacing: letterSpacing.normal,
190
- },
191
- dataLarge: {
192
- fontSize: fontSizes["4xl"],
193
- fontFamily: fontFamilies.monoMedium,
194
- fontWeight: fontWeights.monoMedium,
195
- lineHeight: fontSizes["4xl"] * lineHeights.none,
196
- letterSpacing: letterSpacing.tight,
197
- },
198
- // Overline — UPPERCASE labels / metadata in mono with tracking. DS role "caption".
199
- overline: {
200
- fontSize: 11,
201
- fontFamily: fontFamilies.mono,
202
- fontWeight: fontWeights.mono,
203
- lineHeight: 11 * lineHeights.snug,
204
- letterSpacing: 0.6,
205
- textTransform: "uppercase",
206
- },
207
- // Caption — Fira Code mono (secondary text, metadata, data labels)
208
- caption: {
209
- fontSize: fontSizes.sm,
210
- fontFamily: fontFamilies.mono,
211
- fontWeight: fontWeights.mono,
212
- lineHeight: fontSizes.sm * lineHeights.normal,
213
- letterSpacing: letterSpacing.normal,
214
- },
215
- captionSmall: {
216
- fontSize: fontSizes.xs,
217
- fontFamily: fontFamilies.mono,
218
- fontWeight: fontWeights.mono,
219
- lineHeight: fontSizes.xs * lineHeights.normal,
220
- letterSpacing: letterSpacing.normal,
221
- },
222
- // Buttons
223
- button: {
224
- fontSize: fontSizes.base,
225
- fontFamily: fontFamilies.semiBold,
226
- fontWeight: fontWeights.semiBold,
227
- lineHeight: fontSizes.base * lineHeights.none,
228
- letterSpacing: letterSpacing.wide,
229
- },
230
- buttonSmall: {
231
- fontSize: fontSizes.sm,
232
- fontFamily: fontFamilies.semiBold,
233
- fontWeight: fontWeights.semiBold,
234
- lineHeight: fontSizes.sm * lineHeights.none,
235
- letterSpacing: letterSpacing.wide,
236
- },
237
- buttonLarge: {
238
- fontSize: fontSizes.lg,
239
- fontFamily: fontFamilies.semiBold,
240
- fontWeight: fontWeights.semiBold,
241
- lineHeight: fontSizes.lg * lineHeights.none,
242
- letterSpacing: letterSpacing.wide,
243
- },
244
- // Legacy
245
- title: {
246
- fontSize: fontSizes.xl,
247
- fontFamily: fontFamilies.semiBold,
248
- fontWeight: fontWeights.semiBold,
249
- lineHeight: fontSizes.xl * lineHeights.snug,
250
- letterSpacing: letterSpacing.normal,
251
- },
252
- subtitle: {
253
- fontSize: fontSizes.lg,
254
- fontFamily: fontFamilies.medium,
255
- fontWeight: fontWeights.medium,
256
- lineHeight: fontSizes.lg * lineHeights.normal,
257
- letterSpacing: letterSpacing.normal,
258
- },
102
+ // Display (titleBlack role — typically the brand display typeface)
103
+ display: {
104
+ fontSize: fontSizes["7xl"],
105
+ fontFamily: fontFamilies.titleBlack,
106
+ fontWeight: fontWeights.titleBlack,
107
+ lineHeight: fontSizes["7xl"] * lineHeights.tight,
108
+ letterSpacing: -1.2
109
+ },
110
+ // Headings (title role)
111
+ h1: {
112
+ fontSize: fontSizes["5xl"],
113
+ fontFamily: fontFamilies.title,
114
+ fontWeight: fontWeights.title,
115
+ lineHeight: fontSizes["5xl"] * lineHeights.tight,
116
+ letterSpacing: -0.8
117
+ },
118
+ h2: {
119
+ fontSize: fontSizes["4xl"],
120
+ fontFamily: fontFamilies.title,
121
+ fontWeight: fontWeights.title,
122
+ lineHeight: fontSizes["4xl"] * lineHeights.snug,
123
+ letterSpacing: -0.4
124
+ },
125
+ h3: {
126
+ fontSize: fontSizes["3xl"],
127
+ fontFamily: fontFamilies.title,
128
+ fontWeight: fontWeights.title,
129
+ lineHeight: fontSizes["3xl"] * lineHeights.snug,
130
+ letterSpacing: letterSpacing.normal
131
+ },
132
+ h4: {
133
+ fontSize: fontSizes["2xl"],
134
+ fontFamily: fontFamilies.medium,
135
+ fontWeight: fontWeights.medium,
136
+ lineHeight: fontSizes["2xl"] * lineHeights.normal,
137
+ letterSpacing: letterSpacing.normal
138
+ },
139
+ h5: {
140
+ fontSize: fontSizes.xl,
141
+ fontFamily: fontFamilies.medium,
142
+ fontWeight: fontWeights.medium,
143
+ lineHeight: fontSizes.xl * lineHeights.normal,
144
+ letterSpacing: letterSpacing.normal
145
+ },
146
+ h6: {
147
+ fontSize: fontSizes.lg,
148
+ fontFamily: fontFamilies.medium,
149
+ fontWeight: fontWeights.medium,
150
+ lineHeight: fontSizes.lg * lineHeights.normal,
151
+ letterSpacing: letterSpacing.normal
152
+ },
153
+ // Body
154
+ bodyReadable: {
155
+ fontSize: 17,
156
+ fontFamily: fontFamilies.regular,
157
+ fontWeight: fontWeights.regular,
158
+ lineHeight: 17 * lineHeights.normal,
159
+ letterSpacing: letterSpacing.normal
160
+ },
161
+ bodyLarge: {
162
+ fontSize: fontSizes.lg,
163
+ fontFamily: fontFamilies.regular,
164
+ fontWeight: fontWeights.regular,
165
+ lineHeight: fontSizes.lg * lineHeights.relaxed,
166
+ letterSpacing: letterSpacing.normal
167
+ },
168
+ body: {
169
+ fontSize: fontSizes.base,
170
+ fontFamily: fontFamilies.regular,
171
+ fontWeight: fontWeights.regular,
172
+ lineHeight: fontSizes.base * lineHeights.relaxed,
173
+ letterSpacing: letterSpacing.normal
174
+ },
175
+ bodySmall: {
176
+ fontSize: fontSizes.sm,
177
+ fontFamily: fontFamilies.regular,
178
+ fontWeight: fontWeights.regular,
179
+ lineHeight: fontSizes.sm * lineHeights.normal,
180
+ letterSpacing: letterSpacing.normal
181
+ },
182
+ // Label
183
+ label: {
184
+ fontSize: fontSizes.base,
185
+ fontFamily: fontFamilies.medium,
186
+ fontWeight: fontWeights.medium,
187
+ lineHeight: fontSizes.base * lineHeights.normal,
188
+ letterSpacing: letterSpacing.wide
189
+ },
190
+ labelSmall: {
191
+ fontSize: fontSizes.sm,
192
+ fontFamily: fontFamilies.medium,
193
+ fontWeight: fontWeights.medium,
194
+ lineHeight: fontSizes.sm * lineHeights.normal,
195
+ letterSpacing: letterSpacing.wide
196
+ },
197
+ // Data — amounts, SKU, % (Fira Code mono, medium weight). DS role "data".
198
+ data: {
199
+ fontSize: fontSizes.lg,
200
+ fontFamily: fontFamilies.monoMedium,
201
+ fontWeight: fontWeights.monoMedium,
202
+ lineHeight: fontSizes.lg * lineHeights.tight,
203
+ letterSpacing: letterSpacing.normal
204
+ },
205
+ dataLarge: {
206
+ fontSize: fontSizes["4xl"],
207
+ fontFamily: fontFamilies.monoMedium,
208
+ fontWeight: fontWeights.monoMedium,
209
+ lineHeight: fontSizes["4xl"] * lineHeights.none,
210
+ letterSpacing: letterSpacing.tight
211
+ },
212
+ // Overline — UPPERCASE labels / metadata in mono with tracking. DS role "caption".
213
+ overline: {
214
+ fontSize: 11,
215
+ fontFamily: fontFamilies.mono,
216
+ fontWeight: fontWeights.mono,
217
+ lineHeight: 11 * lineHeights.snug,
218
+ letterSpacing: 0.6,
219
+ textTransform: "uppercase"
220
+ },
221
+ // Caption — Fira Code mono (secondary text, metadata, data labels)
222
+ caption: {
223
+ fontSize: fontSizes.sm,
224
+ fontFamily: fontFamilies.mono,
225
+ fontWeight: fontWeights.mono,
226
+ lineHeight: fontSizes.sm * lineHeights.normal,
227
+ letterSpacing: letterSpacing.normal
228
+ },
229
+ captionSmall: {
230
+ fontSize: fontSizes.xs,
231
+ fontFamily: fontFamilies.mono,
232
+ fontWeight: fontWeights.mono,
233
+ lineHeight: fontSizes.xs * lineHeights.normal,
234
+ letterSpacing: letterSpacing.normal
235
+ },
236
+ // Buttons
237
+ button: {
238
+ fontSize: fontSizes.base,
239
+ fontFamily: fontFamilies.semiBold,
240
+ fontWeight: fontWeights.semiBold,
241
+ lineHeight: fontSizes.base * lineHeights.none,
242
+ letterSpacing: letterSpacing.wide
243
+ },
244
+ buttonSmall: {
245
+ fontSize: fontSizes.sm,
246
+ fontFamily: fontFamilies.semiBold,
247
+ fontWeight: fontWeights.semiBold,
248
+ lineHeight: fontSizes.sm * lineHeights.none,
249
+ letterSpacing: letterSpacing.wide
250
+ },
251
+ buttonLarge: {
252
+ fontSize: fontSizes.lg,
253
+ fontFamily: fontFamilies.semiBold,
254
+ fontWeight: fontWeights.semiBold,
255
+ lineHeight: fontSizes.lg * lineHeights.none,
256
+ letterSpacing: letterSpacing.wide
257
+ },
258
+ // Legacy
259
+ title: {
260
+ fontSize: fontSizes.xl,
261
+ fontFamily: fontFamilies.semiBold,
262
+ fontWeight: fontWeights.semiBold,
263
+ lineHeight: fontSizes.xl * lineHeights.snug,
264
+ letterSpacing: letterSpacing.normal
265
+ },
266
+ subtitle: {
267
+ fontSize: fontSizes.lg,
268
+ fontFamily: fontFamilies.medium,
269
+ fontWeight: fontWeights.medium,
270
+ lineHeight: fontSizes.lg * lineHeights.normal,
271
+ letterSpacing: letterSpacing.normal
272
+ }
259
273
  };
274
+
260
275
  /* -------------------- Variant → Font Role --------------------
261
276
  * Each variant points to a ROLE (not a fixed family) so `configureFonts` can
262
277
  * update it at runtime. `Typography.Text` resolves `fontFamilies[role]` on
263
278
  * render. The baked-in family in each variant above is a static fallback only. */
264
279
  export const variantFontRole = {
265
- display: "titleBlack",
266
- h1: "titleBlack",
267
- h2: "title",
268
- h3: "title",
269
- h4: "medium",
270
- h5: "medium",
271
- h6: "medium",
272
- bodyReadable: "regular",
273
- bodyLarge: "regular",
274
- body: "regular",
275
- bodySmall: "regular",
276
- label: "medium",
277
- labelSmall: "medium",
278
- data: "monoMedium",
279
- dataLarge: "monoMedium",
280
- overline: "mono",
281
- caption: "mono",
282
- captionSmall: "mono",
283
- button: "semiBold",
284
- buttonSmall: "semiBold",
285
- buttonLarge: "semiBold",
286
- title: "semiBold",
287
- subtitle: "medium",
280
+ display: "titleBlack",
281
+ h1: "titleBlack",
282
+ h2: "title",
283
+ h3: "title",
284
+ h4: "medium",
285
+ h5: "medium",
286
+ h6: "medium",
287
+ bodyReadable: "regular",
288
+ bodyLarge: "regular",
289
+ body: "regular",
290
+ bodySmall: "regular",
291
+ label: "medium",
292
+ labelSmall: "medium",
293
+ data: "monoMedium",
294
+ dataLarge: "monoMedium",
295
+ overline: "mono",
296
+ caption: "mono",
297
+ captionSmall: "mono",
298
+ button: "semiBold",
299
+ buttonSmall: "semiBold",
300
+ buttonLarge: "semiBold",
301
+ title: "semiBold",
302
+ subtitle: "medium"
288
303
  };
304
+
289
305
  /* The shipped files stop at Bold 700. Asking iOS/Android for 800 or 900 on
290
306
  * that file synthesizes a faux face and drops the loaded family. Rendering
291
307
  * uses the weight of the file that was actually registered. */
292
308
  const loadedFaceWeight = {
293
- IBMPlexMono_400Regular: "400",
294
- IBMPlexMono_500Medium: "500",
295
- IBMPlexSans_300Light: "300",
296
- IBMPlexSans_400Regular: "400",
297
- IBMPlexSans_500Medium: "500",
298
- IBMPlexSans_600SemiBold: "600",
299
- IBMPlexSans_700Bold: "700",
309
+ IBMPlexMono_400Regular: "400",
310
+ IBMPlexMono_500Medium: "500",
311
+ IBMPlexSans_300Light: "300",
312
+ IBMPlexSans_400Regular: "400",
313
+ IBMPlexSans_500Medium: "500",
314
+ IBMPlexSans_600SemiBold: "600",
315
+ IBMPlexSans_700Bold: "700"
300
316
  };
301
317
  export function appliedTextStyle(variant, bold = false, semibold = false) {
302
- const fontFamily = resolveTextFontFamily(variant, bold, semibold);
303
- const { fontWeight, ...metrics } = typographyVariants[variant];
304
- return {
305
- ...metrics,
306
- fontFamily,
307
- fontWeight: loadedFaceWeight[fontFamily] ?? fontWeight,
308
- };
318
+ const fontFamily = resolveTextFontFamily(variant, bold, semibold);
319
+ const {
320
+ fontWeight,
321
+ ...metrics
322
+ } = typographyVariants[variant];
323
+ return {
324
+ ...metrics,
325
+ fontFamily,
326
+ fontWeight: loadedFaceWeight[fontFamily] ?? fontWeight
327
+ };
309
328
  }
329
+
310
330
  /* -------------------- Utility Functions -------------------- */
311
331
  export const createTextStyle = (variant, overrides) => ({
312
- ...appliedTextStyle(variant),
313
- ...overrides,
332
+ ...appliedTextStyle(variant),
333
+ ...overrides
314
334
  });
315
335
  export const createCustomTextStyle = (fontSize, fontFamily, options) => {
316
- const size = fontSizes[fontSize];
317
- const line = options?.lineHeight ? lineHeights[options.lineHeight] : lineHeights.normal;
318
- const spacing = options?.letterSpacing ?? "normal";
319
- return {
320
- fontSize: size,
321
- fontFamily: fontFamilies[fontFamily],
322
- fontWeight: fontWeights[fontFamily],
323
- lineHeight: size * line,
324
- letterSpacing: letterSpacing[spacing],
325
- ...(options?.color && { color: options.color }),
326
- };
336
+ const size = fontSizes[fontSize];
337
+ const line = options?.lineHeight ? lineHeights[options.lineHeight] : lineHeights.normal;
338
+ const spacing = options?.letterSpacing ?? "normal";
339
+ return {
340
+ fontSize: size,
341
+ fontFamily: fontFamilies[fontFamily],
342
+ fontWeight: fontWeights[fontFamily],
343
+ lineHeight: size * line,
344
+ letterSpacing: letterSpacing[spacing],
345
+ ...(options?.color && {
346
+ color: options.color
347
+ })
348
+ };
327
349
  };
350
+
328
351
  /* Re-export useFonts so consumers (e.g. the framework) can load fonts without
329
352
  * depending directly on expo-font — it's already a transitive dep via this package. */
330
353
  export { useFonts };
354
+
331
355
  /* -------------------- Font Loader (optional, convenience) ------------------
332
356
  * Loads IBM Plex Sans and IBM Plex Mono, the same faces web UI uses.
333
357
  * An app can still point a role at another loaded family with `configureFonts`. */
334
358
  export const useAppFonts = () => {
335
- const [loaded] = useFonts({
336
- IBMPlexMono_400Regular,
337
- IBMPlexMono_500Medium,
338
- IBMPlexSans_300Light,
339
- IBMPlexSans_400Regular,
340
- IBMPlexSans_500Medium,
341
- IBMPlexSans_600SemiBold,
342
- IBMPlexSans_700Bold,
343
- });
344
- return loaded;
359
+ const $ = _c(1);
360
+ let t0;
361
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
362
+ t0 = {
363
+ IBMPlexMono_400Regular,
364
+ IBMPlexMono_500Medium,
365
+ IBMPlexSans_300Light,
366
+ IBMPlexSans_400Regular,
367
+ IBMPlexSans_500Medium,
368
+ IBMPlexSans_600SemiBold,
369
+ IBMPlexSans_700Bold,
370
+ ...ICON_FONTS
371
+ };
372
+ $[0] = t0;
373
+ } else {
374
+ t0 = $[0];
375
+ }
376
+ const [loaded] = useFonts(t0);
377
+ return loaded;
345
378
  };
379
+
346
380
  /* -------------------- Typography Object -------------------- */
347
381
  export const Typography = {
348
- fontFamilies,
349
- fontWeights,
350
- fontSizes,
351
- lineHeights,
352
- letterSpacing,
353
- variants: typographyVariants,
354
- variantFontRole,
355
- createTextStyle,
356
- createCustomTextStyle,
357
- configureFonts,
358
- resetFonts,
359
- useAppFonts,
382
+ fontFamilies,
383
+ fontWeights,
384
+ fontSizes,
385
+ lineHeights,
386
+ letterSpacing,
387
+ variants: typographyVariants,
388
+ variantFontRole,
389
+ createTextStyle,
390
+ createCustomTextStyle,
391
+ configureFonts,
392
+ resetFonts,
393
+ useAppFonts
360
394
  };
361
395
  export default Typography;