@react-navigation/native 8.0.0-alpha.13 → 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.
- package/android/src/main/java/org/reactnavigation/MaterialSymbolTypeface.kt +55 -30
- package/lib/module/native/CornerInset.ios.js +4 -1
- package/lib/module/native/CornerInset.ios.js.map +1 -1
- package/lib/typescript/src/native/CornerInset.ios.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/native/CornerInset.ios.tsx +5 -1
|
@@ -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
|
|
10
|
+
private var availableFonts: Map<String, Set<Int>>? = null
|
|
11
11
|
|
|
12
12
|
fun get(context: Context, variant: String?, weight: Int?): MaterialSymbolTypefaceResult {
|
|
13
|
-
val
|
|
14
|
-
|
|
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
|
-
|
|
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
|
|
39
|
-
|
|
42
|
+
private fun getAvailableFonts(context: Context): Map<String, Set<Int>> {
|
|
43
|
+
availableFonts?.let { return it }
|
|
40
44
|
|
|
41
|
-
val
|
|
45
|
+
val files = context.assets.list("fonts")
|
|
42
46
|
?.filter { it.startsWith("MaterialSymbols") && it.endsWith(".ttf") } ?: emptyList()
|
|
43
47
|
|
|
44
|
-
if (
|
|
48
|
+
if (files.isEmpty()) {
|
|
45
49
|
throw RuntimeException("No MaterialSymbols font found in assets.")
|
|
46
50
|
}
|
|
47
51
|
|
|
48
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
62
|
+
availableFonts = fonts
|
|
63
|
+
|
|
64
|
+
return fonts
|
|
65
|
+
}
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
private fun resolveDefaultVariant(fonts: Map<String, Set<Int>>): String {
|
|
68
|
+
val variants = fonts.keys
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
if (variants.size == 1) {
|
|
71
|
+
return variants.first()
|
|
69
72
|
}
|
|
70
73
|
|
|
71
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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.
|
|
4
|
+
"version": "8.0.0-alpha.14",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
7
7
|
"react-navigation",
|
|
@@ -121,5 +121,5 @@
|
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
},
|
|
124
|
-
"gitHead": "
|
|
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
|
-
|
|
50
|
+
animationFrameHandle = requestAnimationFrame(() => {
|
|
51
|
+
relayout();
|
|
52
|
+
});
|
|
49
53
|
});
|
|
50
54
|
}
|
|
51
55
|
);
|