@symbiote-native/react 0.2.1 → 0.2.2

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 (37) hide show
  1. package/build/bootstrap.js +1 -1
  2. package/build/components/activity-indicator/index.android.js +1 -1
  3. package/build/components/activity-indicator/index.ios.js +1 -1
  4. package/build/components/activity-indicator/index.js +1 -1
  5. package/build/components/activity-indicator/shared.js +1 -1
  6. package/build/components/button.js +2 -2
  7. package/build/components/flat-list/index.js +1 -1
  8. package/build/components/image/index.js +1 -1
  9. package/build/components/image-background/index.js +1 -1
  10. package/build/components/keyboard-avoiding-view/index.js +2 -2
  11. package/build/components/pressable/index.js +1 -1
  12. package/build/components/scroll-view/index.android.js +1 -1
  13. package/build/components/scroll-view/index.ios.js +1 -1
  14. package/build/components/scroll-view/index.js +1 -1
  15. package/build/components/scroll-view/shared.js +1 -1
  16. package/build/components/scroll-view/sticky-header.js +1 -1
  17. package/build/components/section-list/index.js +1 -1
  18. package/build/components/switch/index.android.js +1 -1
  19. package/build/components/switch/index.ios.js +1 -1
  20. package/build/components/switch/index.js +1 -1
  21. package/build/components/switch/shared.js +1 -1
  22. package/build/components/text-input/index.js +2 -2
  23. package/build/components/touchable/index.js +2 -2
  24. package/build/components/touchable-native-feedback/index.js +2 -2
  25. package/build/components/virtualized-list/index.js +2 -2
  26. package/build/components/virtualized-section-list/index.js +1 -1
  27. package/build/create-portal.js +1 -1
  28. package/build/hooks/use-color-scheme.js +1 -1
  29. package/build/hooks/use-window-dimensions.js +1 -1
  30. package/build/host-config.js +2 -2
  31. package/build/index.js +46 -46
  32. package/build/modules/accessibility-info/index.js +1 -1
  33. package/build/modules/animated/index.js +7 -7
  34. package/build/modules/app-registry/index.js +1 -1
  35. package/build/modules/status-bar/index.js +1 -1
  36. package/build/render.js +2 -2
  37. package/package.json +3 -3
@@ -6,7 +6,7 @@
6
6
  // @symbiote-native/components/bootstrap for the full reason).
7
7
  import { AppRegistry as RNAppRegistry } from 'react-native';
8
8
  import { bootstrapHost } from '@symbiote-native/components/bootstrap';
9
- import { AppRegistry, setHostRegistrar } from './modules/app-registry';
9
+ import { AppRegistry, setHostRegistrar } from './modules/app-registry/index.js';
10
10
  // Mirrors bare RN's own `AppRegistry.registerComponent(appName, () => App)` idiom, minus the
11
11
  // manual host wiring in front of it.
12
12
  export function registerApp(App, options) {
@@ -5,7 +5,7 @@
5
5
  // picks this on an Android host; no Platform.OS read. See ADR 0020.
6
6
  // device-verify-pending: prop names mirror RN's AndroidProgressBar, proven on a real
7
7
  // host by the absence of the "setStyle() not called" red box.
8
- import { createActivityIndicator } from './shared';
8
+ import { createActivityIndicator } from './shared.js';
9
9
  export const ActivityIndicator = createActivityIndicator({
10
10
  // RN: `color = Platform.OS === 'ios' ? GRAY : null`; Android lets the theme color it.
11
11
  defaultColor: null,
@@ -1,7 +1,7 @@
1
1
  // ActivityIndicator on iOS: RCTActivityIndicatorView takes the size enum + a GRAY
2
2
  // default color and no extra native props. Also the base (activity-indicator.ts
3
3
  // re-exports it) for headless / web. See ADR 0020.
4
- import { createActivityIndicator } from './shared';
4
+ import { createActivityIndicator } from './shared.js';
5
5
  // RN's iOS default spinner color (Libraries/.../ActivityIndicator.js GRAY).
6
6
  const IOS_DEFAULT_COLOR = '#999999';
7
7
  export const ActivityIndicator = createActivityIndicator({
@@ -1,4 +1,4 @@
1
1
  // Base / default ActivityIndicator: re-exports the iOS build. Metro overrides this with
2
2
  // activity-indicator.ios.ts / .android.ts on a real host; under tsx / tsc / web the host
3
3
  // config resolves here. Filename is the selector, no Platform.OS read. See ADR 0020.
4
- export * from './index.ios';
4
+ export * from './index.ios.js';
@@ -6,7 +6,7 @@
6
6
  // The per-platform bits (iOS GRAY default + no extras; Android theme/null + styleAttr +
7
7
  // indeterminate) are supplied by the .ios/.android files via `IActivityIndicatorPlatform`.
8
8
  import { renderActivityIndicator, resolveAccessibilityProps } from '@symbiote-native/components';
9
- import { descriptorToReact } from '../../descriptor-to-react';
9
+ import { descriptorToReact } from '../../descriptor-to-react/index.js';
10
10
  export function createActivityIndicator(platform) {
11
11
  return rawProps => {
12
12
  // The wrapper is a raw symbiote-view, not the View FC, so it never runs
@@ -3,8 +3,8 @@
3
3
  // (caller color tints the label; disabled greys it) are shared in @symbiote-native/components/view; here
4
4
  // React only composes its TouchableOpacity + Text and forwards the native-only props.
5
5
  import { createElement } from 'react';
6
- import { Text } from '../components';
7
- import { TouchableOpacity } from './touchable';
6
+ import { Text } from '../components.js';
7
+ import { TouchableOpacity } from './touchable/index.js';
8
8
  import { BUTTON_ACCESSIBILITY_ROLE, resolveButtonTextStyle } from '@symbiote-native/components';
9
9
  export const Button = props => {
10
10
  const { title, onPress, color, disabled, touchSoundDisabled, testID, hasTVPreferredFocus, nextFocusDown, nextFocusForward, nextFocusLeft, nextFocusRight, nextFocusUp, ...accessibilityRest } = props;
@@ -8,7 +8,7 @@
8
8
  import { createElement, } from 'react';
9
9
  import { dlog, resolveClassName } from '@symbiote-native/engine';
10
10
  import { SINGLE_COLUMN, chunkIntoRows, expandRowViewability, firstItemOfRow, lastItemOfRow, rowKeyExtractor, } from '@symbiote-native/components';
11
- import { VirtualizedList, } from '../virtualized-list';
11
+ import { VirtualizedList, } from '../virtualized-list/index.js';
12
12
  export function FlatList(props) {
13
13
  const { ref, data, renderItem, keyExtractor, numColumns = SINGLE_COLUMN, columnWrapperStyle,
14
14
  // onViewableItemsChanged/viewability are typed against ItemT here; in the multi-column path
@@ -1,6 +1,6 @@
1
1
  import {} from 'react';
2
2
  import { imageStatics, renderImage, resolveAccessibilityProps, } from '@symbiote-native/components';
3
- import { descriptorToReact } from '../../descriptor-to-react';
3
+ import { descriptorToReact } from '../../descriptor-to-react/index.js';
4
4
  // renderImage takes a pre-resolved view + passthrough (the ISwitchViewProps shape), so the
5
5
  // adapter folds aria/role and splits the typed transform fields from the forward-only rest.
6
6
  // The W3C source aliases (src/srcSet/crossOrigin/referrerPolicy) and width/height become typed
@@ -6,7 +6,7 @@
6
6
  import { createElement } from 'react';
7
7
  import { resolveClassName } from '@symbiote-native/engine';
8
8
  import { renderImageBackground, resolveAccessibilityProps, } from '@symbiote-native/components';
9
- import { descriptorToReact } from '../../descriptor-to-react';
9
+ import { descriptorToReact } from '../../descriptor-to-react/index.js';
10
10
  function toChild(child) {
11
11
  return typeof child === 'string' ? child : descriptorToReact(child);
12
12
  }
@@ -10,8 +10,8 @@
10
10
  import { createElement, useEffect, useRef, useState, } from 'react';
11
11
  import { dlog } from '@symbiote-native/engine';
12
12
  import { computeInset, readKeyboardFrame, readLayoutFrame, resolveKeyboardAvoidingLayout, DEFAULT_VERTICAL_OFFSET, } from '@symbiote-native/components';
13
- import { View } from '../../components';
14
- import { Keyboard, KEYBOARD_EVENT } from '../../modules/keyboard';
13
+ import { View } from '../../components.js';
14
+ import { Keyboard, KEYBOARD_EVENT } from '../../modules/keyboard.js';
15
15
  export const KeyboardAvoidingView = props => {
16
16
  const { behavior, enabled = true, keyboardVerticalOffset = DEFAULT_VERTICAL_OFFSET, contentContainerStyle, style, children, onLayout,
17
17
  // The wrapper is the View FC, which runs resolveAccessibilityProps itself, so
@@ -13,7 +13,7 @@
13
13
  // shared machine; here we only wire its host + render the View.
14
14
  import { createElement, useMemo, useRef, useState } from 'react';
15
15
  import { createPressHandlers, createPressRuntime, rippleProps, buildPressableListeners, resolveDisabledAccessibilityState, noteHoverNoop, DEFAULT_DELAY_LONG_PRESS_MS, } from '@symbiote-native/components';
16
- import { View } from '../../components';
16
+ import { View } from '../../components.js';
17
17
  function resolveStyle(style, state) {
18
18
  if (typeof style === 'function')
19
19
  return style(state);
@@ -11,7 +11,7 @@
11
11
  import { cloneElement, createElement, forwardRef, useImperativeHandle, useRef } from 'react';
12
12
  import { dlog } from '@symbiote-native/engine';
13
13
  import { buildScrollViewHandle, splitLayoutProps } from '@symbiote-native/components';
14
- import { usePreparedScrollView, useNativeStickyScrollAttach, } from './shared';
14
+ import { usePreparedScrollView, useNativeStickyScrollAttach, } from './shared.js';
15
15
  export const ScrollView = forwardRef((props, forwardedRef) => {
16
16
  const { scrollViewIntrinsic, scrollViewBaseStyle, outerProps, style, layoutSplitStyle, content, refreshControl, scrollAnimatedValue, nativeStickyAvailable, } = usePreparedScrollView(props);
17
17
  // The node ref backs the imperative handle; it attaches to the inner scroll-view element
@@ -3,7 +3,7 @@
3
3
  // Also the base (scroll-view.ts re-exports it) for headless / web. See ADR 0020.
4
4
  import { createElement, forwardRef, useImperativeHandle, useRef } from 'react';
5
5
  import { buildScrollViewHandle } from '@symbiote-native/components';
6
- import { usePreparedScrollView, useNativeStickyScrollAttach, } from './shared';
6
+ import { usePreparedScrollView, useNativeStickyScrollAttach, } from './shared.js';
7
7
  export const ScrollView = forwardRef((props, forwardedRef) => {
8
8
  const { scrollViewIntrinsic, scrollViewBaseStyle, outerProps, style, content, refreshControl, scrollAnimatedValue, nativeStickyAvailable, } = usePreparedScrollView(props);
9
9
  // The node ref backs the imperative handle; it attaches to the scroll-view element below
@@ -1,4 +1,4 @@
1
1
  // Base / default ScrollView: re-exports the iOS build. Metro overrides this with
2
2
  // scroll-view.ios.ts / .android.ts on a real host; under tsx / tsc / web the host config
3
3
  // resolves here. Filename is the selector, no Platform.OS read. See ADR 0020.
4
- export * from './index.ios';
4
+ export * from './index.ios.js';
@@ -14,7 +14,7 @@ import { createElement, useEffect, useRef, useState, } from 'react';
14
14
  import { AnimatedValue, dlog, event as animatedEvent, isClassNameValue, isNativeAnimatedAvailable, resolveClassName, } from '@symbiote-native/engine';
15
15
  import { attachStickyScroll, didContentSizeChange, forwardScrollEvent, readLayoutDimension, resolveDecelerationRate, selectScrollIntrinsics, } from '@symbiote-native/components';
16
16
  import { resolveAccessibilityProps, } from '@symbiote-native/components';
17
- import { wrapStickyHeaders } from './sticky-header';
17
+ import { wrapStickyHeaders } from './sticky-header.js';
18
18
  export function usePreparedScrollView(rawProps) {
19
19
  // ScrollView forwards its outer props straight to the native scroll view (not a View
20
20
  // wrapper), so it folds aria/role into accessibility* here before forwarding.
@@ -12,7 +12,7 @@
12
12
  import { Children, createElement, isValidElement, useCallback, useEffect, useRef, useState, } from 'react';
13
13
  import { AnimatedInterpolation, AnimatedValue, Platform, dlog, } from '@symbiote-native/engine';
14
14
  import { computeStickyInterpolation, nextStickyHeaderY, readLayoutNumber, stickyDebounceMs, STICKY_HEADER_Z_INDEX, } from '@symbiote-native/components';
15
- import { Animated } from '../../modules/animated';
15
+ import { Animated } from '../../modules/animated/index.js';
16
16
  function readChildOnLayout(child) {
17
17
  const childProps = child.props;
18
18
  if (typeof childProps !== 'object' || childProps === null)
@@ -6,7 +6,7 @@
6
6
  // SectionList name so existing consumers and the canary keep importing it from
7
7
  // here, threading the imperative ref straight through.
8
8
  import { createElement } from 'react';
9
- import { VirtualizedSectionList, } from '../virtualized-section-list';
9
+ import { VirtualizedSectionList, } from '../virtualized-section-list/index.js';
10
10
  export function SectionList(props) {
11
11
  return createElement((VirtualizedSectionList), props);
12
12
  }
@@ -1,7 +1,7 @@
1
1
  // Switch, Android host binding. AndroidSwitch takes trackColorForTrue / trackColorForFalse
2
2
  // plus trackTintColor (the color for the CURRENT value, which RN computes as value ? true :
3
3
  // false), and snaps native back via the `setNativeValue` command (Switch.js:221-225).
4
- import { createSwitch } from './shared';
4
+ import { createSwitch } from './shared.js';
5
5
  export const Switch = createSwitch({
6
6
  snapBackCommand: 'setNativeValue',
7
7
  trackColorProps: (value, trackColor) => ({
@@ -1,6 +1,6 @@
1
1
  // Switch, iOS host binding. iOS's native Switch takes onTintColor (ON-track) / tintColor
2
2
  // (OFF-track), and snaps native back via the `setValue` command (Switch.js:221-225).
3
- import { createSwitch } from './shared';
3
+ import { createSwitch } from './shared.js';
4
4
  export const Switch = createSwitch({
5
5
  snapBackCommand: 'setValue',
6
6
  trackColorProps: (_value, trackColor) => ({
@@ -3,4 +3,4 @@
3
3
  // Filename is the selector, no Platform.OS read. See ADR 0020. The three-layer split (logic
4
4
  // in @symbiote-native/components/state, render in @symbiote-native/components/view, hook in switch-shared)
5
5
  // replaced the former monolithic Platform.OS-branching component.
6
- export * from './index.ios';
6
+ export * from './index.ios.js';
@@ -13,7 +13,7 @@ import { useCallback, useLayoutEffect, useReducer, useRef } from 'react';
13
13
  import { renderSwitch, switchReducer, createInitialSwitchState, shouldSnapBack, valueFromChange, } from '@symbiote-native/components';
14
14
  import { dispatchViewCommand, dlog, } from '@symbiote-native/engine';
15
15
  import { resolveAccessibilityProps } from '@symbiote-native/components';
16
- import { descriptorToReact } from '../../descriptor-to-react';
16
+ import { descriptorToReact } from '../../descriptor-to-react/index.js';
17
17
  export function createSwitch(platform) {
18
18
  return rawProps => {
19
19
  // Switch owns its host element rather than rendering through a symbiote View, so it folds
@@ -10,9 +10,9 @@
10
10
  // (setTextAndSelection), never a plain prop re-push. See @symbiote-native/components/state/text-input.
11
11
  import { forwardRef, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState, } from 'react';
12
12
  import { dispatchViewCommand, dlog, } from '@symbiote-native/engine';
13
- import { blurTextInput, setInputBlurred, setInputFocused } from '../../modules/text-input-state';
13
+ import { blurTextInput, setInputBlurred, setInputFocused } from '../../modules/text-input-state.js';
14
14
  import { resolveAccessibilityProps, resolveTextInputProps, renderTextInput, foldText, textFromChange, eventCountFromChange, shouldCommandText, INITIAL_EVENT_COUNT, SELECTION_NONE, } from '@symbiote-native/components';
15
- import { descriptorToReact } from '../../descriptor-to-react';
15
+ import { descriptorToReact } from '../../descriptor-to-react/index.js';
16
16
  export const TextInput = forwardRef((rawProps, forwardedRef) => {
17
17
  // TextInput is its own host element (not a View wrapper), so it folds aria/role here.
18
18
  const props = resolveAccessibilityProps(rawProps);
@@ -10,8 +10,8 @@
10
10
  import { createElement, useRef } from 'react';
11
11
  import { dlog } from '@symbiote-native/engine';
12
12
  import { computePressOutWait, DEFAULT_ACTIVE_OPACITY, DEFAULT_HIGHLIGHT_CHILD_OPACITY, DEFAULT_MIN_PRESS_DURATION_MS, DEFAULT_UNDERLAY_COLOR, OPACITY_ACTIVE_DURATION_MS, OPACITY_INACTIVE_DURATION_MS, RESTING_OPACITY, } from '@symbiote-native/components';
13
- import { Pressable } from '../pressable';
14
- import { Animated } from '../../modules/animated';
13
+ import { Pressable } from '../pressable/index.js';
14
+ import { Animated } from '../../modules/animated/index.js';
15
15
  export const TouchableOpacity = props => {
16
16
  const { activeOpacity = DEFAULT_ACTIVE_OPACITY, style,
17
17
  // className is pulled out here, like style, and applied to the inner Animated.View below —
@@ -9,8 +9,8 @@
9
9
  import { createElement } from 'react';
10
10
  import { dlog } from '@symbiote-native/engine';
11
11
  import { backgroundProps, canUseNativeForeground, rippleBackground, selectableBackground, selectableBackgroundBorderless, } from '@symbiote-native/components';
12
- import { View } from '../../components';
13
- import { Pressable } from '../pressable';
12
+ import { View } from '../../components.js';
13
+ import { Pressable } from '../pressable/index.js';
14
14
  const TouchableNativeFeedbackImpl = props => {
15
15
  const { background, useForeground = false, children, ...rest } = props;
16
16
  // RN defaults a missing background to SelectableBackground() so the touchable always has
@@ -19,8 +19,8 @@
19
19
  import { createElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, } from 'react';
20
20
  import { dlog } from '@symbiote-native/engine';
21
21
  import { DEFAULT_END_REACHED_THRESHOLD, DEFAULT_INITIAL_NUM_TO_RENDER, DEFAULT_MAX_TO_RENDER_PER_BATCH, DEFAULT_START_REACHED_THRESHOLD, DEFAULT_UPDATE_CELLS_BATCHING_PERIOD, DEFAULT_WINDOW_SIZE, EMPTY_OFFSET, FIRST_INDEX, INVERTED_X_STYLE, INVERTED_Y_STYLE, NO_CONTENT_LENGTH_SENT, averageMeasuredLength, buildListPlan, buildOffsets, buildViewabilityPairs, computeEndReached, computeStartReached, computeViewableSet, computeWindow, diffViewable, highestMeasuredIndex as findHighestMeasuredIndex, maxMinimumViewTime, offsetForIndex as resolveOffsetForIndex, readLayoutLength, readScrollOffset, throttleWindow, } from '@symbiote-native/components';
22
- import { ScrollView } from '../scroll-view';
23
- import { RefreshControl } from '../refresh-control';
22
+ import { ScrollView } from '../scroll-view/index.js';
23
+ import { RefreshControl } from '../refresh-control/index.js';
24
24
  function resolveElement(component) {
25
25
  if (component === undefined)
26
26
  return undefined;
@@ -8,7 +8,7 @@
8
8
  import { createElement, useImperativeHandle, useRef, } from 'react';
9
9
  import { dlog, Platform } from '@symbiote-native/engine';
10
10
  import { flattenSections, scrollLocationToFlatIndex, sectionEntryKey, unwrapEntryItem, } from '@symbiote-native/components';
11
- import { VirtualizedList, } from '../virtualized-list';
11
+ import { VirtualizedList, } from '../virtualized-list/index.js';
12
12
  function resolveSeparator(component) {
13
13
  if (component === undefined)
14
14
  return undefined;
@@ -11,7 +11,7 @@
11
11
  // independently-mounted SymbioteSurface. Cross-surface targets aren't wired: resetAfterCommit only
12
12
  // fires for the primary root's own container, so a different surface's tree would never repaint.
13
13
  import { isSymbioteNode, SymbioteSurface } from '@symbiote-native/engine';
14
- import reconciler from './host-config';
14
+ import reconciler from './host-config.js';
15
15
  export function createPortal(children, container, key) {
16
16
  if (!(container instanceof SymbioteSurface) && !isSymbioteNode(container)) {
17
17
  throw new Error('createPortal target must be an already-mounted host node (e.g. a ref to a rendered <View>) — got something else. Did you forget `.current`/`.value`, or pass a CSS-selector-style string?');
@@ -2,7 +2,7 @@
2
2
  // on change. Mirrors RN's Libraries/Utilities/useColorScheme.js: a thin
3
3
  // useSyncExternalStore over Appearance's change event + current scheme read.
4
4
  import { useSyncExternalStore } from 'react';
5
- import { Appearance } from '../modules/appearance';
5
+ import { Appearance } from '../modules/appearance.js';
6
6
  const subscribe = (onStoreChange) => {
7
7
  const subscription = Appearance.addChangeListener(onStoreChange);
8
8
  return () => subscription.remove();
@@ -4,7 +4,7 @@
4
4
  // subscribing to close the gap between the render-time get and the effect-time
5
5
  // listener. Only the window metrics changing triggers a re-render.
6
6
  import { useEffect, useState } from 'react';
7
- import { Dimensions } from '../modules/dimensions';
7
+ import { Dimensions } from '../modules/dimensions.js';
8
8
  export function useWindowDimensions() {
9
9
  const [dimensions, setDimensions] = useState(() => Dimensions.get('window'));
10
10
  useEffect(() => {
@@ -5,8 +5,8 @@
5
5
  import createReconciler from 'react-reconciler';
6
6
  import { createContext } from 'react';
7
7
  import { appendChild, createElement, createRawText, insertBefore, removeChild, routeProp, setText, SymbioteSurface, } from '@symbiote-native/engine';
8
- import { DefaultEventPriority, DiscreteEventPriority, NoEventPriority, } from './reconciler-constants';
9
- import { toPublicInstance } from './host-instance';
8
+ import { DefaultEventPriority, DiscreteEventPriority, NoEventPriority, } from './reconciler-constants.js';
9
+ import { toPublicInstance } from './host-instance.js';
10
10
  // Intrinsic JSX type -> Fabric component name. The name table + resolver live once in
11
11
  // @symbiote-native/components, shared by every adapter so the names can't drift (one engine, one
12
12
  // Fabric). The table is Metro-split (.ios/.android, filename selects, no Platform.OS read,
package/build/index.js CHANGED
@@ -1,47 +1,47 @@
1
1
  // @symbiote-native/react: a react-reconciler host config (mutation mode) over
2
2
  // @symbiote-native/engine. React is a known-good driver: it proves the native pipe
3
3
  // (R1) and shared's clone-on-write engine (R2) before any non-React adapter.
4
- export { View, Text } from './components';
5
- export { Image, setImageSourceResolver } from './components/image';
6
- export { ImageBackground } from './components/image-background';
7
- export { ScrollView } from './components/scroll-view';
8
- export { TextInput } from './components/text-input';
9
- export { InputAccessoryView } from './components/input-accessory-view';
10
- export { Keyboard, KEYBOARD_EVENT } from './modules/keyboard';
11
- export { KeyboardAvoidingView } from './components/keyboard-avoiding-view';
12
- export { StatusBar } from './modules/status-bar';
13
- export { Switch } from './components/switch';
14
- export { ActivityIndicator } from './components/activity-indicator';
15
- export { SafeAreaView } from './components/safe-area-view';
16
- export { RefreshControl } from './components/refresh-control';
17
- export { Modal } from './components/modal';
18
- export { Pressable } from './components/pressable';
19
- export { TouchableOpacity, TouchableHighlight, TouchableWithoutFeedback, } from './components/touchable';
20
- export { Button } from './components/button';
21
- export { FlatList } from './components/flat-list';
22
- export { SectionList } from './components/section-list';
23
- export { VirtualizedSectionList } from './components/virtualized-section-list';
24
- export { VirtualizedList } from './components/virtualized-list';
25
- export { mount, unmount } from './render';
4
+ export { View, Text } from './components.js';
5
+ export { Image, setImageSourceResolver } from './components/image/index.js';
6
+ export { ImageBackground } from './components/image-background/index.js';
7
+ export { ScrollView } from './components/scroll-view/index.js';
8
+ export { TextInput } from './components/text-input/index.js';
9
+ export { InputAccessoryView } from './components/input-accessory-view/index.js';
10
+ export { Keyboard, KEYBOARD_EVENT } from './modules/keyboard.js';
11
+ export { KeyboardAvoidingView } from './components/keyboard-avoiding-view/index.js';
12
+ export { StatusBar } from './modules/status-bar/index.js';
13
+ export { Switch } from './components/switch/index.js';
14
+ export { ActivityIndicator } from './components/activity-indicator/index.js';
15
+ export { SafeAreaView } from './components/safe-area-view/index.js';
16
+ export { RefreshControl } from './components/refresh-control/index.js';
17
+ export { Modal } from './components/modal/index.js';
18
+ export { Pressable } from './components/pressable/index.js';
19
+ export { TouchableOpacity, TouchableHighlight, TouchableWithoutFeedback, } from './components/touchable/index.js';
20
+ export { Button } from './components/button.js';
21
+ export { FlatList } from './components/flat-list/index.js';
22
+ export { SectionList } from './components/section-list/index.js';
23
+ export { VirtualizedSectionList } from './components/virtualized-section-list/index.js';
24
+ export { VirtualizedList } from './components/virtualized-list/index.js';
25
+ export { mount, unmount } from './render.js';
26
26
  // createPortal: react-reconciler's Fiber-level portal, working here because @symbiote-native/react is
27
27
  // mutation-mode (unlike stock RN's persistent-mode Fabric renderer, which doesn't support it —
28
28
  // see create-portal.ts). v1 scope: target must be an already-mounted node in the SAME surface.
29
- export { createPortal } from './create-portal';
29
+ export { createPortal } from './create-portal.js';
30
30
  // createTunnel: cross-surface content sharing (createPortal/Teleport stay same-surface-only
31
31
  // by design — see create-tunnel.tsx and the react-adapter-portal skill for why).
32
- export { createTunnel } from './create-tunnel';
32
+ export { createTunnel } from './create-tunnel.js';
33
33
  // descriptorToReact: the @symbiote-native/components Descriptor → React.createElement bridge. Exported so
34
34
  // an external wrapper package (e.g. @symbiote-native/slider/react over a third-party native view) can map
35
35
  // a shared render fn's Descriptor onto React elements through the SAME bridge the adapter uses.
36
- export { descriptorToReact } from './descriptor-to-react';
37
- export { findNodeHandle } from './host-instance';
36
+ export { descriptorToReact } from './descriptor-to-react/index.js';
37
+ export { findNodeHandle } from './host-instance.js';
38
38
  // AppRegistry: RN's app entry point over `mount`. setHostRegistrar wires RN's own
39
39
  // registrar so the native Fabric host finds our runnable by app key.
40
- export { AppRegistry, setHostRegistrar } from './modules/app-registry';
40
+ export { AppRegistry, setHostRegistrar } from './modules/app-registry/index.js';
41
41
  // Animated bridge: createAnimatedComponent + Animated.View/Text/Image, driving the
42
42
  // shared JS Animated engine (ADR 0016). Imperative timing/spring drivers merge into
43
43
  // this namespace once they land in shared.
44
- export { Animated, createAnimatedComponent } from './modules/animated';
44
+ export { Animated, createAnimatedComponent } from './modules/animated/index.js';
45
45
  // Framework-agnostic runtime utilities live in shared; the adapter re-exports them
46
46
  // so app code names only @symbiote-native/react (RN's surface, one import root).
47
47
  export { Platform, StyleSheet } from '@symbiote-native/engine';
@@ -55,23 +55,23 @@ export { PlatformColor, DynamicColorIOS, processColor } from '@symbiote-native/e
55
55
  export { setNativeViewConfigSource } from '@symbiote-native/engine';
56
56
  // Runtime modules: native-bridge consumers, same shape as Keyboard/StatusBar:
57
57
  // thin JS over getNativeModule + device events, no Fabric component of their own.
58
- export { Dimensions } from './modules/dimensions';
58
+ export { Dimensions } from './modules/dimensions.js';
59
59
  export { PixelRatio } from '@symbiote-native/engine';
60
- export { useWindowDimensions } from './hooks/use-window-dimensions';
61
- export { Appearance } from './modules/appearance';
62
- export { useColorScheme } from './hooks/use-color-scheme';
63
- export { AppState } from './modules/app-state';
64
- export { Alert } from './modules/alert';
65
- export { ActionSheetIOS } from './modules/action-sheet-ios';
66
- export { Linking } from './modules/linking';
67
- export { Vibration } from './modules/vibration';
68
- export { Share } from './modules/share';
69
- export { AccessibilityInfo } from './modules/accessibility-info';
70
- export { I18nManager } from './modules/i18n-manager';
71
- export { Settings } from './modules/settings';
60
+ export { useWindowDimensions } from './hooks/use-window-dimensions.js';
61
+ export { Appearance } from './modules/appearance.js';
62
+ export { useColorScheme } from './hooks/use-color-scheme.js';
63
+ export { AppState } from './modules/app-state.js';
64
+ export { Alert } from './modules/alert.js';
65
+ export { ActionSheetIOS } from './modules/action-sheet-ios.js';
66
+ export { Linking } from './modules/linking.js';
67
+ export { Vibration } from './modules/vibration.js';
68
+ export { Share } from './modules/share.js';
69
+ export { AccessibilityInfo } from './modules/accessibility-info/index.js';
70
+ export { I18nManager } from './modules/i18n-manager.js';
71
+ export { Settings } from './modules/settings.js';
72
72
  // Interaction subsystems: gestures, deferred work, and layout transitions.
73
73
  export { PanResponder } from '@symbiote-native/engine';
74
- export { LayoutAnimation } from './modules/layout-animation';
74
+ export { LayoutAnimation } from './modules/layout-animation.js';
75
75
  // InteractionManager is pure JS, so it lives in shared; re-exported here so app code
76
76
  // names only @symbiote-native/react (RN's single import root).
77
77
  export { InteractionManager } from '@symbiote-native/engine';
@@ -79,7 +79,7 @@ export { InteractionManager } from '@symbiote-native/engine';
79
79
  // Android native module / Fabric view, inert on iOS (no module → graceful no-op,
80
80
  // no native view → degrade to a plain container). Native module names are
81
81
  // device-verify-pending; see .docs/native-module-platform-routing.md.
82
- export { BackHandler } from './modules/back-handler';
83
- export { ToastAndroid } from './modules/toast-android';
84
- export { PermissionsAndroid, PERMISSIONS, RESULTS } from './modules/permissions-android';
85
- export { TouchableNativeFeedback } from './components/touchable-native-feedback';
82
+ export { BackHandler } from './modules/back-handler.js';
83
+ export { ToastAndroid } from './modules/toast-android.js';
84
+ export { PermissionsAndroid, PERMISSIONS, RESULTS } from './modules/permissions-android.js';
85
+ export { TouchableNativeFeedback } from './components/touchable-native-feedback/index.js';
@@ -2,4 +2,4 @@
2
2
  // accessibility-info.ios.ts / .android.ts on a real host; under tsx / tsc / web the host
3
3
  // config resolves here. Filename is the selector, no Platform.OS read. See
4
4
  // accessibility-info-shared.ts.
5
- export * from './index.ios';
5
+ export * from './index.ios.js';
@@ -4,14 +4,14 @@
4
4
  // JS-driven, ADR 0016). Both halves meet here in one `Animated` object so the
5
5
  // familiar surface (`Animated.timing(new Animated.Value(0), …).start()`) works.
6
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';
7
- import { View, Text } from '../../components';
8
- import { Image } from '../../components/image';
9
- import { ScrollView } from '../../components/scroll-view';
10
- import { FlatList } from '../../components/flat-list';
11
- import { SectionList } from '../../components/section-list';
12
- import { createAnimatedComponent } from './create-animated-component';
7
+ import { View, Text } from '../../components.js';
8
+ import { Image } from '../../components/image/index.js';
9
+ import { ScrollView } from '../../components/scroll-view/index.js';
10
+ import { FlatList } from '../../components/flat-list/index.js';
11
+ import { SectionList } from '../../components/section-list/index.js';
12
+ import { createAnimatedComponent } from './create-animated-component.js';
13
13
  import { AnimatedMock } from '@symbiote-native/engine';
14
- export { createAnimatedComponent } from './create-animated-component';
14
+ export { createAnimatedComponent } from './create-animated-component.js';
15
15
  // The pure graph leaves now live in @symbiote-native/engine (they extend AnimatedWithChildren,
16
16
  // no React); re-exported here so @symbiote-native/react's Animated surface is unchanged.
17
17
  export { AnimatedProps, AnimatedStyle, AnimatedTransform } from '@symbiote-native/engine';
@@ -6,7 +6,7 @@
6
6
  // createElement + mount — so existing RN app-entry code ports verbatim.
7
7
  import { createElement } from 'react';
8
8
  import { createAppRegistry, dlog, } from '@symbiote-native/engine';
9
- import { mount } from '../../render';
9
+ import { mount } from '../../render.js';
10
10
  function runnableFor(componentProvider, getWrapperComponentProvider) {
11
11
  return appParameters => {
12
12
  dlog(`AppRegistry: mounting on rootTag ${String(appParameters.rootTag)}`);
@@ -1,4 +1,4 @@
1
1
  // Base / default StatusBar: re-exports the iOS build. Metro overrides this with
2
2
  // status-bar.ios.ts / .android.ts on a real host; under tsx / tsc / web the host config
3
3
  // resolves here. Filename is the selector, no Platform.OS read. See status-bar-shared.ts.
4
- export * from './index.ios';
4
+ export * from './index.ios.js';
package/build/render.js CHANGED
@@ -2,8 +2,8 @@
2
2
  // rootTag (via AppRegistry.registerRunnable); we create a surface for it and let
3
3
  // the reconciler drive shared, which commits into nativeFabricUIManager.
4
4
  import { createSurface, disposeRoot, setEventDispatcher, dlog, } from '@symbiote-native/engine';
5
- import reconciler, { withDiscretePriority } from './host-config';
6
- import { LegacyRoot } from './reconciler-constants';
5
+ import reconciler, { withDiscretePriority } from './host-config.js';
6
+ import { LegacyRoot } from './reconciler-constants.js';
7
7
  const noop = () => { };
8
8
  // A native event runs the listener (which may call setState) outside React's
9
9
  // loop. Run it at discrete priority so the update takes the sync lane, then
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symbiote-native/react",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "SymbioteNative's React adapter — a react-reconciler host config (mutation mode) driving real native iOS/Android views through stock React Native Fabric.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -36,9 +36,9 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "react-reconciler": "^0.33.0",
39
- "@symbiote-native/components": "0.2.0",
39
+ "@symbiote-native/components": "0.2.1",
40
40
  "@symbiote-native/css-parser": "0.2.0",
41
- "@symbiote-native/engine": "0.1.1"
41
+ "@symbiote-native/engine": "0.1.2"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "react": ">=19.0.0",