@react-navigation/native 8.0.0-alpha.12 → 8.0.0-alpha.14

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.
@@ -7,21 +7,25 @@ data class MaterialSymbolTypefaceResult(val typeface: Typeface, val suffix: Stri
7
7
 
8
8
  object MaterialSymbolTypeface {
9
9
  private val typefaces = mutableMapOf<String, Typeface>()
10
- private var defaultSuffix: String? = null
10
+ private var availableFonts: Map<String, Set<Int>>? = null
11
11
 
12
12
  fun get(context: Context, variant: String?, weight: Int?): MaterialSymbolTypefaceResult {
13
- val suffix = if (variant != null && weight != null) {
14
- val resolvedVariant = when (variant) {
13
+ val fonts = getAvailableFonts(context)
14
+
15
+ val resolvedVariant = if (variant != null) {
16
+ when (variant) {
15
17
  "rounded" -> "Rounded"
16
18
  "sharp" -> "Sharp"
17
19
  else -> "Outlined"
18
20
  }
19
-
20
- "${resolvedVariant}_$weight"
21
21
  } else {
22
- getDefaultSuffix(context)
22
+ resolveDefaultVariant(fonts)
23
23
  }
24
24
 
25
+ val resolvedWeight = weight ?: resolveDefaultWeight(fonts, resolvedVariant)
26
+
27
+ val suffix = "${resolvedVariant}_$resolvedWeight"
28
+
25
29
  val typeface = typefaces.getOrPut(suffix) {
26
30
  val path = "fonts/MaterialSymbols${suffix}.ttf"
27
31
 
@@ -35,43 +39,64 @@ object MaterialSymbolTypeface {
35
39
  return MaterialSymbolTypefaceResult(typeface, suffix)
36
40
  }
37
41
 
38
- private fun getDefaultSuffix(context: Context): String {
39
- defaultSuffix?.let { return it }
42
+ private fun getAvailableFonts(context: Context): Map<String, Set<Int>> {
43
+ availableFonts?.let { return it }
40
44
 
41
- val fonts = context.assets.list("fonts")
45
+ val files = context.assets.list("fonts")
42
46
  ?.filter { it.startsWith("MaterialSymbols") && it.endsWith(".ttf") } ?: emptyList()
43
47
 
44
- if (fonts.isEmpty()) {
48
+ if (files.isEmpty()) {
45
49
  throw RuntimeException("No MaterialSymbols font found in assets.")
46
50
  }
47
51
 
48
- if (fonts.size > 1) {
49
- val outlinedFonts = fonts.filter { it.startsWith("MaterialSymbolsOutlined") }
50
- val outlinedFont = when {
51
- outlinedFonts.isEmpty() -> null
52
- outlinedFonts.size == 1 -> outlinedFonts[0]
53
- else -> outlinedFonts.firstOrNull {
54
- it.removePrefix("MaterialSymbols").removeSuffix(".ttf") == "Outlined_400"
55
- }
56
- }
52
+ val fonts = mutableMapOf<String, MutableSet<Int>>()
57
53
 
58
- if (outlinedFont == null) {
59
- throw RuntimeException(
60
- "Multiple MaterialSymbols fonts found in assets: ${fonts.joinToString()}. " + "Please specify a variant and weight explicitly."
61
- )
62
- }
54
+ for (file in files) {
55
+ val suffix = file.removePrefix("MaterialSymbols").removeSuffix(".ttf")
56
+ val variant = suffix.substringBefore("_")
57
+ val weight = suffix.substringAfter("_").toIntOrNull() ?: continue
58
+
59
+ fonts.getOrPut(variant) { mutableSetOf() }.add(weight)
60
+ }
63
61
 
64
- val outlinedSuffix = outlinedFont.removePrefix("MaterialSymbols").removeSuffix(".ttf")
62
+ availableFonts = fonts
63
+
64
+ return fonts
65
+ }
65
66
 
66
- defaultSuffix = outlinedSuffix
67
+ private fun resolveDefaultVariant(fonts: Map<String, Set<Int>>): String {
68
+ val variants = fonts.keys
67
69
 
68
- return outlinedSuffix
70
+ if (variants.size == 1) {
71
+ return variants.first()
69
72
  }
70
73
 
71
- val suffix = fonts[0].removePrefix("MaterialSymbols").removeSuffix(".ttf")
74
+ if (variants.contains("Outlined")) {
75
+ return "Outlined"
76
+ }
77
+
78
+ throw RuntimeException(
79
+ "Multiple MaterialSymbols variants found: ${variants.joinToString()}. " + "Please specify a variant explicitly."
80
+ )
81
+ }
72
82
 
73
- defaultSuffix = suffix
83
+ private fun resolveDefaultWeight(fonts: Map<String, Set<Int>>, variant: String): Int {
84
+ val weights = fonts[variant]
85
+
86
+ if (weights.isNullOrEmpty()) {
87
+ throw RuntimeException("No MaterialSymbols font found for variant: $variant")
88
+ }
89
+
90
+ if (weights.size == 1) {
91
+ return weights.first()
92
+ }
93
+
94
+ if (weights.contains(400)) {
95
+ return 400
96
+ }
74
97
 
75
- return suffix
98
+ throw RuntimeException(
99
+ "Multiple MaterialSymbols weights found for variant $variant: ${weights.joinToString()}. " + "Please specify a weight explicitly."
100
+ )
76
101
  }
77
102
  }
@@ -26,6 +26,7 @@ function CornerInsetIOS(props, ref) {
26
26
  // This is to avoid the insets getting out of sync during transitions
27
27
  // We trigger a relayout explicitly on window resize and transition end
28
28
  const unsubscribeWindowResize = Dimensions.addEventListener('change', () => {
29
+ relayout();
29
30
  if (animationFrameHandle) {
30
31
  cancelAnimationFrame(animationFrameHandle);
31
32
  }
@@ -33,7 +34,9 @@ function CornerInsetIOS(props, ref) {
33
34
  // When window is unmaximized, calling relayout immediately doesn't work
34
35
  // So we delay it to the next frame as a workaround
35
36
  animationFrameHandle = requestAnimationFrame(() => {
36
- relayout();
37
+ animationFrameHandle = requestAnimationFrame(() => {
38
+ relayout();
39
+ });
37
40
  });
38
41
  });
39
42
  const unsubscribeTransition = root.addListener('__unsafe_event__', e => {
@@ -1 +1 @@
1
- {"version":3,"names":["NavigationContainerRefContext","React","Dimensions","ReactNavigationCornerInsetViewNativeComponent","Commands","jsx","_jsx","CornerInsetIOS","props","ref","root","use","nativeRef","useRef","relayout","useCallback","current","useEffect","animationFrameHandle","unsubscribeWindowResize","addEventListener","cancelAnimationFrame","requestAnimationFrame","unsubscribeTransition","addListener","e","data","type","remove","useImperativeHandle","CornerInset","forwardRef"],"sourceRoot":"../../../src","sources":["native/CornerInset.ios.tsx"],"mappings":";;AAAA,SAASA,6BAA6B,QAAQ,wBAAwB;AACtE,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAASC,UAAU,QAAQ,cAAc;;AAEzC;;AAEA,OAAOC,6CAA6C,IAClDC,QAAQ,QACH,iDAAiD;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzD,SAASC,cAAcA,CACrBC,KAAuB,EACvBC,GAA8B,EAC9B;EACA,MAAMC,IAAI,GAAGT,KAAK,CAACU,GAAG,CAACX,6BAA6B,CAAC;EAErD,MAAMY,SAAS,GACbX,KAAK,CAACY,MAAM,CAEV,IAAI,CAAC;EAET,MAAMC,QAAQ,GAAGb,KAAK,CAACc,WAAW,CAAC,MAAM;IACvC,IAAIH,SAAS,CAACI,OAAO,EAAE;MACrBZ,QAAQ,CAACU,QAAQ,CAACF,SAAS,CAACI,OAAO,CAAC;IACtC;EACF,CAAC,EAAE,EAAE,CAAC;EAENf,KAAK,CAACgB,SAAS,CAAC,MAAM;IACpB,IAAIP,IAAI,IAAI,IAAI,EAAE;MAChB;IACF;IAEA,IAAIQ,oBAAmC,GAAG,IAAI;;IAE9C;IACA;IACA;IACA,MAAMC,uBAAuB,GAAGjB,UAAU,CAACkB,gBAAgB,CACzD,QAAQ,EACR,MAAM;MACJ,IAAIF,oBAAoB,EAAE;QACxBG,oBAAoB,CAACH,oBAAoB,CAAC;MAC5C;;MAEA;MACA;MACAA,oBAAoB,GAAGI,qBAAqB,CAAC,MAAM;QACjDR,QAAQ,CAAC,CAAC;MACZ,CAAC,CAAC;IACJ,CACF,CAAC;IAED,MAAMS,qBAAqB,GAAGb,IAAI,CAACc,WAAW,CAAC,kBAAkB,EAAGC,CAAC,IAAK;MACxE,IAAIA,CAAC,CAACC,IAAI,CAACC,IAAI,KAAK,eAAe,EAAE;QACnCb,QAAQ,CAAC,CAAC;MACZ;IACF,CAAC,CAAC;IAEF,OAAO,MAAM;MACX,IAAII,oBAAoB,EAAE;QACxBG,oBAAoB,CAACH,oBAAoB,CAAC;MAC5C;MAEAC,uBAAuB,CAACS,MAAM,CAAC,CAAC;MAChCL,qBAAqB,CAAC,CAAC;IACzB,CAAC;EACH,CAAC,EAAE,CAACb,IAAI,EAAEI,QAAQ,CAAC,CAAC;EAEpBb,KAAK,CAAC4B,mBAAmB,CACvBpB,GAAG,EACH,OAAO;IACLK;EACF,CAAC,CAAC,EACF,CAACA,QAAQ,CACX,CAAC;EAED,oBACER,IAAA,CAACH,6CAA6C;IAAA,GAAKK,KAAK;IAAEC,GAAG,EAAEG;EAAU,CAAE,CAAC;AAEhF;AAEA,OAAO,MAAMkB,WAAW,gBAAG7B,KAAK,CAAC8B,UAAU,CAACxB,cAAc,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NavigationContainerRefContext","React","Dimensions","ReactNavigationCornerInsetViewNativeComponent","Commands","jsx","_jsx","CornerInsetIOS","props","ref","root","use","nativeRef","useRef","relayout","useCallback","current","useEffect","animationFrameHandle","unsubscribeWindowResize","addEventListener","cancelAnimationFrame","requestAnimationFrame","unsubscribeTransition","addListener","e","data","type","remove","useImperativeHandle","CornerInset","forwardRef"],"sourceRoot":"../../../src","sources":["native/CornerInset.ios.tsx"],"mappings":";;AAAA,SAASA,6BAA6B,QAAQ,wBAAwB;AACtE,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAASC,UAAU,QAAQ,cAAc;;AAEzC;;AAEA,OAAOC,6CAA6C,IAClDC,QAAQ,QACH,iDAAiD;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzD,SAASC,cAAcA,CACrBC,KAAuB,EACvBC,GAA8B,EAC9B;EACA,MAAMC,IAAI,GAAGT,KAAK,CAACU,GAAG,CAACX,6BAA6B,CAAC;EAErD,MAAMY,SAAS,GACbX,KAAK,CAACY,MAAM,CAEV,IAAI,CAAC;EAET,MAAMC,QAAQ,GAAGb,KAAK,CAACc,WAAW,CAAC,MAAM;IACvC,IAAIH,SAAS,CAACI,OAAO,EAAE;MACrBZ,QAAQ,CAACU,QAAQ,CAACF,SAAS,CAACI,OAAO,CAAC;IACtC;EACF,CAAC,EAAE,EAAE,CAAC;EAENf,KAAK,CAACgB,SAAS,CAAC,MAAM;IACpB,IAAIP,IAAI,IAAI,IAAI,EAAE;MAChB;IACF;IAEA,IAAIQ,oBAAmC,GAAG,IAAI;;IAE9C;IACA;IACA;IACA,MAAMC,uBAAuB,GAAGjB,UAAU,CAACkB,gBAAgB,CACzD,QAAQ,EACR,MAAM;MACJN,QAAQ,CAAC,CAAC;MAEV,IAAII,oBAAoB,EAAE;QACxBG,oBAAoB,CAACH,oBAAoB,CAAC;MAC5C;;MAEA;MACA;MACAA,oBAAoB,GAAGI,qBAAqB,CAAC,MAAM;QACjDJ,oBAAoB,GAAGI,qBAAqB,CAAC,MAAM;UACjDR,QAAQ,CAAC,CAAC;QACZ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CACF,CAAC;IAED,MAAMS,qBAAqB,GAAGb,IAAI,CAACc,WAAW,CAAC,kBAAkB,EAAGC,CAAC,IAAK;MACxE,IAAIA,CAAC,CAACC,IAAI,CAACC,IAAI,KAAK,eAAe,EAAE;QACnCb,QAAQ,CAAC,CAAC;MACZ;IACF,CAAC,CAAC;IAEF,OAAO,MAAM;MACX,IAAII,oBAAoB,EAAE;QACxBG,oBAAoB,CAACH,oBAAoB,CAAC;MAC5C;MAEAC,uBAAuB,CAACS,MAAM,CAAC,CAAC;MAChCL,qBAAqB,CAAC,CAAC;IACzB,CAAC;EACH,CAAC,EAAE,CAACb,IAAI,EAAEI,QAAQ,CAAC,CAAC;EAEpBb,KAAK,CAAC4B,mBAAmB,CACvBpB,GAAG,EACH,OAAO;IACLK;EACF,CAAC,CAAC,EACF,CAACA,QAAQ,CACX,CAAC;EAED,oBACER,IAAA,CAACH,6CAA6C;IAAA,GAAKK,KAAK;IAAEC,GAAG,EAAEG;EAAU,CAAE,CAAC;AAEhF;AAEA,OAAO,MAAMkB,WAAW,gBAAG7B,KAAK,CAAC8B,UAAU,CAACxB,cAAc,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"CornerInset.ios.d.ts","sourceRoot":"","sources":["../../../../src/native/CornerInset.ios.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA4E1E,eAAO,MAAM,WAAW;;;;2EAAmC,CAAC"}
1
+ {"version":3,"file":"CornerInset.ios.d.ts","sourceRoot":"","sources":["../../../../src/native/CornerInset.ios.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAgF1E,eAAO,MAAM,WAAW;;;;2EAAmC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-navigation/native",
3
3
  "description": "React Native integration for React Navigation",
4
- "version": "8.0.0-alpha.12",
4
+ "version": "8.0.0-alpha.14",
5
5
  "keywords": [
6
6
  "react-native",
7
7
  "react-navigation",
@@ -57,7 +57,7 @@
57
57
  "clean": "del lib"
58
58
  },
59
59
  "dependencies": {
60
- "@react-navigation/core": "^8.0.0-alpha.5",
60
+ "@react-navigation/core": "^8.0.0-alpha.6",
61
61
  "escape-string-regexp": "^4.0.0",
62
62
  "fast-deep-equal": "^3.1.3",
63
63
  "nanoid": "^3.3.11",
@@ -121,5 +121,5 @@
121
121
  }
122
122
  }
123
123
  },
124
- "gitHead": "4ac6c41c1f751fba9dd82db050865bc71f3310f5"
124
+ "gitHead": "20476fe1fdc272f4d3c4ffc90a95d7adab98ff3c"
125
125
  }
@@ -38,6 +38,8 @@ function CornerInsetIOS(
38
38
  const unsubscribeWindowResize = Dimensions.addEventListener(
39
39
  'change',
40
40
  () => {
41
+ relayout();
42
+
41
43
  if (animationFrameHandle) {
42
44
  cancelAnimationFrame(animationFrameHandle);
43
45
  }
@@ -45,7 +47,9 @@ function CornerInsetIOS(
45
47
  // When window is unmaximized, calling relayout immediately doesn't work
46
48
  // So we delay it to the next frame as a workaround
47
49
  animationFrameHandle = requestAnimationFrame(() => {
48
- relayout();
50
+ animationFrameHandle = requestAnimationFrame(() => {
51
+ relayout();
52
+ });
49
53
  });
50
54
  }
51
55
  );