@jsenv/dom 0.6.1 → 0.7.1

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.
Files changed (109) hide show
  1. package/dist/jsenv_dom.js +339 -327
  2. package/package.json +2 -4
  3. package/index.js +0 -124
  4. package/src/attr/add_attribute_effect.js +0 -93
  5. package/src/attr/attributes.js +0 -32
  6. package/src/color/color_constrast.js +0 -69
  7. package/src/color/color_parsing.js +0 -319
  8. package/src/color/color_scheme.js +0 -28
  9. package/src/color/pick_light_or_dark.js +0 -34
  10. package/src/color/resolve_css_color.js +0 -60
  11. package/src/demos/3_columns_resize_demo.html +0 -84
  12. package/src/demos/3_rows_resize_demo.html +0 -89
  13. package/src/demos/aside_and_main_demo.html +0 -93
  14. package/src/demos/coordinates_demo.html +0 -450
  15. package/src/demos/document_autoscroll_demo.html +0 -517
  16. package/src/demos/drag_gesture_constraints_demo.html +0 -701
  17. package/src/demos/drag_gesture_demo.html +0 -1047
  18. package/src/demos/drag_gesture_element_to_impact_demo.html +0 -445
  19. package/src/demos/drag_reference_element_demo.html +0 -480
  20. package/src/demos/flex_details_set_demo.html +0 -302
  21. package/src/demos/flex_details_set_demo_2.html +0 -315
  22. package/src/demos/visible_rect_demo.html +0 -525
  23. package/src/element_signature.js +0 -100
  24. package/src/interaction/drag/constraint_feedback_line.js +0 -92
  25. package/src/interaction/drag/drag_constraint.js +0 -659
  26. package/src/interaction/drag/drag_debug_markers.js +0 -635
  27. package/src/interaction/drag/drag_element_positioner.js +0 -382
  28. package/src/interaction/drag/drag_gesture.js +0 -566
  29. package/src/interaction/drag/drag_resize_demo.html +0 -571
  30. package/src/interaction/drag/drag_to_move.js +0 -301
  31. package/src/interaction/drag/drag_to_resize_gesture.js +0 -68
  32. package/src/interaction/drag/drop_target_detection.js +0 -148
  33. package/src/interaction/drag/sticky_frontiers.js +0 -160
  34. package/src/interaction/event_marker.js +0 -14
  35. package/src/interaction/focus/active_element.js +0 -33
  36. package/src/interaction/focus/arrow_navigation.js +0 -599
  37. package/src/interaction/focus/element_is_focusable.js +0 -57
  38. package/src/interaction/focus/element_visibility.js +0 -111
  39. package/src/interaction/focus/find_focusable.js +0 -21
  40. package/src/interaction/focus/focus_group.js +0 -91
  41. package/src/interaction/focus/focus_group_registry.js +0 -12
  42. package/src/interaction/focus/focus_nav.js +0 -12
  43. package/src/interaction/focus/focus_nav_event_marker.js +0 -14
  44. package/src/interaction/focus/focus_trap.js +0 -105
  45. package/src/interaction/focus/tab_navigation.js +0 -128
  46. package/src/interaction/focus/tests/focus_group_skip_tab_test.html +0 -206
  47. package/src/interaction/focus/tests/tree_focus_test.html +0 -304
  48. package/src/interaction/focus/tests/tree_focus_test.jsx +0 -261
  49. package/src/interaction/focus/tests/tree_focus_test_preact.html +0 -13
  50. package/src/interaction/isolate_interactions.js +0 -161
  51. package/src/interaction/keyboard.js +0 -26
  52. package/src/interaction/scroll/capture_scroll.js +0 -47
  53. package/src/interaction/scroll/is_scrollable.js +0 -159
  54. package/src/interaction/scroll/scroll_container.js +0 -110
  55. package/src/interaction/scroll/scroll_trap.js +0 -44
  56. package/src/interaction/scroll/scrollbar_size.js +0 -20
  57. package/src/interaction/scroll/wheel_through.js +0 -138
  58. package/src/iterable_weak_set.js +0 -66
  59. package/src/position/dom_coords.js +0 -340
  60. package/src/position/offset_parent.js +0 -15
  61. package/src/position/position_fixed.js +0 -15
  62. package/src/position/position_sticky.js +0 -213
  63. package/src/position/sticky_rect.js +0 -79
  64. package/src/position/visible_rect.js +0 -486
  65. package/src/pub_sub.js +0 -31
  66. package/src/size/can_take_size.js +0 -11
  67. package/src/size/details_content_full_height.js +0 -63
  68. package/src/size/flex_details_set.js +0 -974
  69. package/src/size/get_available_height.js +0 -22
  70. package/src/size/get_available_width.js +0 -22
  71. package/src/size/get_border_sizes.js +0 -14
  72. package/src/size/get_height.js +0 -4
  73. package/src/size/get_inner_height.js +0 -15
  74. package/src/size/get_inner_width.js +0 -15
  75. package/src/size/get_margin_sizes.js +0 -10
  76. package/src/size/get_max_height.js +0 -57
  77. package/src/size/get_max_width.js +0 -47
  78. package/src/size/get_min_height.js +0 -14
  79. package/src/size/get_min_width.js +0 -14
  80. package/src/size/get_padding_sizes.js +0 -10
  81. package/src/size/get_width.js +0 -4
  82. package/src/size/hooks/use_available_height.js +0 -27
  83. package/src/size/hooks/use_available_width.js +0 -27
  84. package/src/size/hooks/use_max_height.js +0 -10
  85. package/src/size/hooks/use_max_width.js +0 -10
  86. package/src/size/hooks/use_resize_status.js +0 -62
  87. package/src/size/resize.js +0 -695
  88. package/src/size/resolve_css_size.js +0 -32
  89. package/src/style/dom_styles.js +0 -97
  90. package/src/style/style_composition.js +0 -121
  91. package/src/style/style_controller.js +0 -345
  92. package/src/style/style_default.js +0 -153
  93. package/src/style/style_default_demo.html +0 -128
  94. package/src/style/style_parsing.js +0 -375
  95. package/src/transition/demos/animation_resumption_test.xhtml +0 -500
  96. package/src/transition/demos/height_toggle_test.xhtml +0 -515
  97. package/src/transition/dom_transition.js +0 -254
  98. package/src/transition/easing.js +0 -48
  99. package/src/transition/group_transition.js +0 -261
  100. package/src/transition/transform_style_parser.js +0 -32
  101. package/src/transition/transition_playback.js +0 -366
  102. package/src/transition/transition_timeline.js +0 -79
  103. package/src/traversal.js +0 -247
  104. package/src/ui_transition/demos/content_states_transition_demo.html +0 -628
  105. package/src/ui_transition/demos/smooth_height_transition_demo.html +0 -149
  106. package/src/ui_transition/demos/transition_testing.html +0 -354
  107. package/src/ui_transition/ui_transition.js +0 -1470
  108. package/src/utils.js +0 -69
  109. package/src/value_effect.js +0 -35
@@ -1,517 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Document Auto-Scroll Demo</title>
7
- <style>
8
- body {
9
- margin: 0;
10
- padding: 20px;
11
- font-family: Arial, sans-serif;
12
- background: #f0f0f0;
13
- min-height: 300vh; /* Make page tall enough to scroll */
14
- min-width: 200vw;
15
- }
16
-
17
- .demo-header {
18
- background: white;
19
- padding: 20px;
20
- border-radius: 8px;
21
- margin-bottom: 20px;
22
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
23
- }
24
-
25
- .demo-title {
26
- margin: 0 0 10px 0;
27
- font-size: 24px;
28
- color: #333;
29
- }
30
-
31
- .demo-description {
32
- margin: 0;
33
- color: #666;
34
- line-height: 1.5;
35
- }
36
-
37
- .draggable-element {
38
- width: 120px;
39
- height: 80px;
40
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
41
- border: 10px solid #333;
42
- /* border-radius: 12px; */
43
- cursor: grab;
44
- display: flex;
45
- align-items: center;
46
- justify-content: center;
47
- color: white;
48
- font-weight: bold;
49
- text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
50
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
51
- transition: box-shadow 0.2s ease;
52
- z-index: 1000;
53
- user-select: none;
54
- }
55
-
56
- .draggable-element:hover {
57
- box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);
58
- }
59
-
60
- .draggable-element[data-dragging] {
61
- cursor: grabbing;
62
- box-shadow: 0 8px 20px rgba(0, 0, 0, 0.5);
63
- }
64
-
65
- .content-section {
66
- background: white;
67
- margin: 40px 0;
68
- padding: 40px;
69
- border-radius: 8px;
70
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
71
- text-align: center;
72
- }
73
-
74
- .content-section:nth-child(even) {
75
- background: linear-gradient(135deg, #e3f2fd, #bbdefb);
76
- color: #1976d2;
77
- }
78
-
79
- .content-section:nth-child(odd) {
80
- background: linear-gradient(135deg, #f3e5f5, #ce93d8);
81
- color: #7b1fa2;
82
- }
83
-
84
- .scroll-indicator {
85
- position: fixed;
86
- top: 10px;
87
- right: 10px;
88
- background: rgba(0, 0, 0, 0.8);
89
- color: white;
90
- padding: 10px;
91
- border-radius: 4px;
92
- font-family: monospace;
93
- font-size: 12px;
94
- z-index: 2000;
95
- }
96
- </style>
97
- </head>
98
- <body>
99
- <div class="demo-header">
100
- <h1 class="demo-title">Document Auto-Scroll Demo</h1>
101
- <p class="demo-description">
102
- This demo tests document auto-scrolling behavior when dragging an
103
- element.
104
- <br /><strong>Instructions:</strong> Drag the purple element near the
105
- top or bottom edges of the viewport to trigger auto-scrolling. <br />The
106
- document itself is the scrollable parent, so scrolling should work
107
- throughout the entire page.
108
- </p>
109
- </div>
110
-
111
- <div
112
- data-draggable
113
- class="draggable-element"
114
- style="position: absolute; left: 300px"
115
- >
116
- Drag Me
117
- </div>
118
-
119
- <div style="position: relative; inset: 0; left: 350px; top: 100px">
120
- <div class="draggable-element" data-draggable style="position: absolute">
121
- Drag Me (custom positioned parent)
122
- </div>
123
- </div>
124
-
125
- <!-- Programmatic Controls -->
126
- <div
127
- style="
128
- background: white;
129
- padding: 15px;
130
- border-radius: 8px;
131
- margin-bottom: 20px;
132
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
133
- max-width: 300px;
134
- "
135
- >
136
- <h3 style="margin: 0 0 15px 0; font-size: 16px; color: #333">
137
- Programmatic Controls
138
- </h3>
139
- <div style="display: flex; flex-direction: column; gap: 8px">
140
- <button
141
- id="grabBtn"
142
- style="
143
- padding: 10px 15px;
144
- background: #4caf50;
145
- color: white;
146
- border: none;
147
- border-radius: 4px;
148
- cursor: pointer;
149
- font-size: 14px;
150
- font-weight: bold;
151
- "
152
- >
153
- Grab Element
154
- </button>
155
- <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 8px">
156
- <button
157
- id="dragLeftBtn"
158
- disabled
159
- style="
160
- padding: 8px 12px;
161
- background: #9c27b0;
162
- color: white;
163
- border: none;
164
- border-radius: 4px;
165
- cursor: pointer;
166
- font-size: 12px;
167
- opacity: 0.5;
168
- "
169
- >
170
- ← Left
171
- </button>
172
- <button
173
- id="dragRightBtn"
174
- disabled
175
- style="
176
- padding: 8px 12px;
177
- background: #2196f3;
178
- color: white;
179
- border: none;
180
- border-radius: 4px;
181
- cursor: pointer;
182
- font-size: 12px;
183
- opacity: 0.5;
184
- "
185
- >
186
- Right →
187
- </button>
188
- <button
189
- id="dragUpBtn"
190
- disabled
191
- style="
192
- padding: 8px 12px;
193
- background: #607d8b;
194
- color: white;
195
- border: none;
196
- border-radius: 4px;
197
- cursor: pointer;
198
- font-size: 12px;
199
- opacity: 0.5;
200
- "
201
- >
202
- ↑ Up
203
- </button>
204
- <button
205
- id="dragDownBtn"
206
- disabled
207
- style="
208
- padding: 8px 12px;
209
- background: #ff9800;
210
- color: white;
211
- border: none;
212
- border-radius: 4px;
213
- cursor: pointer;
214
- font-size: 12px;
215
- opacity: 0.5;
216
- "
217
- >
218
- ↓ Down
219
- </button>
220
- </div>
221
- <button
222
- id="releaseBtn"
223
- disabled
224
- style="
225
- padding: 10px 15px;
226
- background: #f44336;
227
- color: white;
228
- border: none;
229
- border-radius: 4px;
230
- cursor: pointer;
231
- font-size: 14px;
232
- font-weight: bold;
233
- opacity: 0.5;
234
- "
235
- >
236
- Release Element
237
- </button>
238
- </div>
239
- <div
240
- id="status"
241
- style="
242
- margin-top: 15px;
243
- padding: 10px;
244
- background: #f9f9f9;
245
- border-radius: 4px;
246
- font-family: monospace;
247
- font-size: 12px;
248
- color: #666;
249
- border-left: 4px solid #2196f3;
250
- "
251
- >
252
- Ready - Click "Grab Element" to start programmatic control
253
- </div>
254
- </div>
255
-
256
- <div
257
- data-drag-obstacle
258
- style="
259
- position: absolute;
260
- left: 100px;
261
- top: 450px;
262
- background: red;
263
- width: 50px;
264
- height: 50px;
265
- "
266
- >
267
- absolute
268
- </div>
269
-
270
- <div
271
- data-drag-obstacle
272
- style="
273
- position: fixed;
274
- left: 280px;
275
- top: 100px;
276
- background: violet;
277
- width: 50px;
278
- height: 50px;
279
- "
280
- >
281
- fixed
282
- </div>
283
-
284
- <div
285
- data-drag-obstacle
286
- style="
287
- position: sticky;
288
- left: 280px;
289
- top: 300px;
290
- background: green;
291
- width: 50px;
292
- height: 50px;
293
- "
294
- >
295
- sticky
296
- </div>
297
-
298
- <div class="scroll-indicator" id="scrollIndicator">Scroll: 0px</div>
299
-
300
- <div class="content-section">
301
- <h2>Section 1</h2>
302
- <p>
303
- Drag the element above towards the top edge of your viewport to test
304
- upward auto-scrolling.
305
- </p>
306
- </div>
307
-
308
- <div class="content-section">
309
- <h2>Section 2</h2>
310
- <p>
311
- This is some content to make the page scrollable. Keep dragging down to
312
- test auto-scroll behavior.
313
- </p>
314
- </div>
315
-
316
- <div class="content-section">
317
- <h2>Section 3</h2>
318
- <p>
319
- More content for testing. Drag the element near the bottom edge to
320
- trigger downward scrolling.
321
- </p>
322
- </div>
323
-
324
- <div class="content-section">
325
- <h2>Section 4</h2>
326
- <p>
327
- Continue testing the auto-scroll behavior as you drag near viewport
328
- edges.
329
- </p>
330
- </div>
331
-
332
- <div class="content-section">
333
- <h2>Section 5</h2>
334
- <p>
335
- Final section. The auto-scroll should work smoothly in both directions.
336
- </p>
337
- </div>
338
-
339
- <script type="module">
340
- import { createDragToMoveGestureController } from "@jsenv/dom";
341
-
342
- const draggableElements = document.querySelectorAll("[data-draggable]");
343
- const dragElement = draggableElements[0];
344
- for (const draggable of draggableElements) {
345
- draggable.onpointerdown = (e) => {
346
- // Set up the manual drag behavior
347
- manualDragGestureController.grabViaPointer(e, {
348
- element: draggable,
349
- onStart: () => {
350
- draggable.setAttribute("data-dragging", "");
351
- updateStatus(
352
- "Manual drag started - document auto-scroll enabled",
353
- );
354
- },
355
- onEnd: () => {
356
- draggable.removeAttribute("data-dragging");
357
- updateStatus("Manual drag ended");
358
- },
359
- });
360
- };
361
- }
362
-
363
- const scrollIndicator = document.getElementById("scrollIndicator");
364
-
365
- // Update scroll indicator
366
- const updateScrollIndicator = () => {
367
- const scrollY = window.scrollY || document.documentElement.scrollTop;
368
- scrollIndicator.textContent = `Scroll: ${Math.round(scrollY)}px`;
369
- };
370
-
371
- // Initialize scroll indicator
372
- updateScrollIndicator();
373
- window.addEventListener("scroll", updateScrollIndicator);
374
-
375
- // Manual drag gesture (mouse-based)
376
- const manualDragGestureController = createDragToMoveGestureController({
377
- threshold: 0,
378
- areaConstraint: "scroll",
379
- });
380
-
381
- // Programmatic Controls
382
- const controls = {
383
- grabBtn: document.getElementById("grabBtn"),
384
- dragLeftBtn: document.getElementById("dragLeftBtn"),
385
- dragRightBtn: document.getElementById("dragRightBtn"),
386
- dragUpBtn: document.getElementById("dragUpBtn"),
387
- dragDownBtn: document.getElementById("dragDownBtn"),
388
- releaseBtn: document.getElementById("releaseBtn"),
389
- statusDiv: document.getElementById("status"),
390
- dragGesture: null,
391
- };
392
-
393
- function updateStatus(message) {
394
- controls.statusDiv.textContent = message;
395
- console.log("Document Auto-Scroll Demo:", message);
396
- }
397
-
398
- function updateButtonStates(grabbed = false) {
399
- controls.grabBtn.disabled = grabbed;
400
- controls.dragLeftBtn.disabled = !grabbed;
401
- controls.dragRightBtn.disabled = !grabbed;
402
- controls.dragUpBtn.disabled = !grabbed;
403
- controls.dragDownBtn.disabled = !grabbed;
404
- controls.releaseBtn.disabled = !grabbed;
405
-
406
- // Update visual disabled state
407
- const dragButtons = [
408
- controls.dragLeftBtn,
409
- controls.dragRightBtn,
410
- controls.dragUpBtn,
411
- controls.dragDownBtn,
412
- controls.releaseBtn,
413
- ];
414
- dragButtons.forEach((btn) => {
415
- btn.style.opacity = grabbed ? "1" : "0.5";
416
- btn.style.cursor = grabbed ? "pointer" : "not-allowed";
417
- });
418
-
419
- controls.grabBtn.style.opacity = grabbed ? "0.5" : "1";
420
- controls.grabBtn.style.cursor = grabbed ? "not-allowed" : "pointer";
421
- }
422
-
423
- // Grab button
424
- controls.grabBtn.addEventListener("click", () => {
425
- if (controls.dragGesture) return;
426
-
427
- const dragOptions = {
428
- threshold: 0,
429
- backdrop: false,
430
- onGrab: (gestureInfo) => {
431
- updateStatus("Element grabbed programmatically - ready to drag");
432
- console.log("Programmatic grab:", gestureInfo);
433
- },
434
- onDragStart: (gestureInfo) => {
435
- updateStatus("Programmatic drag started with document auto-scroll");
436
- dragElement.setAttribute("data-dragging", "");
437
- console.log("Programmatic drag start:", gestureInfo);
438
- },
439
- onDrag: (gestureInfo, phase) => {
440
- updateStatus(
441
- `Dragging programmatically (${phase}) - auto-scroll active`,
442
- );
443
- console.log("Programmatic drag:", gestureInfo, phase);
444
- },
445
- onRelease: (gestureInfo) => {
446
- updateStatus("Programmatic drag released");
447
- dragElement.removeAttribute("data-dragging");
448
- console.log("Programmatic release:", gestureInfo);
449
- controls.dragGestureController = null;
450
- controls.dragInstance = null;
451
- updateButtonStates(false);
452
- },
453
- };
454
-
455
- controls.dragGestureController =
456
- createDragToMoveGestureController(dragOptions);
457
- controls.dragGesture = controls.dragGestureController.grab({
458
- element: dragElement,
459
- });
460
-
461
- updateButtonStates(true);
462
- });
463
-
464
- // Drag direction buttons
465
- controls.dragLeftBtn.addEventListener("click", () => {
466
- if (!controls.dragGesture) return;
467
- const currentGestureInfo = controls.dragGesture.gestureInfo;
468
- const newX = currentGestureInfo.moveX - 100;
469
- updateStatus("Dragging left by 100px - testing document auto-scroll");
470
- controls.dragGesture.drag(newX, undefined);
471
- });
472
-
473
- controls.dragRightBtn.addEventListener("click", () => {
474
- if (!controls.dragGesture) return;
475
- const currentGestureInfo = controls.dragGesture.gestureInfo;
476
- const newX = currentGestureInfo.moveX + 100;
477
- updateStatus("Dragging right by 100px - testing document auto-scroll");
478
- controls.dragGesture.drag(newX, undefined);
479
- });
480
-
481
- controls.dragUpBtn.addEventListener("click", () => {
482
- if (!controls.dragGesture) return;
483
- const currentGestureInfo = controls.dragGesture.gestureInfo;
484
- const newY = currentGestureInfo.moveY - 100;
485
- updateStatus("Dragging up by 100px - testing upward auto-scroll");
486
- controls.dragGesture.drag(undefined, newY);
487
- });
488
-
489
- controls.dragDownBtn.addEventListener("click", () => {
490
- if (!controls.dragGesture) return;
491
- const currentGestureInfo = controls.dragGesture.gestureInfo;
492
- const newY = currentGestureInfo.moveY + 100;
493
- updateStatus("Dragging down by 100px - testing downward auto-scroll");
494
- controls.dragGesture.drag(undefined, newY);
495
- });
496
-
497
- // Release button
498
- controls.releaseBtn.addEventListener("click", () => {
499
- if (!controls.dragGesture) return;
500
- updateStatus("Releasing programmatic drag");
501
- controls.dragGesture.release();
502
- });
503
-
504
- // Initialize
505
- updateButtonStates(false);
506
- console.log(
507
- "Document auto-scroll demo with programmatic controls initialized",
508
- );
509
-
510
- document.addEventListener("DOMContentLoaded", () => {
511
- setTimeout(() => {
512
- window.scrollTo(100, 0);
513
- }, 200);
514
- });
515
- </script>
516
- </body>
517
- </html>