@ghia/native 0.0.0 → 0.11.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/LICENSE +201 -0
- package/browser.mjs +7 -0
- package/dist/aria.d.ts +72 -0
- package/dist/aria.d.ts.map +1 -0
- package/dist/aria.js +2 -0
- package/dist/aria.js.map +1 -0
- package/dist/automation/client.d.ts +243 -0
- package/dist/automation/client.d.ts.map +1 -0
- package/dist/automation/client.js +801 -0
- package/dist/automation/client.js.map +1 -0
- package/dist/automation/index.d.ts +5 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +4 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/protocol.d.ts +309 -0
- package/dist/automation/protocol.d.ts.map +1 -0
- package/dist/automation/protocol.js +320 -0
- package/dist/automation/protocol.js.map +1 -0
- package/dist/blob-images.d.ts +32 -0
- package/dist/blob-images.d.ts.map +1 -0
- package/dist/blob-images.js +55 -0
- package/dist/blob-images.js.map +1 -0
- package/dist/bounds.d.ts +61 -0
- package/dist/bounds.d.ts.map +1 -0
- package/dist/bounds.js +85 -0
- package/dist/bounds.js.map +1 -0
- package/dist/clipboard-global.d.ts +11 -0
- package/dist/clipboard-global.d.ts.map +1 -0
- package/dist/clipboard-global.js +2 -0
- package/dist/clipboard-global.js.map +1 -0
- package/dist/clipboard.d.ts +19 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +41 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/cpu-throttle.d.ts +6 -0
- package/dist/cpu-throttle.d.ts.map +1 -0
- package/dist/cpu-throttle.js +42 -0
- package/dist/cpu-throttle.js.map +1 -0
- package/dist/events/data-transfer.d.ts +23 -0
- package/dist/events/data-transfer.d.ts.map +1 -0
- package/dist/events/data-transfer.js +97 -0
- package/dist/events/data-transfer.js.map +1 -0
- package/dist/events/dispatch.d.ts +144 -0
- package/dist/events/dispatch.d.ts.map +1 -0
- package/dist/events/dispatch.js +241 -0
- package/dist/events/dispatch.js.map +1 -0
- package/dist/events/drag.d.ts +21 -0
- package/dist/events/drag.d.ts.map +1 -0
- package/dist/events/drag.js +111 -0
- package/dist/events/drag.js.map +1 -0
- package/dist/events/event-props.d.ts +19 -0
- package/dist/events/event-props.d.ts.map +1 -0
- package/dist/events/event-props.js +104 -0
- package/dist/events/event-props.js.map +1 -0
- package/dist/events/keyboard-defaults.d.ts +18 -0
- package/dist/events/keyboard-defaults.d.ts.map +1 -0
- package/dist/events/keyboard-defaults.js +121 -0
- package/dist/events/keyboard-defaults.js.map +1 -0
- package/dist/events/listeners.d.ts +18 -0
- package/dist/events/listeners.d.ts.map +1 -0
- package/dist/events/listeners.js +49 -0
- package/dist/events/listeners.js.map +1 -0
- package/dist/events/route.d.ts +17 -0
- package/dist/events/route.d.ts.map +1 -0
- package/dist/events/route.js +36 -0
- package/dist/events/route.js.map +1 -0
- package/dist/events/types.d.ts +269 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/events/window-target.d.ts +120 -0
- package/dist/events/window-target.d.ts.map +1 -0
- package/dist/events/window-target.js +311 -0
- package/dist/events/window-target.js.map +1 -0
- package/dist/eyedropper.d.ts +33 -0
- package/dist/eyedropper.d.ts.map +1 -0
- package/dist/eyedropper.js +66 -0
- package/dist/eyedropper.js.map +1 -0
- package/dist/focus.d.ts +18 -0
- package/dist/focus.d.ts.map +1 -0
- package/dist/focus.js +26 -0
- package/dist/focus.js.map +1 -0
- package/dist/fonts.d.ts +12 -0
- package/dist/fonts.d.ts.map +1 -0
- package/dist/fonts.js +17 -0
- package/dist/fonts.js.map +1 -0
- package/dist/forms.d.ts +10 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +9 -0
- package/dist/forms.js.map +1 -0
- package/dist/host-runtime.d.ts +108 -0
- package/dist/host-runtime.d.ts.map +1 -0
- package/dist/host-runtime.js +213 -0
- package/dist/host-runtime.js.map +1 -0
- package/dist/host.d.ts +2403 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +30 -0
- package/dist/host.js.map +1 -0
- package/dist/idle-gc.d.ts +36 -0
- package/dist/idle-gc.d.ts.map +1 -0
- package/dist/idle-gc.js +70 -0
- package/dist/idle-gc.js.map +1 -0
- package/dist/keyframes.d.ts +108 -0
- package/dist/keyframes.d.ts.map +1 -0
- package/dist/keyframes.js +107 -0
- package/dist/keyframes.js.map +1 -0
- package/dist/layout-animation.d.ts +38 -0
- package/dist/layout-animation.d.ts.map +1 -0
- package/dist/layout-animation.js +41 -0
- package/dist/layout-animation.js.map +1 -0
- package/dist/match-media.d.ts +62 -0
- package/dist/match-media.d.ts.map +1 -0
- package/dist/match-media.js +272 -0
- package/dist/match-media.js.map +1 -0
- package/dist/media-query.d.ts +21 -0
- package/dist/media-query.d.ts.map +1 -0
- package/dist/media-query.js +599 -0
- package/dist/media-query.js.map +1 -0
- package/dist/motion-bindings.d.ts +36 -0
- package/dist/motion-bindings.d.ts.map +1 -0
- package/dist/motion-bindings.js +107 -0
- package/dist/motion-bindings.js.map +1 -0
- package/dist/motion-config.d.ts +20 -0
- package/dist/motion-config.d.ts.map +1 -0
- package/dist/motion-config.js +51 -0
- package/dist/motion-config.js.map +1 -0
- package/dist/motion-span.d.ts +57 -0
- package/dist/motion-span.d.ts.map +1 -0
- package/dist/motion-span.js +150 -0
- package/dist/motion-span.js.map +1 -0
- package/dist/motion-value.d.ts +269 -0
- package/dist/motion-value.d.ts.map +1 -0
- package/dist/motion-value.js +941 -0
- package/dist/motion-value.js.map +1 -0
- package/dist/motion-variants.d.ts +190 -0
- package/dist/motion-variants.d.ts.map +1 -0
- package/dist/motion-variants.js +249 -0
- package/dist/motion-variants.js.map +1 -0
- package/dist/mutations.d.ts +65 -0
- package/dist/mutations.d.ts.map +1 -0
- package/dist/mutations.js +320 -0
- package/dist/mutations.js.map +1 -0
- package/dist/nativeview.d.ts +10 -0
- package/dist/nativeview.d.ts.map +1 -0
- package/dist/nativeview.js +92 -0
- package/dist/nativeview.js.map +1 -0
- package/dist/observers.d.ts +92 -0
- package/dist/observers.d.ts.map +1 -0
- package/dist/observers.js +579 -0
- package/dist/observers.js.map +1 -0
- package/dist/presence.d.ts +63 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +54 -0
- package/dist/presence.js.map +1 -0
- package/dist/renderer-state.d.ts +155 -0
- package/dist/renderer-state.d.ts.map +1 -0
- package/dist/renderer-state.js +302 -0
- package/dist/renderer-state.js.map +1 -0
- package/dist/reorder.d.ts +63 -0
- package/dist/reorder.d.ts.map +1 -0
- package/dist/reorder.js +303 -0
- package/dist/reorder.js.map +1 -0
- package/dist/runtime.d.ts +23 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +157 -0
- package/dist/runtime.js.map +1 -0
- package/dist/screen.d.ts +8 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +16 -0
- package/dist/screen.js.map +1 -0
- package/dist/scroll.d.ts +79 -0
- package/dist/scroll.d.ts.map +1 -0
- package/dist/scroll.js +170 -0
- package/dist/scroll.js.map +1 -0
- package/dist/style-images.d.ts +20 -0
- package/dist/style-images.d.ts.map +1 -0
- package/dist/style-images.js +57 -0
- package/dist/style-images.js.map +1 -0
- package/dist/svg.d.ts +16 -0
- package/dist/svg.d.ts.map +1 -0
- package/dist/svg.js +119 -0
- package/dist/svg.js.map +1 -0
- package/dist/testing.d.ts +811 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +1187 -0
- package/dist/testing.js.map +1 -0
- package/dist/text-match.d.ts +8 -0
- package/dist/text-match.d.ts.map +1 -0
- package/dist/text-match.js +10 -0
- package/dist/text-match.js.map +1 -0
- package/dist/text-selection.d.ts +34 -0
- package/dist/text-selection.d.ts.map +1 -0
- package/dist/text-selection.js +23 -0
- package/dist/text-selection.js.map +1 -0
- package/dist/universal-style.d.ts +22 -0
- package/dist/universal-style.d.ts.map +1 -0
- package/dist/universal-style.js +58 -0
- package/dist/universal-style.js.map +1 -0
- package/dist/web-animations.d.ts +300 -0
- package/dist/web-animations.d.ts.map +1 -0
- package/dist/web-animations.js +1032 -0
- package/dist/web-animations.js.map +1 -0
- package/dist/webview.d.ts +39 -0
- package/dist/webview.d.ts.map +1 -0
- package/dist/webview.js +26 -0
- package/dist/webview.js.map +1 -0
- package/gpuix-native.darwin-arm64.node +4 -0
- package/index.cjs +789 -0
- package/index.d.ts +2603 -0
- package/index.js +729 -0
- package/package.json +96 -4
package/dist/reorder.js
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/// What `Reorder.Group` and `Reorder.Item` mean to the adapters, shared by
|
|
2
|
+
/// React and Solid: a pointer drag on an item moves it along the group's axis
|
|
3
|
+
/// through the renderer's layout offset, and swaps it with a neighbour once
|
|
4
|
+
/// its centre passes the neighbour's.
|
|
5
|
+
///
|
|
6
|
+
/// The adapters wire DOM pointer events on the item the user grabbed:
|
|
7
|
+
/// `pointerdown` calls `pointerDown`, which captures the pointer to the item
|
|
8
|
+
/// (`setPointerCapture`), so `pointermove` keeps reaching it after the pointer
|
|
9
|
+
/// leaves its box; `pointerup`, `pointercancel` and `lostpointercapture` all
|
|
10
|
+
/// call `pointerEnd`. Capture from JS applies from the next native pointer
|
|
11
|
+
/// input, and `pointerdown` runs synchronously on macOS, so the first move
|
|
12
|
+
/// after the press is already delivered to the item. Where the press is
|
|
13
|
+
/// dispatched later (Windows, Linux) a move that came in before the handler
|
|
14
|
+
/// ran goes to whatever is under the pointer, and the drag starts at the next.
|
|
15
|
+
import { motionValue } from "./motion-value.js";
|
|
16
|
+
export function createReorderDrag() {
|
|
17
|
+
return { x: motionValue(0), y: motionValue(0), active: motionValue(0) };
|
|
18
|
+
}
|
|
19
|
+
function sameOrder(left, right) {
|
|
20
|
+
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
21
|
+
}
|
|
22
|
+
function axisSpan(bounds, axis) {
|
|
23
|
+
return axis === "y" ? { start: bounds.y, size: bounds.height } : { start: bounds.x, size: bounds.width };
|
|
24
|
+
}
|
|
25
|
+
function sizeOf(slots, value) {
|
|
26
|
+
const size = slots.sizes.get(value);
|
|
27
|
+
if (size === undefined)
|
|
28
|
+
throw new Error("Reorder.Group: a value has no measured slot");
|
|
29
|
+
return size;
|
|
30
|
+
}
|
|
31
|
+
/** The slots are stacked in `order`, so the answer does not wait for the layout to follow a swap. */
|
|
32
|
+
function centreOfSlot(slots, order, position) {
|
|
33
|
+
let start = slots.firstStart;
|
|
34
|
+
for (let index = 0; index < position; index++) {
|
|
35
|
+
start += sizeOf(slots, order[index]) + slots.gaps[index];
|
|
36
|
+
}
|
|
37
|
+
return start + sizeOf(slots, order[position]) / 2;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The order after dragging `value` until its centre is at `centre`: past a
|
|
41
|
+
* neighbour's centre it takes that neighbour's place.
|
|
42
|
+
*/
|
|
43
|
+
export function reorderedValues(slots, order, value, centre) {
|
|
44
|
+
const next = [...order];
|
|
45
|
+
let position = next.indexOf(value);
|
|
46
|
+
if (position === -1)
|
|
47
|
+
throw new Error("Reorder.Group: the dragged value is not in values");
|
|
48
|
+
const swap = (from, to) => {
|
|
49
|
+
const moved = next[from];
|
|
50
|
+
next[from] = next[to];
|
|
51
|
+
next[to] = moved;
|
|
52
|
+
};
|
|
53
|
+
while (position < next.length - 1 && centre > centreOfSlot(slots, next, position + 1)) {
|
|
54
|
+
swap(position, position + 1);
|
|
55
|
+
position += 1;
|
|
56
|
+
}
|
|
57
|
+
while (position > 0 && centre < centreOfSlot(slots, next, position - 1)) {
|
|
58
|
+
swap(position, position - 1);
|
|
59
|
+
position -= 1;
|
|
60
|
+
}
|
|
61
|
+
return next;
|
|
62
|
+
}
|
|
63
|
+
function sameReading(left, right) {
|
|
64
|
+
if (!sameOrder(left.values, right.values))
|
|
65
|
+
return false;
|
|
66
|
+
const same = (a, b) => a.size === b.size && [...a].every(([key, value]) => b.get(key) === value);
|
|
67
|
+
return same(left.sizes, right.sizes) && same(left.starts, right.starts);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The slots a reading shows. The held item is drawn where the pointer put it,
|
|
71
|
+
* so its own slot is read off its neighbours instead: halfway between them, or
|
|
72
|
+
* one gap beyond the only neighbour it has on that side. `undefined` when no
|
|
73
|
+
* gap can be told.
|
|
74
|
+
*/
|
|
75
|
+
function slotsOf(reading, held, previous) {
|
|
76
|
+
const order = reading.values;
|
|
77
|
+
if (order.length === 1)
|
|
78
|
+
return { sizes: reading.sizes, gaps: [], firstStart: previous.firstStart };
|
|
79
|
+
const size = (index) => sizeOf(reading, order[index]);
|
|
80
|
+
// The held item's entry is a placeholder, replaced below.
|
|
81
|
+
const starts = order.map((value) => {
|
|
82
|
+
if (value === held)
|
|
83
|
+
return 0;
|
|
84
|
+
const start = reading.starts.get(value);
|
|
85
|
+
if (start === undefined)
|
|
86
|
+
throw new Error("Reorder.Group: a reading has no start for a value");
|
|
87
|
+
return start;
|
|
88
|
+
});
|
|
89
|
+
const end = (index) => starts[index] + size(index);
|
|
90
|
+
const position = order.indexOf(held);
|
|
91
|
+
const last = order.length - 1;
|
|
92
|
+
if (position > 0 && position < last) {
|
|
93
|
+
starts[position] = end(position - 1) + (starts[position + 1] - end(position - 1) - size(position)) / 2;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const gap = order.length === 2
|
|
97
|
+
? previous.gaps[0]
|
|
98
|
+
: position === 0
|
|
99
|
+
? starts[2] - end(1)
|
|
100
|
+
: starts[last - 1] - end(last - 2);
|
|
101
|
+
if (gap === undefined)
|
|
102
|
+
return undefined;
|
|
103
|
+
starts[position] = position === 0 ? starts[1] - gap - size(0) : end(last - 1) + gap;
|
|
104
|
+
}
|
|
105
|
+
const gaps = order.slice(1).map((_, index) => starts[index + 1] - end(index));
|
|
106
|
+
return { sizes: reading.sizes, gaps, firstStart: starts[0] };
|
|
107
|
+
}
|
|
108
|
+
export class ReorderController {
|
|
109
|
+
#items = new Map();
|
|
110
|
+
#options;
|
|
111
|
+
#held;
|
|
112
|
+
/** The order last handed to `onReorder`, until `values` changes, so a move that proposes it again says nothing. */
|
|
113
|
+
#proposed;
|
|
114
|
+
/** Takes the group's latest props. Call it whenever they change. */
|
|
115
|
+
configure(options) {
|
|
116
|
+
if (this.#options !== undefined && !sameOrder(this.#options.values, options.values))
|
|
117
|
+
this.#proposed = undefined;
|
|
118
|
+
this.#options = options;
|
|
119
|
+
}
|
|
120
|
+
/** Makes `item` the one that `value` stands for. Returns what undoes it. */
|
|
121
|
+
register(value, item) {
|
|
122
|
+
this.#items.set(value, item);
|
|
123
|
+
return () => {
|
|
124
|
+
if (this.#items.get(value) !== item)
|
|
125
|
+
return;
|
|
126
|
+
this.#items.delete(value);
|
|
127
|
+
if (this.#held?.value === value)
|
|
128
|
+
this.#held = undefined;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
isDragging(value) {
|
|
132
|
+
return this.#held?.value === value;
|
|
133
|
+
}
|
|
134
|
+
/** The pointer went down on the item for `value`. */
|
|
135
|
+
pointerDown(value, event) {
|
|
136
|
+
if (event.button !== undefined && event.button !== 0)
|
|
137
|
+
return;
|
|
138
|
+
this.#release();
|
|
139
|
+
const options = this.#configured();
|
|
140
|
+
const pointer = this.#axisPoint(event);
|
|
141
|
+
const item = this.#item(value);
|
|
142
|
+
const held = this.#measure(options, value, pointer, event.pointerId);
|
|
143
|
+
item.capturePointer(event.pointerId);
|
|
144
|
+
item.drag.x.jump(0);
|
|
145
|
+
item.drag.y.jump(0);
|
|
146
|
+
item.drag.active.jump(1);
|
|
147
|
+
this.#held = held;
|
|
148
|
+
this.#proposed = undefined;
|
|
149
|
+
}
|
|
150
|
+
/** The pointer moved. Does nothing unless an item is held. */
|
|
151
|
+
pointerMove(event) {
|
|
152
|
+
const held = this.#held;
|
|
153
|
+
if (held === undefined)
|
|
154
|
+
return;
|
|
155
|
+
// A release the window never saw: the button is no longer down.
|
|
156
|
+
if (event.pressedButton !== 0) {
|
|
157
|
+
this.#release();
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const options = this.#configured();
|
|
161
|
+
const pointer = this.#axisPoint(event);
|
|
162
|
+
const drag = this.#item(held.value).drag;
|
|
163
|
+
(options.axis === "y" ? drag.y : drag.x).set(pointer - held.pressed);
|
|
164
|
+
if (!options.values.includes(held.value)) {
|
|
165
|
+
this.#release();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.#remeasure(held, options);
|
|
169
|
+
// An item that joined has no slot until it has been measured.
|
|
170
|
+
if (options.values.some((value) => !held.slots.sizes.has(value)))
|
|
171
|
+
return;
|
|
172
|
+
const next = reorderedValues(held.slots, options.values, held.value, pointer - held.grab);
|
|
173
|
+
if (sameOrder(next, options.values))
|
|
174
|
+
return;
|
|
175
|
+
if (this.#proposed !== undefined && sameOrder(next, this.#proposed))
|
|
176
|
+
return;
|
|
177
|
+
this.#proposed = next;
|
|
178
|
+
options.onReorder(next);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* The press ended (`pointerup`, `pointercancel` or `lostpointercapture`) on
|
|
182
|
+
* the item for `value`: the held item glides to its slot. An event for another
|
|
183
|
+
* item or pointer is ignored, because a `lostpointercapture` can arrive after
|
|
184
|
+
* a later drag has begun and must not end that one.
|
|
185
|
+
*/
|
|
186
|
+
pointerEnd(value, event) {
|
|
187
|
+
const held = this.#held;
|
|
188
|
+
if (held === undefined || held.value !== value || held.pointerId !== event.pointerId)
|
|
189
|
+
return;
|
|
190
|
+
this.#release();
|
|
191
|
+
}
|
|
192
|
+
#release() {
|
|
193
|
+
const held = this.#held;
|
|
194
|
+
if (held === undefined)
|
|
195
|
+
return;
|
|
196
|
+
this.#held = undefined;
|
|
197
|
+
const item = this.#items.get(held.value);
|
|
198
|
+
if (item === undefined)
|
|
199
|
+
return;
|
|
200
|
+
// `active` first: once it is off the offsets are no longer read.
|
|
201
|
+
item.drag.active.jump(0);
|
|
202
|
+
item.drag.x.jump(0);
|
|
203
|
+
item.drag.y.jump(0);
|
|
204
|
+
// The pointer is not up when a chorded button or a removed value ends the drag, and the capture
|
|
205
|
+
// would otherwise keep sending the pointer's events to this item.
|
|
206
|
+
item.releasePointerCapture(held.pointerId);
|
|
207
|
+
}
|
|
208
|
+
#configured() {
|
|
209
|
+
if (this.#options === undefined)
|
|
210
|
+
throw new Error("Reorder.Group: the group has not been configured");
|
|
211
|
+
return this.#options;
|
|
212
|
+
}
|
|
213
|
+
#item(value) {
|
|
214
|
+
const item = this.#items.get(value);
|
|
215
|
+
if (item === undefined)
|
|
216
|
+
throw new Error("Reorder.Item: no item is registered for this value");
|
|
217
|
+
return item;
|
|
218
|
+
}
|
|
219
|
+
#axisPoint(event) {
|
|
220
|
+
const point = this.#configured().axis === "y" ? event.y : event.x;
|
|
221
|
+
if (point === undefined)
|
|
222
|
+
throw new Error("Reorder.Item: the pointer event has no position");
|
|
223
|
+
return point;
|
|
224
|
+
}
|
|
225
|
+
#boundsReader(options) {
|
|
226
|
+
const renderer = options.renderer;
|
|
227
|
+
if (renderer === null)
|
|
228
|
+
throw new Error("Reorder.Group needs a GPUIX root");
|
|
229
|
+
const getElementBounds = renderer.getElementBounds;
|
|
230
|
+
if (getElementBounds === undefined)
|
|
231
|
+
throw new Error("Reorder.Group needs a renderer with getElementBounds");
|
|
232
|
+
return (elementId) => getElementBounds.call(renderer, elementId);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Measures the slots again once `values` is another order than they were
|
|
236
|
+
* measured for: a reorder was applied, or an item joined or left. Items are
|
|
237
|
+
* drawn where they glide to, not where they will settle, so a look is only
|
|
238
|
+
* trusted once the next one agrees with it; until then the slots are the
|
|
239
|
+
* old ones, stacked in the new order. The held item's own box is not read,
|
|
240
|
+
* as it is drawn under the pointer.
|
|
241
|
+
*/
|
|
242
|
+
#remeasure(held, options) {
|
|
243
|
+
if (sameOrder(held.measuredFor, options.values))
|
|
244
|
+
return;
|
|
245
|
+
const reading = this.#read(held.value, options);
|
|
246
|
+
const previous = held.reading;
|
|
247
|
+
held.reading = reading;
|
|
248
|
+
if (reading === undefined || previous === undefined || !sameReading(previous, reading))
|
|
249
|
+
return;
|
|
250
|
+
const slots = slotsOf(reading, held.value, held.slots);
|
|
251
|
+
if (slots === undefined)
|
|
252
|
+
return;
|
|
253
|
+
held.slots = slots;
|
|
254
|
+
held.measuredFor = [...options.values];
|
|
255
|
+
held.reading = undefined;
|
|
256
|
+
}
|
|
257
|
+
/** `undefined` while an item has no box yet. */
|
|
258
|
+
#read(held, options) {
|
|
259
|
+
const getBounds = this.#boundsReader(options);
|
|
260
|
+
const sizes = new Map();
|
|
261
|
+
const starts = new Map();
|
|
262
|
+
for (const value of options.values) {
|
|
263
|
+
const elementId = this.#items.get(value)?.elementId();
|
|
264
|
+
const bounds = elementId === undefined ? null : getBounds(elementId);
|
|
265
|
+
if (bounds === null)
|
|
266
|
+
return undefined;
|
|
267
|
+
const span = axisSpan(bounds, options.axis);
|
|
268
|
+
sizes.set(value, span.size);
|
|
269
|
+
if (value !== held)
|
|
270
|
+
starts.set(value, span.start);
|
|
271
|
+
}
|
|
272
|
+
return { values: [...options.values], sizes, starts };
|
|
273
|
+
}
|
|
274
|
+
#measure(options, value, pointer, pointerId) {
|
|
275
|
+
const getBounds = this.#boundsReader(options);
|
|
276
|
+
const sizes = new Map();
|
|
277
|
+
const starts = [];
|
|
278
|
+
for (const key of options.values) {
|
|
279
|
+
const elementId = this.#item(key).elementId();
|
|
280
|
+
const bounds = elementId === undefined ? null : getBounds(elementId);
|
|
281
|
+
if (bounds === null)
|
|
282
|
+
throw new Error("Reorder.Item: an item has not been laid out yet, so it cannot be dragged");
|
|
283
|
+
const span = axisSpan(bounds, options.axis);
|
|
284
|
+
sizes.set(key, span.size);
|
|
285
|
+
starts.push(span.start);
|
|
286
|
+
}
|
|
287
|
+
const index = options.values.indexOf(value);
|
|
288
|
+
if (index === -1)
|
|
289
|
+
throw new Error("Reorder.Item: the value is not in the group's values");
|
|
290
|
+
const slots = { sizes, gaps: [], firstStart: starts[0] };
|
|
291
|
+
slots.gaps = starts.slice(1).map((start, at) => start - (starts[at] + sizeOf(slots, options.values[at])));
|
|
292
|
+
return {
|
|
293
|
+
value,
|
|
294
|
+
pointerId,
|
|
295
|
+
pressed: pointer,
|
|
296
|
+
grab: pointer - (starts[index] + sizeOf(slots, value) / 2),
|
|
297
|
+
slots,
|
|
298
|
+
measuredFor: [...options.values],
|
|
299
|
+
reading: undefined,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=reorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reorder.js","sourceRoot":"","sources":["../js/reorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { GpuixRenderer } from "@ghia/native";
|
|
2
|
+
import type { EventPayload } from "@ghia/native";
|
|
3
|
+
import { App, type LiveAutomationRenderer } from "./automation/client.js";
|
|
4
|
+
import { type WindowFontsOption } from "./fonts.js";
|
|
5
|
+
export type { WindowFontsOption };
|
|
6
|
+
export interface FrameLoop {
|
|
7
|
+
stop(): void;
|
|
8
|
+
}
|
|
9
|
+
export interface CreateNativeRendererOptions {
|
|
10
|
+
onEvent?: (event: EventPayload) => void;
|
|
11
|
+
onError?: (error: unknown) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function createNativeRenderer(options?: CreateNativeRendererOptions): GpuixRenderer;
|
|
14
|
+
export interface FrameLoopOptions {
|
|
15
|
+
frameMs?: number;
|
|
16
|
+
onTerminated?: () => void;
|
|
17
|
+
onError?: (error: unknown) => void;
|
|
18
|
+
}
|
|
19
|
+
type FrameLoopRenderer = Pick<GpuixRenderer, "requiresTick" | "tick"> & Partial<Pick<GpuixRenderer, "setFrameWakeCallback" | "setSyncEventHandler">>;
|
|
20
|
+
export declare function startFrameLoop(renderer: FrameLoopRenderer, options?: FrameLoopOptions): FrameLoop;
|
|
21
|
+
export declare function enableAutomation(renderer: LiveAutomationRenderer): void;
|
|
22
|
+
export declare function installBrowserAutomation(renderer: LiveAutomationRenderer, existing?: App): App;
|
|
23
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../js/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,cAAc,CAAA;AAC/D,OAAO,EACL,GAAG,EAKH,KAAK,sBAAsB,EAC5B,MAAM,wBAAwB,CAAA;AAW/B,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAIlE,YAAY,EAAE,iBAAiB,EAAE,CAAA;AAgBjC,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,IAAI,CAAA;CACb;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AAED,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,aAAa,CAwDf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AAED,KAAK,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,GAAG,MAAM,CAAC,GACnE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,sBAAsB,GAAG,qBAAqB,CAAC,CAAC,CAAA;AAS9E,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,SAAS,CAiDX;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAEvE;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,sBAAsB,EAChC,QAAQ,CAAC,EAAE,GAAG,GACb,GAAG,CAKL"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import * as native from "@ghia/native";
|
|
2
|
+
import { GpuixRenderer } from "@ghia/native";
|
|
3
|
+
import { App, browserRendererAsTest, InProcessBackend, liveRendererAsTest, serveAutomationStdio, } from "./automation/client.js";
|
|
4
|
+
import { bindClipboard } from "./clipboard.js";
|
|
5
|
+
import { bindEyeDropper } from "./eyedropper.js";
|
|
6
|
+
import { forgetWindowSource } from "./events/window-target.js";
|
|
7
|
+
import { closeWebAnimations } from "./web-animations.js";
|
|
8
|
+
import { flushPendingMutations } from "./bounds.js";
|
|
9
|
+
import { registerKeyframesHost, registerKeyframesValidator, unregisterKeyframesHost, } from "./keyframes.js";
|
|
10
|
+
import { readFontFiles } from "./fonts.js";
|
|
11
|
+
import { registerAnimationMeasurer } from "./motion-value.js";
|
|
12
|
+
import { createRendererState, reportSyncErrors } from "./renderer-state.js";
|
|
13
|
+
const DEFAULT_FRAME_MS = 8;
|
|
14
|
+
// The browser entry has no `validateKeyframes`, so it is read off the namespace.
|
|
15
|
+
if (typeof native.validateKeyframes === "function") {
|
|
16
|
+
registerKeyframesValidator(native.validateKeyframes);
|
|
17
|
+
}
|
|
18
|
+
if (typeof native.measureMotionAnimation === "function") {
|
|
19
|
+
registerAnimationMeasurer((from, target, transition) => {
|
|
20
|
+
const length = native.measureMotionAnimation(from, target, transition ?? null);
|
|
21
|
+
return { duration: length.duration, iterationDuration: length.iterationDuration };
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function createNativeRenderer(options = {}) {
|
|
25
|
+
let renderer;
|
|
26
|
+
renderer = new GpuixRenderer((error, event) => {
|
|
27
|
+
if (error) {
|
|
28
|
+
options.onError?.(error);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
if (createRendererState(renderer).dispatch(event))
|
|
33
|
+
options.onEvent?.(event);
|
|
34
|
+
}
|
|
35
|
+
catch (dispatchError) {
|
|
36
|
+
options.onError?.(dispatchError);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
bindClipboard(renderer);
|
|
40
|
+
bindEyeDropper(renderer);
|
|
41
|
+
const state = createRendererState(renderer);
|
|
42
|
+
state.setErrorHandler(options.onError);
|
|
43
|
+
// Input reaches JS here, inside the native call, so preventDefault() can
|
|
44
|
+
// still stop the editor or the focus change.
|
|
45
|
+
renderer.setSyncEventHandler(reportSyncErrors((event) => state.dispatchSync(event), (error) => state.reportError(error)));
|
|
46
|
+
// A read must see mutations a framework has queued but not sent yet (Solid
|
|
47
|
+
// sends in a microtask), and native draws pending changes before answering.
|
|
48
|
+
const getElementBounds = renderer.getElementBounds.bind(renderer);
|
|
49
|
+
renderer.getElementBounds = (id) => {
|
|
50
|
+
flushPendingMutations(renderer);
|
|
51
|
+
return getElementBounds(id);
|
|
52
|
+
};
|
|
53
|
+
const getElementsAt = renderer.getElementsAt.bind(renderer);
|
|
54
|
+
renderer.getElementsAt = (x, y) => {
|
|
55
|
+
flushPendingMutations(renderer);
|
|
56
|
+
return getElementsAt(x, y);
|
|
57
|
+
};
|
|
58
|
+
const automated = typeof process !== "undefined" && process.stdin && !process.stdin.isTTY;
|
|
59
|
+
const init = renderer.init.bind(renderer);
|
|
60
|
+
const tick = renderer.tick.bind(renderer);
|
|
61
|
+
renderer.init = (windowOptions) => {
|
|
62
|
+
const fonts = readFontFiles(windowOptions?.fonts);
|
|
63
|
+
init(windowOptions);
|
|
64
|
+
for (const font of fonts)
|
|
65
|
+
renderer.registerFont(font);
|
|
66
|
+
// The web renderer has no motion engine, so nothing to define keyframes on.
|
|
67
|
+
if (typeof renderer.defineKeyframes === "function")
|
|
68
|
+
registerKeyframesHost(renderer);
|
|
69
|
+
if (automated)
|
|
70
|
+
enableAutomation(renderer);
|
|
71
|
+
};
|
|
72
|
+
renderer.tick = () => {
|
|
73
|
+
const running = tick();
|
|
74
|
+
if (!running) {
|
|
75
|
+
unregisterKeyframesHost(renderer);
|
|
76
|
+
closeWebAnimations(renderer);
|
|
77
|
+
forgetWindowSource(renderer);
|
|
78
|
+
}
|
|
79
|
+
return running;
|
|
80
|
+
};
|
|
81
|
+
return renderer;
|
|
82
|
+
}
|
|
83
|
+
/** The last window closed: the sync handler captures the renderer, so it has to be
|
|
84
|
+
* released for the renderer to be collectable. */
|
|
85
|
+
function windowClosed(renderer, options) {
|
|
86
|
+
renderer.setSyncEventHandler?.(null);
|
|
87
|
+
options.onTerminated?.();
|
|
88
|
+
}
|
|
89
|
+
export function startFrameLoop(renderer, options = {}) {
|
|
90
|
+
if (!renderer.requiresTick())
|
|
91
|
+
return { stop() { } };
|
|
92
|
+
let timer;
|
|
93
|
+
let scheduledFrame;
|
|
94
|
+
let stopped = false;
|
|
95
|
+
const stop = () => {
|
|
96
|
+
if (stopped)
|
|
97
|
+
return;
|
|
98
|
+
stopped = true;
|
|
99
|
+
if (frameWake)
|
|
100
|
+
renderer.setFrameWakeCallback?.(null);
|
|
101
|
+
if (timer !== undefined)
|
|
102
|
+
clearTimeout(timer);
|
|
103
|
+
timer = undefined;
|
|
104
|
+
if (scheduledFrame !== undefined)
|
|
105
|
+
clearImmediate(scheduledFrame);
|
|
106
|
+
scheduledFrame = undefined;
|
|
107
|
+
};
|
|
108
|
+
const loop = () => {
|
|
109
|
+
if (stopped)
|
|
110
|
+
return;
|
|
111
|
+
if (timer !== undefined)
|
|
112
|
+
clearTimeout(timer);
|
|
113
|
+
timer = undefined;
|
|
114
|
+
const started = performance.now();
|
|
115
|
+
let running = true;
|
|
116
|
+
try {
|
|
117
|
+
running = renderer.tick();
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
options.onError?.(error);
|
|
121
|
+
}
|
|
122
|
+
if (running === false) {
|
|
123
|
+
stop();
|
|
124
|
+
windowClosed(renderer, options);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// On the wake path nothing re-arms a timer: an idle app is not ticked until the run loop has work.
|
|
128
|
+
if (stopped || frameWake)
|
|
129
|
+
return;
|
|
130
|
+
const delay = Math.max(0, (options.frameMs ?? DEFAULT_FRAME_MS) - (performance.now() - started));
|
|
131
|
+
timer = setTimeout(loop, delay);
|
|
132
|
+
};
|
|
133
|
+
// The frame runs as its own task, not inside the wake callback: Bun and Node run I/O
|
|
134
|
+
// and timers after the immediates phase, before the next wake's frame, while a threadsafe
|
|
135
|
+
// function callback that ticks inline keeps Bun inside its dispatch loop.
|
|
136
|
+
const wake = () => {
|
|
137
|
+
if (stopped || scheduledFrame !== undefined)
|
|
138
|
+
return;
|
|
139
|
+
scheduledFrame = setImmediate(() => {
|
|
140
|
+
scheduledFrame = undefined;
|
|
141
|
+
loop();
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
const frameWake = options.frameMs === undefined &&
|
|
145
|
+
renderer.setFrameWakeCallback?.(wake) === true;
|
|
146
|
+
loop();
|
|
147
|
+
return { stop };
|
|
148
|
+
}
|
|
149
|
+
export function enableAutomation(renderer) {
|
|
150
|
+
serveAutomationStdio(new InProcessBackend(liveRendererAsTest(renderer)));
|
|
151
|
+
}
|
|
152
|
+
export function installBrowserAutomation(renderer, existing) {
|
|
153
|
+
if (existing)
|
|
154
|
+
return existing;
|
|
155
|
+
return new App(new InProcessBackend(browserRendererAsTest(renderer)));
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../js/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/screen.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Display } from "@ghia/native";
|
|
2
|
+
export type { Display, Rectangle, Size } from "@ghia/native";
|
|
3
|
+
/** Readable before any window opens. macOS only: both throw elsewhere. */
|
|
4
|
+
export declare const screen: {
|
|
5
|
+
getAllDisplays: () => Display[];
|
|
6
|
+
getPrimaryDisplay: () => Display;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../js/screen.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAY5D,0EAA0E;AAC1E,eAAO,MAAM,MAAM;0BACG,OAAO,EAAE;6BACN,OAAO;CAC/B,CAAA"}
|
package/dist/screen.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as native from "@ghia/native";
|
|
2
|
+
// The browser entry has no display functions, so they are read off the
|
|
3
|
+
// namespace: a named import would fail the browser bundle of the adapters.
|
|
4
|
+
function nativeScreen(name) {
|
|
5
|
+
const read = native[name];
|
|
6
|
+
if (typeof read !== "function") {
|
|
7
|
+
throw new Error(`screen.${name}() is only implemented on macOS`);
|
|
8
|
+
}
|
|
9
|
+
return read;
|
|
10
|
+
}
|
|
11
|
+
/** Readable before any window opens. macOS only: both throw elsewhere. */
|
|
12
|
+
export const screen = {
|
|
13
|
+
getAllDisplays: () => nativeScreen("getAllDisplays")(),
|
|
14
|
+
getPrimaryDisplay: () => nativeScreen("getPrimaryDisplay")(),
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen.js","sourceRoot":"","sources":["../js/screen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAKtC,uEAAuE;AACvE,2EAA2E;AAC3E,SAAS,YAAY,CAAsD,IAAU;IACnF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,iCAAiC,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,cAAc,EAAE,GAAc,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE;IACjE,iBAAiB,EAAE,GAAY,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE;CACtE,CAAA"}
|
package/dist/scroll.d.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { EventPayload } from "../index.js";
|
|
2
|
+
import type { DomEvent } from "./events/dispatch.js";
|
|
3
|
+
import type { HostWheelEvent } from "./events/types.js";
|
|
4
|
+
import type { NativeRenderer } from "./host.js";
|
|
5
|
+
export type ScrollBehavior = "auto" | "instant" | "smooth";
|
|
6
|
+
export type ScrollLogicalPosition = "start" | "center" | "end" | "nearest";
|
|
7
|
+
export interface ScrollToOptions {
|
|
8
|
+
/** Pixels from the start of the content. Unset keeps the current position. */
|
|
9
|
+
left?: number;
|
|
10
|
+
top?: number;
|
|
11
|
+
/** `"auto"` follows the element's `scrollBehavior` style. */
|
|
12
|
+
behavior?: ScrollBehavior;
|
|
13
|
+
}
|
|
14
|
+
export interface ScrollIntoViewOptions {
|
|
15
|
+
/** Vertical alignment. Defaults to `"start"`, like the DOM. */
|
|
16
|
+
block?: ScrollLogicalPosition;
|
|
17
|
+
/** Horizontal alignment. Defaults to `"nearest"`, like the DOM. */
|
|
18
|
+
inline?: ScrollLogicalPosition;
|
|
19
|
+
/** `"auto"` follows the `scrollBehavior` style of each scroller. */
|
|
20
|
+
behavior?: ScrollBehavior;
|
|
21
|
+
}
|
|
22
|
+
/** `onWheel`'s event: see `HostWheelEvent`. */
|
|
23
|
+
export type WheelEvent = HostWheelEvent;
|
|
24
|
+
/** `onScroll`: the element's scroll offset changed, whatever moved it. */
|
|
25
|
+
export interface ScrollEvent extends DomEvent {
|
|
26
|
+
/** Pixels scrolled from the start, as on the DOM element. */
|
|
27
|
+
scrollTop: number;
|
|
28
|
+
scrollLeft: number;
|
|
29
|
+
}
|
|
30
|
+
/** The scroll geometry of an element, in the DOM's terms. */
|
|
31
|
+
export interface ScrollMetrics {
|
|
32
|
+
scrollLeft: number;
|
|
33
|
+
scrollTop: number;
|
|
34
|
+
scrollWidth: number;
|
|
35
|
+
scrollHeight: number;
|
|
36
|
+
clientWidth: number;
|
|
37
|
+
clientHeight: number;
|
|
38
|
+
}
|
|
39
|
+
/** Fills in the DOM names of a native `scroll` payload. A `wheel` arrives complete from the dispatcher. */
|
|
40
|
+
export declare function shapeScrollEvent(event: EventPayload): EventPayload;
|
|
41
|
+
/**
|
|
42
|
+
* What a key's default action does once nothing consumed or prevented it:
|
|
43
|
+
* scroll the nearest scroller. Undefined for a key that does not scroll.
|
|
44
|
+
*/
|
|
45
|
+
export declare function scrollKeyName(key: string | undefined): string | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* The one place that asks native for an element's scroll geometry. Every
|
|
48
|
+
* `scrollTop`-style read goes through here.
|
|
49
|
+
*
|
|
50
|
+
* It is never stale, like `getBoundingClientRect`: queued mutations are sent first and
|
|
51
|
+
* native draws any pending change before it measures.
|
|
52
|
+
*
|
|
53
|
+
* An element native has not painted has none; the DOM answers zero for an element
|
|
54
|
+
* with no layout box, and so does this.
|
|
55
|
+
*/
|
|
56
|
+
export declare function readScrollMetrics(renderer: NativeRenderer, id: number): ScrollMetrics;
|
|
57
|
+
/** The members a host element exposes next to `scrollIntoView`. */
|
|
58
|
+
export interface ScrollableElement {
|
|
59
|
+
scrollTop: number;
|
|
60
|
+
scrollLeft: number;
|
|
61
|
+
readonly scrollWidth: number;
|
|
62
|
+
readonly scrollHeight: number;
|
|
63
|
+
readonly clientWidth: number;
|
|
64
|
+
readonly clientHeight: number;
|
|
65
|
+
scrollTo(options?: ScrollToOptions): void;
|
|
66
|
+
scrollTo(x: number, y: number): void;
|
|
67
|
+
scrollBy(options?: ScrollToOptions): void;
|
|
68
|
+
scrollBy(x: number, y: number): void;
|
|
69
|
+
scrollIntoView(arg?: boolean | ScrollIntoViewOptions): void;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Defines the scroll members on `target`, which is a prototype or one instance.
|
|
73
|
+
* `bind` finds the renderer and element id behind `this`.
|
|
74
|
+
*/
|
|
75
|
+
export declare function defineScrollMembers<This extends object>(target: object, bind: (self: This) => {
|
|
76
|
+
renderer: NativeRenderer | undefined;
|
|
77
|
+
id: number;
|
|
78
|
+
}): void;
|
|
79
|
+
//# sourceMappingURL=scroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../js/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE/C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAA;AAC1D,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAA;AAE1E,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,mEAAmE;IACnE,MAAM,CAAC,EAAE,qBAAqB,CAAA;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG,cAAc,CAAA;AAEvC,0EAA0E;AAC1E,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,2GAA2G;AAC3G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAUlE;AAeD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEzE;AAOD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAkBrF;AAyCD,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACzC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACzC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,qBAAqB,GAAG,IAAI,CAAA;CAC5D;AAQD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,MAAM,EACrD,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK;IAAE,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACzE,IAAI,CA4DN"}
|