@jsenv/dom 0.17.91 → 0.17.93

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 +213 -55
  2. package/package.json +1 -1
package/dist/jsenv_dom.js CHANGED
@@ -5267,6 +5267,9 @@ const findFocusable = (element, { exclude } = {}) => {
5267
5267
  // `visible` is the other non-scrolling value, and the only one on which the
5268
5268
  // content still reaches the ancestors.
5269
5269
  const isScrollable = (element, { includeHidden } = {}) => {
5270
+ if (overflowGoesToViewport(element)) {
5271
+ return false;
5272
+ }
5270
5273
  if (canHaveVerticalScroll(element, { includeHidden })) {
5271
5274
  return true;
5272
5275
  }
@@ -5286,6 +5289,9 @@ const canScroll = (element, axis) => {
5286
5289
  if (!element || element.nodeType !== 1) {
5287
5290
  return false;
5288
5291
  }
5292
+ if (overflowGoesToViewport(element)) {
5293
+ return false;
5294
+ }
5289
5295
  const style = getComputedStyle(element);
5290
5296
  const overflow = axis === "x" ? style.overflowX : style.overflowY;
5291
5297
  if (overflow !== "auto" && overflow !== "scroll") {
@@ -5298,6 +5304,23 @@ const canScroll = (element, axis) => {
5298
5304
  return scrollSize - clientSize > 1;
5299
5305
  };
5300
5306
 
5307
+ /**
5308
+ * Whether `element` is a <body> whose overflow belongs to the viewport: when
5309
+ * the root leaves its own overflow visible, the body's values are the
5310
+ * viewport's (CSS overflow propagation), and body itself neither scrolls nor
5311
+ * clips, whatever its computed overflow reads — `body { overflow-x: hidden }`
5312
+ * computes overflow-y to auto there. The viewport scrolls, through the
5313
+ * scrolling element.
5314
+ */
5315
+ const overflowGoesToViewport = (element) => {
5316
+ const { ownerDocument } = element;
5317
+ if (element !== ownerDocument.body) {
5318
+ return false;
5319
+ }
5320
+ const rootStyle = getComputedStyle(ownerDocument.documentElement);
5321
+ return rootStyle.overflowX === "visible" && rootStyle.overflowY === "visible";
5322
+ };
5323
+
5301
5324
  const canHaveVerticalScroll = (element, { includeHidden }) => {
5302
5325
  const verticalOverflow = getStyle(element, "overflow-y");
5303
5326
  if (verticalOverflow === "visible") {
@@ -12468,17 +12491,9 @@ const roundForConstraints = (value) => {
12468
12491
  *
12469
12492
  * @param {Object} gestureInfo - Gesture information
12470
12493
  * @param {Element[]} targetElements - Array of potential drop target elements
12471
- * @param {object} [options]
12472
- * @param {boolean} [options.fallbackToEdge=false] - When true and the drag element does
12473
- * not intersect any target, falls back to the first item (if above all items) or the
12474
- * last item (if below all items) so there is always a valid drop target at list edges.
12475
12494
  * @returns {Object|null} Drop target info with elementSide or null if no valid target found
12476
12495
  */
12477
- const getDropTargetInfo = (
12478
- gestureInfo,
12479
- targetElements,
12480
- { fallbackToEdge = false } = {},
12481
- ) => {
12496
+ const getDropTargetInfo = (gestureInfo, targetElements) => {
12482
12497
  const dragElement = gestureInfo.elementImpacted || gestureInfo.element;
12483
12498
  const dragElementRect = dragElement.getBoundingClientRect();
12484
12499
  const intersectingTargets = [];
@@ -12499,38 +12514,6 @@ const getDropTargetInfo = (
12499
12514
  }
12500
12515
 
12501
12516
  if (intersectingTargets.length === 0) {
12502
- if (fallbackToEdge) {
12503
- const dragElement = gestureInfo.elementImpacted || gestureInfo.element;
12504
- const dragElementRect = dragElement.getBoundingClientRect();
12505
- const firstItem = targetElements[0];
12506
- const lastItem = targetElements[targetElements.length - 1];
12507
- if (
12508
- firstItem &&
12509
- dragElementRect.bottom < firstItem.getBoundingClientRect().top
12510
- ) {
12511
- // Drag element is above all items → treat as hovering the first item from the top.
12512
- return {
12513
- element: firstItem,
12514
- elementSide: { x: "start", y: "start" },
12515
- index: 0,
12516
- intersectingIndex: 0,
12517
- intersecting: [firstItem],
12518
- };
12519
- }
12520
- if (
12521
- lastItem &&
12522
- dragElementRect.top > lastItem.getBoundingClientRect().bottom
12523
- ) {
12524
- // Drag element is below all items → treat as hovering the last item from the bottom.
12525
- return {
12526
- element: lastItem,
12527
- elementSide: { x: "start", y: "end" },
12528
- index: targetElements.length - 1,
12529
- intersectingIndex: 0,
12530
- intersecting: [lastItem],
12531
- };
12532
- }
12533
- }
12534
12517
  return null;
12535
12518
  }
12536
12519
 
@@ -14645,6 +14628,22 @@ const css$1 = /* css */ `.navi_drop_hint {
14645
14628
  --drop-hint-y: calc(var(--drop-target-bottom) + var(--drop-hint-margin-y, 0px));
14646
14629
  }
14647
14630
 
14631
+ .navi_drop_hint[data-drop-edge="left"], .navi_drop_hint[data-drop-edge="right"] {
14632
+ top: calc(var(--drop-target-top) + var(--drop-hint-margin-y, 0px));
14633
+ left: var(--drop-hint-x);
14634
+ width: var(--drop-hint-size, 3px);
14635
+ height: calc(var(--drop-target-height) - 2 * var(--drop-hint-margin-y, 0px));
14636
+ transform: translateX(-50%);
14637
+ }
14638
+
14639
+ .navi_drop_hint[data-drop-edge="left"] {
14640
+ --drop-hint-x: calc(var(--drop-target-left) - var(--drop-hint-margin-x, 0px));
14641
+ }
14642
+
14643
+ .navi_drop_hint[data-drop-edge="right"] {
14644
+ --drop-hint-x: calc(var(--drop-target-right) + var(--drop-hint-margin-x, 0px));
14645
+ }
14646
+
14648
14647
  .navi_drop_hint_cap {
14649
14648
  color: var(--drop-hint-background-color, #4476ff);
14650
14649
  display: flex;
@@ -14668,6 +14667,23 @@ const css$1 = /* css */ `.navi_drop_hint {
14668
14667
  rotate: 90deg;
14669
14668
  }
14670
14669
 
14670
+ .navi_drop_hint:is([data-drop-edge="left"], [data-drop-edge="right"]) .navi_drop_hint_cap {
14671
+ left: 50%;
14672
+ right: auto;
14673
+ translate: -50%;
14674
+ }
14675
+
14676
+ .navi_drop_hint:is([data-drop-edge="left"], [data-drop-edge="right"]) .navi_drop_hint_cap[data-side="start"] {
14677
+ top: calc(-1 * var(--drop-hint-arrow-size, 11px));
14678
+ rotate: none;
14679
+ }
14680
+
14681
+ .navi_drop_hint:is([data-drop-edge="left"], [data-drop-edge="right"]) .navi_drop_hint_cap[data-side="end"] {
14682
+ top: auto;
14683
+ bottom: calc(-1 * var(--drop-hint-arrow-size, 11px));
14684
+ rotate: 180deg;
14685
+ }
14686
+
14671
14687
  .navi_drop_surface {
14672
14688
  inset: auto;
14673
14689
  top: var(--drop-target-top);
@@ -15271,6 +15287,12 @@ const createDragToMoveGestureController = ({
15271
15287
  * @param {string} [options.itemSelector] What matches the items of the list.
15272
15288
  * Left out, nothing is a place: no hint is drawn and no landing can be
15273
15289
  * answered, which is what a drag that only ever throws the thing away asks for.
15290
+ * @param {"column"|"row"|"wrap"} [options.itemFlow] How the items of a
15291
+ * reordered list are laid out: one under the other, side by side on one line,
15292
+ * or side by side over as many lines as it takes (inline-blocks, a flex-wrap,
15293
+ * a grid). A row runs in the writing direction of `containerElement`. It
15294
+ * decides which side of an item the copy is read on and where the hint is
15295
+ * drawn. Left out, it is read from where the items stand (see readItemFlow).
15274
15296
  * @param {function} [options.getItemId] `getItemId(element) → id`. An id rather
15275
15297
  * than a DOM index, because the two do not match: a list draws fewer rows than
15276
15298
  * it has, a search reorders them, and the structure may have holes.
@@ -15710,6 +15732,15 @@ const resolveDropMeaning = ({
15710
15732
  return "cancel";
15711
15733
  };
15712
15734
 
15735
+ // Which edge of its anchor the reorder hint is drawn at, for each way the items
15736
+ // can follow each other (see readItemFlow): before an item, the edge the flow
15737
+ // comes in by; after the last one, the edge it leaves by.
15738
+ const DROP_HINT_EDGES = {
15739
+ down: { before: "top", after: "bottom" },
15740
+ right: { before: "left", after: "right" },
15741
+ left: { before: "right", after: "left" },
15742
+ };
15743
+
15713
15744
  /**
15714
15745
  * A COPY of the element is carried, and the original keeps its place in the
15715
15746
  * layout — which is what makes a reorder possible at all: nothing else moves
@@ -15739,6 +15770,7 @@ const startDragToCarryCopy = (
15739
15770
  areaConstraint = canToss || canLeave ? "none" : undefined,
15740
15771
  containerElement = draggedElement.parentElement,
15741
15772
  itemSelector,
15773
+ itemFlow,
15742
15774
  getItemId,
15743
15775
  onReorder,
15744
15776
  onLand,
@@ -15776,6 +15808,7 @@ const startDragToCarryCopy = (
15776
15808
  if (!isPrimaryButtonEvent(event)) {
15777
15809
  return undefined;
15778
15810
  }
15811
+ const flowSaid = resolveItemFlow(itemFlow, containerElement);
15779
15812
  // Where the hand is, for a press handed over: its `pointerdown` says where it
15780
15813
  // WAS, before the hold and whatever the hold opened. Let go of meanwhile, it
15781
15814
  // is not picked up after the fact.
@@ -15890,6 +15923,7 @@ const startDragToCarryCopy = (
15890
15923
  dropHintEl.style.removeProperty("--drop-target-top");
15891
15924
  dropHintEl.style.removeProperty("--drop-target-bottom");
15892
15925
  dropHintEl.style.removeProperty("--drop-target-left");
15926
+ dropHintEl.style.removeProperty("--drop-target-right");
15893
15927
  dropHintEl.style.removeProperty("--drop-target-width");
15894
15928
  dropHintEl.style.removeProperty("--drop-target-height");
15895
15929
  };
@@ -15931,12 +15965,10 @@ const startDragToCarryCopy = (
15931
15965
  }
15932
15966
  }
15933
15967
 
15934
- const dropTargetInfo = getDropTargetInfo(gestureInfo, items, {
15935
- // The edges of a LIST: above the first row means the top of it, below
15936
- // the last one means the end of it. A board has no such reading — away
15937
- // from every place is away from every place.
15938
- fallbackToEdge: !canLand,
15939
- });
15968
+ const flow = canLand ? undefined : flowSaid || readItemFlow(allItems);
15969
+ const dropTargetInfo = canLand
15970
+ ? getDropTargetInfo(gestureInfo, items)
15971
+ : findPlaceInList(gestureInfo, items, flow);
15940
15972
  gestureInfo.dropTargetInfo = dropTargetInfo || null;
15941
15973
  if (!dropTargetInfo) {
15942
15974
  clearDropHint();
@@ -15970,14 +16002,13 @@ const startDragToCarryCopy = (
15970
16002
  );
15971
16003
  return;
15972
16004
  }
15973
- // Convert {element, edge} to a beforeElement using the items array
16005
+ // Convert {element, side} to a beforeElement using the items array
15974
16006
  // (not nextElementSibling, which breaks if non-item elements exist between items).
15975
- // edge "start" → insert before the hovered element
15976
- // edge "end" → insert before the next item (null = append at end)
15977
- const edge = dropTargetInfo.elementSide.y;
16007
+ // side "start" → insert before the hovered element
16008
+ // side "end" → insert before the next item (null = append at end)
15978
16009
  const hoveredIndex = items.indexOf(dropTargetInfo.element);
15979
16010
  const beforeElement =
15980
- edge === "start"
16011
+ dropTargetInfo.side === "start"
15981
16012
  ? dropTargetInfo.element
15982
16013
  : (items[hoveredIndex + 1] ?? null);
15983
16014
  // Detect no-op: result would leave the grabbed element in the same position.
@@ -16000,9 +16031,11 @@ const startDragToCarryCopy = (
16000
16031
  currentReleaseElement = releaseElement;
16001
16032
  // Update drop hint CSS vars.
16002
16033
  // beforeElement = null → insert at end (hint after last item)
16003
- // beforeElement = X → insert before X (hint at top edge of X)
16034
+ // beforeElement = X → insert before X (hint at the edge of X the
16035
+ // flow comes in by)
16004
16036
  const anchorEl = beforeElement || items[items.length - 1];
16005
- const anchorEdge = beforeElement !== null ? "top" : "bottom";
16037
+ const anchorEdge =
16038
+ DROP_HINT_EDGES[flow][beforeElement !== null ? "before" : "after"];
16006
16039
  // Viewport coordinates, straight from the anchor row: the hint is fixed
16007
16040
  // in the page (see its CSS), so there is no container box to be relative
16008
16041
  // to and no scroll offset to add back.
@@ -16020,10 +16053,18 @@ const startDragToCarryCopy = (
16020
16053
  "--drop-target-left",
16021
16054
  `${anchorRect.left}px`,
16022
16055
  );
16056
+ dropHintEl.style.setProperty(
16057
+ "--drop-target-right",
16058
+ `${anchorRect.right}px`,
16059
+ );
16023
16060
  dropHintEl.style.setProperty(
16024
16061
  "--drop-target-width",
16025
16062
  `${anchorRect.width}px`,
16026
16063
  );
16064
+ dropHintEl.style.setProperty(
16065
+ "--drop-target-height",
16066
+ `${anchorRect.height}px`,
16067
+ );
16027
16068
  });
16028
16069
 
16029
16070
  dragGesture.addReleaseCallback(async (gestureInfo) => {
@@ -16284,6 +16325,123 @@ const createDropSurface = () => {
16284
16325
  return div;
16285
16326
  };
16286
16327
 
16328
+ /**
16329
+ * The way the items follow each other, from how the caller said they are laid
16330
+ * out (the `itemFlow` of startDragTo). A row runs the way the text of its list
16331
+ * does: from right to left under `direction: rtl`.
16332
+ */
16333
+ const resolveItemFlow = (itemFlow, containerElement) => {
16334
+ if (itemFlow === undefined) {
16335
+ return undefined;
16336
+ }
16337
+ if (itemFlow === "column") {
16338
+ return "down";
16339
+ }
16340
+ if (itemFlow === "row" || itemFlow === "wrap") {
16341
+ return getComputedStyle(containerElement).direction === "rtl"
16342
+ ? "left"
16343
+ : "right";
16344
+ }
16345
+ return undefined;
16346
+ };
16347
+
16348
+ /**
16349
+ * Which way the items of a list follow each other on screen: "down", or along a
16350
+ * line — a row, a wrapped row, a grid — "right", or "left" when it runs from
16351
+ * right to left. Read from where the items stand rather than declared: the
16352
+ * first item level with the one after it makes the list run sideways, and which
16353
+ * of the two is on the left says which way. Asked of the whole list, not of the
16354
+ * item under the copy: alone on the last line of a wrapped row, an item is level
16355
+ * with nothing and still part of a row.
16356
+ */
16357
+ const readItemFlow = (items) => {
16358
+ let previousRect;
16359
+ for (const item of items) {
16360
+ const rect = item.getBoundingClientRect();
16361
+ // A box that takes no room stands on no line.
16362
+ if (rect.width === 0 && rect.height === 0) {
16363
+ continue;
16364
+ }
16365
+ if (previousRect && areLevel(previousRect, rect)) {
16366
+ return rect.left < previousRect.left ? "left" : "right";
16367
+ }
16368
+ previousRect = rect;
16369
+ }
16370
+ return "down";
16371
+ };
16372
+
16373
+ // The middle of one within the height of the other. Overlapping is not enough:
16374
+ // items stacked with a negative margin (a border shared between two) overlap by
16375
+ // a pixel and are still one under the other.
16376
+ const areLevel = (a, b) => {
16377
+ const aMiddle = a.top + a.height / 2;
16378
+ const bMiddle = b.top + b.height / 2;
16379
+ return (
16380
+ (bMiddle > a.top && bMiddle < a.bottom) ||
16381
+ (aMiddle > b.top && aMiddle < b.bottom)
16382
+ );
16383
+ };
16384
+
16385
+ /**
16386
+ * The item the copy is at, and its `side` in the order of the list: "start" for
16387
+ * before it, "end" for after it. Down a list, read by the copy's leading edge
16388
+ * (see getDropTargetInfo); along a row, by its middle against the item's — how
16389
+ * high the copy is says nothing there, and the leading edge assumes a copy as
16390
+ * large as what it passes over: items of a row are as wide as their content,
16391
+ * and one wider than its neighbour could never be put after it.
16392
+ *
16393
+ * Beyond an end of the list, over no item, is a place too: above the first line
16394
+ * or below the last, and along a row beside the first item or past the last.
16395
+ */
16396
+ const findPlaceInList = (gestureInfo, items, flow) => {
16397
+ const dragElementRect = gestureInfo.elementImpacted.getBoundingClientRect();
16398
+ const dropTargetInfo = getDropTargetInfo(gestureInfo, items);
16399
+ if (dropTargetInfo) {
16400
+ const { element } = dropTargetInfo;
16401
+ if (flow === "down") {
16402
+ return { element, side: dropTargetInfo.elementSide.y };
16403
+ }
16404
+ const elementRect = element.getBoundingClientRect();
16405
+ const dragMiddle = dragElementRect.left + dragElementRect.width / 2;
16406
+ const elementMiddle = elementRect.left + elementRect.width / 2;
16407
+ const beforeItsMiddle =
16408
+ flow === "right"
16409
+ ? dragMiddle < elementMiddle
16410
+ : dragMiddle > elementMiddle;
16411
+ return { element, side: beforeItsMiddle ? "start" : "end" };
16412
+ }
16413
+ const firstItem = items[0];
16414
+ if (!firstItem) {
16415
+ return null;
16416
+ }
16417
+ const lastItem = items[items.length - 1];
16418
+ const firstRect = firstItem.getBoundingClientRect();
16419
+ const lastRect = lastItem.getBoundingClientRect();
16420
+ if (
16421
+ dragElementRect.bottom < firstRect.top ||
16422
+ (flow !== "down" &&
16423
+ areLevel(dragElementRect, firstRect) &&
16424
+ isBeyond(dragElementRect, firstRect, flow === "right" ? "left" : "right"))
16425
+ ) {
16426
+ return { element: firstItem, side: "start" };
16427
+ }
16428
+ if (
16429
+ dragElementRect.top > lastRect.bottom ||
16430
+ (flow !== "down" &&
16431
+ areLevel(dragElementRect, lastRect) &&
16432
+ isBeyond(dragElementRect, lastRect, flow))
16433
+ ) {
16434
+ return { element: lastItem, side: "end" };
16435
+ }
16436
+ return null;
16437
+ };
16438
+
16439
+ const isBeyond = (dragElementRect, itemRect, towards) => {
16440
+ return towards === "left"
16441
+ ? dragElementRect.right < itemRect.left
16442
+ : dragElementRect.left > itemRect.right;
16443
+ };
16444
+
16287
16445
  /**
16288
16446
  * The copy leaves the screen the way it was thrown, and the caller says what that
16289
16447
  * meant. Resolves true when it is really gone.
@@ -22736,4 +22894,4 @@ const useResizeStatus = (elementRef, { as = "number" } = {}) => {
22736
22894
  };
22737
22895
  };
22738
22896
 
22739
- 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, createInternalCustomEvent, createIterableWeakSet, createOpacityTransition, createPubSub, createStyleController, createTimelineTransition, createTransition, createTranslateXTransition, createValueEffect, createWidthTransition, cubicBezier, dispatchCustomEvent, dispatchInternalCustomEvent, dispatchPublicCustomEvent, dragAfterIntent, dragSourceThatStoodDown, 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, installPanZoom, isAncestorOpen, isDisplayedDespiteClosedAncestor, isPressDisputedByDrag, isPressDrivenClick, isPrimaryButtonEvent, isSameColor, isScrollable, isTouchDrivenEvent, keepTouchRefusable, markDragSource, measureLongestVisualLineWidth, measureScrollbar, measureWidestChildRow, mergeOneStyle, mergeTwoStyles, normalizeKeyboardKey, normalizeStyle, normalizeStyles, observeAncestorOpenState, onAncestorReopen, parsePositionArea, parseStyle, performTabNavigation, pickPositionRelativeTo, prefersDarkColors, prefersLightColors, preventFocusNav, preventFocusNavViaKeyboard, preventIntermediateScrollbar, refuseDragTo, releaseWheelGesture, resolveCSSColor, resolveCSSSize, resolveColorLuminance, resolveOklchLightness, scrollIntoViewScoped, scrollIntoViewThroughScrollables, scrollIntoViewWithStickyAwareness, scrollRoomTowards, setAttribute, setAttributes, setPlacementViewportInsets, setStyles, setVirtualKeyboardOverlaysContent, snapToPixel, startDragTo, startDragToResizeGesture, startDragToTravel, stickyAsRelativeCoords, stringifyStyle, subscribeVirtualKeyboardGeometryChange, subscribeVisualViewportResizeSettled, subscribeWindowResizeSettled, suppressClickAfterGesture, trapFocusInside, trapScrollInside, useActiveElement, useAvailableHeight, useAvailableWidth, useMaxHeight, useMaxWidth, useResizeStatus, visibleRectEffect, waitForPressHeld, waitForTap, watchWheelTravel, wheelGestureIsTakenFrom };
22897
+ 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, createInternalCustomEvent, createIterableWeakSet, createOpacityTransition, createPubSub, createStyleController, createTimelineTransition, createTransition, createTranslateXTransition, createValueEffect, createWidthTransition, cubicBezier, dispatchCustomEvent, dispatchInternalCustomEvent, dispatchPublicCustomEvent, dragAfterIntent, dragSourceThatStoodDown, 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, installPanZoom, isAncestorOpen, isDisplayedDespiteClosedAncestor, isPressDisputedByDrag, isPressDrivenClick, isPrimaryButtonEvent, isSameColor, isScrollable, isTouchDrivenEvent, keepTouchRefusable, markDragSource, measureLongestVisualLineWidth, measureScrollbar, measureWidestChildRow, mergeOneStyle, mergeTwoStyles, normalizeKeyboardKey, normalizeStyle, normalizeStyles, observeAncestorOpenState, onAncestorReopen, overflowGoesToViewport, parsePositionArea, parseStyle, performTabNavigation, pickPositionRelativeTo, prefersDarkColors, prefersLightColors, preventFocusNav, preventFocusNavViaKeyboard, preventIntermediateScrollbar, refuseDragTo, releaseWheelGesture, resolveCSSColor, resolveCSSSize, resolveColorLuminance, resolveOklchLightness, scrollIntoViewScoped, scrollIntoViewThroughScrollables, scrollIntoViewWithStickyAwareness, scrollRoomTowards, setAttribute, setAttributes, setPlacementViewportInsets, setStyles, setVirtualKeyboardOverlaysContent, snapToPixel, startDragTo, startDragToResizeGesture, startDragToTravel, stickyAsRelativeCoords, stringifyStyle, subscribeVirtualKeyboardGeometryChange, subscribeVisualViewportResizeSettled, subscribeWindowResizeSettled, suppressClickAfterGesture, trapFocusInside, trapScrollInside, useActiveElement, useAvailableHeight, useAvailableWidth, useMaxHeight, useMaxWidth, useResizeStatus, visibleRectEffect, waitForPressHeld, waitForTap, watchWheelTravel, wheelGestureIsTakenFrom };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/dom",
3
- "version": "0.17.91",
3
+ "version": "0.17.93",
4
4
  "type": "module",
5
5
  "description": "DOM utilities for writing frontend code",
6
6
  "repository": {