ripple 0.2.115 → 0.2.116
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/package.json +1 -1
- package/src/compiler/phases/1-parse/index.js +79 -0
- package/src/compiler/phases/3-transform/client/index.js +54 -8
- package/src/compiler/phases/3-transform/segments.js +15 -10
- package/src/compiler/types/index.d.ts +16 -0
- package/src/runtime/index-client.js +18 -184
- package/src/runtime/internal/client/bindings.js +443 -0
- package/src/runtime/internal/client/index.js +4 -0
- package/src/runtime/map.js +11 -1
- package/src/runtime/set.js +11 -1
- package/tests/client/map.test.ripple +81 -0
- package/tests/client/set.test.ripple +81 -0
- package/types/index.d.ts +87 -45
package/types/index.d.ts
CHANGED
|
@@ -14,13 +14,13 @@ export declare function flushSync<T>(fn: () => T): T;
|
|
|
14
14
|
export declare function effect(fn: (() => void) | (() => () => void)): void;
|
|
15
15
|
|
|
16
16
|
export interface TrackedArrayConstructor {
|
|
17
|
-
new <T>(...elements: T[]): TrackedArray<T>;
|
|
17
|
+
new <T>(...elements: T[]): TrackedArray<T>; // must be used with `new`
|
|
18
18
|
from<T>(arrayLike: ArrayLike<T>): TrackedArray<T>;
|
|
19
19
|
of<T>(...items: T[]): TrackedArray<T>;
|
|
20
20
|
fromAsync<T>(iterable: AsyncIterable<T>): Promise<TrackedArray<T>>;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export interface TrackedArray<T> extends Array<T> {
|
|
23
|
+
export interface TrackedArray<T> extends Array<T> {}
|
|
24
24
|
|
|
25
25
|
export declare const TrackedArray: TrackedArrayConstructor;
|
|
26
26
|
|
|
@@ -74,7 +74,9 @@ declare global {
|
|
|
74
74
|
export declare function createRefKey(): symbol;
|
|
75
75
|
|
|
76
76
|
// Base Tracked interface - all tracked values have a '#v' property containing the actual value
|
|
77
|
-
export interface Tracked<V> {
|
|
77
|
+
export interface Tracked<V> {
|
|
78
|
+
'#v': V;
|
|
79
|
+
}
|
|
78
80
|
|
|
79
81
|
// Augment Tracked to be callable when V is a Component
|
|
80
82
|
// This allows <@Something /> to work in JSX when Something is Tracked<Component>
|
|
@@ -84,32 +86,37 @@ export interface Tracked<V> {
|
|
|
84
86
|
|
|
85
87
|
// Helper type to infer component type from a function that returns a component
|
|
86
88
|
// If T is a function returning a Component, extract the Component type itself, not the return type (void)
|
|
87
|
-
export type InferComponent<T> =
|
|
88
|
-
T extends () => infer R
|
|
89
|
-
? R extends Component<any>
|
|
90
|
-
? R
|
|
91
|
-
: T
|
|
92
|
-
: T;
|
|
89
|
+
export type InferComponent<T> = T extends () => infer R ? (R extends Component<any> ? R : T) : T;
|
|
93
90
|
|
|
94
91
|
export type Props<K extends PropertyKey = any, V = unknown> = Record<K, V>;
|
|
95
92
|
export type PropsWithExtras<T extends object> = Props & T & Record<string, unknown>;
|
|
96
|
-
export type PropsWithChildren<T extends object = {}> =
|
|
97
|
-
|
|
93
|
+
export type PropsWithChildren<T extends object = {}> = Expand<
|
|
94
|
+
Omit<Props, 'children'> & { children: Component } & T
|
|
95
|
+
>;
|
|
98
96
|
|
|
99
97
|
type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
|
|
100
98
|
|
|
101
|
-
type PickKeys<T, K extends readonly (keyof T)[]> =
|
|
102
|
-
{ [I in keyof K]: Tracked<T[K[I] & keyof T]> };
|
|
99
|
+
type PickKeys<T, K extends readonly (keyof T)[]> = { [I in keyof K]: Tracked<T[K[I] & keyof T]> };
|
|
103
100
|
|
|
104
101
|
type RestKeys<T, K extends readonly (keyof T)[]> = Expand<Omit<T, K[number]>>;
|
|
105
102
|
|
|
106
|
-
type SplitResult<T extends Props, K extends readonly (keyof T)[]> =
|
|
107
|
-
|
|
103
|
+
type SplitResult<T extends Props, K extends readonly (keyof T)[]> = [
|
|
104
|
+
...PickKeys<T, K>,
|
|
105
|
+
Tracked<RestKeys<T, K>>,
|
|
106
|
+
];
|
|
108
107
|
|
|
109
108
|
// Overload for function values - infers the return type of the function
|
|
110
|
-
export declare function track<V>(
|
|
109
|
+
export declare function track<V>(
|
|
110
|
+
value: () => V,
|
|
111
|
+
get?: (v: InferComponent<V>) => InferComponent<V>,
|
|
112
|
+
set?: (next: InferComponent<V>, prev: InferComponent<V>) => InferComponent<V>,
|
|
113
|
+
): Tracked<InferComponent<V>>;
|
|
111
114
|
// Overload for non-function values
|
|
112
|
-
export declare function track<V>(
|
|
115
|
+
export declare function track<V>(
|
|
116
|
+
value?: V,
|
|
117
|
+
get?: (v: V) => V,
|
|
118
|
+
set?: (next: V, prev: V) => V,
|
|
119
|
+
): Tracked<V>;
|
|
113
120
|
|
|
114
121
|
export declare function trackSplit<V extends Props, const K extends readonly (keyof V)[]>(
|
|
115
122
|
value: V,
|
|
@@ -120,60 +127,67 @@ export function on<Type extends keyof WindowEventMap>(
|
|
|
120
127
|
window: Window,
|
|
121
128
|
type: Type,
|
|
122
129
|
handler: (this: Window, event: WindowEventMap[Type]) => any,
|
|
123
|
-
options?: AddEventListenerOptions | undefined
|
|
130
|
+
options?: AddEventListenerOptions | undefined,
|
|
124
131
|
): () => void;
|
|
125
132
|
|
|
126
133
|
export function on<Type extends keyof DocumentEventMap>(
|
|
127
134
|
document: Document,
|
|
128
135
|
type: Type,
|
|
129
136
|
handler: (this: Document, event: DocumentEventMap[Type]) => any,
|
|
130
|
-
options?: AddEventListenerOptions | undefined
|
|
137
|
+
options?: AddEventListenerOptions | undefined,
|
|
131
138
|
): () => void;
|
|
132
139
|
|
|
133
140
|
export function on<Element extends HTMLElement, Type extends keyof HTMLElementEventMap>(
|
|
134
141
|
element: Element,
|
|
135
142
|
type: Type,
|
|
136
143
|
handler: (this: Element, event: HTMLElementEventMap[Type]) => any,
|
|
137
|
-
options?: AddEventListenerOptions | undefined
|
|
144
|
+
options?: AddEventListenerOptions | undefined,
|
|
138
145
|
): () => void;
|
|
139
146
|
|
|
140
147
|
export function on<Element extends MediaQueryList, Type extends keyof MediaQueryListEventMap>(
|
|
141
148
|
element: Element,
|
|
142
149
|
type: Type,
|
|
143
150
|
handler: (this: Element, event: MediaQueryListEventMap[Type]) => any,
|
|
144
|
-
options?: AddEventListenerOptions | undefined
|
|
151
|
+
options?: AddEventListenerOptions | undefined,
|
|
145
152
|
): () => void;
|
|
146
153
|
|
|
147
154
|
export function on(
|
|
148
155
|
element: EventTarget,
|
|
149
156
|
type: string,
|
|
150
157
|
handler: EventListener,
|
|
151
|
-
options?: AddEventListenerOptions | undefined
|
|
158
|
+
options?: AddEventListenerOptions | undefined,
|
|
152
159
|
): () => void;
|
|
153
160
|
|
|
154
161
|
export type TrackedObjectShallow<T> = {
|
|
155
162
|
[K in keyof T]: T[K] | Tracked<T[K]>;
|
|
156
163
|
};
|
|
157
164
|
|
|
158
|
-
export type TrackedObjectDeep<T> =
|
|
159
|
-
|
|
165
|
+
export type TrackedObjectDeep<T> = T extends
|
|
166
|
+
| string
|
|
167
|
+
| number
|
|
168
|
+
| boolean
|
|
169
|
+
| null
|
|
170
|
+
| undefined
|
|
171
|
+
| symbol
|
|
172
|
+
| bigint
|
|
160
173
|
? T | Tracked<T>
|
|
161
174
|
: T extends TrackedArray<infer U>
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
175
|
+
? TrackedArray<U> | Tracked<TrackedArray<U>>
|
|
176
|
+
: T extends TrackedSet<infer U>
|
|
177
|
+
? TrackedSet<U> | Tracked<TrackedSet<U>>
|
|
178
|
+
: T extends TrackedMap<infer K, infer V>
|
|
179
|
+
? TrackedMap<K, V> | Tracked<TrackedMap<K, V>>
|
|
180
|
+
: T extends Array<infer U>
|
|
181
|
+
? Array<TrackedObjectDeep<U>> | Tracked<Array<TrackedObjectDeep<U>>>
|
|
182
|
+
: T extends Set<infer U>
|
|
183
|
+
? Set<TrackedObjectDeep<U>> | Tracked<Set<TrackedObjectDeep<U>>>
|
|
184
|
+
: T extends Map<infer K, infer V>
|
|
185
|
+
?
|
|
186
|
+
| Map<TrackedObjectDeep<K>, TrackedObjectDeep<V>>
|
|
187
|
+
| Tracked<Map<TrackedObjectDeep<K>, TrackedObjectDeep<V>>>
|
|
188
|
+
: T extends object
|
|
189
|
+
? { [K in keyof T]: TrackedObjectDeep<T[K]> | Tracked<TrackedObjectDeep<T[K]>> }
|
|
190
|
+
: T | Tracked<T>;
|
|
177
191
|
|
|
178
192
|
export type TrackedObject<T extends object> = T & {};
|
|
179
193
|
|
|
@@ -203,31 +217,59 @@ export class TrackedURL extends URL {
|
|
|
203
217
|
export function createSubscriber(start: () => void | (() => void)): () => void;
|
|
204
218
|
|
|
205
219
|
interface ReactiveValue<V> extends Tracked<V> {
|
|
206
|
-
new(fn: () => Tracked<V>, start: () => void | (() => void)): Tracked<V>;
|
|
220
|
+
new (fn: () => Tracked<V>, start: () => void | (() => void)): Tracked<V>;
|
|
207
221
|
/** @private */
|
|
208
222
|
_brand: void;
|
|
209
223
|
}
|
|
210
224
|
|
|
211
225
|
export interface MediaQuery extends Tracked<boolean> {
|
|
212
|
-
new(query: string, fallback?: boolean | undefined): Tracked<boolean>;
|
|
226
|
+
new (query: string, fallback?: boolean | undefined): Tracked<boolean>;
|
|
213
227
|
/** @private */
|
|
214
228
|
_brand: void;
|
|
215
229
|
}
|
|
216
230
|
|
|
217
231
|
export declare const MediaQuery: {
|
|
218
|
-
new(query: string, fallback?: boolean | undefined): Tracked<boolean>;
|
|
232
|
+
new (query: string, fallback?: boolean | undefined): Tracked<boolean>;
|
|
219
233
|
};
|
|
220
234
|
|
|
221
|
-
export function Portal<V = HTMLElement>({
|
|
235
|
+
export function Portal<V = HTMLElement>({
|
|
236
|
+
target,
|
|
237
|
+
children: Component,
|
|
238
|
+
}: {
|
|
239
|
+
target: V;
|
|
240
|
+
children?: Component;
|
|
241
|
+
}): void;
|
|
222
242
|
|
|
223
243
|
/**
|
|
224
244
|
* @param {Tracked<V>} tracked
|
|
225
245
|
* @returns {(node: HTMLInputElement | HTMLSelectElement) => void}
|
|
226
246
|
*/
|
|
227
|
-
export declare function bindValue<V>(
|
|
247
|
+
export declare function bindValue<V>(
|
|
248
|
+
tracked: Tracked<V>,
|
|
249
|
+
): (node: HTMLInputElement | HTMLSelectElement) => void;
|
|
228
250
|
|
|
229
251
|
/**
|
|
230
252
|
* @param {Tracked<V>} tracked
|
|
231
253
|
* @returns {(node: HTMLInputElement) => void}
|
|
232
254
|
*/
|
|
233
|
-
export declare function bindChecked<V>(tracked: Tracked<V>): (node: HTMLInputElement) => void;
|
|
255
|
+
export declare function bindChecked<V>(tracked: Tracked<V>): (node: HTMLInputElement) => void;
|
|
256
|
+
|
|
257
|
+
export declare function bindClientWidth<V>(tracked: Tracked<V>): (node: HTMLElement) => void;
|
|
258
|
+
|
|
259
|
+
export declare function bindClientHeight<V>(tracked: Tracked<V>): (node: HTMLElement) => void;
|
|
260
|
+
|
|
261
|
+
export declare function bindContentRect<V>(tracked: Tracked<V>): (node: HTMLElement) => void;
|
|
262
|
+
|
|
263
|
+
export declare function bindContentBoxSize<V>(tracked: Tracked<V>): (node: HTMLElement) => void;
|
|
264
|
+
|
|
265
|
+
export declare function bindBorderBoxSize<V>(tracked: Tracked<V>): (node: HTMLElement) => void;
|
|
266
|
+
|
|
267
|
+
export declare function bindDevicePixelContentBoxSize<V>(
|
|
268
|
+
tracked: Tracked<V>,
|
|
269
|
+
): (node: HTMLElement) => void;
|
|
270
|
+
|
|
271
|
+
export declare function bindInnerHTML<V>(tracked: Tracked<V>): (node: HTMLElement) => void;
|
|
272
|
+
|
|
273
|
+
export declare function bindInnerText<V>(tracked: Tracked<V>): (node: HTMLElement) => void;
|
|
274
|
+
|
|
275
|
+
export declare function bindTextContent<V>(tracked: Tracked<V>): (node: HTMLElement) => void;
|