@fusion.dev/helix-core 0.211.0 → 0.212.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/custom-elements.json +1 -1
- package/dist/controllers/virtualize-controller/heights.d.ts +9 -0
- package/dist/controllers/virtualize-controller/heights.js +10 -0
- package/dist/controllers/virtualize-controller/virtualize-controller.d.ts +25 -1
- package/dist/controllers/virtualize-controller/virtualize-controller.js +35 -3
- package/dist/events/details.d.ts +103 -0
- package/dist/events/device-button.d.ts +14 -0
- package/dist/events/device-button.js +11 -0
- package/dist/events/device-key.d.ts +16 -0
- package/dist/events/device-key.js +11 -0
- package/dist/events/device-screenshot.d.ts +13 -0
- package/dist/events/device-screenshot.js +10 -0
- package/dist/events/device-scroll.d.ts +14 -0
- package/dist/events/device-scroll.js +11 -0
- package/dist/events/device-swipe.d.ts +15 -0
- package/dist/events/device-swipe.js +11 -0
- package/dist/events/device-tap.d.ts +13 -0
- package/dist/events/device-tap.js +11 -0
- package/dist/events/device-text.d.ts +13 -0
- package/dist/events/device-text.js +11 -0
- package/dist/events/device-touch.d.ts +15 -0
- package/dist/events/device-touch.js +11 -0
- package/dist/events/events.d.ts +18 -2
- package/dist/events/events.js +17 -1
- package/dist/events/names.js +2 -1
- package/dist/helix-element/helix-element.d.ts +2 -2
- package/dist/helix-element/mark-rules.d.ts +14 -0
- package/dist/helix-element/mark-rules.js +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/mixins/mixin-viewport/mixin-viewport.js +1 -1
- package/dist/utils/stop-press/stop-press.d.ts +9 -0
- package/dist/utils/stop-press/stop-press.js +3 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
|
@@ -68,6 +68,15 @@ export declare class Heights {
|
|
|
68
68
|
* one of them back at the estimate at the moment the reader is looking at them.
|
|
69
69
|
*/
|
|
70
70
|
shift(by: number): void;
|
|
71
|
+
/**
|
|
72
|
+
* Adds `by` to every height that has been seen, for a gap that changed.
|
|
73
|
+
*
|
|
74
|
+
* Each item counts the gap after it as part of its own height, so a gap that
|
|
75
|
+
* grows by twelve pixels grows every measured item by twelve, the ones no
|
|
76
|
+
* longer drawn included. The unmeasured ones follow the estimate, which
|
|
77
|
+
* carries the gap already.
|
|
78
|
+
*/
|
|
79
|
+
pad(by: number): void;
|
|
71
80
|
/**
|
|
72
81
|
* Drops everything, for a set that is no longer the same set.
|
|
73
82
|
*
|
|
@@ -70,6 +70,16 @@ export class Heights {
|
|
|
70
70
|
this.dirty = 0;
|
|
71
71
|
this.changes += 1;
|
|
72
72
|
}
|
|
73
|
+
pad(by) {
|
|
74
|
+
if (by === 0 || this.seen.size === 0) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
for (const [index, size] of this.seen) {
|
|
78
|
+
this.seen.set(index, Math.max(1, Math.round((size + by) * 64) / 64));
|
|
79
|
+
}
|
|
80
|
+
this.dirty = 0;
|
|
81
|
+
this.changes += 1;
|
|
82
|
+
}
|
|
73
83
|
forget() {
|
|
74
84
|
this.seen.clear();
|
|
75
85
|
this.dirty = 0;
|
|
@@ -172,12 +172,18 @@ export declare class VirtualizeController implements ReactiveController {
|
|
|
172
172
|
/** Room `shift` added above the window, owed to the scroll offset once drawn. */
|
|
173
173
|
private owed;
|
|
174
174
|
/**
|
|
175
|
-
* The drawn rows' height on the straight line, read once per estimate
|
|
175
|
+
* The drawn rows' own height on the straight line, read once per estimate,
|
|
176
|
+
* and without the gap, which `line` adds as it is now.
|
|
176
177
|
*
|
|
177
178
|
* Undefined until a host that offers `rows` has drawn some on the uniform
|
|
178
179
|
* path, and again after `forget`.
|
|
179
180
|
*/
|
|
180
181
|
private sample;
|
|
182
|
+
/**
|
|
183
|
+
* The gap the heights and the line were last squared with, which `line`
|
|
184
|
+
* reads, so the gap the host has now is taken up in `respace` alone.
|
|
185
|
+
*/
|
|
186
|
+
private spaced;
|
|
181
187
|
/** The length of the set when `endInSight` last answered true. */
|
|
182
188
|
private askedAt;
|
|
183
189
|
/**
|
|
@@ -317,6 +323,24 @@ export declare class VirtualizeController implements ReactiveController {
|
|
|
317
323
|
* Reading the drawn rows once corrects the slope, and it is still a line.
|
|
318
324
|
*/
|
|
319
325
|
private line;
|
|
326
|
+
/** How tall one item's own row is on the straight line, without the gap. */
|
|
327
|
+
private row;
|
|
328
|
+
/**
|
|
329
|
+
* Moves everything to a gap that changed, and keeps the reader on the item
|
|
330
|
+
* they were on.
|
|
331
|
+
*
|
|
332
|
+
* **Each item counts the gap after it as part of its own height**, so a gap
|
|
333
|
+
* that changes changes every item. The straight line reads the gap as it is
|
|
334
|
+
* now, and every height measured with the old one moves by the difference,
|
|
335
|
+
* drawn or not. Left alone, both kept the old gap while the rows drawn
|
|
336
|
+
* between the spacers took the new one, so the set grew or shrank as the
|
|
337
|
+
* window did: in WebKit, End on 1,000 rows whose gap went from 0 to 12 left
|
|
338
|
+
* the last row 72 pixels below the box once the window lost six rows.
|
|
339
|
+
*
|
|
340
|
+
* The reader's place is owed to the scroll offset and written after the
|
|
341
|
+
* render, as `shift` does, because a gap that grows has no room for it yet.
|
|
342
|
+
*/
|
|
343
|
+
private respace;
|
|
320
344
|
/** The space the host draws between two items, which each item counts. */
|
|
321
345
|
private gap;
|
|
322
346
|
/**
|
|
@@ -154,6 +154,7 @@ export class VirtualizeController {
|
|
|
154
154
|
this.watch();
|
|
155
155
|
const box = this.options.container();
|
|
156
156
|
const total = Math.max(0, this.options.count());
|
|
157
|
+
this.respace(box, total);
|
|
157
158
|
const size = this.line();
|
|
158
159
|
if (!box) {
|
|
159
160
|
return;
|
|
@@ -196,8 +197,35 @@ export class VirtualizeController {
|
|
|
196
197
|
return { after: Math.max(0, (total - last) * size), before: first * size, first, last };
|
|
197
198
|
}
|
|
198
199
|
line() {
|
|
200
|
+
return this.row() + (this.spaced ?? this.gap());
|
|
201
|
+
}
|
|
202
|
+
row() {
|
|
199
203
|
const estimate = Math.max(1, this.options.estimate());
|
|
200
|
-
return this.sample?.estimate === estimate ? this.sample.size : estimate
|
|
204
|
+
return this.sample?.estimate === estimate ? this.sample.size : estimate;
|
|
205
|
+
}
|
|
206
|
+
respace(box, total) {
|
|
207
|
+
const gap = this.gap();
|
|
208
|
+
const was = this.spaced;
|
|
209
|
+
if (was === undefined) {
|
|
210
|
+
this.spaced = gap;
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (was === gap) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const top = box ? this.offset(box) : 0;
|
|
217
|
+
const anchor = this.measuring() ? (this.target ?? this.indexAt(top, total)) : 0;
|
|
218
|
+
const from = this.measuring() ? this.startOf(anchor, total) : this.line();
|
|
219
|
+
this.heights.pad(gap - was);
|
|
220
|
+
this.spaced = gap;
|
|
221
|
+
const moved = this.measuring()
|
|
222
|
+
? this.startOf(anchor, total) - from
|
|
223
|
+
: (top / from) * this.line() - top;
|
|
224
|
+
this.settling = 0;
|
|
225
|
+
if (box && top > 0 && moved !== 0 && (this.options.anchor?.() ?? true)) {
|
|
226
|
+
this.owed += moved;
|
|
227
|
+
this.host.requestUpdate();
|
|
228
|
+
}
|
|
201
229
|
}
|
|
202
230
|
gap() {
|
|
203
231
|
return Math.max(0, this.options.gap?.() ?? 0);
|
|
@@ -215,8 +243,11 @@ export class VirtualizeController {
|
|
|
215
243
|
const uneven = Math.max(...seen) - Math.min(...seen) > 1;
|
|
216
244
|
if (this.sample?.estimate !== estimate) {
|
|
217
245
|
const was = this.line();
|
|
218
|
-
|
|
219
|
-
|
|
246
|
+
this.sample = {
|
|
247
|
+
estimate,
|
|
248
|
+
size: Math.max(1, seen.reduce((sum, height) => sum + height, 0) / seen.length),
|
|
249
|
+
};
|
|
250
|
+
const size = this.line();
|
|
220
251
|
if (Math.abs(size - was) >= 0.5) {
|
|
221
252
|
const box = this.options.container();
|
|
222
253
|
if (box && this.scrolled(box) > 0) {
|
|
@@ -337,6 +368,7 @@ export class VirtualizeController {
|
|
|
337
368
|
this.settle();
|
|
338
369
|
}
|
|
339
370
|
settle() {
|
|
371
|
+
this.respace(this.options.container(), Math.max(0, this.options.count()));
|
|
340
372
|
if (!this.measuring()) {
|
|
341
373
|
this.sampleRows();
|
|
342
374
|
return;
|
package/dist/events/details.d.ts
CHANGED
|
@@ -263,6 +263,109 @@ export interface SortDetail {
|
|
|
263
263
|
*/
|
|
264
264
|
value: string;
|
|
265
265
|
}
|
|
266
|
+
/** A hardware button Device Screen draws, named for what it does on the device. */
|
|
267
|
+
export type DeviceButton = 'back' | 'home' | 'power' | 'recents' | 'rotate-left' | 'rotate-right' | 'volume-down' | 'volume-up';
|
|
268
|
+
/** Detail carried by `helix-device-button`. */
|
|
269
|
+
export interface DeviceButtonDetail {
|
|
270
|
+
/** Which button was pressed. */
|
|
271
|
+
button: DeviceButton;
|
|
272
|
+
/**
|
|
273
|
+
* How long the button was held, in milliseconds. `0` for a press from a key
|
|
274
|
+
* or a script, which has no length.
|
|
275
|
+
*/
|
|
276
|
+
duration: number;
|
|
277
|
+
}
|
|
278
|
+
/** Detail carried by `helix-device-key`. */
|
|
279
|
+
export interface DeviceKeyDetail {
|
|
280
|
+
/** Whether Alt, or Option on a Mac, was held. */
|
|
281
|
+
altKey: boolean;
|
|
282
|
+
/** The physical key, as `KeyboardEvent.code` names it: `KeyA`, `Enter`, `ArrowLeft`. */
|
|
283
|
+
code: string;
|
|
284
|
+
/** Whether Control was held. */
|
|
285
|
+
ctrlKey: boolean;
|
|
286
|
+
/** What the press produced, as `KeyboardEvent.key` names it: `a`, `A`, `Enter`. */
|
|
287
|
+
key: string;
|
|
288
|
+
/** Whether Command on a Mac, or the Windows key, was held. */
|
|
289
|
+
metaKey: boolean;
|
|
290
|
+
/** Whether the key went down or came up. */
|
|
291
|
+
phase: 'down' | 'up';
|
|
292
|
+
/** Whether the press is the key repeating while it is held. */
|
|
293
|
+
repeat: boolean;
|
|
294
|
+
/** Whether Shift was held. */
|
|
295
|
+
shiftKey: boolean;
|
|
296
|
+
}
|
|
297
|
+
/** Detail carried by `helix-device-scroll`. */
|
|
298
|
+
export interface DeviceScrollDetail {
|
|
299
|
+
/** How far across, in device units, in the wheel's sense: positive scrolls toward the right. */
|
|
300
|
+
deltaX: number;
|
|
301
|
+
/** How far down, in device units, in the wheel's sense: positive scrolls toward the bottom. */
|
|
302
|
+
deltaY: number;
|
|
303
|
+
/** The screen's height in the units the point is measured in. */
|
|
304
|
+
height: number;
|
|
305
|
+
/** The screen's width in the units the point is measured in. */
|
|
306
|
+
width: number;
|
|
307
|
+
/** Where the pointer is, across from the screen's left edge. */
|
|
308
|
+
x: number;
|
|
309
|
+
/** Where the pointer is, down from the screen's top edge. */
|
|
310
|
+
y: number;
|
|
311
|
+
}
|
|
312
|
+
/** Detail carried by `helix-device-swipe`. */
|
|
313
|
+
export interface DeviceSwipeDetail {
|
|
314
|
+
/** How long the finger was down, in milliseconds. */
|
|
315
|
+
duration: number;
|
|
316
|
+
/** Where the touch began, across from the screen's left edge. */
|
|
317
|
+
fromX: number;
|
|
318
|
+
/** Where the touch began, down from the screen's top edge. */
|
|
319
|
+
fromY: number;
|
|
320
|
+
/** The screen's height in the units the points are measured in. */
|
|
321
|
+
height: number;
|
|
322
|
+
/** Where the touch ended, across from the screen's left edge. */
|
|
323
|
+
toX: number;
|
|
324
|
+
/** Where the touch ended, down from the screen's top edge. */
|
|
325
|
+
toY: number;
|
|
326
|
+
/** The screen's width in the units the points are measured in. */
|
|
327
|
+
width: number;
|
|
328
|
+
}
|
|
329
|
+
/** Detail carried by `helix-device-tap`. */
|
|
330
|
+
export interface DeviceTapDetail {
|
|
331
|
+
/** How long the finger was down, in milliseconds. A long press is a long tap. */
|
|
332
|
+
duration: number;
|
|
333
|
+
/** The screen's height in the units the point is measured in. */
|
|
334
|
+
height: number;
|
|
335
|
+
/** The screen's width in the units the point is measured in. */
|
|
336
|
+
width: number;
|
|
337
|
+
/** Where the tap was, across from the screen's left edge. */
|
|
338
|
+
x: number;
|
|
339
|
+
/** Where the tap was, down from the screen's top edge. */
|
|
340
|
+
y: number;
|
|
341
|
+
}
|
|
342
|
+
/** Detail carried by `helix-device-text`. */
|
|
343
|
+
export interface DeviceTextDetail {
|
|
344
|
+
/** The text, as plain text. */
|
|
345
|
+
text: string;
|
|
346
|
+
}
|
|
347
|
+
/** Detail carried by `helix-device-touch`. */
|
|
348
|
+
export interface DeviceTouchDetail {
|
|
349
|
+
/** The screen's height in the units the point is measured in. */
|
|
350
|
+
height: number;
|
|
351
|
+
/**
|
|
352
|
+
* Which finger, counting from `0`. A finger keeps its number until it lifts,
|
|
353
|
+
* and the lowest free number goes to the next finger down.
|
|
354
|
+
*/
|
|
355
|
+
id: number;
|
|
356
|
+
/**
|
|
357
|
+
* Where the touch is in its life: `down` as the finger lands, `move` as it
|
|
358
|
+
* moves, `up` as it lifts, and `cancel` when the browser takes the touch
|
|
359
|
+
* away, which ends it without a lift.
|
|
360
|
+
*/
|
|
361
|
+
phase: 'cancel' | 'down' | 'move' | 'up';
|
|
362
|
+
/** The screen's width in the units the point is measured in. */
|
|
363
|
+
width: number;
|
|
364
|
+
/** Where the finger is, across from the screen's left edge. */
|
|
365
|
+
x: number;
|
|
366
|
+
/** Where the finger is, down from the screen's top edge. */
|
|
367
|
+
y: number;
|
|
368
|
+
}
|
|
266
369
|
/** Detail carried by `helix-dismiss`. */
|
|
267
370
|
export interface DismissDetail {
|
|
268
371
|
/** Text content of the element asking to go, for identifying which it was. */
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DeviceButtonDetail } from './details.js';
|
|
2
|
+
/**
|
|
3
|
+
* A hardware button on the device was pressed, from Device Screen's controls
|
|
4
|
+
* or from `press()`. Press it on the device in response.
|
|
5
|
+
*
|
|
6
|
+
* **Sent once, as the button comes back up, with how long it was held.** A
|
|
7
|
+
* source that presses a button for a length of time, such as holding the side
|
|
8
|
+
* button for Siri, reads `duration`, and one that only presses reads nothing
|
|
9
|
+
* else. Not cancelable: nothing in Helix acts on the press.
|
|
10
|
+
*/
|
|
11
|
+
export declare class HelixDeviceButtonEvent extends CustomEvent<DeviceButtonDetail> {
|
|
12
|
+
static readonly eventName = "helix-device-button";
|
|
13
|
+
constructor(detail: DeviceButtonDetail);
|
|
14
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class HelixDeviceButtonEvent extends CustomEvent {
|
|
2
|
+
static { this.eventName = 'helix-device-button'; }
|
|
3
|
+
constructor(detail) {
|
|
4
|
+
super(HelixDeviceButtonEvent.eventName, {
|
|
5
|
+
bubbles: true,
|
|
6
|
+
cancelable: false,
|
|
7
|
+
composed: true,
|
|
8
|
+
detail,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DeviceKeyDetail } from './details.js';
|
|
2
|
+
/**
|
|
3
|
+
* A key went down or came up while Device Screen had focus. Press or release
|
|
4
|
+
* it on the device in response.
|
|
5
|
+
*
|
|
6
|
+
* **Every key is sent twice, down and up, as a hardware keyboard sends it.**
|
|
7
|
+
* The device's own input method turns the presses into text, so a language
|
|
8
|
+
* that composes characters composes them on the device. `code` names the
|
|
9
|
+
* physical key, for a source that injects key codes, and `key` names what the
|
|
10
|
+
* press produced, for a source that types text. Not cancelable: the frame has
|
|
11
|
+
* already kept the press from the page.
|
|
12
|
+
*/
|
|
13
|
+
export declare class HelixDeviceKeyEvent extends CustomEvent<DeviceKeyDetail> {
|
|
14
|
+
static readonly eventName = "helix-device-key";
|
|
15
|
+
constructor(detail: DeviceKeyDetail);
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A screenshot of the device was asked for, from Device Screen's screenshot
|
|
3
|
+
* button or from `screenshot()`. Take one in response.
|
|
4
|
+
*
|
|
5
|
+
* **A request with nothing attached.** The device's own screenshot is sharper
|
|
6
|
+
* than any frame of a stream, so the page takes it the way its source allows.
|
|
7
|
+
* `capture()` on the frame returns the picture on screen, for a page with no
|
|
8
|
+
* better way. Not cancelable: nothing in Helix takes the screenshot.
|
|
9
|
+
*/
|
|
10
|
+
export declare class HelixDeviceScreenshotEvent extends Event {
|
|
11
|
+
static readonly eventName = "helix-device-screenshot";
|
|
12
|
+
constructor();
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DeviceScrollDetail } from './details.js';
|
|
2
|
+
/**
|
|
3
|
+
* A wheel or a trackpad scrolled over Device Screen. Scroll the device in
|
|
4
|
+
* response.
|
|
5
|
+
*
|
|
6
|
+
* The distance is in device units and keeps the wheel's sense, so a positive
|
|
7
|
+
* `deltaY` asks for what is further down. A source that scrolls by swiping
|
|
8
|
+
* moves a finger the other way. Not cancelable: the frame has already kept the
|
|
9
|
+
* scroll from the page.
|
|
10
|
+
*/
|
|
11
|
+
export declare class HelixDeviceScrollEvent extends CustomEvent<DeviceScrollDetail> {
|
|
12
|
+
static readonly eventName = "helix-device-scroll";
|
|
13
|
+
constructor(detail: DeviceScrollDetail);
|
|
14
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class HelixDeviceScrollEvent extends CustomEvent {
|
|
2
|
+
static { this.eventName = 'helix-device-scroll'; }
|
|
3
|
+
constructor(detail) {
|
|
4
|
+
super(HelixDeviceScrollEvent.eventName, {
|
|
5
|
+
bubbles: true,
|
|
6
|
+
cancelable: false,
|
|
7
|
+
composed: true,
|
|
8
|
+
detail,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DeviceSwipeDetail } from './details.js';
|
|
2
|
+
/**
|
|
3
|
+
* One finger moved across Device Screen and lifted. Swipe the device in
|
|
4
|
+
* response.
|
|
5
|
+
*
|
|
6
|
+
* **For a source that takes whole gestures**, such as a command that swipes
|
|
7
|
+
* from one point to another over a length of time. A source that takes each
|
|
8
|
+
* touch as it happens listens for `helix-device-touch` instead, and a page
|
|
9
|
+
* that listened for both would move the device twice. A touch with more than
|
|
10
|
+
* one finger sends no swipe. Not cancelable: nothing in Helix acts on it.
|
|
11
|
+
*/
|
|
12
|
+
export declare class HelixDeviceSwipeEvent extends CustomEvent<DeviceSwipeDetail> {
|
|
13
|
+
static readonly eventName = "helix-device-swipe";
|
|
14
|
+
constructor(detail: DeviceSwipeDetail);
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DeviceTapDetail } from './details.js';
|
|
2
|
+
/**
|
|
3
|
+
* One finger touched Device Screen and lifted near where it landed. Tap the
|
|
4
|
+
* device in response.
|
|
5
|
+
*
|
|
6
|
+
* **For a source that takes whole gestures**, as `helix-device-swipe` is. A
|
|
7
|
+
* long press is a tap with a long `duration`, which a source holds for that
|
|
8
|
+
* long. Not cancelable: nothing in Helix acts on it.
|
|
9
|
+
*/
|
|
10
|
+
export declare class HelixDeviceTapEvent extends CustomEvent<DeviceTapDetail> {
|
|
11
|
+
static readonly eventName = "helix-device-tap";
|
|
12
|
+
constructor(detail: DeviceTapDetail);
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DeviceTextDetail } from './details.js';
|
|
2
|
+
/**
|
|
3
|
+
* Text was pasted into Device Screen. Type it on the device in response.
|
|
4
|
+
*
|
|
5
|
+
* **Pasted text has no key presses of its own**, so it arrives whole, in one
|
|
6
|
+
* event. Command or Control with V pastes in every mode, `forward-shortcuts`
|
|
7
|
+
* included. Not cancelable: the frame has
|
|
8
|
+
* already kept the paste from the page.
|
|
9
|
+
*/
|
|
10
|
+
export declare class HelixDeviceTextEvent extends CustomEvent<DeviceTextDetail> {
|
|
11
|
+
static readonly eventName = "helix-device-text";
|
|
12
|
+
constructor(detail: DeviceTextDetail);
|
|
13
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DeviceTouchDetail } from './details.js';
|
|
2
|
+
/**
|
|
3
|
+
* A finger landed on Device Screen, moved, lifted, or was taken away. Touch
|
|
4
|
+
* the device in response.
|
|
5
|
+
*
|
|
6
|
+
* **For a source that takes each touch as it happens**, which is what a drag,
|
|
7
|
+
* a long press that turns into a drag, and a pinch need. One event per finger
|
|
8
|
+
* per step, so a pinch sends two at a time with different `id`s. A source that
|
|
9
|
+
* only taps and swipes listens for `helix-device-tap` and `helix-device-swipe`
|
|
10
|
+
* instead. Not cancelable: nothing in Helix acts on it.
|
|
11
|
+
*/
|
|
12
|
+
export declare class HelixDeviceTouchEvent extends CustomEvent<DeviceTouchDetail> {
|
|
13
|
+
static readonly eventName = "helix-device-touch";
|
|
14
|
+
constructor(detail: DeviceTouchDetail);
|
|
15
|
+
}
|
package/dist/events/events.d.ts
CHANGED
|
@@ -61,6 +61,14 @@ import { HelixConsoleEvent } from './console.js';
|
|
|
61
61
|
import { HelixCopyEvent } from './copy.js';
|
|
62
62
|
import { HelixCopyErrorEvent } from './copy-error.js';
|
|
63
63
|
import { HelixCreateEvent } from './create.js';
|
|
64
|
+
import { HelixDeviceButtonEvent } from './device-button.js';
|
|
65
|
+
import { HelixDeviceKeyEvent } from './device-key.js';
|
|
66
|
+
import { HelixDeviceScreenshotEvent } from './device-screenshot.js';
|
|
67
|
+
import { HelixDeviceScrollEvent } from './device-scroll.js';
|
|
68
|
+
import { HelixDeviceSwipeEvent } from './device-swipe.js';
|
|
69
|
+
import { HelixDeviceTapEvent } from './device-tap.js';
|
|
70
|
+
import { HelixDeviceTextEvent } from './device-text.js';
|
|
71
|
+
import { HelixDeviceTouchEvent } from './device-touch.js';
|
|
64
72
|
import { HelixDismissEvent } from './dismiss.js';
|
|
65
73
|
import { HelixEditEvent } from './edit.js';
|
|
66
74
|
import { HelixEndEvent } from './end.js';
|
|
@@ -129,9 +137,9 @@ import { HelixToggleEvent } from './toggle.js';
|
|
|
129
137
|
import { HelixTourAskEvent } from './tour-ask.js';
|
|
130
138
|
import { HelixTourStatusEvent } from './tour-status.js';
|
|
131
139
|
import { HelixTypingEvent } from './typing.js';
|
|
132
|
-
export type { ActivateDetail, AuraFallbackDetail, BandDetail, CanvasView, CaretDetail, ChangeDetail, CompleteDetail, ConnectDetail, ConsoleDetail, CopyDetail, CreateDetail, DismissDetail, FacetDetail, FilterDetail, GraphFilterDetail, GraphLayoutDetail, GraphPartChangeDetail, GraphSignalDetail, MapClusterDetail, MapPanDetail, MapPartChangeDetail, MapRotateDetail, MapTiltDetail, MapZoomDetail, MoveDetail, NavigateDetail, OpenDetail, PasteDetail, PlotChangeDetail, PlotTurnDetail, PressDetail, PressPointerType, RangeDetail, ReadDetail, ReadingDetail, ReconnectDetail, Refusal, RefusedFile, RejectDetail, RelabelDetail, RemoveDetail, ReorderDetail, ResizeDetail, ScrolledDetail, SelectDetail, SendDetail, ShortcutDetail, SkipDetail, SortDetail, StrandsFallbackDetail, TerminalInputDetail, TerminalLinkDetail, TerminalResizeDetail, TerminalTitleDetail, ToggleDetail, TourAskDetail, TourStatusDetail, TypingDetail, ViewportPanDetail, ViewportZoomDetail, } from './details.js';
|
|
140
|
+
export type { ActivateDetail, AuraFallbackDetail, BandDetail, CanvasView, CaretDetail, ChangeDetail, CompleteDetail, ConnectDetail, ConsoleDetail, CopyDetail, CreateDetail, DeviceButton, DeviceButtonDetail, DeviceKeyDetail, DeviceScrollDetail, DeviceSwipeDetail, DeviceTapDetail, DeviceTextDetail, DeviceTouchDetail, DismissDetail, FacetDetail, FilterDetail, GraphFilterDetail, GraphLayoutDetail, GraphPartChangeDetail, GraphSignalDetail, MapClusterDetail, MapPanDetail, MapPartChangeDetail, MapRotateDetail, MapTiltDetail, MapZoomDetail, MoveDetail, NavigateDetail, OpenDetail, PasteDetail, PlotChangeDetail, PlotTurnDetail, PressDetail, PressPointerType, RangeDetail, ReadDetail, ReadingDetail, ReconnectDetail, Refusal, RefusedFile, RejectDetail, RelabelDetail, RemoveDetail, ReorderDetail, ResizeDetail, ScrolledDetail, SelectDetail, SendDetail, ShortcutDetail, SkipDetail, SortDetail, StrandsFallbackDetail, TerminalInputDetail, TerminalLinkDetail, TerminalResizeDetail, TerminalTitleDetail, ToggleDetail, TourAskDetail, TourStatusDetail, TypingDetail, ViewportPanDetail, ViewportZoomDetail, } from './details.js';
|
|
133
141
|
export { helixEventNames } from './names.js';
|
|
134
|
-
export { HelixActionEvent, HelixActivateEvent, HelixAuraFallbackEvent, HelixBandEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePasteEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeReorderEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixClearEvent, HelixCollapseEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyErrorEvent, HelixCopyEvent, HelixCreateEvent, HelixDismissEvent, HelixEditEvent, HelixEndEvent, HelixExpandEvent, HelixFacetEvent, HelixFilterEvent, HelixFilteredEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixLoadEvent, HelixLoadMoreEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPanelResizeEvent, HelixPastedEvent, HelixPinEvent, HelixPlotChangeEvent, HelixPlotTurnEvent, HelixPressEvent, HelixPreviewEvent, HelixPreviousEvent, HelixRangeChangeEvent, HelixReadEvent, HelixReadingChangeEvent, HelixReadingPressEvent, HelixReconnectEvent, HelixRejectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixReorderedEvent, HelixResizedEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSelectedEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixSortedEvent, HelixSplitEvent, HelixStrandsFallbackEvent, HelixTerminalBellEvent, HelixTerminalInputEvent, HelixTerminalLinkEvent, HelixTerminalResizeEvent, HelixTerminalRestartEvent, HelixTerminalTitleEvent, HelixToggleEvent, HelixTourAskEvent, HelixTourStatusEvent, HelixTypingEvent, };
|
|
142
|
+
export { HelixActionEvent, HelixActivateEvent, HelixAuraFallbackEvent, HelixBandEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePasteEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeReorderEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixClearEvent, HelixCollapseEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyErrorEvent, HelixCopyEvent, HelixCreateEvent, HelixDeviceButtonEvent, HelixDeviceKeyEvent, HelixDeviceScreenshotEvent, HelixDeviceScrollEvent, HelixDeviceSwipeEvent, HelixDeviceTapEvent, HelixDeviceTextEvent, HelixDeviceTouchEvent, HelixDismissEvent, HelixEditEvent, HelixEndEvent, HelixExpandEvent, HelixFacetEvent, HelixFilterEvent, HelixFilteredEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixLoadEvent, HelixLoadMoreEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPanelResizeEvent, HelixPastedEvent, HelixPinEvent, HelixPlotChangeEvent, HelixPlotTurnEvent, HelixPressEvent, HelixPreviewEvent, HelixPreviousEvent, HelixRangeChangeEvent, HelixReadEvent, HelixReadingChangeEvent, HelixReadingPressEvent, HelixReconnectEvent, HelixRejectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixReorderedEvent, HelixResizedEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSelectedEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixSortedEvent, HelixSplitEvent, HelixStrandsFallbackEvent, HelixTerminalBellEvent, HelixTerminalInputEvent, HelixTerminalLinkEvent, HelixTerminalResizeEvent, HelixTerminalRestartEvent, HelixTerminalTitleEvent, HelixToggleEvent, HelixTourAskEvent, HelixTourStatusEvent, HelixTypingEvent, };
|
|
135
143
|
/**
|
|
136
144
|
* Every event class, and the one place a new one is registered: a class in a
|
|
137
145
|
* module of its own, imported above, and named here and in `names.ts`.
|
|
@@ -178,6 +186,14 @@ declare const registry: {
|
|
|
178
186
|
readonly HelixCopyErrorEvent: typeof HelixCopyErrorEvent;
|
|
179
187
|
readonly HelixCopyEvent: typeof HelixCopyEvent;
|
|
180
188
|
readonly HelixCreateEvent: typeof HelixCreateEvent;
|
|
189
|
+
readonly HelixDeviceButtonEvent: typeof HelixDeviceButtonEvent;
|
|
190
|
+
readonly HelixDeviceKeyEvent: typeof HelixDeviceKeyEvent;
|
|
191
|
+
readonly HelixDeviceScreenshotEvent: typeof HelixDeviceScreenshotEvent;
|
|
192
|
+
readonly HelixDeviceScrollEvent: typeof HelixDeviceScrollEvent;
|
|
193
|
+
readonly HelixDeviceSwipeEvent: typeof HelixDeviceSwipeEvent;
|
|
194
|
+
readonly HelixDeviceTapEvent: typeof HelixDeviceTapEvent;
|
|
195
|
+
readonly HelixDeviceTextEvent: typeof HelixDeviceTextEvent;
|
|
196
|
+
readonly HelixDeviceTouchEvent: typeof HelixDeviceTouchEvent;
|
|
181
197
|
readonly HelixDismissEvent: typeof HelixDismissEvent;
|
|
182
198
|
readonly HelixEditEvent: typeof HelixEditEvent;
|
|
183
199
|
readonly HelixEndEvent: typeof HelixEndEvent;
|
package/dist/events/events.js
CHANGED
|
@@ -31,6 +31,14 @@ import { HelixConsoleEvent } from './console.js';
|
|
|
31
31
|
import { HelixCopyEvent } from './copy.js';
|
|
32
32
|
import { HelixCopyErrorEvent } from './copy-error.js';
|
|
33
33
|
import { HelixCreateEvent } from './create.js';
|
|
34
|
+
import { HelixDeviceButtonEvent } from './device-button.js';
|
|
35
|
+
import { HelixDeviceKeyEvent } from './device-key.js';
|
|
36
|
+
import { HelixDeviceScreenshotEvent } from './device-screenshot.js';
|
|
37
|
+
import { HelixDeviceScrollEvent } from './device-scroll.js';
|
|
38
|
+
import { HelixDeviceSwipeEvent } from './device-swipe.js';
|
|
39
|
+
import { HelixDeviceTapEvent } from './device-tap.js';
|
|
40
|
+
import { HelixDeviceTextEvent } from './device-text.js';
|
|
41
|
+
import { HelixDeviceTouchEvent } from './device-touch.js';
|
|
34
42
|
import { HelixDismissEvent } from './dismiss.js';
|
|
35
43
|
import { HelixEditEvent } from './edit.js';
|
|
36
44
|
import { HelixEndEvent } from './end.js';
|
|
@@ -100,7 +108,7 @@ import { HelixTourAskEvent } from './tour-ask.js';
|
|
|
100
108
|
import { HelixTourStatusEvent } from './tour-status.js';
|
|
101
109
|
import { HelixTypingEvent } from './typing.js';
|
|
102
110
|
export { helixEventNames } from './names.js';
|
|
103
|
-
export { HelixActionEvent, HelixActivateEvent, HelixAuraFallbackEvent, HelixBandEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePasteEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeReorderEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixClearEvent, HelixCollapseEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyErrorEvent, HelixCopyEvent, HelixCreateEvent, HelixDismissEvent, HelixEditEvent, HelixEndEvent, HelixExpandEvent, HelixFacetEvent, HelixFilterEvent, HelixFilteredEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixLoadEvent, HelixLoadMoreEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPanelResizeEvent, HelixPastedEvent, HelixPinEvent, HelixPlotChangeEvent, HelixPlotTurnEvent, HelixPressEvent, HelixPreviewEvent, HelixPreviousEvent, HelixRangeChangeEvent, HelixReadEvent, HelixReadingChangeEvent, HelixReadingPressEvent, HelixReconnectEvent, HelixRejectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixReorderedEvent, HelixResizedEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSelectedEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixSortedEvent, HelixSplitEvent, HelixStrandsFallbackEvent, HelixTerminalBellEvent, HelixTerminalInputEvent, HelixTerminalLinkEvent, HelixTerminalResizeEvent, HelixTerminalRestartEvent, HelixTerminalTitleEvent, HelixToggleEvent, HelixTourAskEvent, HelixTourStatusEvent, HelixTypingEvent, };
|
|
111
|
+
export { HelixActionEvent, HelixActivateEvent, HelixAuraFallbackEvent, HelixBandEvent, HelixBeforeActivateEvent, HelixBeforeChangeEvent, HelixBeforeCloseEvent, HelixBeforeCollapseEvent, HelixBeforeEditEvent, HelixBeforeMoveEvent, HelixBeforeOpenEvent, HelixBeforePanelResizeEvent, HelixBeforePasteEvent, HelixBeforePinEvent, HelixBeforeReconnectEvent, HelixBeforeRelabelEvent, HelixBeforeReorderEvent, HelixBeforeResizeEvent, HelixBeforeSplitEvent, HelixBeforeToggleEvent, HelixCanvasEditEvent, HelixCanvasPanEvent, HelixCanvasViewEvent, HelixCanvasZoomEvent, HelixCaretEvent, HelixClearEvent, HelixCollapseEvent, HelixCompleteEvent, HelixConnectEvent, HelixConsoleEvent, HelixCopyErrorEvent, HelixCopyEvent, HelixCreateEvent, HelixDeviceButtonEvent, HelixDeviceKeyEvent, HelixDeviceScreenshotEvent, HelixDeviceScrollEvent, HelixDeviceSwipeEvent, HelixDeviceTapEvent, HelixDeviceTextEvent, HelixDeviceTouchEvent, HelixDismissEvent, HelixEditEvent, HelixEndEvent, HelixExpandEvent, HelixFacetEvent, HelixFilterEvent, HelixFilteredEvent, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, HelixHistoryEvent, HelixLoadEvent, HelixLoadMoreEvent, HelixMapClusterEvent, HelixMapPanEvent, HelixMapPartChangeEvent, HelixMapReadyEvent, HelixMapRotateEvent, HelixMapTiltEvent, HelixMapZoomEvent, HelixMoveEvent, HelixNavigateEvent, HelixNextEvent, HelixPanelResizeEvent, HelixPastedEvent, HelixPinEvent, HelixPlotChangeEvent, HelixPlotTurnEvent, HelixPressEvent, HelixPreviewEvent, HelixPreviousEvent, HelixRangeChangeEvent, HelixReadEvent, HelixReadingChangeEvent, HelixReadingPressEvent, HelixReconnectEvent, HelixRejectEvent, HelixRelabelEvent, HelixRemoveEvent, HelixReorderEvent, HelixReorderedEvent, HelixResizedEvent, HelixResizeEvent, HelixSampleEndEvent, HelixSampleStartEvent, HelixScrolledEvent, HelixSelectEvent, HelixSelectedEvent, HelixSendEvent, HelixShortcutEvent, HelixSortEvent, HelixSortedEvent, HelixSplitEvent, HelixStrandsFallbackEvent, HelixTerminalBellEvent, HelixTerminalInputEvent, HelixTerminalLinkEvent, HelixTerminalResizeEvent, HelixTerminalRestartEvent, HelixTerminalTitleEvent, HelixToggleEvent, HelixTourAskEvent, HelixTourStatusEvent, HelixTypingEvent, };
|
|
104
112
|
const registry = {
|
|
105
113
|
HelixActionEvent,
|
|
106
114
|
HelixActivateEvent,
|
|
@@ -135,6 +143,14 @@ const registry = {
|
|
|
135
143
|
HelixCopyErrorEvent,
|
|
136
144
|
HelixCopyEvent,
|
|
137
145
|
HelixCreateEvent,
|
|
146
|
+
HelixDeviceButtonEvent,
|
|
147
|
+
HelixDeviceKeyEvent,
|
|
148
|
+
HelixDeviceScreenshotEvent,
|
|
149
|
+
HelixDeviceScrollEvent,
|
|
150
|
+
HelixDeviceSwipeEvent,
|
|
151
|
+
HelixDeviceTapEvent,
|
|
152
|
+
HelixDeviceTextEvent,
|
|
153
|
+
HelixDeviceTouchEvent,
|
|
138
154
|
HelixDismissEvent,
|
|
139
155
|
HelixEditEvent,
|
|
140
156
|
HelixEndEvent,
|
package/dist/events/names.js
CHANGED
|
@@ -2,7 +2,8 @@ export const helixEventNames = new Set(('action activate aura-fallback band befo
|
|
|
2
2
|
'before-collapse before-edit before-move before-open before-panel-resize before-paste before-pin ' +
|
|
3
3
|
'before-reconnect before-relabel before-reorder before-resize before-split before-toggle ' +
|
|
4
4
|
'canvas-edit canvas-pan canvas-view canvas-zoom caret clear collapse complete ' +
|
|
5
|
-
'connect console copy copy-error create
|
|
5
|
+
'connect console copy copy-error create device-button device-key device-screenshot ' +
|
|
6
|
+
'device-scroll device-swipe device-tap device-text device-touch dismiss edit end expand facet filter ' +
|
|
6
7
|
'filtered graph-filter graph-layout graph-pan graph-part-change graph-ready ' +
|
|
7
8
|
'graph-signal graph-zoom history load load-more map-cluster map-pan map-part-change ' +
|
|
8
9
|
'map-ready map-rotate map-tilt map-zoom move navigate next panel-resize pasted pin plot-change ' +
|
|
@@ -280,8 +280,8 @@ export declare class HelixElement extends LitElement {
|
|
|
280
280
|
protected relayNativeEvent(event: Event, init?: EventInit): void;
|
|
281
281
|
/**
|
|
282
282
|
* The rules from `mark-rules.ts` for the marks this element writes in its
|
|
283
|
-
* own shadow root: `data-scroller`, `data-virtual`, `data-spoken
|
|
284
|
-
* `data-mirror`.
|
|
283
|
+
* own shadow root: `data-scroller`, `data-virtual`, `data-spoken`,
|
|
284
|
+
* `data-mirror` and `data-touches`.
|
|
285
285
|
*
|
|
286
286
|
* A component that writes a mark names its rule here, and a subclass
|
|
287
287
|
* inherits the list. One that writes none takes only the three rules every
|
|
@@ -117,3 +117,17 @@ export declare const SPOKEN_RULE = "[data-spoken]{position:absolute;inline-size:
|
|
|
117
117
|
* whatever the script, and so is a picture of a key.
|
|
118
118
|
*/
|
|
119
119
|
export declare const MIRROR_RULE = ":host(:dir(rtl)) [data-mirror]{scale:-1 1}";
|
|
120
|
+
/**
|
|
121
|
+
* Hands every touch on an element to the component, which reads each one as
|
|
122
|
+
* input of its own.
|
|
123
|
+
*
|
|
124
|
+
* **Without it a one-finger drag is the page's.** The browser scrolls or zooms
|
|
125
|
+
* and sends the component `pointercancel`, so it never sees the finger move or
|
|
126
|
+
* lift. Device Screen turns touches into touches on a device and has that
|
|
127
|
+
* behavior only while `touch-action` is `none`, which makes the rule a
|
|
128
|
+
* mechanism, as the scroller's `overflow` is.
|
|
129
|
+
*
|
|
130
|
+
* Marked only while the component takes touches, so a read-only Device Screen
|
|
131
|
+
* leaves the page its scroll.
|
|
132
|
+
*/
|
|
133
|
+
export declare const TOUCHES_RULE = "[data-touches]{touch-action:none}";
|
|
@@ -2,3 +2,4 @@ export const SCROLLER_RULE = '[data-scroller]{overflow:auto}';
|
|
|
2
2
|
export const VIRTUAL_RULE = '[data-virtual]{overflow-anchor:none}';
|
|
3
3
|
export const SPOKEN_RULE = '[data-spoken]{position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}';
|
|
4
4
|
export const MIRROR_RULE = ':host(:dir(rtl)) [data-mirror]{scale:-1 1}';
|
|
5
|
+
export const TOUCHES_RULE = '[data-touches]{touch-action:none}';
|