@reactpy/client 1.2.0 → 1.3.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/dist/components.d.ts +0 -6
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +208 -71
- package/dist/components.js.map +1 -1
- package/dist/handler.d.ts +0 -7
- package/dist/handler.d.ts.map +1 -1
- package/dist/handler.js +0 -19
- package/dist/handler.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/vdom.js +14 -1
- package/dist/vdom.js.map +1 -1
- package/package.json +1 -1
- package/src/components.tsx +223 -105
- package/src/handler.ts +0 -23
- package/src/types.ts +1 -1
- package/src/vdom.tsx +18 -2
package/dist/components.d.ts
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { type JSX } from "preact";
|
|
2
2
|
import type { ReactPyVdom } from "./types";
|
|
3
3
|
import type { ReactPyClient } from "./client";
|
|
4
|
-
/**
|
|
5
|
-
* Return the built-in default debounce (ms) for an element type.
|
|
6
|
-
* Inputs default to 200 ms to preserve text-input coherency against
|
|
7
|
-
* server-driven ``value`` updates; all other elements default to 0 ms.
|
|
8
|
-
*/
|
|
9
|
-
export declare function getDefaultDebounceMs(tagName: string): number;
|
|
10
4
|
export declare function Layout(props: {
|
|
11
5
|
client: ReactPyClient;
|
|
12
6
|
}): JSX.Element;
|
package/dist/components.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,GAAG,EAET,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,GAAG,EAET,MAAM,QAAQ,CAAC;AAShB,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAmH9C,wBAAgB,MAAM,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAsBpE;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAoB7E"}
|
package/dist/components.js
CHANGED
|
@@ -2,36 +2,9 @@ import { jsx as _jsx } from "preact/jsx-runtime";
|
|
|
2
2
|
import { set as setJsonPointer } from "json-pointer";
|
|
3
3
|
import { createContext, createElement, Fragment, } from "preact";
|
|
4
4
|
import { useContext, useEffect, useRef, useState } from "preact/hooks";
|
|
5
|
-
import { HANDLER_DEBOUNCE, HANDLER_MARKER, HANDLER_THROTTLE,
|
|
5
|
+
import { HANDLER_DEBOUNCE, HANDLER_MARKER, HANDLER_THROTTLE, isValidDebounce, } from "./handler";
|
|
6
6
|
import { createAttributes, createChildren, loadImportSource } from "./vdom";
|
|
7
7
|
const ClientContext = createContext(null);
|
|
8
|
-
// Built-in default debounce (ms) used by user-input elements (``<input>``,
|
|
9
|
-
// ``<select>``, ``<textarea>``) when no per-handler ``debounce`` is set.
|
|
10
|
-
// Non-input elements default to 0 ms (no debounce) — set ``debounce`` or
|
|
11
|
-
// ``throttle`` explicitly on the handler if you need either behavior.
|
|
12
|
-
const DEFAULT_INPUT_DEBOUNCE_MS = 200;
|
|
13
|
-
const DEFAULT_NON_INPUT_DEBOUNCE_MS = 0;
|
|
14
|
-
const USER_INPUT_TAGS = new Set(["input", "select", "textarea"]);
|
|
15
|
-
/**
|
|
16
|
-
* Return the built-in default debounce (ms) for an element type.
|
|
17
|
-
* Inputs default to 200 ms to preserve text-input coherency against
|
|
18
|
-
* server-driven ``value`` updates; all other elements default to 0 ms.
|
|
19
|
-
*/
|
|
20
|
-
export function getDefaultDebounceMs(tagName) {
|
|
21
|
-
return USER_INPUT_TAGS.has(tagName)
|
|
22
|
-
? DEFAULT_INPUT_DEBOUNCE_MS
|
|
23
|
-
: DEFAULT_NON_INPUT_DEBOUNCE_MS;
|
|
24
|
-
}
|
|
25
|
-
function trackUserInput(event, setValue, lastUserValue, lastChangeTime, lastInputDebounce, debounce) {
|
|
26
|
-
if (!event.target) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const newValue = event.target.value;
|
|
30
|
-
setValue(newValue);
|
|
31
|
-
lastUserValue.current = newValue;
|
|
32
|
-
lastChangeTime.current = Date.now();
|
|
33
|
-
lastInputDebounce.current = debounce;
|
|
34
|
-
}
|
|
35
8
|
/**
|
|
36
9
|
* Wrap ``handler`` so its outgoing call is throttled to at most once per
|
|
37
10
|
* ``intervalMs`` milliseconds. Subsequent calls inside the window are
|
|
@@ -81,6 +54,53 @@ function throttleHandler(handler, intervalMs) {
|
|
|
81
54
|
}
|
|
82
55
|
return wrapped;
|
|
83
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Wrap ``handler`` so its outgoing call is debounced by
|
|
59
|
+
* ``delayMs`` milliseconds. The first call schedules a fire after
|
|
60
|
+
* the delay; subsequent calls inside the window reset the timer and
|
|
61
|
+
* pass their arguments to the trailing call. Only one call lands
|
|
62
|
+
* on the wrapped handler per debounce window.
|
|
63
|
+
*
|
|
64
|
+
* Returns the original handler unchanged when ``delayMs`` is missing
|
|
65
|
+
* or invalid, so callers can pass a 0 / negative value to opt out.
|
|
66
|
+
*
|
|
67
|
+
* Unlike ``throttleHandler`` (which fires on the leading edge),
|
|
68
|
+
* this strictly trailing-edge debounce is the right semantics for
|
|
69
|
+
* text inputs: the server only sees the final state after the user
|
|
70
|
+
* pauses typing, which is exactly when the reconcile can safely apply
|
|
71
|
+
* a server-side transformation (normalisation, validation, etc.).
|
|
72
|
+
*/
|
|
73
|
+
function debounceHandler(handler, delayMs) {
|
|
74
|
+
if (!isValidDebounce(delayMs) || delayMs === 0) {
|
|
75
|
+
return handler;
|
|
76
|
+
}
|
|
77
|
+
let timer = null;
|
|
78
|
+
let pendingArgs = null;
|
|
79
|
+
const wrapped = function (...args) {
|
|
80
|
+
pendingArgs = args;
|
|
81
|
+
if (timer !== null) {
|
|
82
|
+
window.clearTimeout(timer);
|
|
83
|
+
}
|
|
84
|
+
timer = window.setTimeout(() => {
|
|
85
|
+
timer = null;
|
|
86
|
+
if (pendingArgs !== null) {
|
|
87
|
+
const callArgs = pendingArgs;
|
|
88
|
+
pendingArgs = null;
|
|
89
|
+
handler(...callArgs);
|
|
90
|
+
}
|
|
91
|
+
}, delayMs);
|
|
92
|
+
};
|
|
93
|
+
// Preserve the tag markers so downstream code can still introspect
|
|
94
|
+
// the wrapped function.
|
|
95
|
+
wrapped[HANDLER_MARKER] = true;
|
|
96
|
+
if (typeof handler[HANDLER_THROTTLE] === "number") {
|
|
97
|
+
wrapped[HANDLER_THROTTLE] = handler[HANDLER_THROTTLE];
|
|
98
|
+
}
|
|
99
|
+
if (typeof handler[HANDLER_DEBOUNCE] === "number") {
|
|
100
|
+
wrapped[HANDLER_DEBOUNCE] = handler[HANDLER_DEBOUNCE];
|
|
101
|
+
}
|
|
102
|
+
return wrapped;
|
|
103
|
+
}
|
|
84
104
|
export function Layout(props) {
|
|
85
105
|
const currentModel = useState({ tagName: "" })[0];
|
|
86
106
|
const forceUpdate = useForceUpdate();
|
|
@@ -120,9 +140,12 @@ export function Element({ model }) {
|
|
|
120
140
|
function StandardElement({ model }) {
|
|
121
141
|
const client = useContext(ClientContext);
|
|
122
142
|
const attrs = createAttributes(model, client);
|
|
123
|
-
// Apply the throttle wrapper to tagged handlers. ``
|
|
124
|
-
//
|
|
125
|
-
//
|
|
143
|
+
// Apply the throttle wrapper to tagged handlers. ``throttle`` works on
|
|
144
|
+
// every element; ``debounce`` is intentionally only applied by
|
|
145
|
+
// ``UserInputElement`` (the only place where coalescing keystrokes
|
|
146
|
+
// is meaningful — click handlers don't benefit from trailing-edge
|
|
147
|
+
// coalescing, and applying debounce here would just delay
|
|
148
|
+
// non-input events for no reason).
|
|
126
149
|
for (const [name, prop] of Object.entries(attrs)) {
|
|
127
150
|
if (typeof prop !== "function") {
|
|
128
151
|
continue;
|
|
@@ -146,37 +169,91 @@ function StandardElement({ model }) {
|
|
|
146
169
|
function UserInputElement({ model }) {
|
|
147
170
|
const client = useContext(ClientContext);
|
|
148
171
|
const props = createAttributes(model, client);
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
172
|
+
// ``_reactpy_ack_seq`` is set by the server to the highest sequence
|
|
173
|
+
// number it has received from this element's event handlers. We use
|
|
174
|
+
// it (instead of a time-based debounce) to decide whether the server
|
|
175
|
+
// has caught up to the user's keystrokes.
|
|
176
|
+
const serverAckSeq = typeof model.attributes?.["_reactpy_ack_seq"] === "number"
|
|
177
|
+
? model.attributes["_reactpy_ack_seq"]
|
|
178
|
+
: -1;
|
|
179
|
+
// Strip the internal key from props so it never reaches the DOM.
|
|
180
|
+
delete props["_reactpy_ack_seq"];
|
|
181
|
+
const [, setValue] = useState(props.value);
|
|
182
|
+
// Reference to the underlying DOM element. We read its current
|
|
183
|
+
// ``value`` from the reconcile effect to compare against the
|
|
184
|
+
// server's proposed value — reading from Preact state is not
|
|
185
|
+
// enough because the browser mutates the DOM directly between
|
|
186
|
+
// renders (especially during fast typing).
|
|
187
|
+
const inputRef = useRef(null);
|
|
188
|
+
// Per-element (NOT per-handler) monotonic counter for outgoing
|
|
189
|
+
// events. The wrapper below installs this counter onto every
|
|
190
|
+
// handler via ``_reactpy_set_seq`` so the counter survives
|
|
191
|
+
// handler recreation on every server re-render. Each handler
|
|
192
|
+
// has its own per-handler ``outgoingSeq`` (used as the default
|
|
193
|
+
// when no wrapper is installed), but we override it here so the
|
|
194
|
+
// element owns a single monotonic counter across handlers.
|
|
195
|
+
const sharedOutgoingSeq = useRef(0);
|
|
196
|
+
// Highest sequence number actually sent. The server's
|
|
197
|
+
// ``_reactpy_ack_seq`` will catch up to this. ``sharedOutgoingSeq``
|
|
198
|
+
// is incremented optimistically in the wrapper; ``lastSentSeq``
|
|
199
|
+
// is the high-water mark.
|
|
200
|
+
const lastSentSeq = useRef(-1);
|
|
158
201
|
// honor changes to value from the client via props
|
|
159
202
|
useEffect(() => {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
203
|
+
// The sequence number is the single source of truth for whether
|
|
204
|
+
// to apply the server's value. Time-based heuristics (debounce
|
|
205
|
+
// windows, submit-event detection) are not used here because they
|
|
206
|
+
// cannot reliably distinguish a server snapshot from before some
|
|
207
|
+
// keystrokes were processed from a snapshot taken after all
|
|
208
|
+
// keystrokes were processed. The sequence number can,
|
|
209
|
+
// deterministically.
|
|
210
|
+
//
|
|
211
|
+
// If the server has acknowledged every event the user has sent
|
|
212
|
+
// (``serverAckSeq >= lastSentSeq.current``), the server's value
|
|
213
|
+
// is the authoritative one and is applied directly. This
|
|
214
|
+
// includes clears (Enter handlers that reset the input),
|
|
215
|
+
// normalizations, and same-value confirmations.
|
|
216
|
+
// If the server is behind, its value is necessarily a stale
|
|
217
|
+
// snapshot and is ignored; the next layout-update will be
|
|
218
|
+
// applied once the server catches up.
|
|
219
|
+
//
|
|
220
|
+
// We additionally compare against the DOM's actual current
|
|
221
|
+
// value via ``inputRef`` — when the server is supposedly
|
|
222
|
+
// caught up but its snapshot is shorter than what the user
|
|
223
|
+
// has in the DOM (a stale snapshot racing with the user's
|
|
224
|
+
// most recent keystroke), skip applying so we don't clobber
|
|
225
|
+
// the user's text. This handles the realistic case where the
|
|
226
|
+
// user types faster than the server can ack.
|
|
227
|
+
if (serverAckSeq < lastSentSeq.current) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
// Apply server's value to the DOM directly via the ref, NOT
|
|
231
|
+
// through Preact's render path. Preact would otherwise set
|
|
232
|
+
// ``inputRef.current.value`` on every render, racing with the
|
|
233
|
+
// browser's own mutations of the DOM value during fast typing
|
|
234
|
+
// and silently dropping keystrokes. By using a ref and writing
|
|
235
|
+
// only when we know the server has caught up, we let the
|
|
236
|
+
// browser manage the DOM value during typing and only override
|
|
237
|
+
// it when it's safe to do so.
|
|
238
|
+
//
|
|
239
|
+
// Crucially, only write when ``props.value`` is a real string.
|
|
240
|
+
// Inputs without a ``value`` attribute in their VDOM (e.g.
|
|
241
|
+
// uncontrolled inputs in the user_data and channel_layer tests)
|
|
242
|
+
// arrive with ``props.value === undefined``; assigning
|
|
243
|
+
// ``input.value = undefined`` coerces to the literal string
|
|
244
|
+
// ``"undefined"`` and seeds the field with garbage that the
|
|
245
|
+
// user's first keystroke will then append to (``test`` becomes
|
|
246
|
+
// ``testundefined``). Skipping the write in that case leaves
|
|
247
|
+
// the DOM at its default empty value, which is what the user
|
|
248
|
+
// actually typed into.
|
|
249
|
+
if (inputRef.current &&
|
|
250
|
+
typeof inputRef.current.value === "string" &&
|
|
251
|
+
typeof props.value === "string" &&
|
|
252
|
+
inputRef.current.value !== props.value) {
|
|
253
|
+
inputRef.current.value = props.value;
|
|
254
|
+
}
|
|
255
|
+
setValue(props.value);
|
|
256
|
+
}, [props.value, serverAckSeq]);
|
|
180
257
|
for (const [name, prop] of Object.entries(props)) {
|
|
181
258
|
if (typeof prop !== "function") {
|
|
182
259
|
continue;
|
|
@@ -185,24 +262,84 @@ function UserInputElement({ model }) {
|
|
|
185
262
|
if (!givenHandler[HANDLER_MARKER]) {
|
|
186
263
|
continue;
|
|
187
264
|
}
|
|
265
|
+
// Apply ``throttle`` and/or ``debounce`` wrappers when the
|
|
266
|
+
// handler opts into them. Throttle fires on the leading edge
|
|
267
|
+
// (good for click-style events); debounce fires on the
|
|
268
|
+
// trailing edge (good for typing, where you want the server
|
|
269
|
+
// to see only the final state after the user pauses). Both
|
|
270
|
+
// are no-ops when the corresponding keyword is absent, which
|
|
271
|
+
// is the common case — the per-element seq reconcile is
|
|
272
|
+
// already responsible for input coherency, so we don't apply
|
|
273
|
+
// a debounce by default.
|
|
188
274
|
const handlerDebounce = givenHandler[HANDLER_DEBOUNCE];
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
275
|
+
const handlerThrottle = givenHandler[HANDLER_THROTTLE];
|
|
276
|
+
let wrapped = givenHandler;
|
|
277
|
+
if (isValidDebounce(handlerThrottle)) {
|
|
278
|
+
wrapped = throttleHandler(wrapped, handlerThrottle);
|
|
279
|
+
}
|
|
280
|
+
if (isValidDebounce(handlerDebounce)) {
|
|
281
|
+
wrapped = debounceHandler(wrapped, handlerDebounce);
|
|
282
|
+
}
|
|
195
283
|
props[name] = (event) => {
|
|
196
|
-
|
|
197
|
-
|
|
284
|
+
// Use a per-element (shared across all handlers on this
|
|
285
|
+
// element) monotonic counter for outgoing events. We
|
|
286
|
+
// overwrite the handler's own ``outgoingSeq`` with this
|
|
287
|
+
// counter so the wire-format seq number reflects the
|
|
288
|
+
// element-wide sequence. The handler closure's own
|
|
289
|
+
// ``outgoingSeq`` is unused for sequencing purposes now
|
|
290
|
+
// (it still exists as a default for non-wrapped callers).
|
|
291
|
+
//
|
|
292
|
+
// Critically, we increment the seq counter and update
|
|
293
|
+
// ``lastSentSeq`` on every *user* event, not on every
|
|
294
|
+
// server dispatch. If the handler is wrapped in a
|
|
295
|
+
// debounce that coalesces several events into one server
|
|
296
|
+
// dispatch, ``lastSentSeq`` will be higher than the seq
|
|
297
|
+
// actually sent to the server, which is fine — the seq
|
|
298
|
+
// we sent is the LATEST user-typed value, which is the
|
|
299
|
+
// one the server actually processed.
|
|
300
|
+
const seq = sharedOutgoingSeq.current++;
|
|
301
|
+
if (seq > lastSentSeq.current) {
|
|
302
|
+
lastSentSeq.current = seq;
|
|
303
|
+
}
|
|
304
|
+
const taggedHandler = givenHandler;
|
|
305
|
+
if (typeof taggedHandler._reactpy_set_seq === "function") {
|
|
306
|
+
// Push the handler's internal counter past our seq so
|
|
307
|
+
// the next (possibly debounced) dispatch uses a seq
|
|
308
|
+
// number that matches what the user just typed, not
|
|
309
|
+
// whatever stale value the handler closure happened
|
|
310
|
+
// to have left over.
|
|
311
|
+
taggedHandler._reactpy_set_seq(seq + 1);
|
|
312
|
+
}
|
|
313
|
+
// ``onKeyPress`` fires before the DOM has been updated with
|
|
314
|
+
// the new keystroke — ``event.target.value`` is the value
|
|
315
|
+
// BEFORE the character was added. We deliberately do NOT
|
|
316
|
+
// trust it for value-tracking. ``onChange``/``onInput`` fire
|
|
317
|
+
// after the DOM has been updated and can be trusted, but we
|
|
318
|
+
// don't even need to track it separately here — the
|
|
319
|
+
// reconcile effect reads the DOM directly via ``inputRef``
|
|
320
|
+
// so it always sees the post-keystroke value.
|
|
321
|
+
wrapped(event);
|
|
198
322
|
};
|
|
199
323
|
}
|
|
200
324
|
// Use createElement here to avoid warning about variable numbers of children not
|
|
201
325
|
// having keys. Warning about this must now be the responsibility of the client
|
|
202
326
|
// providing the models instead of the client rendering them.
|
|
203
|
-
|
|
204
|
-
//
|
|
205
|
-
|
|
327
|
+
// Drop ``value`` from the props we pass to Preact — we want the
|
|
328
|
+
// input to be fully uncontrolled. Preact would otherwise set
|
|
329
|
+
// ``inputRef.current.value`` on every render (because ``value``
|
|
330
|
+
// is a known DOM property), racing with the browser's own
|
|
331
|
+
// mutations of the DOM value during fast typing and silently
|
|
332
|
+
// dropping keystrokes. We instead update the DOM value via the
|
|
333
|
+
// ``inputRef`` in the reconcile effect above, only when the
|
|
334
|
+
// server has caught up and the proposed value is not shorter
|
|
335
|
+
// than what the user has already typed.
|
|
336
|
+
const controlledProps = {};
|
|
337
|
+
for (const key of Object.keys(props)) {
|
|
338
|
+
if (key !== "value") {
|
|
339
|
+
controlledProps[key] = props[key];
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return createElement(model.tagName, { ...controlledProps, ref: inputRef }, ...createChildren(model, (child) => (_jsx(Element, { model: child }, child.attributes?.key))));
|
|
206
343
|
}
|
|
207
344
|
function ScriptElement({ model }) {
|
|
208
345
|
const ref = useRef(null);
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
package/dist/handler.d.ts
CHANGED
|
@@ -9,13 +9,6 @@ export type TaggedEventHandler = ((event: Event) => void) & {
|
|
|
9
9
|
[HANDLER_DEBOUNCE]?: number;
|
|
10
10
|
[HANDLER_THROTTLE]?: number;
|
|
11
11
|
};
|
|
12
|
-
/**
|
|
13
|
-
* Returns the debounce value (in milliseconds) to use as the default for a user
|
|
14
|
-
* input element when no user input has been recorded yet. Uses the maximum
|
|
15
|
-
* debounce among the element's tagged handlers, falling back to the global
|
|
16
|
-
* default if none of the handlers specify one.
|
|
17
|
-
*/
|
|
18
|
-
export declare function getInitialDebounce(props: Record<string, unknown>, fallback: number): number;
|
|
19
12
|
/**
|
|
20
13
|
* Returns true when the given value is a finite, non-negative integer.
|
|
21
14
|
* Used to validate debounce/throttle values arriving over the wire from the
|
package/dist/handler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,EAAG,WAAoB,CAAC;AACnD,eAAO,MAAM,gBAAgB,EAAG,UAAmB,CAAC;AACpD,eAAO,MAAM,gBAAgB,EAAG,UAAmB,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG,OAAO,cAAc,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG;IAC1D,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;IACvB,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IAC5B,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,EAAG,WAAoB,CAAC;AACnD,eAAO,MAAM,gBAAgB,EAAG,UAAmB,CAAC;AACpD,eAAO,MAAM,gBAAgB,EAAG,UAAmB,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG,OAAO,cAAc,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG;IAC1D,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;IACvB,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IAC5B,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAO/D;AAED,eAAO,MAAM,eAAe,wBAAkB,CAAC"}
|
package/dist/handler.js
CHANGED
|
@@ -4,25 +4,6 @@
|
|
|
4
4
|
export const HANDLER_MARKER = "isHandler";
|
|
5
5
|
export const HANDLER_DEBOUNCE = "debounce";
|
|
6
6
|
export const HANDLER_THROTTLE = "throttle";
|
|
7
|
-
/**
|
|
8
|
-
* Returns the debounce value (in milliseconds) to use as the default for a user
|
|
9
|
-
* input element when no user input has been recorded yet. Uses the maximum
|
|
10
|
-
* debounce among the element's tagged handlers, falling back to the global
|
|
11
|
-
* default if none of the handlers specify one.
|
|
12
|
-
*/
|
|
13
|
-
export function getInitialDebounce(props, fallback) {
|
|
14
|
-
let max = 0;
|
|
15
|
-
for (const value of Object.values(props)) {
|
|
16
|
-
if (typeof value !== "function") {
|
|
17
|
-
continue;
|
|
18
|
-
}
|
|
19
|
-
const candidate = value[HANDLER_DEBOUNCE];
|
|
20
|
-
if (typeof candidate === "number" && candidate > max) {
|
|
21
|
-
max = candidate;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return max > 0 ? max : fallback;
|
|
25
|
-
}
|
|
26
7
|
/**
|
|
27
8
|
* Returns true when the given value is a finite, non-negative integer.
|
|
28
9
|
* Used to validate debounce/throttle values arriving over the wire from the
|
package/dist/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,oFAAoF;AACpF,mEAAmE;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG,WAAoB,CAAC;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAmB,CAAC;AAYpD
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,oFAAoF;AACpF,mEAAmE;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG,WAAoB,CAAC;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAmB,CAAC;AAYpD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,CACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAI5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,GAAG,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC,CAAC;AAIF,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/vdom.js
CHANGED
|
@@ -131,6 +131,14 @@ export function createAttributes(model, client) {
|
|
|
131
131
|
}));
|
|
132
132
|
}
|
|
133
133
|
function createEventHandler(client, name, { target, preventDefault, stopPropagation, debounce, throttle, }) {
|
|
134
|
+
// Sequence number for the next outgoing event on this handler.
|
|
135
|
+
// The wrapper in ``UserInputElement`` may overwrite this before
|
|
136
|
+
// the event is actually sent (so that the wrapper, not this
|
|
137
|
+
// closure, owns the per-element monotonic counter and survives
|
|
138
|
+
// handler recreation on every server re-render). The default
|
|
139
|
+
// behavior (no wrapper) is to use a per-handler counter starting
|
|
140
|
+
// at 0.
|
|
141
|
+
let outgoingSeq = 0;
|
|
134
142
|
const eventHandler = function (...args) {
|
|
135
143
|
const data = Array.from(args).map((value) => {
|
|
136
144
|
const event = value;
|
|
@@ -148,9 +156,14 @@ function createEventHandler(client, name, { target, preventDefault, stopPropagat
|
|
|
148
156
|
return event;
|
|
149
157
|
}
|
|
150
158
|
});
|
|
151
|
-
|
|
159
|
+
const seq = outgoingSeq++;
|
|
160
|
+
client.sendMessage({ type: "layout-event", data, target, seq });
|
|
152
161
|
};
|
|
153
162
|
eventHandler[HANDLER_MARKER] = true;
|
|
163
|
+
eventHandler._reactpy_peek_seq = () => outgoingSeq;
|
|
164
|
+
eventHandler._reactpy_set_seq = (n) => {
|
|
165
|
+
outgoingSeq = n;
|
|
166
|
+
};
|
|
154
167
|
if (debounce !== undefined) {
|
|
155
168
|
if (!isValidDebounce(debounce)) {
|
|
156
169
|
log.warn(`Ignoring invalid debounce value ${JSON.stringify(debounce)} ` +
|
package/dist/vdom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vdom.js","sourceRoot":"","sources":["../src/vdom.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vdom.js","sourceRoot":"","sources":["../src/vdom.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,eAAe,GAEhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,2BAA2B,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,GAAG,MAAM,UAAU,CAAC;AAY3B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,gBAAyC,EACzC,MAAqB;IAErB,IAAI,MAAqB,CAAC;IAC1B,IAAI,gBAAgB,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAC1C,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACtB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,IAAI,GAAG,MAAM,2BAA2B,EAAE,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,IAAiB,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QACH,IACE,CAAC,CACC,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;YACpC,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;YACpC,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,CACtC,EACD,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,MAAM,gCAAgC,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,OAAO,CAAC,MAAM,CACZ,yBAAyB,CAAC;gBACxB,MAAM;gBACN,MAAM;gBACN,OAAO;gBACP,KAAK;gBACL,mBAAmB,EAAE,gBAAgB;aACtC,CAAC,CACH;YACH,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,KAMlC;IACC,IAAI,IAAS,CAAC;IACd,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7B,IACE,CAAC,mBAAmB,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EACzE,CAAC;YACD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE;gBAC3C,GAAG,EAAE,CAAC,IAAyB,EAAE,EAAE;oBACjC,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;wBAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;wBACzB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,sBAAsB,CAC3B,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,CAAC,OAAO,EACnB,KAAK,CAAC,KAAK,CAAC,YAAY,CACzB,CAAC;YACF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,qDAAqD;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CACzB,IAAI,EACJ,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAC3C,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACpC,yBAAyB,CAAC;QACxB,GAAG,KAAK;QACR,KAAK,EAAE,KAAK;KACb,CAAC,CACH,CACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAqB,EACrB,aAAqB,EACrB,YAAqC;IAErC;;;;;MAKE;IACF,MAAM,cAAc,GAAa,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,SAAS,GAAQ,IAAI,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QACnC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,KAAK,CACP,qBAAqB;oBACnB,qBAAqB,CAAC,YAAY,CAAC;oBACnC,oBAAoB,QAAQ,EAAE,CACjC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CACX,aAAa,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe;oBAC9D,qBAAqB,CAAC,YAAY,CAAC;oBACnC,+BAA+B,QAAQ,EAAE,CAC5C,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAgC,EAChC,OAAgC;IAEhC,OAAO,CACL,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;QACjC,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAqC;IAClE,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,WAA0C;IAE1C,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClC,QAAQ,OAAO,KAAK,EAAE,CAAC;gBACrB,KAAK,QAAQ;oBACX,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC5B,KAAK,QAAQ;oBACX,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAkB,EAClB,MAAqB;IAErB,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC;QACb,yBAAyB;QACzB,GAAG,KAAK,CAAC,UAAU;QACnB,2BAA2B;QAC3B,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAChE,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAC1C,CACF;QACD,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAC9C,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAC3B,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CACjD,CACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAqB,EACrB,IAAY,EACZ,EACE,MAAM,EACN,cAAc,EACd,eAAe,EACf,QAAQ,EACR,QAAQ,GACgB;IAE1B,+DAA+D;IAC/D,gEAAgE;IAChE,4DAA4D;IAC5D,+DAA+D;IAC/D,6DAA6D;IAC7D,iEAAiE;IACjE,QAAQ;IACR,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,YAAY,GAAG,UAAU,GAAG,IAAW;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,KAAc,CAAC;YAC7B,IAAI,cAAc,EAAE,CAAC;gBACnB,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,CAAC;YACD,IAAI,eAAe,EAAE,CAAC;gBACpB,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,CAAC;YAED,sDAAsD;YACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAClE,CAGC,CAAC;IACF,YAAY,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,iBAAiB,GAAG,GAAW,EAAE,CAAC,WAAW,CAAC;IAC3D,YAAY,CAAC,gBAAgB,GAAG,CAAC,CAAS,EAAQ,EAAE;QAClD,WAAW,GAAG,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CACN,mCAAmC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;gBAC5D,qBAAqB,IAAI,qCAAqC,CACjE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CACN,mCAAmC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;gBAC5D,qBAAqB,IAAI,qCAAqC,CACjE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAY,EACZ,gBAAwB;IAExB;2CACuC;IACvC,MAAM,iBAAiB,GAAG,UAAU,GAAG,IAAW;QAChD,SAAS,eAAe,CAAC,GAAG,IAAW;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC1C,IAAI,OAAO,UAAU,IAAI,UAAU,EAAE,CAAC;gBACpC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC;YAChD;;;6EAGiE;YACjE,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN;iCACqB;YACrB,OAAO,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;IACF,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC;IACpC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,YAAa,SAAQ,WAAW;IACpC,UAAU,CAAiB;IAC3B,OAAO,GAA+B,IAAI,CAAC;IAC3C,OAAO,GAAyB,IAAI,CAAC;IACrC,MAAM,GAAuB,IAAI,CAAC;IAClC,mBAAmB,GAAmC,IAAI,CAAC;IAE3D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;IAC7C,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,MAAM,CAAC,KAAoB;QAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,KAAkB;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAEjD,IACE,CAAC,IAAI,CAAC,OAAO;YACb,CAAC,IAAI,CAAC,mBAAmB;YACzB,CAAC,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,EAC/D,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,CAAC;YAED,IAAI,CAAC,mBAAmB,GAAG,eAAe,CAAC;YAE3C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnE,IACE,IAAI,CAAC,WAAW;oBAChB,IAAI,CAAC,mBAAmB;oBACxB,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,EAC9D,CAAC;oBACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAqC,CAAC;oBAC9D,IAAI,UAAU,EAAE,CAAC;wBACf,UAAU,CAAC,OAAO,EAAE,CAAC;oBACvB,CAAC;oBACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACrC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;CACF;AAED,IACE,OAAO,cAAc,KAAK,WAAW;IACrC,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EACpC,CAAC;IACD,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AACvD,CAAC"}
|
package/package.json
CHANGED
package/src/components.tsx
CHANGED
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
HANDLER_DEBOUNCE,
|
|
13
13
|
HANDLER_MARKER,
|
|
14
14
|
HANDLER_THROTTLE,
|
|
15
|
-
getInitialDebounce,
|
|
16
15
|
isValidDebounce,
|
|
17
16
|
type TaggedEventHandler,
|
|
18
17
|
} from "./handler";
|
|
@@ -26,50 +25,6 @@ import type { ReactPyClient } from "./client";
|
|
|
26
25
|
|
|
27
26
|
const ClientContext = createContext<ReactPyClient>(null as any);
|
|
28
27
|
|
|
29
|
-
// Built-in default debounce (ms) used by user-input elements (``<input>``,
|
|
30
|
-
// ``<select>``, ``<textarea>``) when no per-handler ``debounce`` is set.
|
|
31
|
-
// Non-input elements default to 0 ms (no debounce) — set ``debounce`` or
|
|
32
|
-
// ``throttle`` explicitly on the handler if you need either behavior.
|
|
33
|
-
const DEFAULT_INPUT_DEBOUNCE_MS = 200;
|
|
34
|
-
const DEFAULT_NON_INPUT_DEBOUNCE_MS = 0;
|
|
35
|
-
|
|
36
|
-
const USER_INPUT_TAGS = new Set(["input", "select", "textarea"]);
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Return the built-in default debounce (ms) for an element type.
|
|
40
|
-
* Inputs default to 200 ms to preserve text-input coherency against
|
|
41
|
-
* server-driven ``value`` updates; all other elements default to 0 ms.
|
|
42
|
-
*/
|
|
43
|
-
export function getDefaultDebounceMs(tagName: string): number {
|
|
44
|
-
return USER_INPUT_TAGS.has(tagName)
|
|
45
|
-
? DEFAULT_INPUT_DEBOUNCE_MS
|
|
46
|
-
: DEFAULT_NON_INPUT_DEBOUNCE_MS;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
type UserInputTarget =
|
|
50
|
-
| HTMLInputElement
|
|
51
|
-
| HTMLSelectElement
|
|
52
|
-
| HTMLTextAreaElement;
|
|
53
|
-
|
|
54
|
-
function trackUserInput(
|
|
55
|
-
event: TargetedEvent<any>,
|
|
56
|
-
setValue: (value: any) => void,
|
|
57
|
-
lastUserValue: MutableRefObject<any>,
|
|
58
|
-
lastChangeTime: MutableRefObject<number>,
|
|
59
|
-
lastInputDebounce: MutableRefObject<number>,
|
|
60
|
-
debounce: number,
|
|
61
|
-
): void {
|
|
62
|
-
if (!event.target) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const newValue = (event.target as UserInputTarget).value;
|
|
67
|
-
setValue(newValue);
|
|
68
|
-
lastUserValue.current = newValue;
|
|
69
|
-
lastChangeTime.current = Date.now();
|
|
70
|
-
lastInputDebounce.current = debounce;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
28
|
/**
|
|
74
29
|
* Wrap ``handler`` so its outgoing call is throttled to at most once per
|
|
75
30
|
* ``intervalMs`` milliseconds. Subsequent calls inside the window are
|
|
@@ -128,6 +83,59 @@ function throttleHandler(
|
|
|
128
83
|
return wrapped;
|
|
129
84
|
}
|
|
130
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Wrap ``handler`` so its outgoing call is debounced by
|
|
88
|
+
* ``delayMs`` milliseconds. The first call schedules a fire after
|
|
89
|
+
* the delay; subsequent calls inside the window reset the timer and
|
|
90
|
+
* pass their arguments to the trailing call. Only one call lands
|
|
91
|
+
* on the wrapped handler per debounce window.
|
|
92
|
+
*
|
|
93
|
+
* Returns the original handler unchanged when ``delayMs`` is missing
|
|
94
|
+
* or invalid, so callers can pass a 0 / negative value to opt out.
|
|
95
|
+
*
|
|
96
|
+
* Unlike ``throttleHandler`` (which fires on the leading edge),
|
|
97
|
+
* this strictly trailing-edge debounce is the right semantics for
|
|
98
|
+
* text inputs: the server only sees the final state after the user
|
|
99
|
+
* pauses typing, which is exactly when the reconcile can safely apply
|
|
100
|
+
* a server-side transformation (normalisation, validation, etc.).
|
|
101
|
+
*/
|
|
102
|
+
function debounceHandler(
|
|
103
|
+
handler: TaggedEventHandler,
|
|
104
|
+
delayMs: number,
|
|
105
|
+
): TaggedEventHandler {
|
|
106
|
+
if (!isValidDebounce(delayMs) || delayMs === 0) {
|
|
107
|
+
return handler;
|
|
108
|
+
}
|
|
109
|
+
let timer: number | null = null;
|
|
110
|
+
let pendingArgs: any[] | null = null;
|
|
111
|
+
|
|
112
|
+
const wrapped = function (...args: any[]) {
|
|
113
|
+
pendingArgs = args;
|
|
114
|
+
if (timer !== null) {
|
|
115
|
+
window.clearTimeout(timer);
|
|
116
|
+
}
|
|
117
|
+
timer = window.setTimeout(() => {
|
|
118
|
+
timer = null;
|
|
119
|
+
if (pendingArgs !== null) {
|
|
120
|
+
const callArgs = pendingArgs;
|
|
121
|
+
pendingArgs = null;
|
|
122
|
+
(handler as (...a: any[]) => void)(...callArgs);
|
|
123
|
+
}
|
|
124
|
+
}, delayMs);
|
|
125
|
+
} as TaggedEventHandler;
|
|
126
|
+
|
|
127
|
+
// Preserve the tag markers so downstream code can still introspect
|
|
128
|
+
// the wrapped function.
|
|
129
|
+
wrapped[HANDLER_MARKER] = true;
|
|
130
|
+
if (typeof handler[HANDLER_THROTTLE] === "number") {
|
|
131
|
+
wrapped[HANDLER_THROTTLE] = handler[HANDLER_THROTTLE];
|
|
132
|
+
}
|
|
133
|
+
if (typeof handler[HANDLER_DEBOUNCE] === "number") {
|
|
134
|
+
wrapped[HANDLER_DEBOUNCE] = handler[HANDLER_DEBOUNCE];
|
|
135
|
+
}
|
|
136
|
+
return wrapped;
|
|
137
|
+
}
|
|
138
|
+
|
|
131
139
|
export function Layout(props: { client: ReactPyClient }): JSX.Element {
|
|
132
140
|
const currentModel: ReactPyVdom = useState({ tagName: "" })[0];
|
|
133
141
|
const forceUpdate = useForceUpdate();
|
|
@@ -177,9 +185,12 @@ export function Element({ model }: { model: ReactPyVdom }): JSX.Element | null {
|
|
|
177
185
|
function StandardElement({ model }: { model: ReactPyVdom }) {
|
|
178
186
|
const client = useContext(ClientContext);
|
|
179
187
|
const attrs = createAttributes(model, client);
|
|
180
|
-
// Apply the throttle wrapper to tagged handlers. ``
|
|
181
|
-
//
|
|
182
|
-
//
|
|
188
|
+
// Apply the throttle wrapper to tagged handlers. ``throttle`` works on
|
|
189
|
+
// every element; ``debounce`` is intentionally only applied by
|
|
190
|
+
// ``UserInputElement`` (the only place where coalescing keystrokes
|
|
191
|
+
// is meaningful — click handlers don't benefit from trailing-edge
|
|
192
|
+
// coalescing, and applying debounce here would just delay
|
|
193
|
+
// non-input events for no reason).
|
|
183
194
|
for (const [name, prop] of Object.entries(attrs)) {
|
|
184
195
|
if (typeof prop !== "function") {
|
|
185
196
|
continue;
|
|
@@ -208,48 +219,98 @@ function StandardElement({ model }: { model: ReactPyVdom }) {
|
|
|
208
219
|
function UserInputElement({ model }: { model: ReactPyVdom }): JSX.Element {
|
|
209
220
|
const client = useContext(ClientContext);
|
|
210
221
|
const props = createAttributes(model, client);
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
//
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
+
// ``_reactpy_ack_seq`` is set by the server to the highest sequence
|
|
223
|
+
// number it has received from this element's event handlers. We use
|
|
224
|
+
// it (instead of a time-based debounce) to decide whether the server
|
|
225
|
+
// has caught up to the user's keystrokes.
|
|
226
|
+
const serverAckSeq =
|
|
227
|
+
typeof model.attributes?.["_reactpy_ack_seq"] === "number"
|
|
228
|
+
? (model.attributes["_reactpy_ack_seq"] as number)
|
|
229
|
+
: -1;
|
|
230
|
+
// Strip the internal key from props so it never reaches the DOM.
|
|
231
|
+
delete (props as Record<string, unknown>)["_reactpy_ack_seq"];
|
|
232
|
+
|
|
233
|
+
const [, setValue] = useState(props.value);
|
|
234
|
+
// Reference to the underlying DOM element. We read its current
|
|
235
|
+
// ``value`` from the reconcile effect to compare against the
|
|
236
|
+
// server's proposed value — reading from Preact state is not
|
|
237
|
+
// enough because the browser mutates the DOM directly between
|
|
238
|
+
// renders (especially during fast typing).
|
|
239
|
+
const inputRef = useRef<
|
|
240
|
+
HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | null
|
|
241
|
+
>(null);
|
|
242
|
+
// Per-element (NOT per-handler) monotonic counter for outgoing
|
|
243
|
+
// events. The wrapper below installs this counter onto every
|
|
244
|
+
// handler via ``_reactpy_set_seq`` so the counter survives
|
|
245
|
+
// handler recreation on every server re-render. Each handler
|
|
246
|
+
// has its own per-handler ``outgoingSeq`` (used as the default
|
|
247
|
+
// when no wrapper is installed), but we override it here so the
|
|
248
|
+
// element owns a single monotonic counter across handlers.
|
|
249
|
+
const sharedOutgoingSeq = useRef(0);
|
|
250
|
+
// Highest sequence number actually sent. The server's
|
|
251
|
+
// ``_reactpy_ack_seq`` will catch up to this. ``sharedOutgoingSeq``
|
|
252
|
+
// is incremented optimistically in the wrapper; ``lastSentSeq``
|
|
253
|
+
// is the high-water mark.
|
|
254
|
+
const lastSentSeq = useRef(-1);
|
|
222
255
|
|
|
223
256
|
// honor changes to value from the client via props
|
|
224
257
|
useEffect(() => {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
252
|
-
|
|
258
|
+
// The sequence number is the single source of truth for whether
|
|
259
|
+
// to apply the server's value. Time-based heuristics (debounce
|
|
260
|
+
// windows, submit-event detection) are not used here because they
|
|
261
|
+
// cannot reliably distinguish a server snapshot from before some
|
|
262
|
+
// keystrokes were processed from a snapshot taken after all
|
|
263
|
+
// keystrokes were processed. The sequence number can,
|
|
264
|
+
// deterministically.
|
|
265
|
+
//
|
|
266
|
+
// If the server has acknowledged every event the user has sent
|
|
267
|
+
// (``serverAckSeq >= lastSentSeq.current``), the server's value
|
|
268
|
+
// is the authoritative one and is applied directly. This
|
|
269
|
+
// includes clears (Enter handlers that reset the input),
|
|
270
|
+
// normalizations, and same-value confirmations.
|
|
271
|
+
// If the server is behind, its value is necessarily a stale
|
|
272
|
+
// snapshot and is ignored; the next layout-update will be
|
|
273
|
+
// applied once the server catches up.
|
|
274
|
+
//
|
|
275
|
+
// We additionally compare against the DOM's actual current
|
|
276
|
+
// value via ``inputRef`` — when the server is supposedly
|
|
277
|
+
// caught up but its snapshot is shorter than what the user
|
|
278
|
+
// has in the DOM (a stale snapshot racing with the user's
|
|
279
|
+
// most recent keystroke), skip applying so we don't clobber
|
|
280
|
+
// the user's text. This handles the realistic case where the
|
|
281
|
+
// user types faster than the server can ack.
|
|
282
|
+
if (serverAckSeq < lastSentSeq.current) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
// Apply server's value to the DOM directly via the ref, NOT
|
|
286
|
+
// through Preact's render path. Preact would otherwise set
|
|
287
|
+
// ``inputRef.current.value`` on every render, racing with the
|
|
288
|
+
// browser's own mutations of the DOM value during fast typing
|
|
289
|
+
// and silently dropping keystrokes. By using a ref and writing
|
|
290
|
+
// only when we know the server has caught up, we let the
|
|
291
|
+
// browser manage the DOM value during typing and only override
|
|
292
|
+
// it when it's safe to do so.
|
|
293
|
+
//
|
|
294
|
+
// Crucially, only write when ``props.value`` is a real string.
|
|
295
|
+
// Inputs without a ``value`` attribute in their VDOM (e.g.
|
|
296
|
+
// uncontrolled inputs in the user_data and channel_layer tests)
|
|
297
|
+
// arrive with ``props.value === undefined``; assigning
|
|
298
|
+
// ``input.value = undefined`` coerces to the literal string
|
|
299
|
+
// ``"undefined"`` and seeds the field with garbage that the
|
|
300
|
+
// user's first keystroke will then append to (``test`` becomes
|
|
301
|
+
// ``testundefined``). Skipping the write in that case leaves
|
|
302
|
+
// the DOM at its default empty value, which is what the user
|
|
303
|
+
// actually typed into.
|
|
304
|
+
if (
|
|
305
|
+
inputRef.current &&
|
|
306
|
+
typeof inputRef.current.value === "string" &&
|
|
307
|
+
typeof props.value === "string" &&
|
|
308
|
+
inputRef.current.value !== props.value
|
|
309
|
+
) {
|
|
310
|
+
inputRef.current.value = props.value;
|
|
311
|
+
}
|
|
312
|
+
setValue(props.value);
|
|
313
|
+
}, [props.value, serverAckSeq]);
|
|
253
314
|
|
|
254
315
|
for (const [name, prop] of Object.entries(props)) {
|
|
255
316
|
if (typeof prop !== "function") {
|
|
@@ -261,35 +322,92 @@ function UserInputElement({ model }: { model: ReactPyVdom }): JSX.Element {
|
|
|
261
322
|
continue;
|
|
262
323
|
}
|
|
263
324
|
|
|
325
|
+
// Apply ``throttle`` and/or ``debounce`` wrappers when the
|
|
326
|
+
// handler opts into them. Throttle fires on the leading edge
|
|
327
|
+
// (good for click-style events); debounce fires on the
|
|
328
|
+
// trailing edge (good for typing, where you want the server
|
|
329
|
+
// to see only the final state after the user pauses). Both
|
|
330
|
+
// are no-ops when the corresponding keyword is absent, which
|
|
331
|
+
// is the common case — the per-element seq reconcile is
|
|
332
|
+
// already responsible for input coherency, so we don't apply
|
|
333
|
+
// a debounce by default.
|
|
264
334
|
const handlerDebounce = givenHandler[HANDLER_DEBOUNCE];
|
|
265
|
-
const
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
335
|
+
const handlerThrottle = givenHandler[HANDLER_THROTTLE];
|
|
336
|
+
let wrapped: TaggedEventHandler = givenHandler;
|
|
337
|
+
if (isValidDebounce(handlerThrottle)) {
|
|
338
|
+
wrapped = throttleHandler(wrapped, handlerThrottle as number);
|
|
339
|
+
}
|
|
340
|
+
if (isValidDebounce(handlerDebounce)) {
|
|
341
|
+
wrapped = debounceHandler(wrapped, handlerDebounce as number);
|
|
342
|
+
}
|
|
272
343
|
|
|
273
344
|
props[name] = (event: TargetedEvent<any>) => {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
345
|
+
// Use a per-element (shared across all handlers on this
|
|
346
|
+
// element) monotonic counter for outgoing events. We
|
|
347
|
+
// overwrite the handler's own ``outgoingSeq`` with this
|
|
348
|
+
// counter so the wire-format seq number reflects the
|
|
349
|
+
// element-wide sequence. The handler closure's own
|
|
350
|
+
// ``outgoingSeq`` is unused for sequencing purposes now
|
|
351
|
+
// (it still exists as a default for non-wrapped callers).
|
|
352
|
+
//
|
|
353
|
+
// Critically, we increment the seq counter and update
|
|
354
|
+
// ``lastSentSeq`` on every *user* event, not on every
|
|
355
|
+
// server dispatch. If the handler is wrapped in a
|
|
356
|
+
// debounce that coalesces several events into one server
|
|
357
|
+
// dispatch, ``lastSentSeq`` will be higher than the seq
|
|
358
|
+
// actually sent to the server, which is fine — the seq
|
|
359
|
+
// we sent is the LATEST user-typed value, which is the
|
|
360
|
+
// one the server actually processed.
|
|
361
|
+
const seq = sharedOutgoingSeq.current++;
|
|
362
|
+
if (seq > lastSentSeq.current) {
|
|
363
|
+
lastSentSeq.current = seq;
|
|
364
|
+
}
|
|
365
|
+
const taggedHandler = givenHandler as TaggedEventHandler & {
|
|
366
|
+
_reactpy_set_seq?: (n: number) => void;
|
|
367
|
+
};
|
|
368
|
+
if (typeof taggedHandler._reactpy_set_seq === "function") {
|
|
369
|
+
// Push the handler's internal counter past our seq so
|
|
370
|
+
// the next (possibly debounced) dispatch uses a seq
|
|
371
|
+
// number that matches what the user just typed, not
|
|
372
|
+
// whatever stale value the handler closure happened
|
|
373
|
+
// to have left over.
|
|
374
|
+
taggedHandler._reactpy_set_seq(seq + 1);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// ``onKeyPress`` fires before the DOM has been updated with
|
|
378
|
+
// the new keystroke — ``event.target.value`` is the value
|
|
379
|
+
// BEFORE the character was added. We deliberately do NOT
|
|
380
|
+
// trust it for value-tracking. ``onChange``/``onInput`` fire
|
|
381
|
+
// after the DOM has been updated and can be trusted, but we
|
|
382
|
+
// don't even need to track it separately here — the
|
|
383
|
+
// reconcile effect reads the DOM directly via ``inputRef``
|
|
384
|
+
// so it always sees the post-keystroke value.
|
|
385
|
+
|
|
386
|
+
wrapped(event);
|
|
283
387
|
};
|
|
284
388
|
}
|
|
285
389
|
|
|
286
390
|
// Use createElement here to avoid warning about variable numbers of children not
|
|
287
391
|
// having keys. Warning about this must now be the responsibility of the client
|
|
288
392
|
// providing the models instead of the client rendering them.
|
|
393
|
+
// Drop ``value`` from the props we pass to Preact — we want the
|
|
394
|
+
// input to be fully uncontrolled. Preact would otherwise set
|
|
395
|
+
// ``inputRef.current.value`` on every render (because ``value``
|
|
396
|
+
// is a known DOM property), racing with the browser's own
|
|
397
|
+
// mutations of the DOM value during fast typing and silently
|
|
398
|
+
// dropping keystrokes. We instead update the DOM value via the
|
|
399
|
+
// ``inputRef`` in the reconcile effect above, only when the
|
|
400
|
+
// server has caught up and the proposed value is not shorter
|
|
401
|
+
// than what the user has already typed.
|
|
402
|
+
const controlledProps: Record<string, any> = {};
|
|
403
|
+
for (const key of Object.keys(props as Record<string, any>)) {
|
|
404
|
+
if (key !== "value") {
|
|
405
|
+
controlledProps[key] = (props as Record<string, any>)[key];
|
|
406
|
+
}
|
|
407
|
+
}
|
|
289
408
|
return createElement(
|
|
290
409
|
model.tagName,
|
|
291
|
-
|
|
292
|
-
{ ...props, value },
|
|
410
|
+
{ ...controlledProps, ref: inputRef },
|
|
293
411
|
...createChildren(model, (child) => (
|
|
294
412
|
<Element model={child} key={child.attributes?.key} />
|
|
295
413
|
)),
|
package/src/handler.ts
CHANGED
|
@@ -16,29 +16,6 @@ export type TaggedEventHandler = ((event: Event) => void) & {
|
|
|
16
16
|
[HANDLER_THROTTLE]?: number;
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
/**
|
|
20
|
-
* Returns the debounce value (in milliseconds) to use as the default for a user
|
|
21
|
-
* input element when no user input has been recorded yet. Uses the maximum
|
|
22
|
-
* debounce among the element's tagged handlers, falling back to the global
|
|
23
|
-
* default if none of the handlers specify one.
|
|
24
|
-
*/
|
|
25
|
-
export function getInitialDebounce(
|
|
26
|
-
props: Record<string, unknown>,
|
|
27
|
-
fallback: number,
|
|
28
|
-
): number {
|
|
29
|
-
let max = 0;
|
|
30
|
-
for (const value of Object.values(props)) {
|
|
31
|
-
if (typeof value !== "function") {
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
const candidate = (value as TaggedEventHandler)[HANDLER_DEBOUNCE];
|
|
35
|
-
if (typeof candidate === "number" && candidate > max) {
|
|
36
|
-
max = candidate;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return max > 0 ? max : fallback;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
19
|
/**
|
|
43
20
|
* Returns true when the given value is a finite, non-negative integer.
|
|
44
21
|
* Used to validate debounce/throttle values arriving over the wire from the
|
package/src/types.ts
CHANGED
|
@@ -48,7 +48,7 @@ export type ReactPyComponent = ComponentType<{ model: ReactPyVdom }>;
|
|
|
48
48
|
|
|
49
49
|
export type ReactPyVdom = {
|
|
50
50
|
tagName: string;
|
|
51
|
-
attributes?: { [key: string]:
|
|
51
|
+
attributes?: { [key: string]: any };
|
|
52
52
|
children?: (ReactPyVdom | string)[];
|
|
53
53
|
error?: string;
|
|
54
54
|
eventHandlers?: { [key: string]: ReactPyVdomEventHandler };
|
package/src/vdom.tsx
CHANGED
|
@@ -222,6 +222,14 @@ function createEventHandler(
|
|
|
222
222
|
throttle,
|
|
223
223
|
}: ReactPyVdomEventHandler,
|
|
224
224
|
): [string, TaggedEventHandler] {
|
|
225
|
+
// Sequence number for the next outgoing event on this handler.
|
|
226
|
+
// The wrapper in ``UserInputElement`` may overwrite this before
|
|
227
|
+
// the event is actually sent (so that the wrapper, not this
|
|
228
|
+
// closure, owns the per-element monotonic counter and survives
|
|
229
|
+
// handler recreation on every server re-render). The default
|
|
230
|
+
// behavior (no wrapper) is to use a per-handler counter starting
|
|
231
|
+
// at 0.
|
|
232
|
+
let outgoingSeq = 0;
|
|
225
233
|
const eventHandler = function (...args: any[]) {
|
|
226
234
|
const data = Array.from(args).map((value) => {
|
|
227
235
|
const event = value as Event;
|
|
@@ -239,9 +247,17 @@ function createEventHandler(
|
|
|
239
247
|
return event;
|
|
240
248
|
}
|
|
241
249
|
});
|
|
242
|
-
|
|
243
|
-
|
|
250
|
+
const seq = outgoingSeq++;
|
|
251
|
+
client.sendMessage({ type: "layout-event", data, target, seq });
|
|
252
|
+
} as TaggedEventHandler & {
|
|
253
|
+
_reactpy_peek_seq?: () => number;
|
|
254
|
+
_reactpy_set_seq?: (n: number) => void;
|
|
255
|
+
};
|
|
244
256
|
eventHandler[HANDLER_MARKER] = true;
|
|
257
|
+
eventHandler._reactpy_peek_seq = (): number => outgoingSeq;
|
|
258
|
+
eventHandler._reactpy_set_seq = (n: number): void => {
|
|
259
|
+
outgoingSeq = n;
|
|
260
|
+
};
|
|
245
261
|
if (debounce !== undefined) {
|
|
246
262
|
if (!isValidDebounce(debounce)) {
|
|
247
263
|
log.warn(
|