@gjsify/react-native 0.45.0 → 0.47.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.
- package/PROPS.md +525 -0
- package/README.md +45 -163
- package/SUPPORT.md +472 -0
- package/lib/esm/accessor.js +1 -0
- package/lib/esm/animated/brand.js +1 -0
- package/lib/esm/animated/easing.js +1 -0
- package/lib/esm/animated/index.js +1 -0
- package/lib/esm/animated/properties.js +1 -0
- package/lib/esm/animated/timing.js +1 -0
- package/lib/esm/animated/value.js +1 -0
- package/lib/esm/announce.js +1 -0
- package/lib/esm/app-registry.js +1 -1
- package/lib/esm/components.js +1 -1
- package/lib/esm/generated/own-exports.js +1 -1
- package/lib/esm/generated/unsupported-async-storage.js +0 -0
- package/lib/esm/generated/unsupported-expo-audio.js +1 -0
- package/lib/esm/generated/unsupported-expo-constants.js +1 -0
- package/lib/esm/generated/unsupported-expo-font.js +1 -0
- package/lib/esm/generated/unsupported-expo-image.js +1 -0
- package/lib/esm/generated/unsupported-expo-linking.js +1 -0
- package/lib/esm/generated/unsupported-expo-splash-screen.js +1 -0
- package/lib/esm/generated/unsupported-expo-status-bar.js +1 -0
- package/lib/esm/generated/unsupported-expo-system-ui.js +1 -0
- package/lib/esm/generated/unsupported-expo-video.js +1 -0
- package/lib/esm/generated/unsupported-expo-web-browser.js +1 -0
- package/lib/esm/generated/unsupported-nativewind.js +1 -0
- package/lib/esm/generated/unsupported-react-native-gesture-handler.js +1 -0
- package/lib/esm/generated/unsupported-react-native-safe-area-context.js +1 -0
- package/lib/esm/generated/unsupported-react-native-webview.js +1 -0
- package/lib/esm/generated/unsupported-react-native.js +1 -0
- package/lib/esm/generated/unsupported-router.js +1 -0
- package/lib/esm/generated/unsupported-vector-icons.js +1 -0
- package/lib/esm/index.js +1 -1
- package/lib/esm/lists/controller.js +1 -1
- package/lib/esm/primitives/answers.js +1 -0
- package/lib/esm/primitives/defaults.js +1 -0
- package/lib/esm/primitives/errors.js +1 -1
- package/lib/esm/primitives/handles.js +1 -0
- package/lib/esm/primitives/index.js +1 -1
- package/lib/esm/primitives/intents.js +1 -1
- package/lib/esm/primitives/resolve.js +1 -1
- package/lib/esm/primitives/style.js +1 -1
- package/lib/esm/primitives/table.js +1 -1
- package/lib/esm/prop-table.js +1 -0
- package/lib/esm/router/href.js +1 -0
- package/lib/esm/router/index.js +1 -1
- package/lib/esm/router/navigation.js +1 -1
- package/lib/esm/router/tabs.js +1 -1
- package/lib/esm/solid/index.js +1 -1
- package/lib/esm/stylesheet.js +1 -1
- package/lib/esm/support-table.js +1 -1
- package/lib/esm/surfaces/async-storage.js +1 -0
- package/lib/esm/surfaces/expo-audio.js +1 -0
- package/lib/esm/surfaces/expo-constants.js +1 -0
- package/lib/esm/surfaces/expo-font.js +1 -0
- package/lib/esm/surfaces/expo-image.js +1 -0
- package/lib/esm/surfaces/expo-linking.js +1 -0
- package/lib/esm/surfaces/expo-splash-screen.js +1 -0
- package/lib/esm/surfaces/expo-status-bar.js +1 -0
- package/lib/esm/surfaces/expo-system-ui.js +1 -0
- package/lib/esm/surfaces/expo-video.js +1 -0
- package/lib/esm/surfaces/expo-web-browser.js +1 -0
- package/lib/esm/surfaces/icon-map.js +1 -0
- package/lib/esm/surfaces/nativewind.js +1 -0
- package/lib/esm/surfaces/react-native-gesture-handler.js +1 -0
- package/lib/esm/surfaces/react-native-safe-area-context.js +1 -0
- package/lib/esm/surfaces/react-native-webview.js +1 -0
- package/lib/esm/surfaces/vector-icons.js +1 -0
- package/lib/esm/unsupported.js +1 -1
- package/lib/types/accessor.d.ts +10 -0
- package/lib/types/animated/animated.spec.d.ts +2 -0
- package/lib/types/animated/brand.d.ts +8 -0
- package/lib/types/animated/easing.d.ts +70 -0
- package/lib/types/animated/easing.spec.d.ts +2 -0
- package/lib/types/animated/index.d.ts +55 -0
- package/lib/types/animated/properties.d.ts +33 -0
- package/lib/types/animated/timing.d.ts +37 -0
- package/lib/types/animated/value.d.ts +103 -0
- package/lib/types/announce.d.ts +18 -0
- package/lib/types/components.d.ts +82 -3
- package/lib/types/generated/unsupported-async-storage.d.ts +1 -0
- package/lib/types/generated/unsupported-expo-audio.d.ts +4 -0
- package/lib/types/generated/unsupported-expo-constants.d.ts +2 -0
- package/lib/types/generated/unsupported-expo-font.d.ts +4 -0
- package/lib/types/generated/unsupported-expo-image.d.ts +3 -0
- package/lib/types/generated/unsupported-expo-linking.d.ts +4 -0
- package/lib/types/generated/unsupported-expo-splash-screen.d.ts +5 -0
- package/lib/types/generated/unsupported-expo-status-bar.d.ts +5 -0
- package/lib/types/generated/unsupported-expo-system-ui.d.ts +2 -0
- package/lib/types/generated/unsupported-expo-video.d.ts +3 -0
- package/lib/types/generated/unsupported-expo-web-browser.d.ts +6 -0
- package/lib/types/generated/unsupported-nativewind.d.ts +5 -0
- package/lib/types/generated/unsupported-react-native-gesture-handler.d.ts +10 -0
- package/lib/types/generated/unsupported-react-native-safe-area-context.d.ts +4 -0
- package/lib/types/generated/unsupported-react-native-webview.d.ts +1 -0
- package/lib/types/generated/{unsupported-exports.d.ts → unsupported-react-native.d.ts} +0 -2
- package/lib/types/generated/unsupported-vector-icons.d.ts +11 -0
- package/lib/types/index.d.ts +5 -1
- package/lib/types/primitives/answers.d.ts +69 -0
- package/lib/types/primitives/defaults.d.ts +52 -0
- package/lib/types/primitives/defaults.spec.d.ts +2 -0
- package/lib/types/primitives/errors.d.ts +9 -0
- package/lib/types/primitives/handles.d.ts +56 -0
- package/lib/types/primitives/index.d.ts +8 -2
- package/lib/types/primitives/intents.d.ts +36 -0
- package/lib/types/primitives/resolve.d.ts +25 -1
- package/lib/types/primitives/table.d.ts +63 -1
- package/lib/types/prop-table.d.ts +56 -0
- package/lib/types/prop-table.spec.d.ts +2 -0
- package/lib/types/router/href.d.ts +58 -0
- package/lib/types/router/href.spec.d.ts +2 -0
- package/lib/types/router/index.d.ts +3 -1
- package/lib/types/router/navigation.d.ts +47 -5
- package/lib/types/router/tabs.d.ts +35 -0
- package/lib/types/solid/index.d.ts +15 -1
- package/lib/types/support-table.d.ts +79 -10
- package/lib/types/surfaces/async-storage.d.ts +57 -0
- package/lib/types/surfaces/expo-audio.d.ts +1 -0
- package/lib/types/surfaces/expo-constants.d.ts +11 -0
- package/lib/types/surfaces/expo-font.d.ts +34 -0
- package/lib/types/surfaces/expo-image.d.ts +1 -0
- package/lib/types/surfaces/expo-linking.d.ts +36 -0
- package/lib/types/surfaces/expo-splash-screen.d.ts +1 -0
- package/lib/types/surfaces/expo-status-bar.d.ts +16 -0
- package/lib/types/surfaces/expo-system-ui.d.ts +1 -0
- package/lib/types/surfaces/expo-video.d.ts +1 -0
- package/lib/types/surfaces/expo-web-browser.d.ts +21 -0
- package/lib/types/surfaces/icon-map.d.ts +14 -0
- package/lib/types/surfaces/nativewind.d.ts +1 -0
- package/lib/types/surfaces/react-native-gesture-handler.d.ts +10 -0
- package/lib/types/surfaces/react-native-safe-area-context.d.ts +60 -0
- package/lib/types/surfaces/react-native-webview.d.ts +4 -0
- package/lib/types/surfaces/surfaces.spec.d.ts +2 -0
- package/lib/types/surfaces/vector-icons.d.ts +15 -0
- package/lib/types/unsupported.d.ts +12 -3
- package/package.json +85 -14
- package/lib/esm/generated/unsupported-exports.js +0 -1
- package/lib/esm/generated/unsupported-router-exports.js +0 -1
- /package/lib/types/generated/{unsupported-router-exports.d.ts → unsupported-router.d.ts} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type EasingFunction } from './easing.js';
|
|
2
|
+
import type { AnimatedValue } from './value.js';
|
|
3
|
+
/** What React Native calls an `EndCallback`. */
|
|
4
|
+
export type EndCallback = (result: {
|
|
5
|
+
readonly finished: boolean;
|
|
6
|
+
}) => void;
|
|
7
|
+
/** `Animated.timing`'s config, as far as this layer answers for it. */
|
|
8
|
+
export interface TimingConfig {
|
|
9
|
+
readonly toValue: number;
|
|
10
|
+
readonly duration?: number;
|
|
11
|
+
readonly easing?: EasingFunction;
|
|
12
|
+
/**
|
|
13
|
+
* Accepted and MEANINGLESS, which is a decision rather than an oversight.
|
|
14
|
+
*
|
|
15
|
+
* On a phone the flag chooses whether the JavaScript thread interpolates and ships
|
|
16
|
+
* each frame over the bridge, or the native side owns the whole run. There is no
|
|
17
|
+
* bridge here: this layer renders in-process onto GTK, `Adw.TimedAnimation` owns
|
|
18
|
+
* the frame clock either way, and React re-renders for a frame in neither case. So
|
|
19
|
+
* both values behave identically and the flag is honoured by being ignored — said
|
|
20
|
+
* out loud here and in the support table, because a config key that is silently
|
|
21
|
+
* dropped is indistinguishable from one that was misspelled.
|
|
22
|
+
*/
|
|
23
|
+
readonly useNativeDriver?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** The handle `Animated.timing` returns. React Native calls it a `CompositeAnimation`. */
|
|
26
|
+
export interface CompositeAnimation {
|
|
27
|
+
start(callback?: EndCallback): void;
|
|
28
|
+
stop(): void;
|
|
29
|
+
reset(): void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Animate `value` to `config.toValue` over `config.duration` milliseconds.
|
|
33
|
+
*
|
|
34
|
+
* Nothing starts until `.start()` — React Native's own shape, and here it is also
|
|
35
|
+
* what lets the run pick up a frame clock from whichever view binds the value.
|
|
36
|
+
*/
|
|
37
|
+
export declare function timing(value: AnimatedValue, config: TimingConfig): CompositeAnimation;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { ANIMATED_VALUE, type AnimatedValueLike } from './brand.js';
|
|
2
|
+
/**
|
|
3
|
+
* One place an animated number lands: a widget property this layer writes.
|
|
4
|
+
*
|
|
5
|
+
* `widget` is typed `object` rather than `Gtk.Widget` on purpose — see the module
|
|
6
|
+
* comment. It is here at all because an `Adw.Animation` needs a widget for its frame
|
|
7
|
+
* clock, and the only widgets this value knows about are the ones bound to it.
|
|
8
|
+
*/
|
|
9
|
+
export interface ValueSink {
|
|
10
|
+
/** The widget whose frame clock an animation of this value can use. */
|
|
11
|
+
readonly widget: object;
|
|
12
|
+
/** Write the number where it belongs. */
|
|
13
|
+
write(value: number): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The half of a running animation this value drives, implemented in `timing.ts`.
|
|
17
|
+
*
|
|
18
|
+
* Three callbacks and no getters: the value tells the run what happened to its
|
|
19
|
+
* clock, and the run tells the value what the number is. Anything more would put
|
|
20
|
+
* frame state on both sides.
|
|
21
|
+
*/
|
|
22
|
+
export interface ValueRun {
|
|
23
|
+
/** A sink arrived and this run has no clock yet — start now. */
|
|
24
|
+
clockAvailable(widget: object): void;
|
|
25
|
+
/** The sink that supplied the clock is gone. */
|
|
26
|
+
clockLost(): void;
|
|
27
|
+
/** `setValue`, or another animation, took this value over. */
|
|
28
|
+
interrupted(): void;
|
|
29
|
+
/**
|
|
30
|
+
* `resetAnimation`: put the value back to the number this run started from.
|
|
31
|
+
*
|
|
32
|
+
* `rewind` and not `reset`, because the handle `Animated.timing` returns has a
|
|
33
|
+
* PUBLIC `reset()` of its own that routes through the value — two methods called
|
|
34
|
+
* `reset` calling each other is a stack overflow, and it is one this name avoids
|
|
35
|
+
* rather than documents.
|
|
36
|
+
*/
|
|
37
|
+
rewind(): void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A number that animates, and the views bound to it.
|
|
41
|
+
*
|
|
42
|
+
* The subset ADR 0032's measured application uses — `new Animated.Value(n)`, handed
|
|
43
|
+
* to `Animated.timing` and read by an `<Animated.View>` style — plus `setValue`,
|
|
44
|
+
* `__getValue`, `stopAnimation` and `resetAnimation`, which are the four that cost
|
|
45
|
+
* nothing once the run bookkeeping exists. Everything else on React Native's
|
|
46
|
+
* `AnimatedValue` is a named refusal in `index.ts`, with its reason.
|
|
47
|
+
*
|
|
48
|
+
* The `__`-prefixed methods are React Native's own convention for a node's internals
|
|
49
|
+
* (`__getValue` is in its public type declarations), and they are how `timing.ts` and
|
|
50
|
+
* `Animated.View` reach the run and the sinks. They are not part of the surface a
|
|
51
|
+
* ported application should call.
|
|
52
|
+
*/
|
|
53
|
+
export declare class AnimatedValue implements AnimatedValueLike {
|
|
54
|
+
#private;
|
|
55
|
+
readonly [ANIMATED_VALUE]: true;
|
|
56
|
+
/** Stable per instance. `Animated.View` puts it in an effect's dependency list. */
|
|
57
|
+
readonly id: number;
|
|
58
|
+
constructor(value: number);
|
|
59
|
+
/** The number right now. React Native's own spelling for this read. */
|
|
60
|
+
__getValue(): number;
|
|
61
|
+
/**
|
|
62
|
+
* Jump to a value, stopping whatever was animating it.
|
|
63
|
+
*
|
|
64
|
+
* Stopping first is React Native's own behaviour and it is not a detail: a
|
|
65
|
+
* `setValue` that left the animation running would be overwritten on the next
|
|
66
|
+
* frame, so the write would appear to do nothing for the rest of the run.
|
|
67
|
+
*/
|
|
68
|
+
setValue(value: number): void;
|
|
69
|
+
/**
|
|
70
|
+
* Stop the running animation where it is; the callback gets the value it stopped at.
|
|
71
|
+
*
|
|
72
|
+
* React Native's signature is `stopAnimation(callback?: (value: number) => void)`,
|
|
73
|
+
* and the value it reports is the one the animation reached — which is why this
|
|
74
|
+
* cannot be written as `stop(); callback(0)`.
|
|
75
|
+
*/
|
|
76
|
+
stopAnimation(callback?: (value: number) => void): void;
|
|
77
|
+
/**
|
|
78
|
+
* Stop and go back to where the run started.
|
|
79
|
+
*
|
|
80
|
+
* `Adw.Animation.reset()` does exactly this on its own side (measured: state
|
|
81
|
+
* returns to IDLE and `value` to `value-from`, with no `done`), and the run is
|
|
82
|
+
* what knows the starting number — so the reset is the run's, and this method is
|
|
83
|
+
* the value's way of asking for it.
|
|
84
|
+
*/
|
|
85
|
+
resetAnimation(callback?: (value: number) => void): void;
|
|
86
|
+
/**
|
|
87
|
+
* Bind a widget property to this value; returns the unbind.
|
|
88
|
+
*
|
|
89
|
+
* The sink is written IMMEDIATELY, because a view that only hears about changes
|
|
90
|
+
* starts out disagreeing with the value — a `new Animated.Value(0)` behind an
|
|
91
|
+
* `opacity` must make the widget transparent on its first frame, not on the
|
|
92
|
+
* animation's.
|
|
93
|
+
*/
|
|
94
|
+
__attach(sink: ValueSink): () => void;
|
|
95
|
+
/** The widget a new run can take its frame clock from, or null. */
|
|
96
|
+
__clockWidget(): object | null;
|
|
97
|
+
/** Take this value over. Any previous run is interrupted, as React Native's is. */
|
|
98
|
+
__claim(run: ValueRun): void;
|
|
99
|
+
/** The run finished on its own; nothing to interrupt. */
|
|
100
|
+
__release(run: ValueRun): void;
|
|
101
|
+
/** One frame. Called by the run's animation target. */
|
|
102
|
+
__publish(value: number): void;
|
|
103
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import Gtk from 'gi://Gtk?version=4.0';
|
|
2
|
+
import type { ResolvedAnnouncement } from './primitives/resolve.js';
|
|
3
|
+
/**
|
|
4
|
+
* How many elements are currently reporting their content changes to a screen reader.
|
|
5
|
+
*
|
|
6
|
+
* `accessibilityLiveRegion="none"` and an absent prop must subscribe to NOTHING, and
|
|
7
|
+
* both render identically to one that does — only a count tells them apart.
|
|
8
|
+
*/
|
|
9
|
+
export declare const liveRegionWatchCount: () => number;
|
|
10
|
+
/**
|
|
11
|
+
* Announce `widget`'s own text whenever `announcement.signal` says it changed.
|
|
12
|
+
*
|
|
13
|
+
* Returns the unsubscribe. AN EMPTY MESSAGE IS NOT ANNOUNCED: a `Gtk.Label` passes
|
|
14
|
+
* through `''` on its way between two strings when an application rebuilds its text,
|
|
15
|
+
* and "say nothing" is what a screen reader should do with it — announcing it would
|
|
16
|
+
* interrupt the user to say nothing at all.
|
|
17
|
+
*/
|
|
18
|
+
export declare function onLiveRegion(widget: Gtk.Widget, announcement: ResolvedAnnouncement): () => void;
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { type ReactElement, type ReactNode, type Ref } from 'react';
|
|
2
2
|
import type { ClassNameInput } from './primitives/classes.js';
|
|
3
|
+
import { type TextInputHandle } from './primitives/handles.js';
|
|
3
4
|
import { type ChildContext, type PrimitivePlan, type WidgetNode } from './primitives/resolve.js';
|
|
4
|
-
import type
|
|
5
|
+
import { type StyleInput } from './primitives/style.js';
|
|
5
6
|
import type { StyleTokens } from '@gjsify/gtk-host/style';
|
|
6
7
|
/** What every primitive accepts on top of its own props. */
|
|
7
8
|
export interface CommonProps {
|
|
8
9
|
className?: ClassNameInput;
|
|
9
10
|
style?: StyleInput;
|
|
10
11
|
children?: ReactNode;
|
|
11
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* The `Gtk.Widget` itself — except where React Native documents an imperative
|
|
14
|
+
* handle, which is `<TextInput>` and its {@link TextInputHandle}.
|
|
15
|
+
*
|
|
16
|
+
* `unknown` rather than `Gtk.Widget`, because the two values are not one type and
|
|
17
|
+
* the primitive decides which arrives. A component that has a handle declares it:
|
|
18
|
+
* `useRef<TextInput>(null)` resolves to the handle's members.
|
|
19
|
+
*/
|
|
12
20
|
ref?: Ref<unknown>;
|
|
13
21
|
testID?: string;
|
|
14
22
|
}
|
|
@@ -51,6 +59,15 @@ export interface TextProps extends CommonProps {
|
|
|
51
59
|
numberOfLines?: number;
|
|
52
60
|
ellipsizeMode?: 'head' | 'middle' | 'tail';
|
|
53
61
|
selectable?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Announce this label's text when it changes — `Gtk.Accessible.announce()`.
|
|
64
|
+
*
|
|
65
|
+
* Declared on `Text` ALONE, and that is the whole of what GTK can answer: the
|
|
66
|
+
* announcement is imperative, so the layer needs both the moment and the message,
|
|
67
|
+
* and a `Gtk.Label` is the one widget whose content is a property. Every other
|
|
68
|
+
* primitive refuses the prop by name.
|
|
69
|
+
*/
|
|
70
|
+
accessibilityLiveRegion?: 'none' | 'polite' | 'assertive';
|
|
54
71
|
}
|
|
55
72
|
export declare function Text(props: TextProps): ReactElement;
|
|
56
73
|
/** What React Native hands a `Pressable`'s function child. */
|
|
@@ -92,7 +109,7 @@ export interface ActivityIndicatorProps extends CommonProps {
|
|
|
92
109
|
hidesWhenStopped?: boolean;
|
|
93
110
|
}
|
|
94
111
|
export declare function ActivityIndicator(props: ActivityIndicatorProps): ReactElement;
|
|
95
|
-
export interface TextInputProps extends CommonProps {
|
|
112
|
+
export interface TextInputProps extends Omit<CommonProps, 'ref'> {
|
|
96
113
|
value?: string;
|
|
97
114
|
defaultValue?: string;
|
|
98
115
|
placeholder?: string;
|
|
@@ -104,6 +121,29 @@ export interface TextInputProps extends CommonProps {
|
|
|
104
121
|
maxLength?: number;
|
|
105
122
|
secureTextEntry?: boolean;
|
|
106
123
|
keyboardType?: 'default' | 'email-address' | 'phone-pad' | 'number-pad' | 'numeric' | 'decimal-pad' | 'url';
|
|
124
|
+
/** A declared no-op: there is no autofill service on a GTK desktop. `keyboardType` is the hint that lands. */
|
|
125
|
+
autoComplete?: string;
|
|
126
|
+
/** `autoComplete`'s iOS spelling, and the same absent addressee. */
|
|
127
|
+
textContentType?: string;
|
|
128
|
+
/** A declared no-op: each widget has one Return behaviour, and `multiline` picks the widget. */
|
|
129
|
+
submitBehavior?: 'submit' | 'blurAndSubmit' | 'newline';
|
|
130
|
+
ref?: Ref<TextInputHandle>;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The INSTANCE type, because in React Native `TextInput` is a class.
|
|
134
|
+
*
|
|
135
|
+
* `useRef<TextInput>(null)` and `passwordRef.current?.focus()` are ordinary React
|
|
136
|
+
* Native code, and both were broken here: the name was a function, so it was a value
|
|
137
|
+
* and not a type, and the ref carried the bare `Gtk.Widget`. An interface merges with
|
|
138
|
+
* the function declaration below — they occupy different declaration spaces — so the
|
|
139
|
+
* name means the component in an expression and the handle in a type position,
|
|
140
|
+
* exactly as the class does upstream.
|
|
141
|
+
*
|
|
142
|
+
* What it does NOT copy is React Native's `TextInput extends React.Component`: the
|
|
143
|
+
* component here is a function, and nothing may read `props`/`state`/`setState` off
|
|
144
|
+
* a ref. Those are not part of the ref contract upstream either.
|
|
145
|
+
*/
|
|
146
|
+
export interface TextInput extends TextInputHandle {
|
|
107
147
|
}
|
|
108
148
|
export declare function TextInput(props: TextInputProps): ReactElement;
|
|
109
149
|
export interface SwitchProps extends CommonProps {
|
|
@@ -230,4 +270,43 @@ export interface StatusBarProps {
|
|
|
230
270
|
* different question and refuse by name — see `StatusBarStatics`.
|
|
231
271
|
*/
|
|
232
272
|
export declare function StatusBar(_props: StatusBarProps): null;
|
|
273
|
+
/** A `style` prop that may carry `Animated.Value`s. */
|
|
274
|
+
export type AnimatedStyleInput = StyleInput | Readonly<Record<string, unknown>>;
|
|
275
|
+
export interface AnimatedViewProps extends Omit<ViewProps, 'style'> {
|
|
276
|
+
style?: AnimatedStyleInput;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* A `View` whose animated style entries drive GTK widget properties directly.
|
|
280
|
+
*
|
|
281
|
+
* NO RE-RENDER PER FRAME, and that is the design rather than an optimisation. An
|
|
282
|
+
* `Animated.Value` behind an `opacity` could have been React state, and then a 300 ms
|
|
283
|
+
* fade would be ~18 reconciler passes over the subtree for a property GTK can
|
|
284
|
+
* interpolate itself. So the value writes `Gtk.Widget:opacity` through the sink bound
|
|
285
|
+
* below, `Adw.TimedAnimation` owns the frame clock (`animated/timing.ts`), and React
|
|
286
|
+
* sees exactly two commits: the mount and the unmount.
|
|
287
|
+
*
|
|
288
|
+
* THE FIRST FRAME IS RENDERED, NOT BOUND. The sink is attached in an effect, which
|
|
289
|
+
* runs after the commit — so the initial number is ALSO written as a widget property
|
|
290
|
+
* in the render itself. Without it a `new Animated.Value(0)` behind an opacity paints
|
|
291
|
+
* one frame fully opaque before the effect makes it transparent, which is a flash on
|
|
292
|
+
* every mount of every faded-in screen.
|
|
293
|
+
*/
|
|
294
|
+
export declare function AnimatedView(props: AnimatedViewProps): ReactElement;
|
|
295
|
+
/**
|
|
296
|
+
* A themed icon — `Gtk.Image` with an `icon-name`.
|
|
297
|
+
*
|
|
298
|
+
* NOT a React Native name and not exported from the package root: it is the widget
|
|
299
|
+
* ADR 0036's `@expo/vector-icons` surface renders, and it lives here rather than in
|
|
300
|
+
* that surface for the reason ADR 0032 § 1 gives — a component that named `GtkImage`
|
|
301
|
+
* itself would put a widget name in L3. `name` is a GTK icon name by the time it
|
|
302
|
+
* arrives; the Ionicons vocabulary is translated in `surfaces/icon-map.ts`.
|
|
303
|
+
*/
|
|
304
|
+
export interface IconProps extends Omit<CommonProps, 'children'> {
|
|
305
|
+
/** A GTK icon name, e.g. `go-home-symbolic`. */
|
|
306
|
+
name: string;
|
|
307
|
+
/** `Gtk.Image:pixel-size`, in pixels. */
|
|
308
|
+
size?: number;
|
|
309
|
+
color?: string;
|
|
310
|
+
}
|
|
311
|
+
export declare function Icon(props: IconProps): ReactElement;
|
|
233
312
|
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const setStatusBarStyle: never;
|
|
2
|
+
export declare const setStatusBarHidden: never;
|
|
3
|
+
export declare const setStatusBarBackgroundColor: never;
|
|
4
|
+
export declare const setStatusBarTranslucent: never;
|
|
5
|
+
export declare const setStatusBarNetworkActivityIndicatorVisible: never;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const dismissBrowser: never;
|
|
2
|
+
export declare const openAuthSessionAsync: never;
|
|
3
|
+
export declare const dismissAuthSession: never;
|
|
4
|
+
export declare const maybeCompleteAuthSession: never;
|
|
5
|
+
export declare const warmUpAsync: never;
|
|
6
|
+
export declare const coolDownAsync: never;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const Gesture: never;
|
|
2
|
+
export declare const GestureDetector: never;
|
|
3
|
+
export declare const PanGestureHandler: never;
|
|
4
|
+
export declare const TapGestureHandler: never;
|
|
5
|
+
export declare const LongPressGestureHandler: never;
|
|
6
|
+
export declare const PinchGestureHandler: never;
|
|
7
|
+
export declare const Swipeable: never;
|
|
8
|
+
export declare const ScrollView: never;
|
|
9
|
+
export declare const Directions: never;
|
|
10
|
+
export declare const State: never;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const WebView: never;
|
|
@@ -4,8 +4,6 @@ export declare const AppState: never;
|
|
|
4
4
|
export declare const PixelRatio: never;
|
|
5
5
|
export declare const PlatformColor: never;
|
|
6
6
|
export declare const AccessibilityInfo: never;
|
|
7
|
-
export declare const Animated: never;
|
|
8
|
-
export declare const Easing: never;
|
|
9
7
|
export declare const LayoutAnimation: never;
|
|
10
8
|
export declare const InteractionManager: never;
|
|
11
9
|
export declare const useAnimatedValue: never;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const MaterialIcons: never;
|
|
2
|
+
export declare const MaterialCommunityIcons: never;
|
|
3
|
+
export declare const FontAwesome: never;
|
|
4
|
+
export declare const Feather: never;
|
|
5
|
+
export declare const AntDesign: never;
|
|
6
|
+
export declare const Entypo: never;
|
|
7
|
+
export declare const Octicons: never;
|
|
8
|
+
export declare const SimpleLineIcons: never;
|
|
9
|
+
export declare const createIconSet: never;
|
|
10
|
+
export declare const createIconSetFromFontello: never;
|
|
11
|
+
export declare const createIconSetFromIcoMoon: never;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -9,18 +9,22 @@ export type { FlatListProps, ListRenderItemInfo, ListSeparators, ListSlot, Secti
|
|
|
9
9
|
export { Alert, Appearance, Dimensions, Keyboard, Linking, Platform, Share } from './apis/index.js';
|
|
10
10
|
export type { AlertButton, AlertOptions, AppearancePreferences, ColorSchemeName, DimensionKey, DimensionsPayload, DisplayMetrics, PlatformOS, PlatformSelectSpec, ShareAction, ShareContent, } from './apis/index.js';
|
|
11
11
|
export { useColorScheme, useWindowDimensions } from './hooks.js';
|
|
12
|
+
export { Animated, Easing } from './animated/index.js';
|
|
13
|
+
export type { CompositeAnimation, EasingFunction, EndCallback, TimingConfig } from './animated/index.js';
|
|
12
14
|
export { StyleSheet } from './stylesheet.js';
|
|
13
15
|
export type { NamedStyles } from './stylesheet.js';
|
|
14
16
|
export { configureStyle, resetStyleConfig, styleConfig } from './style-config.js';
|
|
15
17
|
export type { StyleConfig } from './style-config.js';
|
|
16
18
|
export * as primitives from './primitives/index.js';
|
|
17
19
|
export { PrimitiveError } from './primitives/errors.js';
|
|
20
|
+
export type { TextInputHandle } from './primitives/handles.js';
|
|
18
21
|
/**
|
|
19
22
|
* React 19 batches every update on its own, so this is the identity call it already
|
|
20
23
|
* is upstream — kept because application code and libraries still wrap in it, and an
|
|
21
24
|
* absent export would refuse something that costs nothing to honour.
|
|
22
25
|
*/
|
|
23
26
|
export declare function unstable_batchedUpdates<T, R>(callback: (argument: T) => R, argument: T): R;
|
|
24
|
-
export * from './generated/unsupported-
|
|
27
|
+
export * from './generated/unsupported-react-native.js';
|
|
25
28
|
export { OWN_EXPORT_NAMES, SUPPORT_TABLE, SUPPORTED_NAMES, explainUnsupported, isImportable, isOwnExport, type SupportEntry, type SupportStatus, type SupportTier, } from './support-table.js';
|
|
29
|
+
export { PRIMITIVE_VARIANTS, acceptsProp, explainProp, propAnswer, propNames, propTable, type PropAnswer, type PropStatus, type PropVariant, } from './prop-table.js';
|
|
26
30
|
export { UnsupportedError } from './unsupported.js';
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { PrimitiveSpec } from './table.js';
|
|
2
|
+
/**
|
|
3
|
+
* What this layer does about a prop.
|
|
4
|
+
*
|
|
5
|
+
* The first six are ACCEPTED — the prop reaches GTK, by the route the name says.
|
|
6
|
+
* `ignored` is accepted too and reaches nothing, deliberately. Only `refused` and
|
|
7
|
+
* `unknown` throw, and they are separate because they have different fixes: a
|
|
8
|
+
* refusal is a decision with a reason, an unknown prop is a name nobody recognised
|
|
9
|
+
* (usually a typo, sometimes a prop this table has not grown yet).
|
|
10
|
+
*/
|
|
11
|
+
export type PropStatus =
|
|
12
|
+
/** Becomes one or more GTK widget properties. */
|
|
13
|
+
'property'
|
|
14
|
+
/** Binds a GObject signal. */
|
|
15
|
+
| 'event'
|
|
16
|
+
/** Joins the normalised style record and goes through the style partition. */
|
|
17
|
+
| 'style'
|
|
18
|
+
/** Becomes a `Gio.File` on a widget property. */
|
|
19
|
+
| 'file'
|
|
20
|
+
/** Binds a `Gtk.GestureClick` signal through a controller. */
|
|
21
|
+
| 'gesture'
|
|
22
|
+
/** Calls `Gtk.Accessible.announce()` when a signal reports the content changed. */
|
|
23
|
+
| 'announcement'
|
|
24
|
+
/** Recognised and deliberately without effect on a desktop window. */
|
|
25
|
+
| 'ignored'
|
|
26
|
+
/** Refused by name, with a reason. Throws a `PrimitiveError` when rendered. */
|
|
27
|
+
| 'refused'
|
|
28
|
+
/** The framework's own (`children`, `key`, `ref`, `className`, `style`); never reaches a widget. */
|
|
29
|
+
| 'framework'
|
|
30
|
+
/** Not a name this primitive carries at all. Throws a `PrimitiveError` when rendered. */
|
|
31
|
+
| 'unknown';
|
|
32
|
+
/** What this layer does about one prop of one primitive. */
|
|
33
|
+
export interface PropAnswer {
|
|
34
|
+
readonly primitive: string;
|
|
35
|
+
readonly prop: string;
|
|
36
|
+
readonly status: PropStatus;
|
|
37
|
+
/**
|
|
38
|
+
* The reason, for every status that has one.
|
|
39
|
+
*
|
|
40
|
+
* For `refused` and `unknown` it is the DETAIL of the `PrimitiveError` the
|
|
41
|
+
* resolver throws — the same string, not a paraphrase. For `ignored` it is why
|
|
42
|
+
* the no-op is the right answer. Empty for a prop that simply lands.
|
|
43
|
+
*/
|
|
44
|
+
readonly why: string;
|
|
45
|
+
/** What it reaches on the GTK side: property names, a signal, or nothing. */
|
|
46
|
+
readonly gtk: readonly string[];
|
|
47
|
+
}
|
|
48
|
+
/** Does this status let a render proceed? `ignored` counts — it is a declared no-op, not a refusal. */
|
|
49
|
+
export declare const isAccepted: (status: PropStatus) => boolean;
|
|
50
|
+
/** The detail of the refusal a prop no primitive row carries gets. `resolve.ts` throws exactly this. */
|
|
51
|
+
export declare const unknownPropDetail: (spec: PrimitiveSpec) => string;
|
|
52
|
+
/** The detail of the refusal an unknown PRIMITIVE gets. `resolve.ts` throws exactly this. */
|
|
53
|
+
export declare const unknownPrimitiveDetail: (names: readonly string[]) => string;
|
|
54
|
+
/**
|
|
55
|
+
* What `primitive` does about `prop`.
|
|
56
|
+
*
|
|
57
|
+
* `frameworkProps` and `spec` arrive as arguments rather than being imported — see
|
|
58
|
+
* the header: this module is loaded by a Node script that cannot follow a `./x.js`
|
|
59
|
+
* specifier into a `.ts` file.
|
|
60
|
+
*/
|
|
61
|
+
export declare function answerFor(primitive: string, spec: PrimitiveSpec, prop: string, frameworkProps: ReadonlySet<string>): PropAnswer;
|
|
62
|
+
/**
|
|
63
|
+
* The props a primitive names, in the order a reader wants them: accepted first.
|
|
64
|
+
*
|
|
65
|
+
* Sorted within a status so the generated document is stable — an object's key order
|
|
66
|
+
* is the table's authoring order, which is not a promise anyone should read a diff
|
|
67
|
+
* against.
|
|
68
|
+
*/
|
|
69
|
+
export declare function propNamesOf(spec: PrimitiveSpec): readonly string[];
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** What this layer does about one divergence. */
|
|
2
|
+
export type DefaultVerdict =
|
|
3
|
+
/** The two disagree and the primitive writes React Native's value. */
|
|
4
|
+
'normalised'
|
|
5
|
+
/** Checked, and the two already agree. Recorded so the sweep is a sweep. */
|
|
6
|
+
| 'agrees'
|
|
7
|
+
/** They disagree and GTK's is KEPT on purpose — the reason says why. */
|
|
8
|
+
| 'kept'
|
|
9
|
+
/**
|
|
10
|
+
* Not a default question at all: the table writes this for ONE primitive's own
|
|
11
|
+
* layout.
|
|
12
|
+
*
|
|
13
|
+
* The distinction is worth a verdict because the closure check below cannot make
|
|
14
|
+
* it — every `widgetProps` entry looks the same from there — and conflating the
|
|
15
|
+
* two would let a real divergence hide behind "well, some primitive wanted it".
|
|
16
|
+
*/
|
|
17
|
+
| 'primitive';
|
|
18
|
+
export interface DefaultRow {
|
|
19
|
+
/** The GType a primitive names. */
|
|
20
|
+
readonly gtype: string;
|
|
21
|
+
/** The property, in GTK's own kebab spelling. */
|
|
22
|
+
readonly property: string;
|
|
23
|
+
/** What a freshly constructed widget reports. Re-measured by the spec. */
|
|
24
|
+
readonly gtk: string | number | boolean;
|
|
25
|
+
/** React Native's own default, in words. */
|
|
26
|
+
readonly reactNative: string;
|
|
27
|
+
/** Where that is written down, or how it was observed. */
|
|
28
|
+
readonly source: string;
|
|
29
|
+
readonly verdict: DefaultVerdict;
|
|
30
|
+
/** The value the primitive writes. Present exactly when the verdict is `normalised`. */
|
|
31
|
+
readonly normalisedTo?: string | number | boolean;
|
|
32
|
+
readonly reason: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Every (widget, property) pair whose default this layer has looked at.
|
|
36
|
+
*
|
|
37
|
+
* ORDERED BY WIDGET, and the `agrees` rows are not padding: "we checked and they
|
|
38
|
+
* match" and "nobody has looked" are different states, and only one of them is safe.
|
|
39
|
+
* A property absent from this file is in the second state.
|
|
40
|
+
*/
|
|
41
|
+
export declare const DEFAULT_ROWS: readonly DefaultRow[];
|
|
42
|
+
/** Every row this layer writes a value for, as `(gtype, property)`. Read by the spec. */
|
|
43
|
+
export declare const NORMALISED_DEFAULTS: readonly DefaultRow[];
|
|
44
|
+
/**
|
|
45
|
+
* The row for one `(gtype, property)`, or undefined.
|
|
46
|
+
*
|
|
47
|
+
* FALLS BACK TO `GtkWidget`, and that is not a convenience: `hexpand`, `opacity` and
|
|
48
|
+
* `halign` are `Gtk.Widget`'s properties, so a primitive writing one on a
|
|
49
|
+
* `Gtk.ScrolledWindow` is writing the same property this ledger records once. Keying
|
|
50
|
+
* a row per widget that inherits them would be twenty copies of one fact.
|
|
51
|
+
*/
|
|
52
|
+
export declare const defaultRowFor: (gtype: string, property: string) => DefaultRow | undefined;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sentence, without throwing it.
|
|
3
|
+
*
|
|
4
|
+
* `@gjsify/react-native/prop-table` has to hand a consumer the message a render WOULD
|
|
5
|
+
* have thrown, and ADR 0039 § 1 says it is the same string rather than a paraphrase.
|
|
6
|
+
* Two template literals that happen to agree are not that: the format is here once and
|
|
7
|
+
* both the throw and the static answer are built from it.
|
|
8
|
+
*/
|
|
9
|
+
export declare const primitiveErrorMessage: (primitive: string, subject: string, detail: string) => string;
|
|
1
10
|
/** A primitive, prop or combination this layer cannot answer for, and why. */
|
|
2
11
|
export declare class PrimitiveError extends Error {
|
|
3
12
|
readonly name = "PrimitiveError";
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { HandleKind } from './table.js';
|
|
2
|
+
/**
|
|
3
|
+
* The imperative handle a `<TextInput ref>` receives.
|
|
4
|
+
*
|
|
5
|
+
* React Native's own member list, with every one of them answered — five over GTK
|
|
6
|
+
* and four refused by name. `widget` is the one addition, and it is not decoration:
|
|
7
|
+
* the ref used to BE the widget, so a port that already reached for `Gtk.Entry` API
|
|
8
|
+
* through it keeps working by spelling `ref.current.widget` — and it is also the way
|
|
9
|
+
* out of every refusal below.
|
|
10
|
+
*/
|
|
11
|
+
export interface TextInputHandle {
|
|
12
|
+
/** `Gtk.Widget.grab_focus()`. */
|
|
13
|
+
focus(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Give up the focus — `Gtk.Root.set_focus(null)`, and ONLY when this widget holds it.
|
|
16
|
+
*
|
|
17
|
+
* The guard is the whole of the correctness here: `set_focus(null)` unsets the
|
|
18
|
+
* root's focus widget whoever it is, so an unguarded `blur()` on an unfocused
|
|
19
|
+
* input would take the focus away from whatever really had it.
|
|
20
|
+
*/
|
|
21
|
+
blur(): void;
|
|
22
|
+
/** Remove all text. `Gtk.Editable.set_text('')`, or the buffer's own for a multiline input. */
|
|
23
|
+
clear(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Is this the widget its root delivers keys to?
|
|
26
|
+
*
|
|
27
|
+
* `Gtk.Widget.is_focus()` and NOT `has-focus`: the latter is the GLOBAL input
|
|
28
|
+
* focus and is false whenever the window is not the compositor's active one
|
|
29
|
+
* (MEASURED on gtk 4.22.4 — a mapped, presented window that the compositor never
|
|
30
|
+
* activated reports `has_focus` false for the widget `grab_focus()` just
|
|
31
|
+
* returned true for). React Native's `isFocused()` is the per-application
|
|
32
|
+
* question, which is `is_focus()`.
|
|
33
|
+
*/
|
|
34
|
+
isFocused(): boolean;
|
|
35
|
+
/** `Gtk.Editable.select_region(start, end)`, or `Gtk.TextBuffer.select_range` for a multiline input. */
|
|
36
|
+
setSelection(start: number, end: number): void;
|
|
37
|
+
/** The `Gtk.Entry` or `Gtk.TextView` itself — everything this handle does not answer. */
|
|
38
|
+
readonly widget: unknown;
|
|
39
|
+
/** Refused by name. GTK measures on allocation; see the message. */
|
|
40
|
+
measure(callback: unknown): never;
|
|
41
|
+
/** Refused by name — see `measure`. */
|
|
42
|
+
measureInWindow(callback: unknown): never;
|
|
43
|
+
/** Refused by name — see `measure`. */
|
|
44
|
+
measureLayout(relativeTo: unknown, onSuccess: unknown, onFail?: unknown): never;
|
|
45
|
+
/** Refused by name: the widget is right here, and every GTK property is settable on it. */
|
|
46
|
+
setNativeProps(props: object): never;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The handle a plan asks for, or the widget itself.
|
|
50
|
+
*
|
|
51
|
+
* `null` for `kind` is the ordinary case and is not an omission: React Native gives
|
|
52
|
+
* an imperative handle only to the components that document one, and every other
|
|
53
|
+
* primitive here hands a `ref` the `Gtk.Widget` — which is what it did before this
|
|
54
|
+
* file existed and what a port that reaches for GTK API relies on.
|
|
55
|
+
*/
|
|
56
|
+
export declare function createHandle(kind: HandleKind | null, widget: unknown, tag: string): unknown;
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
export { answerFor, isAccepted, propNamesOf, unknownPrimitiveDetail, unknownPropDetail } from './answers.js';
|
|
2
|
+
export type { PropAnswer, PropStatus } from './answers.js';
|
|
1
3
|
export { splitVariants } from './classes.js';
|
|
4
|
+
export { createHandle } from './handles.js';
|
|
5
|
+
export type { TextInputHandle } from './handles.js';
|
|
6
|
+
export { DEFAULT_ROWS, NORMALISED_DEFAULTS, defaultRowFor } from './defaults.js';
|
|
7
|
+
export type { DefaultRow, DefaultVerdict } from './defaults.js';
|
|
2
8
|
export type { ClassGroups, ClassNameInput } from './classes.js';
|
|
3
9
|
export { PrimitiveError } from './errors.js';
|
|
4
10
|
export { resolveIntent } from './intents.js';
|
|
5
11
|
export type { ChildContext, ChildFacts, IntentInput, IntentResolution, Orientation, WidgetFacts } from './intents.js';
|
|
6
12
|
export { declaresAbsolute, resolvePrimitive } from './resolve.js';
|
|
7
|
-
export type { PrimitiveContext, PrimitivePlan, PrimitiveProps, ResolvedEvent, ResolvedFile, ResolvedGesture, WidgetNode, } from './resolve.js';
|
|
13
|
+
export type { PrimitiveContext, PrimitivePlan, PrimitiveProps, ResolvedAnnouncement, ResolvedEvent, ResolvedFile, ResolvedGesture, WidgetNode, } from './resolve.js';
|
|
8
14
|
export { flattenStyle, mintClass, normalise, variantDeclarations } from './style.js';
|
|
9
15
|
export type { ClassNameSink, StyleAuthored, StyleInput, StyleObject } from './style.js';
|
|
10
16
|
export { FRAMEWORK_PROPS, PRIMITIVE_NAMES, PRIMITIVES } from './table.js';
|
|
11
|
-
export type { Coercion, ContentSpec, EventRoute, FileRoute, GestureRoute, IgnoredRoute, NodeKind, PrimitiveSpec, PropRoute, PropertyRoute, RefusedRoute, StylePropertyRoute, } from './table.js';
|
|
17
|
+
export type { AnnounceRoute, Coercion, ContentSpec, EventRoute, FileRoute, GestureRoute, HandleKind, IgnoredRoute, NodeKind, PrimitiveSpec, PropRoute, PropertyRoute, RefusedRoute, StylePropertyRoute, } from './table.js';
|