@symbiote-native/react 3.2.0 → 3.4.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 (84) hide show
  1. package/build/batched-updates.d.ts +2 -0
  2. package/build/batched-updates.js +5 -0
  3. package/build/components/checkbox-props.d.ts +5 -0
  4. package/build/components/checkbox-props.js +1 -0
  5. package/build/components/flat-list/index.d.ts +16 -13
  6. package/build/components/flat-list/index.js +86 -72
  7. package/build/components/input-accessory-view-props.d.ts +4 -3
  8. package/build/components/keyboard-avoiding-view/index.d.ts +2 -2
  9. package/build/components/keyboard-avoiding-view/index.js +45 -84
  10. package/build/components/layout-conformance-props.d.ts +6 -0
  11. package/build/components/layout-conformance-props.js +1 -0
  12. package/build/components/modal/index.d.ts +4 -4
  13. package/build/components/modal/index.js +47 -18
  14. package/build/components/refresh-control-props.d.ts +7 -6
  15. package/build/components/scroll-view/scroll-view-props.d.ts +8 -5
  16. package/build/components/text-input/text-input-props.d.ts +4 -0
  17. package/build/components/touchable/touchable-props.d.ts +6 -5
  18. package/build/components/virtualized-list/index.d.ts +3 -70
  19. package/build/components/virtualized-list/index.js +50 -548
  20. package/build/components/virtualized-list/list-children.d.ts +13 -0
  21. package/build/components/virtualized-list/list-children.js +79 -0
  22. package/build/components/virtualized-list/list-config.d.ts +11 -0
  23. package/build/components/virtualized-list/list-config.js +14 -0
  24. package/build/components/virtualized-list/list-elements.d.ts +11 -0
  25. package/build/components/virtualized-list/list-elements.js +26 -0
  26. package/build/components/virtualized-list/list-host.d.ts +14 -0
  27. package/build/components/virtualized-list/list-host.js +24 -0
  28. package/build/components/virtualized-list/list-scroll-props.d.ts +32 -0
  29. package/build/components/virtualized-list/list-scroll-props.js +30 -0
  30. package/build/components/virtualized-list/nested-scope.d.ts +10 -0
  31. package/build/components/virtualized-list/nested-scope.js +16 -0
  32. package/build/components/virtualized-list/use-list-driver.d.ts +22 -0
  33. package/build/components/virtualized-list/use-list-driver.js +104 -0
  34. package/build/components/virtualized-list/use-list-nesting.d.ts +12 -0
  35. package/build/components/virtualized-list/use-list-nesting.js +37 -0
  36. package/build/components/virtualized-list/use-list-parts.d.ts +12 -0
  37. package/build/components/virtualized-list/use-list-parts.js +20 -0
  38. package/build/components/virtualized-list/use-scroll-handlers.d.ts +17 -0
  39. package/build/components/virtualized-list/use-scroll-handlers.js +106 -0
  40. package/build/components/virtualized-list/use-separators.d.ts +8 -0
  41. package/build/components/virtualized-list/use-separators.js +17 -0
  42. package/build/components/virtualized-list/virtualized-list-props.d.ts +85 -0
  43. package/build/components/virtualized-list/virtualized-list-props.js +2 -0
  44. package/build/components/virtualized-section-list/index.d.ts +24 -8
  45. package/build/components/virtualized-section-list/index.js +89 -93
  46. package/build/components/virtualized-section-list/section-item-cell.d.ts +23 -0
  47. package/build/components/virtualized-section-list/section-item-cell.js +48 -0
  48. package/build/components.d.ts +5 -5
  49. package/build/descriptor-to-react/with-children.d.ts +4 -0
  50. package/build/descriptor-to-react/with-children.js +6 -0
  51. package/build/hooks/use-animated-value.d.ts +7 -0
  52. package/build/hooks/use-animated-value.js +19 -0
  53. package/build/hooks/use-color-scheme.d.ts +2 -2
  54. package/build/hooks/use-color-scheme.js +4 -13
  55. package/build/hooks/use-event.d.ts +6 -0
  56. package/build/hooks/use-event.js +15 -0
  57. package/build/hooks/use-native-view-controller.d.ts +3 -0
  58. package/build/hooks/use-native-view-controller.js +15 -0
  59. package/build/hooks/use-pressability.d.ts +34 -0
  60. package/build/hooks/use-pressability.js +39 -0
  61. package/build/hooks/use-window-dimensions.js +6 -10
  62. package/build/host-config.js +6 -5
  63. package/build/index.d.ts +23 -5
  64. package/build/index.js +23 -14
  65. package/build/jsx-runtime.d.ts +17 -16
  66. package/build/modules/animated/create-animated-component.d.ts +2 -2
  67. package/build/modules/animated/create-animated-component.js +10 -22
  68. package/build/modules/animated/index.d.ts +54 -41
  69. package/build/modules/animated/index.js +2 -27
  70. package/build/modules/app-registry/index.d.ts +3 -3
  71. package/build/modules/app-registry/index.js +2 -2
  72. package/build/modules/status-bar/index.android.d.ts +1 -1
  73. package/build/modules/status-bar/index.android.js +7 -27
  74. package/build/modules/status-bar/index.ios.d.ts +1 -1
  75. package/build/modules/status-bar/index.ios.js +4 -28
  76. package/build/modules/status-bar/shared.d.ts +5 -4
  77. package/build/modules/status-bar/shared.js +33 -6
  78. package/build/native-host-tags.d.ts +2 -0
  79. package/build/native-host-tags.js +4 -0
  80. package/build/render.d.ts +1 -1
  81. package/build/render.js +3 -1
  82. package/build/root-tag-context.d.ts +1 -0
  83. package/build/root-tag-context.js +4 -0
  84. package/package.json +6 -6
@@ -0,0 +1,39 @@
1
+ // RN's `usePressability`, over RN's own `Pressability` class, which `bootstrapHost` hands to the
2
+ // engine. RN's class expects its synthetic events, so each handler gets the event with `persist()`
3
+ import { useInsertionEffect, useRef } from 'react';
4
+ import { loadPressability, } from '@symbiote-native/engine';
5
+ // An event of ours answers everything RN's class reads, `persist` apart: nothing is pooled here
6
+ function withPersist(event) {
7
+ return Object.assign(Object.create(event), { persist: () => { } });
8
+ }
9
+ function persistingHandlers(handlers) {
10
+ return Object.fromEntries(Object.entries(handlers).map(([name, handler]) => [
11
+ name,
12
+ (event) => handler(withPersist(event)),
13
+ ]));
14
+ }
15
+ export function usePressability(config) {
16
+ const ref = useRef(null);
17
+ if (config != null && ref.current === null) {
18
+ const Pressability = loadPressability();
19
+ const pressability = new Pressability(config);
20
+ ref.current = {
21
+ pressability,
22
+ handlers: persistingHandlers(pressability.getEventHandlers()),
23
+ };
24
+ }
25
+ const instance = ref.current;
26
+ // A no-op on the first mount, on an update it points `Pressability` at the new config
27
+ useInsertionEffect(() => {
28
+ if (config != null && instance !== null) {
29
+ instance.pressability.configure(config);
30
+ }
31
+ }, [config, instance]);
32
+ // On unmount only, not when `config` changes: pending timers and state go
33
+ useInsertionEffect(() => {
34
+ if (instance === null)
35
+ return undefined;
36
+ return () => instance.pressability.reset();
37
+ }, [instance]);
38
+ return instance === null ? null : instance.handlers;
39
+ }
@@ -1,26 +1,22 @@
1
- // useWindowDimensions is the preferred API for components that need window metrics,
2
- // a port of RN's Libraries/Utilities/useWindowDimensions.js. It seeds from
3
- // Dimensions.get('window'), subscribes to 'change', and re-checks once after
4
- // subscribing to close the gap between the render-time get and the effect-time
5
- // listener. Only the window metrics changing triggers a re-render.
1
+ // Port of RN's `useWindowDimensions`: seeds from `Dimensions.get('window')`, subscribes to 'change'
2
+ // TODO(rn-port): RN's module loads `NativeDeviceInfo` eagerly, which needs a bridge itests lack
6
3
  import { useEffect, useState } from 'react';
7
4
  import { Dimensions, } from '@symbiote-native/engine';
8
5
  export function useWindowDimensions() {
9
6
  const [dimensions, setDimensions] = useState(() => Dimensions.get('window'));
10
7
  useEffect(() => {
11
8
  function handleChange(window) {
12
- if (dimensions.width !== window.width ||
9
+ const hasChanged = dimensions.width !== window.width ||
13
10
  dimensions.height !== window.height ||
14
11
  dimensions.scale !== window.scale ||
15
- dimensions.fontScale !== window.fontScale) {
12
+ dimensions.fontScale !== window.fontScale;
13
+ if (hasChanged)
16
14
  setDimensions(window);
17
- }
18
15
  }
19
16
  const subscription = Dimensions.addEventListener('change', (set) => {
20
17
  handleChange(set.window);
21
18
  });
22
- // We may have missed an update between calling `get` in render and subscribing
23
- // here; re-check now. If nothing changed, React filters the no-op set.
19
+ // An update may land between `get` in render and the subscription, so re-check now
24
20
  handleChange(Dimensions.get('window'));
25
21
  return () => {
26
22
  subscription.remove();
@@ -4,7 +4,7 @@
4
4
  // canary: a known-good driver exercising shared end to end.
5
5
  import createReconciler from 'react-reconciler';
6
6
  import { createContext } from 'react';
7
- import { appendChild, createElement, createRawText, insertBefore, removeChild, routeProp, setNodeComponent, setNodeHidden, setText, SymbioteSurface, } from '@symbiote-native/engine';
7
+ import { appendChild, createElement, createRawText, hostBehaviorFor, insertBefore, removeChild, routeProp, setNodeComponent, setNodeHidden, setText, SymbioteSurface, } from '@symbiote-native/engine';
8
8
  import { DefaultEventPriority, DiscreteEventPriority, NoEventPriority, } from './reconciler-constants.js';
9
9
  import { toPublicInstance } from './host-instance.js';
10
10
  // Intrinsic JSX type -> Fabric component name. The name table + resolver live once in
@@ -95,7 +95,8 @@ const reconciler = createReconciler({
95
95
  scheduleMicrotask: queueMicrotask,
96
96
  getRootHostContext: () => ({ isInsideText: false }),
97
97
  getChildHostContext(parentHostContext, type) {
98
- const isInsideText = descriptorFor(type).isText;
98
+ const isInsideText = descriptorFor(type).isText ||
99
+ hostBehaviorFor(type)?.acceptsTextChildren === true;
99
100
  return parentHostContext.isInsideText === isInsideText
100
101
  ? parentHostContext
101
102
  : { isInsideText };
@@ -196,9 +197,9 @@ const reconciler = createReconciler({
196
197
  currentUpdatePriority = priority;
197
198
  },
198
199
  getCurrentUpdatePriority: () => currentUpdatePriority,
199
- resolveUpdatePriority: () => currentUpdatePriority !== NoEventPriority
200
- ? currentUpdatePriority
201
- : DefaultEventPriority,
200
+ resolveUpdatePriority: () => currentUpdatePriority === NoEventPriority
201
+ ? DefaultEventPriority
202
+ : currentUpdatePriority,
202
203
  maySuspendCommit: () => false,
203
204
  NotPendingTransition: null,
204
205
  // react's Context IS the runtime value react-reconciler's ReactContext wants
package/build/index.d.ts CHANGED
@@ -20,6 +20,8 @@ export type { ISwitchProps } from './components/switch/switch-props';
20
20
  export type { ISwitchTrackColor, ISwitchChangeEvent, } from '@symbiote-native/components';
21
21
  export type { IActivityIndicatorProps } from './components/activity-indicator-props';
22
22
  export type { ISafeAreaViewProps } from './components/safe-area-view-props';
23
+ export type { ILayoutConformanceProps } from './components/layout-conformance-props';
24
+ export type { ILayoutConformanceMode } from '@symbiote-native/components';
23
25
  export type { IRefreshControlProps } from './components/refresh-control-props';
24
26
  export { Modal } from './components/modal';
25
27
  export type { IModalProps, IModalAnimationType, IModalPresentationStyle, IModalOrientation, } from './components/modal';
@@ -27,6 +29,7 @@ export type { IPressableProps, IPressState, } from './components/pressable/press
27
29
  export type { ITouchableOpacityProps, ITouchableHighlightProps, } from './components/touchable/touchable-props';
28
30
  export type { ITouchableWithoutFeedbackProps } from './components/touchable-without-feedback/touchable-without-feedback-props';
29
31
  export type { IButtonProps } from './components/button-props';
32
+ export type { ICheckboxProps } from './components/checkbox-props';
30
33
  export { FlatList } from './components/flat-list';
31
34
  export type { IFlatListProps, IFlatListHandle } from './components/flat-list';
32
35
  export { SectionList } from './components/section-list';
@@ -34,31 +37,42 @@ export type { ISectionListProps, ISectionListHandle, ISection, } from './compone
34
37
  export { VirtualizedSectionList } from './components/virtualized-section-list';
35
38
  export type { IVirtualizedSectionListProps, IVirtualizedSectionListHandle, } from './components/virtualized-section-list';
36
39
  export { VirtualizedList } from './components/virtualized-list';
37
- export type { IVirtualizedListProps, IVirtualizedListHandle, IViewToken, IViewableItemsChangedInfo, IViewabilityConfig, IViewabilityConfigCallbackPair, } from './components/virtualized-list';
40
+ export { useVirtualizedListScope } from './components/virtualized-list/nested-scope';
41
+ export type { IListScope } from '@symbiote-native/components';
42
+ export type { ICellRendererComponent, ICellRendererProps, IVirtualizedListProps, IVirtualizedListHandle, IViewToken, IViewableItemsChangedInfo, IViewabilityConfig, IViewabilityConfigCallbackPair, } from './components/virtualized-list';
38
43
  export type { IViewStyle, ITextStyle, IFlexAlign, IFlexJustify, } from './utils/styles';
39
44
  export { mount, unmount } from './render';
40
45
  export { createPortal, type IPortalContainer } from './create-portal';
41
46
  export { createTunnel, type ITunnel } from './create-tunnel';
42
47
  export { descriptorToReact } from './descriptor-to-react';
48
+ export { descriptorToReactWithChildren } from './descriptor-to-react/with-children';
43
49
  export { findNodeHandle } from './host-instance';
44
50
  export type { IHostInstance } from './host-instance';
45
- export { AppRegistry, setHostRegistrar } from './modules/app-registry';
46
- export type { IComponentProvider, IAppParameters, IRunnable, IHostRegistrar, IWrapperComponentProvider, IRegistry, IHeadlessTask, ITaskProvider, ITaskCanceller, ITaskCancelProvider, } from './modules/app-registry';
51
+ export { AppRegistry, HeadlessJsTaskError, setHostRegistrar, } from './modules/app-registry';
52
+ export type { IComponentProvider, IAppConfig, IAppParameters, IRunnable, IHostRegistrar, IWrapperComponentProvider, IRegistry, IHeadlessTask, ITaskProvider, ITaskCanceller, ITaskCancelProvider, } from './modules/app-registry';
47
53
  export { Animated, createAnimatedComponent } from './modules/animated';
48
54
  export { Platform, StyleSheet } from '@symbiote-native/engine';
49
55
  export { PlatformColor, DynamicColorIOS, processColor, } from '@symbiote-native/engine';
50
56
  export type { IColorValue, IOpaqueColorValue, IDynamicColorIOSTuple, } from '@symbiote-native/engine';
51
- export { setNativeViewConfigSource, setColorProcessor, setDeviceEventSource, } from '@symbiote-native/engine';
57
+ export { setNativeViewConfigSource, setColorProcessor, } from '@symbiote-native/engine';
52
58
  export { dlog, isDebug } from '@symbiote-native/engine';
53
59
  export type { INativeViewConfig, INativeViewConfigSource, } from '@symbiote-native/engine';
54
60
  export type { IPlatformStatic, IPlatformOSType, IPlatformConstantsIOS, IPlatformConstantsAndroid, IPlatformSelectSpec, } from '@symbiote-native/engine';
55
- export { Alert, Share, ActionSheetIOS, Linking, Vibration, ToastAndroid, Settings, I18nManager, Dimensions, Appearance, AppState, Keyboard, KEYBOARD_EVENT, BackHandler, PermissionsAndroid, PERMISSIONS, RESULTS, LayoutAnimation, PixelRatio, } from '@symbiote-native/engine';
61
+ export { Alert, Share, ActionSheetIOS, Linking, Vibration, ToastAndroid, Settings, I18nManager, Dimensions, Appearance, AppState, Keyboard, KEYBOARD_EVENT, TextInputState, BackHandler, PermissionsAndroid, PERMISSIONS, RESULTS, LayoutAnimation, PixelRatio, } from '@symbiote-native/engine';
56
62
  export type { IAlertType, IAlertButtonStyle, IAlertButton, IAlertButtons, IAlertOptions, IShareContent, IShareOptions, IShareAction, IActionSheetIOSOptions, IShareActionSheetIOSOptions, IShareActionSheetError, IUrlEvent, II18nManagerConstants, IDisplayMetrics, IDisplayMetricsAndroid, IDimensionsPayload, IDimensionsSet, IDimensionsKey, IDimensionsChangeListener, IDimensionsStatic, IColorSchemeName, IColorSchemePreference, IAppStateStatus, IAppStateEvent, IKeyboardEventName, IKeyboardEvent, IKeyboardMetrics, IBackPressEventName, IBackPressHandler, IPermission, IPermissionStatus, IRationale, ILayoutAnimationType, ILayoutAnimationProperty, ILayoutAnimationConfig, ILayoutAnimationAnim, IPixelRatioStatic, } from '@symbiote-native/engine';
57
63
  export { useWindowDimensions } from './hooks/use-window-dimensions';
58
64
  export { useColorScheme } from './hooks/use-color-scheme';
65
+ export { RootTagContext } from './root-tag-context';
66
+ export { unstable_batchedUpdates } from './batched-updates';
67
+ export { unstable_NativeText, unstable_NativeView } from './native-host-tags';
68
+ export { usePressability } from './hooks/use-pressability';
69
+ export type { IPressabilityConfig } from './hooks/use-pressability';
70
+ export { useAnimatedColor, useAnimatedValue, useAnimatedValueXY, } from './hooks/use-animated-value';
59
71
  export { createPermissionHook } from './hooks/create-permission-hook';
60
72
  export { createResourceHook } from './hooks/create-resource-hook';
73
+ export { useNativeViewController } from './hooks/use-native-view-controller';
61
74
  export { createEventValueHook } from './hooks/create-event-value-hook';
75
+ export { useEvent, useEventListener } from './hooks/use-event';
62
76
  export { AccessibilityInfo } from './modules/accessibility-info';
63
77
  export type { IAccessibilityChangeEvent, IAccessibilityChangeEventName, IAccessibilityChangeEventHandler, IAccessibilityAnnouncementFinishedEvent, IAnnounceForAccessibilityOptions, IAccessibilityEventType, } from './modules/accessibility-info';
64
78
  export { PanResponder } from '@symbiote-native/engine';
@@ -70,3 +84,7 @@ export type { INativeFeedbackBackground, IThemeAttrBackground, IRippleBackground
70
84
  export type { ITouchableNativeFeedbackProps } from './components/touchable-native-feedback/touchable-native-feedback-props';
71
85
  export type { ISymbioteEvent, ISymbioteNode, IRootTag, } from '@symbiote-native/engine';
72
86
  export type { ICellLayout, ISeparatorProps, ISeparators, IModalOrientationChangeEvent, IPressableAndroidRippleConfig, IEnterKeyHint, IInputMode, ISubmitBehavior, ITextInputSelection, IImageStatics, } from '@symbiote-native/components';
87
+ export { DeviceEventEmitter, Easing, EventEmitter, NativeAppEventEmitter, NativeEventEmitter, } from '@symbiote-native/engine';
88
+ export type { IEasing, IEasingFunction, IEmitterSubscription, IEventEmitter, IEventEmitterModule, IEventSubscription, INativeEventListener, } from '@symbiote-native/engine';
89
+ export { codegenNativeCommands, codegenNativeComponent, DevMenu, DevSettings, LogBox, NativeComponentRegistry, NativeModules, Networking, PushNotificationIOS, ReactNativeVersion, registerCallableModule, requireNativeComponent, Systrace, Touchable, TurboModuleRegistry, UIManager, UTFSequence, } from '@symbiote-native/engine';
90
+ export type { IDevSettings } from '@symbiote-native/engine';
package/build/index.js CHANGED
@@ -18,24 +18,23 @@ export { FlatList } from './components/flat-list/index.js';
18
18
  export { SectionList } from './components/section-list/index.js';
19
19
  export { VirtualizedSectionList } from './components/virtualized-section-list/index.js';
20
20
  export { VirtualizedList } from './components/virtualized-list/index.js';
21
+ export { useVirtualizedListScope } from './components/virtualized-list/nested-scope.js';
21
22
  export { mount, unmount } from './render.js';
22
- // createPortal: react-reconciler's Fiber-level portal, working here because @symbiote-native/react is
23
- // mutation-mode (unlike stock RN's persistent-mode Fabric renderer, which doesn't support it —
24
- // see create-portal.ts). v1 scope: target must be an already-mounted node in the SAME surface.
23
+ // `createPortal` needs mutation mode, stock RN's persistent-mode renderer has no portal
24
+ // The target must be a mounted node of the same surface, see create-portal.ts
25
25
  export { createPortal } from './create-portal/index.js';
26
- // createTunnel: cross-surface content sharing. createPortal/Teleport stay same-surface-only
27
- // by design — a real React portal can't reach across two separate reconciler roots either
28
- // (see github.com/facebook/react/issues/17147), so reaching a different surface means letting
29
- // that surface commit its own content by reading from a shared store instead.
26
+ // `createTunnel` shares content across surfaces, since a React portal cannot reach another root
27
+ // (github.com/facebook/react/issues/17147) and the other surface reads a shared store instead
30
28
  export { createTunnel } from './create-tunnel/index.js';
31
29
  // descriptorToReact: the @symbiote-native/components Descriptor → React.createElement bridge. Exported so
32
30
  // an external wrapper package (e.g. @symbiote-native/slider/react over a third-party native view) can map
33
31
  // a shared render fn's Descriptor onto React elements through the SAME bridge the adapter uses.
34
32
  export { descriptorToReact } from './descriptor-to-react/index.js';
33
+ export { descriptorToReactWithChildren } from './descriptor-to-react/with-children.js';
35
34
  export { findNodeHandle } from './host-instance.js';
36
35
  // AppRegistry: RN's app entry point over `mount`. setHostRegistrar wires RN's own
37
36
  // registrar so the native Fabric host finds our runnable by app key.
38
- export { AppRegistry, setHostRegistrar } from './modules/app-registry/index.js';
37
+ export { AppRegistry, HeadlessJsTaskError, setHostRegistrar, } from './modules/app-registry/index.js';
39
38
  // Animated bridge: createAnimatedComponent + Animated.View/Text/Image, driving the
40
39
  // shared JS Animated engine. Imperative timing/spring drivers merge into this
41
40
  // namespace once they land in shared.
@@ -47,24 +46,29 @@ export { Platform, StyleSheet } from '@symbiote-native/engine';
47
46
  // processColor runs a color through the injected platform processor. All pure /
48
47
  // seam-backed, so they live in shared and the adapter re-exports them.
49
48
  export { PlatformColor, DynamicColorIOS, processColor, } from '@symbiote-native/engine';
50
- // The three app-entry seams, wired once on a real host, so the barrel exposes them together.
51
- // setNativeViewConfigSource hands the engine RN's ViewConfig registry, which is how third-party
52
- // Fabric views auto-derive their metadata:
53
- // setNativeViewConfigSource(name => ReactNativeViewConfigRegistry.get(name))
54
- export { setNativeViewConfigSource, setColorProcessor, setDeviceEventSource, } from '@symbiote-native/engine';
49
+ // Seams wired once on a real host: `setNativeViewConfigSource` derives third-party view configs
50
+ // `setNativeViewConfigSource(name => ReactNativeViewConfigRegistry.get(name))`
51
+ export { setNativeViewConfigSource, setColorProcessor, } from '@symbiote-native/engine';
55
52
  // Diagnostics, gated by DEBUG (<keep_logs_gate_behind_DEBUG>): app code logs through the same
56
53
  // seam the engine does instead of a bare console.log.
57
54
  export { dlog, isDebug } from '@symbiote-native/engine';
58
55
  // Imperative runtime modules: the SAME module every adapter shares, re-exported straight from
59
56
  // @symbiote-native/engine so app code names only @symbiote-native/react (RN's single import
60
57
  // root). Thin JS over getNativeModule + device events, no Fabric component of their own.
61
- export { Alert, Share, ActionSheetIOS, Linking, Vibration, ToastAndroid, Settings, I18nManager, Dimensions, Appearance, AppState, Keyboard, KEYBOARD_EVENT, BackHandler, PermissionsAndroid, PERMISSIONS, RESULTS, LayoutAnimation, PixelRatio, } from '@symbiote-native/engine';
58
+ export { Alert, Share, ActionSheetIOS, Linking, Vibration, ToastAndroid, Settings, I18nManager, Dimensions, Appearance, AppState, Keyboard, KEYBOARD_EVENT, TextInputState, BackHandler, PermissionsAndroid, PERMISSIONS, RESULTS, LayoutAnimation, PixelRatio, } from '@symbiote-native/engine';
62
59
  // React lifecycle over those core device-state modules.
63
60
  export { useWindowDimensions } from './hooks/use-window-dimensions.js';
64
61
  export { useColorScheme } from './hooks/use-color-scheme.js';
62
+ export { RootTagContext } from './root-tag-context.js';
63
+ export { unstable_batchedUpdates } from './batched-updates.js';
64
+ export { unstable_NativeText, unstable_NativeView } from './native-host-tags.js';
65
+ export { usePressability } from './hooks/use-pressability.js';
66
+ export { useAnimatedColor, useAnimatedValue, useAnimatedValueXY, } from './hooks/use-animated-value.js';
65
67
  export { createPermissionHook } from './hooks/create-permission-hook.js';
66
68
  export { createResourceHook } from './hooks/create-resource-hook.js';
69
+ export { useNativeViewController } from './hooks/use-native-view-controller.js';
67
70
  export { createEventValueHook } from './hooks/create-event-value-hook.js';
71
+ export { useEvent, useEventListener } from './hooks/use-event.js';
68
72
  export { AccessibilityInfo } from './modules/accessibility-info';
69
73
  // Interaction subsystems: gestures, deferred work, and layout transitions.
70
74
  export { PanResponder } from '@symbiote-native/engine';
@@ -78,3 +82,8 @@ export { InteractionManager } from '@symbiote-native/engine';
78
82
  // `<touchable-native-feedback>`, which commits no node of its own and clones onto its single child.
79
83
  // `TouchableNativeFeedback.Ripple(…)` / `.SelectableBackground(…)` are unchanged.
80
84
  export { TouchableNativeFeedback } from '@symbiote-native/components';
85
+ // The device event bus and the easing curves, shared verbatim from the engine
86
+ export { DeviceEventEmitter, Easing, EventEmitter, NativeAppEventEmitter, NativeEventEmitter, } from '@symbiote-native/engine';
87
+ // RN's dev and native-module utilities, shared verbatim from the engine. The ones RN owns forward
88
+ // to its own module, which `registerApp` hands over
89
+ export { codegenNativeCommands, codegenNativeComponent, DevMenu, DevSettings, LogBox, NativeComponentRegistry, NativeModules, Networking, PushNotificationIOS, ReactNativeVersion, registerCallableModule, requireNativeComponent, Systrace, Touchable, TurboModuleRegistry, UIManager, UTFSequence, } from '@symbiote-native/engine';
@@ -1,8 +1,9 @@
1
1
  import type { ICrossTypedIntrinsics } from '@symbiote-native/components';
2
- import type { Key } from 'react';
2
+ import type { JSX as ReactJsx, Key } from 'react';
3
3
  import type { IViewProps, ITextProps } from './components';
4
4
  import type { IPressableProps } from './components/pressable/pressable-props';
5
5
  import type { IButtonProps } from './components/button-props';
6
+ import type { ICheckboxProps } from './components/checkbox-props';
6
7
  import type { IImageProps } from './components/image/image-props';
7
8
  import type { IImageBackgroundProps } from './components/image-background-props';
8
9
  import type { IInputAccessoryViewProps } from './components/input-accessory-view-props';
@@ -17,16 +18,17 @@ import type { ITextInputProps } from './components/text-input/text-input-props';
17
18
  import type { IModalProps } from './components/modal';
18
19
  import type { IActivityIndicatorProps } from './components/activity-indicator-props';
19
20
  export { Fragment, jsx, jsxs } from 'react/jsx-runtime';
20
- interface IHostProps {
21
+ type IHostProps = {
21
22
  style?: unknown;
22
23
  children?: import('react').ReactNode;
23
24
  [key: string]: unknown;
24
- }
25
- export interface ICrossedPrimitiveProps {
25
+ };
26
+ export type ICrossedPrimitiveProps = {
26
27
  view: IViewProps;
27
28
  text: ITextProps;
28
29
  pressable: IPressableProps;
29
30
  button: IButtonProps;
31
+ checkbox: ICheckboxProps;
30
32
  image: IImageProps;
31
33
  'image-background': IImageBackgroundProps;
32
34
  'input-accessory-view': IInputAccessoryViewProps;
@@ -41,22 +43,21 @@ export interface ICrossedPrimitiveProps {
41
43
  'text-input': ITextInputProps;
42
44
  modal: IModalProps;
43
45
  'activity-indicator': IActivityIndicatorProps;
44
- }
46
+ };
45
47
  type IWithKey<Props> = Props & {
46
48
  key?: Key | null;
47
49
  };
48
50
  export declare namespace JSX {
49
- type ElementType = import('react').JSX.ElementType;
50
- type Element = import('react').JSX.Element;
51
- type ElementClass = import('react').JSX.ElementClass;
52
- type ElementAttributesProperty = import('react').JSX.ElementAttributesProperty;
53
- type ElementChildrenAttribute = import('react').JSX.ElementChildrenAttribute;
54
- type LibraryManagedAttributes<C, P> = import('react').JSX.LibraryManagedAttributes<C, P>;
55
- type IntrinsicAttributes = import('react').JSX.IntrinsicAttributes;
56
- type IntrinsicClassAttributes<T> = import('react').JSX.IntrinsicClassAttributes<T>;
57
- interface IntrinsicElements extends ICrossTypedIntrinsics<IHostProps, {
51
+ type ElementType = ReactJsx.ElementType;
52
+ type Element = ReactJsx.Element;
53
+ type ElementClass = ReactJsx.ElementClass;
54
+ type ElementAttributesProperty = ReactJsx.ElementAttributesProperty;
55
+ type ElementChildrenAttribute = ReactJsx.ElementChildrenAttribute;
56
+ type LibraryManagedAttributes<C, P> = ReactJsx.LibraryManagedAttributes<C, P>;
57
+ type IntrinsicAttributes = ReactJsx.IntrinsicAttributes;
58
+ type IntrinsicClassAttributes<T> = ReactJsx.IntrinsicClassAttributes<T>;
59
+ type IntrinsicElements = ICrossTypedIntrinsics<IHostProps, {
58
60
  [K in keyof ICrossedPrimitiveProps]: IWithKey<ICrossedPrimitiveProps[K]>;
59
- }> {
60
- }
61
+ }>;
61
62
  }
62
63
  export type ISymbioteIntrinsicTag = keyof JSX.IntrinsicElements;
@@ -1,9 +1,9 @@
1
1
  import { type ComponentType, type Ref } from 'react';
2
- export interface IAnimatedComponentProps {
2
+ export type IAnimatedComponentProps = {
3
3
  style?: unknown;
4
4
  ref?: Ref<unknown>;
5
5
  [key: string]: unknown;
6
- }
6
+ };
7
7
  type IAnimatableProps = {
8
8
  style?: unknown;
9
9
  children?: unknown;
@@ -13,7 +13,7 @@
13
13
  // and detaches on unmount / when the leaf identity changes. The per-frame path is
14
14
  // then: value.setValue / animation -> flushValue -> AnimatedProps.update() ->
15
15
  // setNativeProps(node, partial).
16
- import { createElement, useEffect, useRef, } from 'react';
16
+ import { createElement, useCallback, useEffect, useRef, } from 'react';
17
17
  import { createAnimatedLeafLifecycle, isSymbioteNode, isNativeAnimatedAvailable, reduceProps, readPassthroughStyle, resolveHostNode, } from '@symbiote-native/engine';
18
18
  // A ref can be a function or a `.current` object; assign through both forms without
19
19
  // casting so a forwarded ref from the caller still receives the instance. Framework-
@@ -39,41 +39,29 @@ export function createAnimatedComponent(Component) {
39
39
  // Native driving is opt-in per the passthrough prop AND requires a real native module;
40
40
  // headless / unsupported hosts keep the JS flush path (and the existing JS smokes green).
41
41
  const wantsNative = passthrough != null && isNativeAnimatedAvailable();
42
- // The leaf lifecycle - build/swap/bind/detach, native event rebinding, and the
43
- // rebuild-vs-skip decision - is the engine's, shared by every adapter
44
- // (core/engine/src/animated/leaf-lifecycle.ts). React owns only WHEN to run it.
45
- //
46
- // This used to be `useMemo(() => new AnimatedProps(rest), [rest])`, which reads like the same
47
- // guard but never was one: `rest` comes out of a rest-destructure, so it is a fresh object on
48
- // every render and the memo's dependency always differed. The real content check now lives in
49
- // the shared lifecycle.
42
+ // Жизненный цикл листа общий для адаптеров (`leaf-lifecycle.ts`), React решает лишь когда
50
43
  const lifecycleRef = useRef(null);
51
44
  lifecycleRef.current ??= createAnimatedLeafLifecycle('react');
52
45
  const lifecycle = lifecycleRef.current;
53
46
  // The committed host node, captured by the ref below - a native event binds to the node's
54
47
  // tag, not the AnimatedProps leaf.
55
48
  const nodeRef = useRef(null);
56
- // Reconcile after every commit. No dependency array on purpose: the props object is rebuilt
57
- // by every render anyway, so a dependency list could only ever say "always" - the real
58
- // rebuild-vs-skip decision is the lifecycle's, and it compares CONTENT by key identity.
49
+ // `rest` пересобирается каждым рендером, поэтому эффект идёт после каждого коммита,
50
+ // а пересобирать ли лист, решает жизненный цикл по содержимому
59
51
  useEffect(() => {
60
52
  lifecycle.reconcile(rest, isSymbioteNode(nodeRef.current) ? nodeRef.current : null, wantsNative);
61
- });
53
+ }, [lifecycle, rest, wantsNative]);
62
54
  // Final teardown: detach the last-attached leaf and any native event bindings on unmount.
63
55
  useEffect(() => {
64
56
  return () => lifecycle.teardown();
65
57
  }, [lifecycle]);
66
- // Callback ref: when the base component mounts, capture its public instance, resolve
67
- // it to the underlying host node (unwrapping a scroll-container handle), record THAT
68
- // for the event-attach effect and bind it to the leaf, but forward the ORIGINAL
69
- // instance to the caller, who expects the component's public handle (scrollTo, …).
70
- const captureRef = (instance) => {
58
+ // Стабильный ref, как у RN: пока `ref` приложения тот же, он не отцепляется и не цепляется
59
+ // заново на каждый рендер. Приложению уходит исходный instance, а узлу для привязки - host node
60
+ const captureRef = useCallback((instance) => {
71
61
  nodeRef.current = resolveHostNode(instance);
72
62
  assignRef(forwardedRef, instance);
73
- };
74
- // Reduced props are P-shaped (animated nodes already replaced by values); add the
75
- // capture ref. Build via Object.assign so the merged object stays typed as P & ref
76
- // without a cast. createElement then accepts it for the generic base component.
63
+ }, [forwardedRef]);
64
+ // Object.assign держит тип P & ref без приведения, `createElement` принимает его для базы
77
65
  const reduced = reduceProps(rest);
78
66
  // Override the committed style with the explicit passthrough values (last wins via the style
79
67
  // array, which the commit layer flattens) so the ShadowTree carries the current transform.
@@ -1,29 +1,38 @@
1
- import { AnimatedValue, AnimatedValueXY, AnimatedColor, timing, spring, decay, parallel, sequence, stagger, loop, delay, add, subtract, multiply, divide, modulo, diffClamp, event, forkEvent, unforkEvent } from '@symbiote-native/engine';
2
1
  import { createAnimatedComponent } from './create-animated-component';
3
2
  export { createAnimatedComponent } from './create-animated-component';
4
3
  export { AnimatedProps, AnimatedStyle, AnimatedTransform, } from '@symbiote-native/engine';
5
4
  export declare const Animated: {
6
- Value: typeof AnimatedValue;
7
- ValueXY: typeof AnimatedValueXY;
8
- Color: typeof AnimatedColor;
5
+ timing: {
6
+ (value: import("@symbiote-native/engine").AnimatedValue, config: import("@symbiote-native/engine").ITimingConfig): import("@symbiote-native/engine").ICompositeAnimation;
7
+ (value: import("@symbiote-native/engine").IVectorValue, config: import("@symbiote-native/engine").IVectorTimingConfig): import("@symbiote-native/engine").ICompositeAnimation;
8
+ };
9
+ spring: {
10
+ (value: import("@symbiote-native/engine").AnimatedValue, config: import("@symbiote-native/engine").ISpringConfig): import("@symbiote-native/engine").ICompositeAnimation;
11
+ (value: import("@symbiote-native/engine").IVectorValue, config: import("@symbiote-native/engine").IVectorSpringConfig): import("@symbiote-native/engine").ICompositeAnimation;
12
+ };
13
+ decay: (_value: import("@symbiote-native/engine").AnimatedValue, _config: import("@symbiote-native/engine").IDecayConfig) => import("@symbiote-native/engine").ICompositeAnimation;
14
+ parallel: (animations: import("@symbiote-native/engine").ICompositeAnimation[], _config?: import("@symbiote-native/engine").IParallelConfig) => import("@symbiote-native/engine").ICompositeAnimation;
15
+ sequence: (animations: import("@symbiote-native/engine").ICompositeAnimation[]) => import("@symbiote-native/engine").ICompositeAnimation;
16
+ stagger: (_time: number, animations: import("@symbiote-native/engine").ICompositeAnimation[]) => import("@symbiote-native/engine").ICompositeAnimation;
17
+ loop: (_animation: import("@symbiote-native/engine").ICompositeAnimation) => import("@symbiote-native/engine").ICompositeAnimation;
18
+ delay: (_time: number) => import("@symbiote-native/engine").ICompositeAnimation;
19
+ Value: typeof import("@symbiote-native/engine").AnimatedValue;
20
+ ValueXY: typeof import("@symbiote-native/engine").AnimatedValueXY;
21
+ Color: typeof import("@symbiote-native/engine").AnimatedColor;
22
+ Interpolation: typeof import("@symbiote-native/engine").AnimatedInterpolation;
23
+ Node: typeof import("@symbiote-native/engine").AnimatedNode;
9
24
  Easing: import("@symbiote-native/engine").IEasing;
10
- timing: typeof timing;
11
- spring: typeof spring;
12
- decay: typeof decay;
13
- parallel: typeof parallel;
14
- sequence: typeof sequence;
15
- stagger: typeof stagger;
16
- loop: typeof loop;
17
- delay: typeof delay;
18
- add: typeof add;
19
- subtract: typeof subtract;
20
- multiply: typeof multiply;
21
- divide: typeof divide;
22
- modulo: typeof modulo;
23
- diffClamp: typeof diffClamp;
24
- event: typeof event;
25
- forkEvent: typeof forkEvent;
26
- unforkEvent: typeof unforkEvent;
25
+ add: typeof import("@symbiote-native/engine").add;
26
+ subtract: typeof import("@symbiote-native/engine").subtract;
27
+ multiply: typeof import("@symbiote-native/engine").multiply;
28
+ divide: typeof import("@symbiote-native/engine").divide;
29
+ modulo: typeof import("@symbiote-native/engine").modulo;
30
+ diffClamp: typeof import("@symbiote-native/engine").diffClamp;
31
+ event: typeof import("@symbiote-native/engine").event;
32
+ attachNativeEvent: typeof import("@symbiote-native/engine").attachNativeEvent;
33
+ forkEvent: typeof import("@symbiote-native/engine").forkEvent;
34
+ unforkEvent: typeof import("@symbiote-native/engine").unforkEvent;
35
+ Event: typeof import("@symbiote-native/engine").AnimatedEvent;
27
36
  View: import("react").ComponentType<import("./create-animated-component").IAnimatedComponentProps>;
28
37
  Text: import("react").ComponentType<import("./create-animated-component").IAnimatedComponentProps>;
29
38
  Image: import("react").ComponentType<import("./create-animated-component").IAnimatedComponentProps>;
@@ -31,27 +40,31 @@ export declare const Animated: {
31
40
  SectionList: ReturnType<typeof createAnimatedComponent>;
32
41
  createAnimatedComponent: typeof createAnimatedComponent;
33
42
  } | {
34
- Value: typeof AnimatedValue;
35
- ValueXY: typeof AnimatedValueXY;
36
- Color: typeof AnimatedColor;
43
+ Value: typeof import("@symbiote-native/engine").AnimatedValue;
44
+ ValueXY: typeof import("@symbiote-native/engine").AnimatedValueXY;
45
+ Color: typeof import("@symbiote-native/engine").AnimatedColor;
46
+ Interpolation: typeof import("@symbiote-native/engine").AnimatedInterpolation;
47
+ Node: typeof import("@symbiote-native/engine").AnimatedNode;
37
48
  Easing: import("@symbiote-native/engine").IEasing;
38
- timing: (value: AnimatedValue, config: import("@symbiote-native/engine").ITimingConfig) => import("@symbiote-native/engine").ICompositeAnimation;
39
- spring: (value: AnimatedValue, config: import("@symbiote-native/engine").ISpringConfig) => import("@symbiote-native/engine").ICompositeAnimation;
40
- decay: (_value: AnimatedValue, _config: import("@symbiote-native/engine").IDecayConfig) => import("@symbiote-native/engine").ICompositeAnimation;
41
- parallel: (animations: import("@symbiote-native/engine").ICompositeAnimation[], _config?: import("@symbiote-native/engine").IParallelConfig) => import("@symbiote-native/engine").ICompositeAnimation;
42
- sequence: (animations: import("@symbiote-native/engine").ICompositeAnimation[]) => import("@symbiote-native/engine").ICompositeAnimation;
43
- stagger: (_time: number, animations: import("@symbiote-native/engine").ICompositeAnimation[]) => import("@symbiote-native/engine").ICompositeAnimation;
44
- loop: (_animation: import("@symbiote-native/engine").ICompositeAnimation) => import("@symbiote-native/engine").ICompositeAnimation;
45
- delay: (_time: number) => import("@symbiote-native/engine").ICompositeAnimation;
46
- add: typeof add;
47
- subtract: typeof subtract;
48
- multiply: typeof multiply;
49
- divide: typeof divide;
50
- modulo: typeof modulo;
51
- diffClamp: typeof diffClamp;
52
- event: typeof event;
53
- forkEvent: typeof forkEvent;
54
- unforkEvent: typeof unforkEvent;
49
+ timing: typeof import("@symbiote-native/engine").timing;
50
+ spring: typeof import("@symbiote-native/engine").spring;
51
+ decay: typeof import("@symbiote-native/engine").decay;
52
+ parallel: typeof import("@symbiote-native/engine").parallel;
53
+ sequence: typeof import("@symbiote-native/engine").sequence;
54
+ stagger: typeof import("@symbiote-native/engine").stagger;
55
+ loop: typeof import("@symbiote-native/engine").loop;
56
+ delay: typeof import("@symbiote-native/engine").delay;
57
+ add: typeof import("@symbiote-native/engine").add;
58
+ subtract: typeof import("@symbiote-native/engine").subtract;
59
+ multiply: typeof import("@symbiote-native/engine").multiply;
60
+ divide: typeof import("@symbiote-native/engine").divide;
61
+ modulo: typeof import("@symbiote-native/engine").modulo;
62
+ diffClamp: typeof import("@symbiote-native/engine").diffClamp;
63
+ event: typeof import("@symbiote-native/engine").event;
64
+ attachNativeEvent: typeof import("@symbiote-native/engine").attachNativeEvent;
65
+ forkEvent: typeof import("@symbiote-native/engine").forkEvent;
66
+ unforkEvent: typeof import("@symbiote-native/engine").unforkEvent;
67
+ Event: typeof import("@symbiote-native/engine").AnimatedEvent;
55
68
  View: import("react").ComponentType<import("./create-animated-component").IAnimatedComponentProps>;
56
69
  Text: import("react").ComponentType<import("./create-animated-component").IAnimatedComponentProps>;
57
70
  Image: import("react").ComponentType<import("./create-animated-component").IAnimatedComponentProps>;
@@ -3,11 +3,10 @@
3
3
  // easing and imperative drivers come from @symbiote-native/engine (framework-agnostic,
4
4
  // JS-driven). Both halves meet here in one `Animated` object so the
5
5
  // familiar surface (`Animated.timing(new Animated.Value(0), …).start()`) works.
6
- import { AnimatedValue, AnimatedValueXY, AnimatedColor, Easing, Platform, timing, spring, decay, parallel, sequence, stagger, loop, delay, add, subtract, multiply, divide, modulo, diffClamp, event, forkEvent, unforkEvent, } from '@symbiote-native/engine';
6
+ import { AnimatedDrivers, AnimatedMock, Platform, } from '@symbiote-native/engine';
7
7
  import { FlatList } from '../../components/flat-list/index.js';
8
8
  import { SectionList } from '../../components/section-list/index.js';
9
9
  import { createAnimatedComponent } from './create-animated-component.js';
10
- import { AnimatedMock } from '@symbiote-native/engine';
11
10
  export { createAnimatedComponent } from './create-animated-component.js';
12
11
  // The pure graph leaves now live in @symbiote-native/engine (they extend AnimatedWithChildren,
13
12
  // no React); re-exported here so @symbiote-native/react's Animated surface is unchanged.
@@ -30,37 +29,13 @@ const AnimatedImage = createAnimatedComponent('image');
30
29
  // own `get FlatList() { return require(...) }`.
31
30
  let animatedFlatList;
32
31
  let animatedSectionList;
33
- // The live, JS-driven driver namespace (real frames). RN's AnimatedImplementation.
34
- const liveDrivers = {
35
- Value: AnimatedValue,
36
- ValueXY: AnimatedValueXY,
37
- Color: AnimatedColor,
38
- Easing,
39
- timing,
40
- spring,
41
- decay,
42
- parallel,
43
- sequence,
44
- stagger,
45
- loop,
46
- delay,
47
- add,
48
- subtract,
49
- multiply,
50
- divide,
51
- modulo,
52
- diffClamp,
53
- event,
54
- forkEvent,
55
- unforkEvent,
56
- };
57
32
  // RN's AnimatedExports.js:21 swaps the WHOLE namespace for the mock when the host
58
33
  // reports isDisableAnimations (reduced motion / test env): the mock keeps the same
59
34
  // surface but jumps each animation to its final value synchronously, no frames.
60
35
  // The animated COMPONENTS (View/Text/Image + the lazy container getters) are live in
61
36
  // both branches; only the drivers/value/operators/events half is swapped, exactly
62
37
  // like RN spreading `...Animated` (impl or mock) over the same component getters.
63
- const drivers = Platform.isDisableAnimations ? AnimatedMock : liveDrivers;
38
+ const drivers = Platform.isDisableAnimations ? AnimatedMock : AnimatedDrivers;
64
39
  export const Animated = {
65
40
  View: AnimatedView,
66
41
  Text: AnimatedText,
@@ -1,7 +1,7 @@
1
1
  import { type ComponentType } from 'react';
2
- import { type IAppParameters } from '@symbiote-native/engine';
2
+ import { HeadlessJsTaskError, type IAppParameters } from '@symbiote-native/engine';
3
3
  export type IComponentProvider = () => ComponentType<object>;
4
4
  export type IWrapperComponentProvider = (appParameters: IAppParameters) => ComponentType<object>;
5
5
  declare const AppRegistry: import("@symbiote-native/engine").IAppRegistry<IComponentProvider, IWrapperComponentProvider>, setHostRegistrar: (registrar: import("@symbiote-native/engine").IHostRegistrar) => void;
6
- export { AppRegistry, setHostRegistrar };
7
- export type { IAppParameters, IRunnable, IHostRegistrar, IRegistry, IHeadlessTask, ITaskProvider, ITaskCanceller, ITaskCancelProvider, } from '@symbiote-native/engine';
6
+ export { AppRegistry, HeadlessJsTaskError, setHostRegistrar };
7
+ export type { IAppConfig, IAppParameters, IRunnable, IHostRegistrar, IRegistry, IHeadlessTask, ITaskProvider, ITaskCanceller, ITaskCancelProvider, } from '@symbiote-native/engine';
@@ -5,7 +5,7 @@
5
5
  // only the one React-specific seam — building a runnable from a component provider via
6
6
  // createElement + mount — so existing RN app-entry code ports verbatim.
7
7
  import { createElement } from 'react';
8
- import { createAppRegistry, dlog, } from '@symbiote-native/engine';
8
+ import { createAppRegistry, dlog, HeadlessJsTaskError, } from '@symbiote-native/engine';
9
9
  import { mount } from '../../render.js';
10
10
  function runnableFor(componentProvider, getWrapperComponentProvider) {
11
11
  return appParameters => {
@@ -23,4 +23,4 @@ function runnableFor(componentProvider, getWrapperComponentProvider) {
23
23
  };
24
24
  }
25
25
  const { AppRegistry, setHostRegistrar } = createAppRegistry(runnableFor);
26
- export { AppRegistry, setHostRegistrar };
26
+ export { AppRegistry, HeadlessJsTaskError, setHostRegistrar };
@@ -1,3 +1,3 @@
1
- import type { IStatusBarComponent } from './shared';
1
+ import { type IStatusBarComponent } from './shared';
2
2
  export type { IStatusBarProps, IStatusBarStyle } from './shared';
3
3
  export declare const StatusBar: IStatusBarComponent;