@jsenv/dom 0.17.37 → 0.17.40

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 (2) hide show
  1. package/dist/jsenv_dom.js +184 -32
  2. package/package.json +1 -1
package/dist/jsenv_dom.js CHANGED
@@ -7522,17 +7522,50 @@ const getScrollbarState = (
7522
7522
  * @param {Element} [options.container] - The scroll container to scroll. Defaults to getScrollContainer(el).
7523
7523
  * @param {"start"|"center"|"end"|"nearest"} [options.block="nearest"] - Vertical alignment.
7524
7524
  * @param {"start"|"center"|"end"|"nearest"} [options.inline="nearest"] - Horizontal alignment.
7525
+ * @param {"auto"|"instant"|"smooth"} [options.behavior] - Left out, the container's CSS scroll-behavior decides; "instant" is for a caller that measures the result in the same tick.
7525
7526
  */
7526
7527
  const scrollIntoViewScoped = (
7527
7528
  el,
7528
- { container = getScrollContainer(el), ...rest } = {},
7529
+ { container = getScrollContainer(el), behavior, ...rest } = {},
7529
7530
  ) => {
7530
7531
  if (!container) {
7531
7532
  return;
7532
7533
  }
7533
- container.scrollTo(
7534
- getScrollIntoViewScopedOffsets(el, { container, ...rest }),
7535
- );
7534
+ container.scrollTo({
7535
+ behavior,
7536
+ ...getScrollIntoViewScopedOffsets(el, { container, ...rest }),
7537
+ });
7538
+ };
7539
+
7540
+ /**
7541
+ * Scrolls `el` into view in every scroll container between it and the
7542
+ * document, innermost first — the chain `Element.prototype.scrollIntoView`
7543
+ * walks, minus the boxes nobody can scroll back.
7544
+ *
7545
+ * `overflow: hidden` is the one that matters: it IS a scroll container, so
7546
+ * the native call spends scroll on it as readily as on any other, and there
7547
+ * it is spent for good — no scrollbar, no wheel, no touch gives it back. A
7548
+ * card clipping a drawing, holding something that overlaps its edge by 2px,
7549
+ * ends up 2px off until it re-renders. Only the containers `isScrollable`
7550
+ * recognizes on its own (without `includeHidden`) are moved; the ones that
7551
+ * merely clip are left where they are.
7552
+ *
7553
+ * Each container measures `el` where the inner ones just put it, so the outer
7554
+ * ones see the final position rather than the one they started from.
7555
+ *
7556
+ * @param {Element} el - The element to scroll into view.
7557
+ * @param {object} options - the same as scrollIntoViewScoped's, minus container.
7558
+ */
7559
+ const scrollIntoViewThroughScrollables = (el, options) => {
7560
+ for (const scrollContainer of getScrollContainerSet(el)) {
7561
+ // getScrollContainerSet already skips what only clips, except at the end
7562
+ // of the chain: with nothing scrollable left to find it hands back the
7563
+ // document scroller, which a scroll lock may have turned into a clip too.
7564
+ if (!isScrollable(scrollContainer)) {
7565
+ continue;
7566
+ }
7567
+ scrollIntoViewScoped(el, { ...options, container: scrollContainer });
7568
+ }
7536
7569
  };
7537
7570
 
7538
7571
  /**
@@ -7554,7 +7587,6 @@ const getScrollIntoViewScopedOffsets = (
7554
7587
  inline = "nearest",
7555
7588
  } = {},
7556
7589
  ) => {
7557
- const containerRect = container.getBoundingClientRect();
7558
7590
  const elRect = el.getBoundingClientRect();
7559
7591
  const style = getComputedStyle(el);
7560
7592
 
@@ -7565,15 +7597,35 @@ const getScrollIntoViewScopedOffsets = (
7565
7597
 
7566
7598
  const currentScrollTop = container.scrollTop;
7567
7599
  const currentScrollLeft = container.scrollLeft;
7568
- const containerHeight = containerRect.height;
7569
- const containerWidth = containerRect.width;
7600
+
7601
+ // Where the container shows its content, in the coordinates
7602
+ // getBoundingClientRect speaks. The document scroller is a case apart: what
7603
+ // it shows is the viewport, sitting at the origin of those coordinates,
7604
+ // while its own box is the whole page and travels with the scroll — reading
7605
+ // that box would count the scroll twice and compare the element to the
7606
+ // height of the document rather than the height of the screen.
7607
+ let containerTop;
7608
+ let containerLeft;
7609
+ let containerHeight;
7610
+ let containerWidth;
7611
+ if (container === container.ownerDocument.scrollingElement) {
7612
+ containerTop = 0;
7613
+ containerLeft = 0;
7614
+ containerHeight = container.clientHeight;
7615
+ containerWidth = container.clientWidth;
7616
+ } else {
7617
+ const containerRect = container.getBoundingClientRect();
7618
+ containerTop = containerRect.top;
7619
+ containerLeft = containerRect.left;
7620
+ containerHeight = containerRect.height;
7621
+ containerWidth = containerRect.width;
7622
+ }
7570
7623
 
7571
7624
  // Element position relative to the container's scroll origin.
7572
- const elTop =
7573
- elRect.top - containerRect.top + currentScrollTop - scrollMarginTop;
7625
+ const elTop = elRect.top - containerTop + currentScrollTop - scrollMarginTop;
7574
7626
  const elBottom = elTop + elRect.height + scrollMarginTop + scrollMarginBottom;
7575
7627
  const elLeft =
7576
- elRect.left - containerRect.left + currentScrollLeft - scrollMarginLeft;
7628
+ elRect.left - containerLeft + currentScrollLeft - scrollMarginLeft;
7577
7629
  const elRight = elLeft + elRect.width + scrollMarginLeft + scrollMarginRight;
7578
7630
 
7579
7631
  let newScrollTop = currentScrollTop;
@@ -9455,6 +9507,14 @@ installImportMetaCssBuild(import.meta);/**
9455
9507
  * A tap is left alone by that: a press that goes nowhere is still a press, which
9456
9508
  * is what a piece that is also a link or a card needs.
9457
9509
  *
9510
+ * A HOLD is not, and nothing in such a place is text to select. Taking the wait
9511
+ * away takes away the only thing that answered a finger held still, so the
9512
+ * browser answers it alone: its own long press selects the word under the thumb,
9513
+ * and the card the hand meant to carry is left blue and handled. Said to every
9514
+ * pointer — a mouse there drags from the first few pixels, so a selection begun
9515
+ * there is one that could never be finished either. What says its press is its
9516
+ * own keeps its text (see the stylesheet below).
9517
+ *
9458
9518
  * It is opt-in and cannot be anything else. Nothing here can see whether the
9459
9519
  * surroundings scroll — a page scrolls by default, an overflow is one CSS
9460
9520
  * property away, and getting it wrong the wrong way means the list runs away
@@ -9499,6 +9559,11 @@ const css$4 = /* css */`[data-drag-handle], [data-drag-source] {
9499
9559
 
9500
9560
  [data-drag-on-contact] [data-drag-source], [data-drag-source][data-drag-on-contact] {
9501
9561
  touch-action: pinch-zoom;
9562
+ user-select: none;
9563
+ }
9564
+
9565
+ [data-drag-on-contact] [data-drag-ignore], [data-drag-on-contact] [popover], [data-drag-on-contact] dialog, [data-drag-on-contact] :is(input:not([data-press-only]), textarea), [data-drag-on-contact] :is([contenteditable=""], [contenteditable="true"]) {
9566
+ user-select: text;
9502
9567
  }
9503
9568
 
9504
9569
  [data-drag-ignore], [data-self-interactions~="drag"], [data-self-interactions~="*"], [data-drag-source] [popover], [data-drag-source] dialog {
@@ -13420,27 +13485,78 @@ const DRAG_FLICK_DISTANCE = 8;
13420
13485
  // way. Let go and it comes back — a wall one can lean on, never walk through.
13421
13486
  const DRAG_RESISTANCE = 0.3;
13422
13487
 
13423
- // What a drag must not start on: something that reads the pointer itself, whole,
13424
- // with no axis left to share. A button or a link is not in the list — dragging
13425
- // from one travels, and the click it would have made is swallowed on the way
13426
- // out. A drag SOURCE is not either: it says which way it goes and only takes
13427
- // that (see DRAG_SOURCE_AXES_ATTRIBUTE) — but a dedicated handle is, being a
13428
- // place whose only purpose is to be taken hold of, from the first pixel. And so
13429
- // is an element naming `drag` among its own interactions: it said the grab is
13430
- // ITS, here, rather than the box's — and one that named only the click said
13431
- // nothing to this gesture and is passed through (see DRAG_IGNORED_SELECTOR in
13432
- // drag_to.js). And so is a popover or a dialog: a layer OVER the box, whose
13433
- // press only bubbles through the box because the layer is anchored in it.
13434
- const DRAG_EXCLUDED_SELECTOR = [
13435
- // The fields that read the pointer as it MOVES: a caret dragged through text,
13436
- // a thumb pushed along its rail, a spinner. The ones that only read the
13437
- // press — a checkbox, a radio, a colour, a file — are buttons by another
13438
- // name, and like a button they let the drag through, the click they would
13439
- // have made swallowed on the way out. Which matters more than the list makes
13440
- // it look: a selectable row is covered by an invisible radio of its own, so
13441
- // excluding every input at once means a list of rows inside a travelling box
13442
- // that no finger can push.
13443
- 'input:not([type="checkbox"], [type="radio"], [type="button"], [type="submit"], [type="reset"], [type="image"], [type="color"], [type="file"])', "textarea", "select", '[contenteditable=""]', '[contenteditable="true"]', "[data-drag-handle]", "[data-no-drag-travel]", '[data-self-interactions~="drag"]', '[data-self-interactions~="*"]', "[popover]", "dialog"].join(",");
13488
+ // The gestures a browser ALREADY answers where a pointer goes down, named here
13489
+ // rather than guessed at from a tag: what is native is the whole reason a travel
13490
+ // must not start there. A caret dragged through text, a thumb pushed along its
13491
+ // rail, a menu fed by everything that follows the press — taking the press from
13492
+ // one of those takes away something the element cannot offer a second time, and
13493
+ // a travel is never worth that.
13494
+ //
13495
+ // What is NOT in the list has nothing to lose. A button or a link is out on
13496
+ // purpose: dragging from one travels, and the click it would have made is
13497
+ // swallowed on the way out. So are the inputs that read the press and nothing
13498
+ // after it (a checkbox, a radio, a colour, a file) — buttons by another name.
13499
+ // Which matters more than it looks: a selectable row is covered by an invisible
13500
+ // radio of its own, so excluding every input at once means a list of rows inside
13501
+ // a travelling box that no finger can push.
13502
+ //
13503
+ // Every entry answers "never", and the entry is where a softer answer would be
13504
+ // written if one turned out to be worth it — per hand, since that is where these
13505
+ // gestures differ. The one that comes to mind is a travel a MOUSE could still
13506
+ // ask for by holding still first, a hold meaning nothing to a mouse in a text
13507
+ // field: it is not here because the browser has already begun a selection at the
13508
+ // press, and nothing hands that back mid-gesture — the travel would drag a
13509
+ // selection along with it. With a finger the hold is the selection UI itself, so
13510
+ // there is nothing to take there either.
13511
+ const PRESSED_INPUT_TYPES = ['[type="checkbox"]', '[type="radio"]', '[type="button"]', '[type="submit"]', '[type="reset"]', '[type="image"]', '[type="color"]', '[type="file"]'].join(",");
13512
+ const NATIVE_POINTER_GESTURES = [{
13513
+ // The value follows the pointer, pixel by pixel: a thumb along its rail, a
13514
+ // spinner clicked up and down. There is no moment in that which could be
13515
+ // given away — the gesture IS the pointer.
13516
+ selector: 'input[type="range"],input[type="number"]'
13517
+ }, {
13518
+ // The text answers the pointer, and differently per hand: a mouse drags a
13519
+ // caret through it (a selection), a finger drags the field's own content
13520
+ // sideways when it overflows, and a finger held still opens the selection
13521
+ // UI. Three things a field is for, against one travel that has a whole box
13522
+ // to start from.
13523
+ selector: [`input:not(${PRESSED_INPUT_TYPES},[type="range"],[type="number"])`, "textarea", '[contenteditable=""]', '[contenteditable="true"]'].join(",")
13524
+ }, {
13525
+ // A menu opens under the pointer and the browser keeps the rest of the
13526
+ // gesture: dragged over, it picks an option.
13527
+ selector: "select"
13528
+ }];
13529
+
13530
+ // …and what an element says against its own tag. Every line above is about what
13531
+ // an element DOES, and a tag only says what it IS: a picker's façade is an
13532
+ // <input> that opens a popup on the press and reads nothing at all as the
13533
+ // pointer moves (it selects its own text on mousedown, and that is the whole of
13534
+ // it). Only the element knows that, so only the element can say it — and having
13535
+ // said it, it is a button by another name like the others, and a travel starts
13536
+ // there like anywhere else.
13537
+ //
13538
+ // Said rather than found, and said on the element the pointer lands on: a
13539
+ // promise about a gesture has to be readable before the gesture exists, from
13540
+ // nothing but the DOM under the finger. And it is a promise: an element that
13541
+ // says it while the browser still answers the pointer there (a range, a field
13542
+ // that can really be typed in) has not made a travel possible, it has taken the
13543
+ // gesture the user was making away from them.
13544
+ const PRESS_ONLY_ATTRIBUTE = "data-press-only";
13545
+ const NATIVE_POINTER_GESTURE_SELECTOR = NATIVE_POINTER_GESTURES.map(({
13546
+ selector
13547
+ }) => `:is(${selector}):not([${PRESS_ONLY_ATTRIBUTE}])`).join(",");
13548
+
13549
+ // What a drag must not start on: what answers the pointer natively (above),
13550
+ // plus what has said the gesture is its own. A drag SOURCE is not in the list:
13551
+ // it says which way it goes and only takes that (see DRAG_SOURCE_AXES_ATTRIBUTE)
13552
+ // — but a dedicated handle is, being a place whose only purpose is to be taken
13553
+ // hold of, from the first pixel. And so is an element naming `drag` among its
13554
+ // own interactions: it said the grab is ITS, here, rather than the box's — and
13555
+ // one that named only the click said nothing to this gesture and is passed
13556
+ // through (see DRAG_IGNORED_SELECTOR in drag_to.js). And so is a popover or a
13557
+ // dialog: a layer OVER the box, whose press only bubbles through the box because
13558
+ // the layer is anchored in it.
13559
+ const DRAG_EXCLUDED_SELECTOR = [NATIVE_POINTER_GESTURE_SELECTOR, "[data-drag-handle]", "[data-no-drag-travel]", '[data-self-interactions~="drag"]', '[data-self-interactions~="*"]', "[popover]", "dialog"].join(",");
13444
13560
 
13445
13561
  // Which axes a box travels on, one attribute per gesture, said in the DOM by
13446
13562
  // whoever owns the box: it is what a box ABOVE another reads to know the
@@ -14226,6 +14342,42 @@ const isPressExcluded = (target, element) => {
14226
14342
  return Boolean(excluded) && !excluded.contains(element);
14227
14343
  };
14228
14344
 
14345
+ /**
14346
+ * Whether a press landing on `element` may become the gesture of something
14347
+ * around it — a box that travels by drag, an object carried out of a list. Or
14348
+ * of the element itself, when the element is that box: the gesture is still one
14349
+ * the press is being asked for.
14350
+ *
14351
+ * The question a control that acts ON THE PRESS has to ask before it acts: a
14352
+ * picker opening its popup at the pointerdown, the way a native select does,
14353
+ * is right only while nothing else disputes that press. Where a box above
14354
+ * travels, the finger going down is the beginning of something that is not yet
14355
+ * a choice — answering there both answers for a user who has chosen nothing and
14356
+ * takes the press from a gesture that could then never form. What such a control
14357
+ * does instead is wait for the click, which the browser only delivers if the
14358
+ * press stayed a press: a gesture swallows the one it leaves behind.
14359
+ *
14360
+ * Asked of the DOM at the press rather than worked out at render, because that
14361
+ * is where the answer lives: the box above says what it travels by
14362
+ * (DRAG_AXES_ATTRIBUTE, DRAG_SOURCE_AXES_ATTRIBUTE), and whether the press is
14363
+ * takeable at all is the same question the gesture itself asks a moment later —
14364
+ * a field the travel would never have started on disputes nothing, and a control
14365
+ * inside one goes on acting on the press.
14366
+ *
14367
+ * @param {Element} element Where the press landed.
14368
+ * @returns {boolean}
14369
+ */
14370
+ const isPressDisputedByDrag = element => {
14371
+ if (!element || typeof element.closest !== "function") {
14372
+ return false;
14373
+ }
14374
+ const dragged = element.closest(`[${DRAG_AXES_ATTRIBUTE}],[${DRAG_SOURCE_AXES_ATTRIBUTE}]`);
14375
+ if (!dragged) {
14376
+ return false;
14377
+ }
14378
+ return !isPressExcluded(element, dragged);
14379
+ };
14380
+
14229
14381
  // Shared by navi's own use_displayed_layout_effect.js (rich "navi_displayed"
14230
14382
  // CustomEvent, open transitions only) and visible_rect.js (needs both
14231
14383
  // directions: hide when a container closes, recheck when it reopens) — the
@@ -20087,4 +20239,4 @@ const useResizeStatus = (elementRef, { as = "number" } = {}) => {
20087
20239
  };
20088
20240
  };
20089
20241
 
20090
- export { EASING, ELEMENT_SIZE_CHANGE, activeElementSignal, addActiveElementEffect, addAttributeEffect, allowWheelThrough, appendStyles, applyNewPosition, canScroll, captureScrollState, chainEvent, claimWheelGesture, clickIsSuppressed, closestOpenableAncestor, contrastColor, createBackgroundColorTransition, createBackgroundTransition, createBorderRadiusTransition, createBorderTransition, createDragGestureController, createDragToMoveGestureController, createEventGroupLogger, createGroupTransitionController, createHeightTransition, createIterableWeakSet, createOpacityTransition, createPubSub, createStyleController, createTimelineTransition, createTransition, createTranslateXTransition, createValueEffect, createWidthTransition, cubicBezier, dispatchCustomEvent, dispatchInternalCustomEvent, dispatchPublicCustomEvent, dragAfterIntent, elementIsFocusable, elementIsVisibleForFocus, elementIsVisuallyVisible, findAfter, findAncestor, findBefore, findDescendant, findEvent, findFocusDelegateTarget, findFocusable, findSelfOrAncestorFixedPosition, formatEventSideEffect, getAncestorOpenType, getAvailableHeight, getAvailableWidth, getBackground, getBackgroundColor, getBorder, getBorderRadius, getBorderSizes, getContrastRatio, getDefaultStyles, getDragCoordinates, getDropTargetInfo, getElementSignature, getFirstVisuallyVisibleAncestor, getFocusVisibilityInfo, getHeight, getHeightWithoutTransition, getInnerHeight, getInnerWidth, getKeyboardEventDefaultAction, getLuminance, getMarginSizes, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpacity, getOpacityWithoutTransition, getPaddingSizes, getPositionedParent, getPositioningScrollOffset, getPreferedColorScheme, getScrollBox, getScrollContainer, getScrollContainerSet, getScrollIntoViewScopedOffsets, getScrollRelativeRect, getSelfAndAncestorScrolls, getStyle, getTranslateX, getTranslateXWithoutTransition, getTranslateY, getVirtualKeyboardOverlayHeight, getVisuallyVisibleInfo, getWidth, getWidthWithoutTransition, hasCSSSizeUnit, initFlexDetailsSet, initFocusGroup, initPositionSticky, isAncestorOpen, isDisplayedDespiteClosedAncestor, isPrimaryButtonEvent, isSameColor, isScrollable, isTouchDrivenEvent, markDragSource, measureLongestVisualLineWidth, measureScrollbar, measureWidestChildRow, mergeOneStyle, mergeTwoStyles, normalizeKeyboardKey, normalizeStyle, normalizeStyles, observeAncestorOpenState, onAncestorReopen, parsePositionArea, parseStyle, performTabNavigation, pickPositionRelativeTo, prefersDarkColors, prefersLightColors, preventFocusNav, preventFocusNavViaKeyboard, preventIntermediateScrollbar, releaseWheelGesture, resolveCSSColor, resolveCSSSize, resolveColorLuminance, resolveOklchLightness, scrollIntoViewScoped, scrollIntoViewWithStickyAwareness, scrollRoomTowards, setAttribute, setAttributes, setStyles, setVirtualKeyboardOverlaysContent, snapToPixel, startDragTo, startDragToResizeGesture, startDragToTravel, stickyAsRelativeCoords, stringifyStyle, subscribeVirtualKeyboardGeometryChange, subscribeVisualViewportResizeSettled, subscribeWindowResizeSettled, suppressClickAfterGesture, trapFocusInside, trapScrollInside, useActiveElement, useAvailableHeight, useAvailableWidth, useMaxHeight, useMaxWidth, useResizeStatus, visibleRectEffect, waitForPressHeld, watchWheelTravel, wheelGestureIsTakenFrom };
20242
+ export { EASING, ELEMENT_SIZE_CHANGE, activeElementSignal, addActiveElementEffect, addAttributeEffect, allowWheelThrough, appendStyles, applyNewPosition, canScroll, captureScrollState, chainEvent, claimWheelGesture, clickIsSuppressed, closestOpenableAncestor, contrastColor, createBackgroundColorTransition, createBackgroundTransition, createBorderRadiusTransition, createBorderTransition, createDragGestureController, createDragToMoveGestureController, createEventGroupLogger, createGroupTransitionController, createHeightTransition, createIterableWeakSet, createOpacityTransition, createPubSub, createStyleController, createTimelineTransition, createTransition, createTranslateXTransition, createValueEffect, createWidthTransition, cubicBezier, dispatchCustomEvent, dispatchInternalCustomEvent, dispatchPublicCustomEvent, dragAfterIntent, elementIsFocusable, elementIsVisibleForFocus, elementIsVisuallyVisible, findAfter, findAncestor, findBefore, findDescendant, findEvent, findFocusDelegateTarget, findFocusable, findSelfOrAncestorFixedPosition, formatEventSideEffect, getAncestorOpenType, getAvailableHeight, getAvailableWidth, getBackground, getBackgroundColor, getBorder, getBorderRadius, getBorderSizes, getContrastRatio, getDefaultStyles, getDragCoordinates, getDropTargetInfo, getElementSignature, getFirstVisuallyVisibleAncestor, getFocusVisibilityInfo, getHeight, getHeightWithoutTransition, getInnerHeight, getInnerWidth, getKeyboardEventDefaultAction, getLuminance, getMarginSizes, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpacity, getOpacityWithoutTransition, getPaddingSizes, getPositionedParent, getPositioningScrollOffset, getPreferedColorScheme, getScrollBox, getScrollContainer, getScrollContainerSet, getScrollIntoViewScopedOffsets, getScrollRelativeRect, getSelfAndAncestorScrolls, getStyle, getTranslateX, getTranslateXWithoutTransition, getTranslateY, getVirtualKeyboardOverlayHeight, getVisuallyVisibleInfo, getWidth, getWidthWithoutTransition, hasCSSSizeUnit, initFlexDetailsSet, initFocusGroup, initPositionSticky, isAncestorOpen, isDisplayedDespiteClosedAncestor, isPressDisputedByDrag, isPrimaryButtonEvent, isSameColor, isScrollable, isTouchDrivenEvent, markDragSource, measureLongestVisualLineWidth, measureScrollbar, measureWidestChildRow, mergeOneStyle, mergeTwoStyles, normalizeKeyboardKey, normalizeStyle, normalizeStyles, observeAncestorOpenState, onAncestorReopen, parsePositionArea, parseStyle, performTabNavigation, pickPositionRelativeTo, prefersDarkColors, prefersLightColors, preventFocusNav, preventFocusNavViaKeyboard, preventIntermediateScrollbar, releaseWheelGesture, resolveCSSColor, resolveCSSSize, resolveColorLuminance, resolveOklchLightness, scrollIntoViewScoped, scrollIntoViewThroughScrollables, scrollIntoViewWithStickyAwareness, scrollRoomTowards, setAttribute, setAttributes, setStyles, setVirtualKeyboardOverlaysContent, snapToPixel, startDragTo, startDragToResizeGesture, startDragToTravel, stickyAsRelativeCoords, stringifyStyle, subscribeVirtualKeyboardGeometryChange, subscribeVisualViewportResizeSettled, subscribeWindowResizeSettled, suppressClickAfterGesture, trapFocusInside, trapScrollInside, useActiveElement, useAvailableHeight, useAvailableWidth, useMaxHeight, useMaxWidth, useResizeStatus, visibleRectEffect, waitForPressHeld, watchWheelTravel, wheelGestureIsTakenFrom };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/dom",
3
- "version": "0.17.37",
3
+ "version": "0.17.40",
4
4
  "type": "module",
5
5
  "description": "DOM utilities for writing frontend code",
6
6
  "repository": {