@expo/ui 58.0.12 → 58.0.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/CHANGELOG.md +18 -0
- package/android/build.gradle +2 -2
- package/android/src/main/java/expo/modules/ui/DatePickerView.kt +1 -0
- package/build/State/index.d.ts +1 -0
- package/build/State/index.js +1 -0
- package/build/State/index.js.map +1 -1
- package/build/State/useWorkletCallback.d.ts +31 -0
- package/build/State/useWorkletCallback.js +30 -0
- package/build/State/useWorkletCallback.js.map +1 -0
- package/build/community/datetime-picker/DateTimePicker.android.js +13 -4
- package/build/community/datetime-picker/DateTimePicker.android.js.map +1 -1
- package/build/community/datetime-picker/utils.d.ts +10 -0
- package/build/community/datetime-picker/utils.js +19 -0
- package/build/community/datetime-picker/utils.js.map +1 -0
- package/build/jetpack-compose/MaterialSymbolsAssetsTransformer.fx.js.map +1 -1
- package/build/jetpack-compose/index.d.ts +1 -1
- package/build/jetpack-compose/index.js +1 -1
- package/build/jetpack-compose/index.js.map +1 -1
- package/build/swift-ui/ArrangementView/index.d.ts +48 -0
- package/build/swift-ui/ArrangementView/index.js +56 -0
- package/build/swift-ui/ArrangementView/index.js.map +1 -0
- package/build/swift-ui/index.d.ts +2 -1
- package/build/swift-ui/index.js +2 -1
- package/build/swift-ui/index.js.map +1 -1
- package/build/swift-ui/modifiers/arrangementModifiers.d.ts +109 -0
- package/build/swift-ui/modifiers/arrangementModifiers.js +35 -0
- package/build/swift-ui/modifiers/arrangementModifiers.js.map +1 -0
- package/build/swift-ui/modifiers/hingeObservation.d.ts +73 -0
- package/build/swift-ui/modifiers/hingeObservation.js +45 -0
- package/build/swift-ui/modifiers/hingeObservation.js.map +1 -0
- package/build/swift-ui/modifiers/index.d.ts +4 -1
- package/build/swift-ui/modifiers/index.js +2 -0
- package/build/swift-ui/modifiers/index.js.map +1 -1
- package/ios/ArrangementViewView.swift +40 -0
- package/ios/ExpoUIModule.swift +1 -0
- package/ios/Modifiers/ArrangementModifiers.swift +157 -0
- package/ios/Modifiers/HingeObservationModifiers.swift +82 -0
- package/ios/Modifiers/ViewModifierRegistry.swift +28 -3
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/{58.0.12/expo.modules.ui-58.0.12-sources.jar → 58.0.14/expo.modules.ui-58.0.14-sources.jar} +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14-sources.jar.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14-sources.jar.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14-sources.jar.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14-sources.jar.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.aar +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.aar.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.aar.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.aar.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.aar.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/{58.0.12/expo.modules.ui-58.0.12.module → 58.0.14/expo.modules.ui-58.0.14.module} +22 -22
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.module.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.module.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.module.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.module.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/{58.0.12/expo.modules.ui-58.0.12.pom → 58.0.14/expo.modules.ui-58.0.14.pom} +1 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.pom.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.pom.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.pom.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.pom.sha512 +1 -0
- package/package.json +2 -2
- package/prebuilds/output/debug/xcframeworks/ExpoUI.tar.gz +0 -0
- package/prebuilds/output/release/xcframeworks/ExpoUI.tar.gz +0 -0
- package/src/State/index.ts +1 -0
- package/src/State/useWorkletCallback.ts +48 -0
- package/src/community/datetime-picker/DateTimePicker.android.tsx +14 -4
- package/src/community/datetime-picker/utils.ts +21 -0
- package/src/jetpack-compose/MaterialSymbolsAssetsTransformer.fx.ts +6 -2
- package/src/jetpack-compose/index.ts +1 -1
- package/src/swift-ui/ArrangementView/index.tsx +70 -0
- package/src/swift-ui/index.tsx +2 -1
- package/src/swift-ui/modifiers/arrangementModifiers.ts +142 -0
- package/src/swift-ui/modifiers/hingeObservation.ts +91 -0
- package/src/swift-ui/modifiers/index.ts +4 -0
- package/build/ts-declarations/react-native-assets.d.ts +0 -31
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12-sources.jar.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12-sources.jar.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12-sources.jar.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12-sources.jar.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.aar +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.aar.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.aar.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.aar.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.aar.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.module.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.module.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.module.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.module.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.pom.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.pom.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.pom.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.12/expo.modules.ui-58.0.12.pom.sha512 +0 -1
- package/src/ts-declarations/react-native-assets.d.ts +0 -31
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"component": {
|
|
4
4
|
"group": "expo.modules.ui",
|
|
5
5
|
"module": "expo.modules.ui",
|
|
6
|
-
"version": "58.0.
|
|
6
|
+
"version": "58.0.14",
|
|
7
7
|
"attributes": {
|
|
8
8
|
"org.gradle.status": "release"
|
|
9
9
|
}
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
|
-
"name": "expo.modules.ui-58.0.
|
|
28
|
-
"url": "expo.modules.ui-58.0.
|
|
29
|
-
"size":
|
|
30
|
-
"sha512": "
|
|
31
|
-
"sha256": "
|
|
32
|
-
"sha1": "
|
|
33
|
-
"md5": "
|
|
27
|
+
"name": "expo.modules.ui-58.0.14.aar",
|
|
28
|
+
"url": "expo.modules.ui-58.0.14.aar",
|
|
29
|
+
"size": 1843673,
|
|
30
|
+
"sha512": "ef66aaa30d2d2703c4ff5c36c117ffaf8dd41a2d2a9a8a286224b817f77d20ae2298cd6e0959e1a78ccc3c741cbc286db2e8d5a086b4ed9e11acc6a206207d68",
|
|
31
|
+
"sha256": "dc0a8e5a28e1f4f7d722e8706b5858844aa6eac089e89e5f8099374b309bed60",
|
|
32
|
+
"sha1": "1409db74c61bae87d4830fa0652a822c1ba21d80",
|
|
33
|
+
"md5": "26e374a25a5054c68e67a99ea46b3858"
|
|
34
34
|
}
|
|
35
35
|
]
|
|
36
36
|
},
|
|
@@ -141,13 +141,13 @@
|
|
|
141
141
|
],
|
|
142
142
|
"files": [
|
|
143
143
|
{
|
|
144
|
-
"name": "expo.modules.ui-58.0.
|
|
145
|
-
"url": "expo.modules.ui-58.0.
|
|
146
|
-
"size":
|
|
147
|
-
"sha512": "
|
|
148
|
-
"sha256": "
|
|
149
|
-
"sha1": "
|
|
150
|
-
"md5": "
|
|
144
|
+
"name": "expo.modules.ui-58.0.14.aar",
|
|
145
|
+
"url": "expo.modules.ui-58.0.14.aar",
|
|
146
|
+
"size": 1843673,
|
|
147
|
+
"sha512": "ef66aaa30d2d2703c4ff5c36c117ffaf8dd41a2d2a9a8a286224b817f77d20ae2298cd6e0959e1a78ccc3c741cbc286db2e8d5a086b4ed9e11acc6a206207d68",
|
|
148
|
+
"sha256": "dc0a8e5a28e1f4f7d722e8706b5858844aa6eac089e89e5f8099374b309bed60",
|
|
149
|
+
"sha1": "1409db74c61bae87d4830fa0652a822c1ba21d80",
|
|
150
|
+
"md5": "26e374a25a5054c68e67a99ea46b3858"
|
|
151
151
|
}
|
|
152
152
|
]
|
|
153
153
|
},
|
|
@@ -161,13 +161,13 @@
|
|
|
161
161
|
},
|
|
162
162
|
"files": [
|
|
163
163
|
{
|
|
164
|
-
"name": "expo.modules.ui-58.0.
|
|
165
|
-
"url": "expo.modules.ui-58.0.
|
|
166
|
-
"size":
|
|
167
|
-
"sha512": "
|
|
168
|
-
"sha256": "
|
|
169
|
-
"sha1": "
|
|
170
|
-
"md5": "
|
|
164
|
+
"name": "expo.modules.ui-58.0.14-sources.jar",
|
|
165
|
+
"url": "expo.modules.ui-58.0.14-sources.jar",
|
|
166
|
+
"size": 110723,
|
|
167
|
+
"sha512": "3e6c99d1b6aa74d01d30339d222653a631dae2abf99075e4c25fc171fbb33f9d55bca7daee4d1cd4c6ecdcdc89fb71067de948ac4a91135b6ce38cbb337c52d1",
|
|
168
|
+
"sha256": "eee15e7c9f3aeb7b3941ead7ce0e72d8174b0b95964c69ef5a1d5fbf02536fbe",
|
|
169
|
+
"sha1": "e587fcde7f1c58c339f95759565034f989a49dcf",
|
|
170
|
+
"md5": "041ed0d6d536bbcf8d08e7a653bea8ef"
|
|
171
171
|
}
|
|
172
172
|
]
|
|
173
173
|
}
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.module.md5
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
8620eb4f3a0034ee25df426d15a2132c
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.module.sha1
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
bac0bb14d7f8206e4f6fea13dab4cf103839b7f6
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
9211bc6ae1cb6ca9bae211e99fdfecb0870b0e5dfc1bf31d50552e794cc02abf
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
250717c1fdfaad128b302fc4d7ce975d8cb26444b84ebb91de16d911d91cef07f40632026edc6fe3653c5ebbb621a90e35c1749b301b9e70961f72428265ae4e
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<modelVersion>4.0.0</modelVersion>
|
|
10
10
|
<groupId>expo.modules.ui</groupId>
|
|
11
11
|
<artifactId>expo.modules.ui</artifactId>
|
|
12
|
-
<version>58.0.
|
|
12
|
+
<version>58.0.14</version>
|
|
13
13
|
<packaging>aar</packaging>
|
|
14
14
|
<name>expo.modules.ui</name>
|
|
15
15
|
<url>https://github.com/expo/expo</url>
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.pom.md5
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5830eabc528b387a16b2c11fa647cccf
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.pom.sha1
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2aa19c59ef78a58437075381e54f80196277f198
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.pom.sha256
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
190fae0bf2c5e0e704aff6203b831db1bb670bb9d12db1d93e2c382a1aaca0a6
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.14/expo.modules.ui-58.0.14.pom.sha512
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b1e6707e0766bbcc90144b50abbb05f9dc5bd5c29bda43a4ba32924d7c930425a8c173d500f1ac3d9b1a3d3ad8fb4667fd848ec1ab58bc9ed4d26bbbb7ca7ee7
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/ui",
|
|
3
|
-
"version": "58.0.
|
|
3
|
+
"version": "58.0.14",
|
|
4
4
|
"description": "A collection of UI components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Jetpack Compose",
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
"@types/jest": "^30.0.0",
|
|
149
149
|
"@types/node": "^22.14.0",
|
|
150
150
|
"@types/react": "~19.3.0",
|
|
151
|
-
"expo-module-scripts": "56.0.
|
|
151
|
+
"expo-module-scripts": "56.0.8",
|
|
152
152
|
"react-native-reanimated": "4.7.0",
|
|
153
153
|
"react-native-worklets": "0.13.0"
|
|
154
154
|
},
|
|
Binary file
|
|
Binary file
|
package/src/State/index.ts
CHANGED
|
@@ -6,5 +6,6 @@ import './index.fx';
|
|
|
6
6
|
|
|
7
7
|
export { useNativeState, type ObservableState } from './useNativeState';
|
|
8
8
|
export { useWorkletProp } from './useWorkletProp';
|
|
9
|
+
export { useWorkletCallback, type WorkletCallback } from './useWorkletCallback';
|
|
9
10
|
export { worklets } from './optionalWorklets';
|
|
10
11
|
export { getStateId } from './utils';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { SharedObject } from 'expo';
|
|
2
|
+
|
|
3
|
+
import { worklets } from './optionalWorklets';
|
|
4
|
+
import { useWorkletProp } from './useWorkletProp';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A worklet function wrapped for native code, returned by [`useWorkletCallback`](#useworkletcallback).
|
|
8
|
+
* Pass it to a modifier or prop that accepts worklet callbacks, which then runs it synchronously on
|
|
9
|
+
* the UI thread.
|
|
10
|
+
*/
|
|
11
|
+
export type WorkletCallback<T extends (...args: never[]) => void> = SharedObject & {
|
|
12
|
+
/** @hidden */
|
|
13
|
+
readonly __workletCallbackType?: T;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Wraps a worklet function so native code can run it synchronously on the UI thread, with no
|
|
18
|
+
* JS-thread round trip. Pass the result to a modifier that accepts worklet callbacks, such as
|
|
19
|
+
* `onHingeChange`. The callback must start with the `'worklet'` directive, and
|
|
20
|
+
* [`react-native-worklets`](https://docs.swmansion.com/react-native-worklets/) must be installed.
|
|
21
|
+
*
|
|
22
|
+
* The native callback is updated when `callback` changes and released when the component unmounts,
|
|
23
|
+
* so call it at the top of your component like any hook.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* const angle = useNativeState(180);
|
|
28
|
+
* const onHinge = useWorkletCallback((_, newContext) => {
|
|
29
|
+
* 'worklet';
|
|
30
|
+
* angle.value = newContext.hinge?.angle ?? 180;
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* <VStack modifiers={[onHingeChange(onHinge)]} />
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function useWorkletCallback<T extends (...args: never[]) => void>(
|
|
37
|
+
callback: T
|
|
38
|
+
): WorkletCallback<T> {
|
|
39
|
+
const workletCallback = useWorkletProp(callback as unknown as (...args: unknown[]) => void);
|
|
40
|
+
if (!worklets || !workletCallback) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
"useWorkletCallback needs the 'react-native-worklets' package, which couldn't be loaded. " +
|
|
43
|
+
'Install react-native-worklets and rebuild the native app, or pass a plain function ' +
|
|
44
|
+
'where the API accepts one.'
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
return workletCallback as WorkletCallback<T>;
|
|
48
|
+
}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from '../../jetpack-compose/DatePicker';
|
|
7
7
|
import { Host } from '../../jetpack-compose/Host';
|
|
8
8
|
import { buildEvent, buildChangeEvent, type DateTimePickerProps } from './types';
|
|
9
|
+
import { localDateToUtcDayISOString, utcDayToLocalDate } from './utils';
|
|
9
10
|
|
|
10
11
|
function modeToDisplayedComponents(
|
|
11
12
|
mode: DateTimePickerProps['mode']
|
|
@@ -52,6 +53,14 @@ export function DateTimePicker(props: DateTimePickerProps) {
|
|
|
52
53
|
negativeButton,
|
|
53
54
|
} = props;
|
|
54
55
|
|
|
56
|
+
// Material3 date pickers work in UTC days, while `value` and the reported date are local —
|
|
57
|
+
// matching `@react-native-community/datetimepicker`. Send `value`'s local calendar day as a UTC
|
|
58
|
+
// day and convert the picked UTC day back, keeping `value`'s time of day. The native side
|
|
59
|
+
// already converts `minimumDate`/`maximumDate` by their local calendar day. Time pickers read
|
|
60
|
+
// local hours from the instant, so they take `value` unchanged.
|
|
61
|
+
const usesDateComponents = mode !== 'time';
|
|
62
|
+
const initialDate = usesDateComponents ? localDateToUtcDayISOString(value) : value.toISOString();
|
|
63
|
+
|
|
55
64
|
const onDismissed = () => {
|
|
56
65
|
if (onDismissProp) {
|
|
57
66
|
onDismissProp();
|
|
@@ -70,10 +79,11 @@ export function DateTimePicker(props: DateTimePickerProps) {
|
|
|
70
79
|
};
|
|
71
80
|
|
|
72
81
|
const onDateSelected = (date: Date) => {
|
|
82
|
+
const selected = usesDateComponents ? utcDayToLocalDate(date, value) : date;
|
|
73
83
|
if (onValueChange) {
|
|
74
|
-
onValueChange(buildChangeEvent(
|
|
84
|
+
onValueChange(buildChangeEvent(selected), selected);
|
|
75
85
|
} else {
|
|
76
|
-
onChange?.(buildEvent(
|
|
86
|
+
onChange?.(buildEvent(selected), selected);
|
|
77
87
|
}
|
|
78
88
|
};
|
|
79
89
|
|
|
@@ -81,7 +91,7 @@ export function DateTimePicker(props: DateTimePickerProps) {
|
|
|
81
91
|
minimumDate || maximumDate ? { start: minimumDate, end: maximumDate } : undefined;
|
|
82
92
|
|
|
83
93
|
const dialogProps = {
|
|
84
|
-
initialDate
|
|
94
|
+
initialDate,
|
|
85
95
|
color: accentColor,
|
|
86
96
|
confirmButtonLabel: positiveButton?.label,
|
|
87
97
|
dismissButtonLabel: negativeButton?.label,
|
|
@@ -111,7 +121,7 @@ export function DateTimePicker(props: DateTimePickerProps) {
|
|
|
111
121
|
return (
|
|
112
122
|
<Host matchContents={{ vertical: true }} style={style}>
|
|
113
123
|
<AndroidPicker
|
|
114
|
-
initialDate={
|
|
124
|
+
initialDate={initialDate}
|
|
115
125
|
displayedComponents={modeToDisplayedComponents(mode)}
|
|
116
126
|
variant={displayToAndroidVariant(display)}
|
|
117
127
|
selectableDates={selectableDates}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Material3's DatePicker (and the native side's `toUtcDayMillis` bounds conversion) works in UTC
|
|
2
|
+
// days, while `value`, `minimumDate`, and `maximumDate` are local dates — matching
|
|
3
|
+
// `@react-native-community/datetimepicker`. These helpers convert between the two.
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the ISO string of the UTC midnight of `value`'s local calendar day, so Material3 shows
|
|
7
|
+
* the same day the user sees locally.
|
|
8
|
+
*/
|
|
9
|
+
export function localDateToUtcDayISOString(value: Date): string {
|
|
10
|
+
return new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate())).toISOString();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Converts the UTC-midnight day reported by Material3 back into a local date, keeping the time of
|
|
15
|
+
* day from `timeOfDay`.
|
|
16
|
+
*/
|
|
17
|
+
export function utcDayToLocalDate(utcDay: Date, timeOfDay: Date): Date {
|
|
18
|
+
const result = new Date(timeOfDay);
|
|
19
|
+
result.setFullYear(utcDay.getUTCFullYear(), utcDay.getUTCMonth(), utcDay.getUTCDate());
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { Image } from 'react-native';
|
|
2
|
-
import type AssetSourceResolver from 'react-native/
|
|
2
|
+
import type { AssetSourceResolver } from 'react-native/unstable-internals-do-not-use';
|
|
3
|
+
|
|
4
|
+
type AssetResolver = AssetSourceResolver & {
|
|
5
|
+
asset: { type?: string };
|
|
6
|
+
};
|
|
3
7
|
|
|
4
8
|
// @ts-expect-error: addCustomSourceTransformer type is not exported
|
|
5
9
|
if (typeof Image.resolveAssetSource.addCustomSourceTransformer === 'function') {
|
|
6
10
|
// @ts-expect-error: addCustomSourceTransformer type is not exported
|
|
7
|
-
Image.resolveAssetSource.addCustomSourceTransformer((resolver:
|
|
11
|
+
Image.resolveAssetSource.addCustomSourceTransformer((resolver: AssetResolver) => {
|
|
8
12
|
if (
|
|
9
13
|
process.env.EXPO_OS === 'android' &&
|
|
10
14
|
resolver.asset.type === 'xml' &&
|
|
@@ -72,6 +72,6 @@ export * from './Box';
|
|
|
72
72
|
export * from './Row';
|
|
73
73
|
export * from './Column';
|
|
74
74
|
export * from './FlowRow';
|
|
75
|
-
export { useNativeState } from '../State';
|
|
75
|
+
export { useNativeState, useWorkletCallback, type WorkletCallback } from '../State';
|
|
76
76
|
export type { ViewEvent } from '../types';
|
|
77
77
|
export type { PrimitiveBaseProps } from './layout-types';
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { requireNativeView } from 'expo';
|
|
2
|
+
|
|
3
|
+
import { Slot } from '../SlotView';
|
|
4
|
+
import { createViewModifierEventListener } from '../modifiers/utils';
|
|
5
|
+
import { type CommonViewModifierProps } from '../types';
|
|
6
|
+
|
|
7
|
+
export interface ArrangementViewProps extends CommonViewModifierProps {
|
|
8
|
+
/**
|
|
9
|
+
* The views to arrange. Provide `ArrangementView.Primary` and `ArrangementView.Secondary`.
|
|
10
|
+
*/
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const ArrangementViewNativeView: React.ComponentType<ArrangementViewProps> = requireNativeView(
|
|
15
|
+
'ExpoUI',
|
|
16
|
+
'ArrangementViewView'
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The primary view of the arrangement.
|
|
21
|
+
*/
|
|
22
|
+
function ArrangementViewPrimary(props: { children: React.ReactNode }) {
|
|
23
|
+
return <Slot name="primary">{props.children}</Slot>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The secondary view of the arrangement.
|
|
28
|
+
*/
|
|
29
|
+
function ArrangementViewSecondary(props: { children: React.ReactNode }) {
|
|
30
|
+
return <Slot name="secondary">{props.children}</Slot>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
ArrangementView.Primary = ArrangementViewPrimary;
|
|
34
|
+
ArrangementView.Secondary = ArrangementViewSecondary;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* ArrangementView uses the native [ArrangementView](https://developer.apple.com/documentation/swiftui/arrangementview) view.
|
|
38
|
+
*
|
|
39
|
+
* A view that arranges primary and secondary content using an adaptive layout that responds to
|
|
40
|
+
* the environment.
|
|
41
|
+
*
|
|
42
|
+
* > **Note:** Below iOS 27.1, the children render without a container.
|
|
43
|
+
* @example
|
|
44
|
+
* ```tsx
|
|
45
|
+
* <Host style={{ flex: 1 }}>
|
|
46
|
+
* <ArrangementView modifiers={[arrangementViewStyle('split')]}>
|
|
47
|
+
* <ArrangementView.Primary>
|
|
48
|
+
* <NowPlaying />
|
|
49
|
+
* </ArrangementView.Primary>
|
|
50
|
+
* <ArrangementView.Secondary>
|
|
51
|
+
* <Lyrics />
|
|
52
|
+
* </ArrangementView.Secondary>
|
|
53
|
+
* </ArrangementView>
|
|
54
|
+
* </Host>
|
|
55
|
+
* ```
|
|
56
|
+
* @platform ios 27.1+
|
|
57
|
+
* @platform tvos 27.1+
|
|
58
|
+
*/
|
|
59
|
+
export function ArrangementView(props: ArrangementViewProps) {
|
|
60
|
+
const { modifiers, children, ...restProps } = props;
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<ArrangementViewNativeView
|
|
64
|
+
modifiers={modifiers}
|
|
65
|
+
{...(modifiers ? createViewModifierEventListener(modifiers) : undefined)}
|
|
66
|
+
{...restProps}>
|
|
67
|
+
{children}
|
|
68
|
+
</ArrangementViewNativeView>
|
|
69
|
+
);
|
|
70
|
+
}
|
package/src/swift-ui/index.tsx
CHANGED
|
@@ -29,6 +29,7 @@ export * from './Menu';
|
|
|
29
29
|
export * from './NavigationDestination';
|
|
30
30
|
export * from './NavigationLink';
|
|
31
31
|
export * from './NavigationSplitView';
|
|
32
|
+
export * from './ArrangementView';
|
|
32
33
|
export * from './NavigationStack';
|
|
33
34
|
export * from './Picker';
|
|
34
35
|
export * from './ProgressView';
|
|
@@ -39,7 +40,7 @@ export * from './Spacer';
|
|
|
39
40
|
export * from './Stepper';
|
|
40
41
|
export * from './SwipeActions';
|
|
41
42
|
export * from './Text';
|
|
42
|
-
export { useNativeState } from '../State';
|
|
43
|
+
export { useNativeState, useWorkletCallback, type WorkletCallback } from '../State';
|
|
43
44
|
export { withAnimation, type WithAnimationCompletionCriteria } from './withAnimation';
|
|
44
45
|
export * from './SyncToggle';
|
|
45
46
|
export * from './TabView';
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { createModifier } from './createModifier';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A style that configures an `ArrangementView` with an arrangement.
|
|
5
|
+
* - `'automatic'`: The default style, which resolves to `'split'`.
|
|
6
|
+
* - `'split'`: An arrangement view style that places the primary and secondary views side by side along one or more axes.
|
|
7
|
+
* - `'overlay'`: An arrangement view style that layers the primary view over the secondary view in z-order.
|
|
8
|
+
*/
|
|
9
|
+
export type ArrangementViewStyle = 'automatic' | 'split' | 'overlay';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Sets the style for arrangement views within this view.
|
|
13
|
+
* @param style - The style to apply.
|
|
14
|
+
* @param options - The `axes` the arrangement supports. With `'split'`, creates a split arrangement
|
|
15
|
+
* that supports the given axes. With `'overlay'`, creates an overlay arrangement that supports
|
|
16
|
+
* laying out its views along the given axes.
|
|
17
|
+
* @platform ios 27.1+
|
|
18
|
+
* @platform tvos 27.1+
|
|
19
|
+
* @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/arrangementviewstyle(_:)).
|
|
20
|
+
*/
|
|
21
|
+
export function arrangementViewStyle(style: 'automatic'): ReturnType<typeof createModifier>;
|
|
22
|
+
export function arrangementViewStyle(
|
|
23
|
+
style: 'split' | 'overlay',
|
|
24
|
+
options?: { axes?: 'horizontal' | 'vertical' | 'both' }
|
|
25
|
+
): ReturnType<typeof createModifier>;
|
|
26
|
+
export function arrangementViewStyle(
|
|
27
|
+
style: ArrangementViewStyle,
|
|
28
|
+
options?: { axes?: 'horizontal' | 'vertical' | 'both' }
|
|
29
|
+
) {
|
|
30
|
+
return createModifier('arrangementViewStyle', { style, axes: options?.axes });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The minimum, ideal, and maximum ratios for `splitArrangementLayoutRatio`.
|
|
35
|
+
*/
|
|
36
|
+
export type SplitArrangementLayoutRatioParams = {
|
|
37
|
+
minHorizontal?: number;
|
|
38
|
+
idealHorizontal?: number;
|
|
39
|
+
maxHorizontal?: number;
|
|
40
|
+
minVertical?: number;
|
|
41
|
+
idealVertical?: number;
|
|
42
|
+
maxVertical?: number;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Sets the preferred size ratio for the content of `ArrangementView.Primary` or
|
|
47
|
+
* `ArrangementView.Secondary` in a split arrangement.
|
|
48
|
+
* @platform ios 27.1+
|
|
49
|
+
* @platform tvos 27.1+
|
|
50
|
+
* @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/splitarrangementlayoutratio(_:)).
|
|
51
|
+
*/
|
|
52
|
+
export function splitArrangementLayoutRatio(ratio: number): ReturnType<typeof createModifier>;
|
|
53
|
+
/**
|
|
54
|
+
* Sets the size ratio for the content of `ArrangementView.Primary` or `ArrangementView.Secondary`
|
|
55
|
+
* in a split arrangement.
|
|
56
|
+
* @platform ios 27.1+
|
|
57
|
+
* @platform tvos 27.1+
|
|
58
|
+
* @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/splitarrangementlayoutratio(minhorizontal:idealhorizontal:maxhorizontal:minvertical:idealvertical:maxvertical:)).
|
|
59
|
+
*/
|
|
60
|
+
export function splitArrangementLayoutRatio(
|
|
61
|
+
ratios: SplitArrangementLayoutRatioParams
|
|
62
|
+
): ReturnType<typeof createModifier>;
|
|
63
|
+
export function splitArrangementLayoutRatio(
|
|
64
|
+
ratioOrParams: number | SplitArrangementLayoutRatioParams
|
|
65
|
+
) {
|
|
66
|
+
return createModifier(
|
|
67
|
+
'splitArrangementLayoutRatio',
|
|
68
|
+
typeof ratioOrParams === 'number' ? { ratio: ratioOrParams } : ratioOrParams
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The minimum, ideal, and maximum sizes for `splitArrangementLayoutSize`.
|
|
74
|
+
*/
|
|
75
|
+
export type SplitArrangementLayoutSizeParams = {
|
|
76
|
+
minWidth?: number;
|
|
77
|
+
idealWidth?: number;
|
|
78
|
+
maxWidth?: number;
|
|
79
|
+
minHeight?: number;
|
|
80
|
+
idealHeight?: number;
|
|
81
|
+
maxHeight?: number;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Sets the size constraints for the content of `ArrangementView.Primary` or
|
|
86
|
+
* `ArrangementView.Secondary` in a split arrangement.
|
|
87
|
+
* @platform ios 27.1+
|
|
88
|
+
* @platform tvos 27.1+
|
|
89
|
+
* @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/splitarrangementlayoutsize(minwidth:idealwidth:maxwidth:minheight:idealheight:maxheight:)).
|
|
90
|
+
*/
|
|
91
|
+
export const splitArrangementLayoutSize = (constraints: SplitArrangementLayoutSizeParams) =>
|
|
92
|
+
createModifier('splitArrangementLayoutSize', constraints);
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* The split axes on which `splitArrangementFixedLayoutSize` prefers the ideal size of the view.
|
|
96
|
+
*/
|
|
97
|
+
export type SplitArrangementFixedLayoutSizeParams = {
|
|
98
|
+
/**
|
|
99
|
+
* Whether to prefer a fixed width for the view in a horizontal split.
|
|
100
|
+
* @default true
|
|
101
|
+
*/
|
|
102
|
+
horizontal?: boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Whether to prefer a fixed height for the view in a vertical split.
|
|
105
|
+
* @default true
|
|
106
|
+
*/
|
|
107
|
+
vertical?: boolean;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Sets the preferred size constraint for the content of `ArrangementView.Primary` or
|
|
112
|
+
* `ArrangementView.Secondary` in a split arrangement to the ideal size of the view within its
|
|
113
|
+
* container. The arrangement view prefers this size, but may resize to a smaller size depending on
|
|
114
|
+
* the priority of the view.
|
|
115
|
+
* @platform ios 27.1+
|
|
116
|
+
* @platform tvos 27.1+
|
|
117
|
+
* @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/splitarrangementfixedlayoutsize(horizontal:vertical:)).
|
|
118
|
+
*/
|
|
119
|
+
export const splitArrangementFixedLayoutSize = (options?: SplitArrangementFixedLayoutSizeParams) =>
|
|
120
|
+
createModifier('splitArrangementFixedLayoutSize', options);
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Sets the horizontal edge that a view in an overlay arrangement occupies when the arrangement
|
|
124
|
+
* transitions to a horizontal layout.
|
|
125
|
+
* @platform ios 27.1+
|
|
126
|
+
* @platform tvos 27.1+
|
|
127
|
+
* @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/overlayarrangementedge(_:)).
|
|
128
|
+
*/
|
|
129
|
+
export function overlayArrangementEdge(
|
|
130
|
+
edge: 'leading' | 'trailing'
|
|
131
|
+
): ReturnType<typeof createModifier>;
|
|
132
|
+
/**
|
|
133
|
+
* Sets the vertical edge that a view in an overlay arrangement occupies when the arrangement
|
|
134
|
+
* transitions to a vertical layout.
|
|
135
|
+
* @platform ios 27.1+
|
|
136
|
+
* @platform tvos 27.1+
|
|
137
|
+
* @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/overlayarrangementedge(_:)-4tjwn).
|
|
138
|
+
*/
|
|
139
|
+
export function overlayArrangementEdge(edge: 'top' | 'bottom'): ReturnType<typeof createModifier>;
|
|
140
|
+
export function overlayArrangementEdge(edge: 'top' | 'bottom' | 'leading' | 'trailing') {
|
|
141
|
+
return createModifier('overlayArrangementEdge', { edge });
|
|
142
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { getStateId, type WorkletCallback } from '../../State';
|
|
2
|
+
import { createModifier, createModifierWithEventListener } from './createModifier';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Status of the device hinge, as reported by SwiftUI's `DeviceHinge.Status`.
|
|
6
|
+
* `'unknown'` is reserved for a status this version of Expo UI does not recognize.
|
|
7
|
+
* @platform ios 27.1+
|
|
8
|
+
*/
|
|
9
|
+
export type HingeStatus = 'closed' | 'partiallyOpen' | 'fullyOpen' | 'unknown';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* State of the device hinge. Mirrors SwiftUI's `DeviceHinge`.
|
|
13
|
+
* @platform ios 27.1+
|
|
14
|
+
*/
|
|
15
|
+
export type Hinge = {
|
|
16
|
+
/**
|
|
17
|
+
* The current angle of the hinge in degrees, where `0` is closed and `180` is flat. The rate and
|
|
18
|
+
* granularity of angle updates are system policy, so do not depend on a particular update
|
|
19
|
+
* frequency or precision. Prefer `status` when you only need to know whether the hinge is closed,
|
|
20
|
+
* partially open, or fully open.
|
|
21
|
+
*/
|
|
22
|
+
angle: number;
|
|
23
|
+
/**
|
|
24
|
+
* The current status of the hinge, determined by the system from the angle and device orientation.
|
|
25
|
+
*/
|
|
26
|
+
status: HingeStatus;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The hinge context of the view hierarchy. Mirrors SwiftUI's `DeviceHingeContext`.
|
|
31
|
+
* @platform ios 27.1+
|
|
32
|
+
*/
|
|
33
|
+
export type HingeContext = {
|
|
34
|
+
/**
|
|
35
|
+
* The current hinge, or `null` when the device has no hinge or the view's hierarchy provides no
|
|
36
|
+
* hinge updates.
|
|
37
|
+
*/
|
|
38
|
+
hinge: Hinge | null;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* A function called with the old and the new hinge context when the hinge context changes.
|
|
43
|
+
*/
|
|
44
|
+
export type HingeChangeHandler = (oldContext: HingeContext, newContext: HingeContext) => void;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Calls the handler when the hinge context of the view hierarchy changes, such as when the user
|
|
48
|
+
* folds or unfolds the device. The handler receives the old and the new context. Use hinge
|
|
49
|
+
* state for interactions and effects, not for layout.
|
|
50
|
+
*
|
|
51
|
+
* Pass a plain function to run it on the JS thread, or a callback from
|
|
52
|
+
* [`useWorkletCallback`](../usenativestate/#useworkletcallback) to run it synchronously on the UI
|
|
53
|
+
* thread, which suits driving a native state value from the continuous `angle`.
|
|
54
|
+
*
|
|
55
|
+
* The first call happens when the view appears, and its old context has a `null` hinge. On devices
|
|
56
|
+
* without a hinge, both contexts have a `null` hinge. The modifier is a no-op on iOS versions earlier
|
|
57
|
+
* than 27.1 and in builds made with Xcode earlier than 27.1.
|
|
58
|
+
*
|
|
59
|
+
* @param handler - Function or worklet callback called with the old and the new hinge context.
|
|
60
|
+
* @platform ios 27.1+
|
|
61
|
+
*
|
|
62
|
+
* @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/onhingechange(isenabled:_:)).
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```tsx
|
|
66
|
+
* // JS thread
|
|
67
|
+
* const [hinge, setHinge] = useState<Hinge | null>(null);
|
|
68
|
+
* <VStack modifiers={[onHingeChange((_, newContext) => setHinge(newContext.hinge))]} />
|
|
69
|
+
*
|
|
70
|
+
* // UI thread
|
|
71
|
+
* const angle = useNativeState(180);
|
|
72
|
+
* const onHinge = useWorkletCallback((_, newContext) => {
|
|
73
|
+
* 'worklet';
|
|
74
|
+
* angle.value = newContext.hinge?.angle ?? 180;
|
|
75
|
+
* });
|
|
76
|
+
* <VStack modifiers={[onHingeChange(onHinge)]} />
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export const onHingeChange = (
|
|
80
|
+
handler: HingeChangeHandler | WorkletCallback<HingeChangeHandler>
|
|
81
|
+
) => {
|
|
82
|
+
if (typeof handler !== 'function') {
|
|
83
|
+
return createModifier('onHingeChange', { workletCallback: getStateId(handler) });
|
|
84
|
+
}
|
|
85
|
+
const callback = handler as HingeChangeHandler;
|
|
86
|
+
return createModifierWithEventListener(
|
|
87
|
+
'onHingeChange',
|
|
88
|
+
(event: { oldContext: HingeContext; newContext: HingeContext }) =>
|
|
89
|
+
callback(event.oldContext, event.newContext)
|
|
90
|
+
);
|
|
91
|
+
};
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
import { datePickerStyle } from './datePickerStyle';
|
|
19
19
|
import { environment } from './environment';
|
|
20
20
|
import { gaugeStyle } from './gaugeStyle';
|
|
21
|
+
import { onHingeChange } from './hingeObservation';
|
|
21
22
|
import { progressViewStyle } from './progressViewStyle';
|
|
22
23
|
import { onScrollPhaseChange, useScrollGeometryChange } from './scrollObservation';
|
|
23
24
|
import { id, scrollPosition } from './scrollPosition';
|
|
@@ -1896,6 +1897,7 @@ export type BuiltInModifier =
|
|
|
1896
1897
|
| ReturnType<typeof scrollPosition>
|
|
1897
1898
|
| ReturnType<typeof onScrollPhaseChange>
|
|
1898
1899
|
| NonNullable<ReturnType<typeof useScrollGeometryChange>>
|
|
1900
|
+
| ReturnType<typeof onHingeChange>
|
|
1899
1901
|
| ReturnType<typeof moveDisabled>
|
|
1900
1902
|
| ReturnType<typeof deleteDisabled>
|
|
1901
1903
|
| ReturnType<typeof environment>
|
|
@@ -1989,6 +1991,7 @@ export * from './pickerStyle';
|
|
|
1989
1991
|
export * from './menuOrder';
|
|
1990
1992
|
export * from './tabViewModifiers';
|
|
1991
1993
|
export * from './navigationModifiers';
|
|
1994
|
+
export * from './arrangementModifiers';
|
|
1992
1995
|
export * from './datePickerStyle';
|
|
1993
1996
|
export * from './progressViewStyle';
|
|
1994
1997
|
export * from './gaugeStyle';
|
|
@@ -1998,6 +2001,7 @@ export type { ShapeStyle } from './shapeStyle';
|
|
|
1998
2001
|
export * from './scrollPosition';
|
|
1999
2002
|
export * from './symbolEffect';
|
|
2000
2003
|
export * from './scrollObservation';
|
|
2004
|
+
export * from './hingeObservation';
|
|
2001
2005
|
export * from './widgets';
|
|
2002
2006
|
export type {
|
|
2003
2007
|
TimingAnimationParams,
|