@jsenv/dom 0.17.61 → 0.17.63

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 +163 -111
  2. package/package.json +3 -3
package/dist/jsenv_dom.js CHANGED
@@ -4705,6 +4705,105 @@ const waitForPressHeld = (
4705
4705
  };
4706
4706
  };
4707
4707
 
4708
+ /**
4709
+ * A press that turns out to be a tap: let go of before it went anywhere.
4710
+ *
4711
+ * The counterpart of the hold next door (press_held.js). That one is a press
4712
+ * saying something by NOT moving for long enough; this one is a press saying
4713
+ * something by being BRIEF — and it is the same ambiguity read from the other
4714
+ * end, so a caller that reads both gets one press told apart once.
4715
+ *
4716
+ * Its reason to exist is what a tap is NOT: a `click` is the browser's answer to
4717
+ * the same question and it cannot be counted, because a browser withholds the
4718
+ * clicks of a gesture it is keeping for itself — two taps in a row on a page
4719
+ * that can be double-tap-zoomed produce two `pointerup` and a single `click`.
4720
+ * Anything counting presses (a double click that has to mean the same thing
4721
+ * under a finger and under a mouse) therefore has to read the pointer, and this
4722
+ * is that read: one press in, "it stayed a tap" out.
4723
+ *
4724
+ * What disqualifies a press is exactly what says it became a gesture: it
4725
+ * travelled (past `slop`), or the browser took the touch for itself
4726
+ * (`pointercancel` — a scroll starting under the finger, the system's own
4727
+ * double-tap zoom). How LONG it lasted is not asked here: a press held still is
4728
+ * a tap for as long as the hand wants, and whether a slow one still counts
4729
+ * towards whatever is being counted belongs to the counter, which is the only
4730
+ * one that knows what rhythm it is looking for.
4731
+ */
4732
+
4733
+ // How far the pointer may travel and still be a tap. Wider than a hold's slop
4734
+ // because it is a different question: a hold asks whether a finger is standing
4735
+ // still, a tap only asks whether the press went somewhere — and between two of
4736
+ // them the finger LEAVES the glass, so what a counter compares is fingertips
4737
+ // apart rather than pixels apart.
4738
+ const TAP_SLOP_DEFAULT = 30;
4739
+
4740
+ /**
4741
+ * Watches one press and says whether it stayed a tap.
4742
+ *
4743
+ * @param {PointerEvent} pressEvent The `pointerdown` that may be a tap.
4744
+ * @param {object} options
4745
+ * @param {number} [options.slop=30] How far (px) the pointer may travel before
4746
+ * the press is a gesture rather than a tap.
4747
+ * @param {(tapEvent: PointerEvent) => void} options.onTap The press was let go
4748
+ * of, having gone nowhere.
4749
+ * @returns {{ cancel: () => void }} Somebody else settled what the press is.
4750
+ */
4751
+ const waitForTap = (pressEvent, { slop = TAP_SLOP_DEFAULT, onTap }) => {
4752
+ const { pointerId, clientX, clientY } = pressEvent;
4753
+
4754
+ const cleanupCallbacks = [];
4755
+ const stopWatching = () => {
4756
+ for (const cleanupCallback of cleanupCallbacks) {
4757
+ cleanupCallback();
4758
+ }
4759
+ cleanupCallbacks.length = 0;
4760
+ };
4761
+
4762
+ const onPointerMove = (pointerMoveEvent) => {
4763
+ if (pointerMoveEvent.pointerId !== pointerId) {
4764
+ return;
4765
+ }
4766
+ const xTravel = Math.abs(pointerMoveEvent.clientX - clientX);
4767
+ const yTravel = Math.abs(pointerMoveEvent.clientY - clientY);
4768
+ if (xTravel < slop && yTravel < slop) {
4769
+ return;
4770
+ }
4771
+ // The press is going somewhere: it is scrolling, swiping, panning, carrying
4772
+ // something. Whatever it is, it is not a tap.
4773
+ stopWatching();
4774
+ };
4775
+ const onPointerUp = (pointerUpEvent) => {
4776
+ if (pointerUpEvent.pointerId !== pointerId) {
4777
+ return;
4778
+ }
4779
+ stopWatching();
4780
+ onTap(pointerUpEvent);
4781
+ };
4782
+ // Not the hand letting go: the browser saying it is taking the touch for a
4783
+ // gesture of its own, which is the one press that ends without ever having
4784
+ // been anybody else's.
4785
+ const onPointerCancel = (pointerCancelEvent) => {
4786
+ if (pointerCancelEvent.pointerId !== pointerId) {
4787
+ return;
4788
+ }
4789
+ stopWatching();
4790
+ };
4791
+ // On window rather than on the element: the pointer can leave it, and the
4792
+ // element itself can be taken out of the document while the press is watched.
4793
+ window.addEventListener("pointermove", onPointerMove);
4794
+ window.addEventListener("pointerup", onPointerUp);
4795
+ window.addEventListener("pointercancel", onPointerCancel);
4796
+ cleanupCallbacks.push(() => {
4797
+ window.removeEventListener("pointermove", onPointerMove);
4798
+ window.removeEventListener("pointerup", onPointerUp);
4799
+ window.removeEventListener("pointercancel", onPointerCancel);
4800
+ });
4801
+
4802
+ return {
4803
+ cancel: stopWatching,
4804
+ };
4805
+ };
4806
+
4708
4807
  const activeElementSignal = signal(
4709
4808
  typeof document === "object" ? document.activeElement : undefined,
4710
4809
  );
@@ -8502,7 +8601,7 @@ const installImportMetaCssBuild = (importMeta) => {
8502
8601
  const stylesheet = new CSSStyleSheet({ baseUrl: importMeta.url });
8503
8602
  stylesheet.replaceSync(value);
8504
8603
  stylesheetMap.set(url, stylesheet);
8505
- document.adoptedStyleSheets = [...document.adoptedStyleSheets, stylesheet];
8604
+ document.adoptedStyleSheets.push(stylesheet);
8506
8605
  };
8507
8606
  const update = (url, value) => {
8508
8607
  stylesheetMap.get(url).replaceSync(value);
@@ -12068,113 +12167,44 @@ const findTableCellCol = (cellElement) => {
12068
12167
  installImportMetaCssBuild(import.meta);
12069
12168
 
12070
12169
  // While a pointer is on something that travels: said on the document, because
12071
- // what has to be told is the document.
12170
+ // what has to be told is the document. The selector below writes it out rather
12171
+ // than reading this constant: a substitution in a selector is one the build
12172
+ // cannot read, and it ships the whole stylesheet unparsed and uncompressed.
12072
12173
  const GESTURE_ATTRIBUTE = "data-drag-travel-gesture";
12073
12174
 
12074
12175
  // …and while one is actually travelling something, which is a later moment and
12075
12176
  // takes more away (see the CSS).
12076
12177
  const WALKING_ATTRIBUTE = "data-drag-travel-walking";
12077
12178
 
12078
- import.meta.css = /* css */ [`
12079
- :root[${GESTURE_ATTRIBUTE}] {
12080
- /* The bounce the browser plays when a gesture reaches the end of a page —
12081
- and the swipe that goes back in history with it. Both are the browser
12082
- answering a gesture that is already answered, here, by what the finger is
12083
- dragging: the page rocks under a travel that is doing its own moving, and
12084
- one gesture is seen twice. From the press, because the browser starts
12085
- answering from the press — waiting for the first pixel that travels would
12086
- let it happen once, every time. Only while a finger is down, so a page
12087
- that bounces the rest of the time goes on bouncing. */
12088
- overscroll-behavior: none;
12089
- }
12090
- /* …and nothing inside a travelling box hands its leftovers to what is above
12091
- it: a list that reaches its end passes what is left of the gesture up the
12092
- chain, and the page moves behind a travel that is being dragged.
12093
-
12094
- Written ONCE AND FOR ALL rather than while a finger is down, unlike
12095
- everything else here: a browser decides what a gesture may do when the
12096
- gesture BEGINS — at the touchstart, at the first wheel event — and a
12097
- property written after that decision arrives too late for the gesture it
12098
- was meant for. That is what "most of the time it does not move, sometimes
12099
- it does" is made of.
12100
-
12101
- On the axis the box travels on, and that one only: the other axis is the
12102
- content's own scrolling and is left alone. Containing does not stop it from
12103
- scrolling anyway — it stops it from spilling over.
12104
-
12105
- !important because this is not a preference: a box that travels cannot let
12106
- the page travel with it, and the rule has to win over whatever an
12107
- application says about its own scrollers.
12108
-
12109
- Said on the box, where it is a statement about the box and not about what
12110
- it happens to hold — and read only where a browser asks the box at all:
12111
- one that CLIPS is asked (it is a scroll container, which is what "asked"
12112
- means to a browser), one that does not is walked past. A box that travels
12113
- usually clips, because moving something in and out of a box is what
12114
- clipping is for. One that does not still travels — what an inner scroller
12115
- has left over reaches the page there, and the rule below says why that is
12116
- the lesser of the two prices. An application that knows which of ITS
12117
- elements scroll can contain those itself, on the element every engine
12118
- reads; nothing in here can know that from a stylesheet. */
12119
- [data-drag-travel*="x"] {
12120
- overscroll-behavior-x: contain !important;
12121
- }
12122
- [data-drag-travel*="y"] {
12123
- overscroll-behavior-y: contain !important;
12124
- }
12125
- /* The scrollers a browser makes on its own, wherever they are inside the box:
12126
- a textarea and a list of options scroll their own content by nature, and
12127
- nobody had to say so for them — no stylesheet declared them, so nothing
12128
- else here can find them, and they would hand what is left of a gesture to
12129
- the page like any undeclared scroller does.
12130
-
12131
- Named rather than found, because being native is exactly what makes them
12132
- nameable. An input is NOT in the list: it is the one form control that has
12133
- nothing to scroll on the axis anything travels on, and containing it is how
12134
- a row-wide invisible checkbox becomes a hole under the wheel.
12135
-
12136
- A textarea with nothing in it, or a list of options short enough to fit, is
12137
- contained too — a browser cannot be asked "only if it scrolls". On Blink
12138
- that costs a wheel over an empty textarea, which then moves nothing rather
12139
- than the list around it; elsewhere the engine already only asks what
12140
- scrolls. Worth the page not moving behind a travel. */
12141
- [data-drag-travel*="x"] :is(textarea, select[multiple], select[size]) {
12179
+ import.meta.css = /* css */ [`:root[data-drag-travel-gesture] {
12180
+ overscroll-behavior: none;
12181
+ }
12182
+
12183
+ [data-drag-travel*="x"] {
12184
+ overscroll-behavior-x: contain !important;
12185
+ }
12186
+
12187
+ [data-drag-travel*="y"] {
12188
+ overscroll-behavior-y: contain !important;
12189
+ }
12190
+
12191
+ [data-drag-travel*="x"] :is(textarea, select[multiple], select[size]) {
12192
+ overscroll-behavior-x: contain !important;
12193
+ }
12194
+
12195
+ [data-drag-travel*="y"] :is(textarea, select[multiple], select[size]) {
12196
+ overscroll-behavior-y: contain !important;
12197
+ }
12198
+
12199
+ @supports not (-webkit-app-region: none) {
12200
+ [data-drag-travel*="x"] * {
12142
12201
  overscroll-behavior-x: contain !important;
12143
12202
  }
12144
- [data-drag-travel*="y"] :is(textarea, select[multiple], select[size]) {
12203
+
12204
+ [data-drag-travel*="y"] * {
12145
12205
  overscroll-behavior-y: contain !important;
12146
12206
  }
12147
- /* The same thing said again to everything inside — and only where saying it
12148
- is what works.
12149
-
12150
- Two readings of "contain" are out there, and the rule above lands in only
12151
- one of them. Blink walks EVERY scroll container between the pointer and the
12152
- page and asks each one whether the gesture may go past it, whether or not
12153
- it had anything to scroll: the box above is asked, and containing it is the
12154
- whole answer. Gecko and WebKit ask only the ones that actually scroll: the
12155
- box is skipped (it travels, it does not scroll), and what is left of a
12156
- list's gesture reaches the page unless the LIST itself was told — which is
12157
- what this does, to everything, because which descendant scrolls is not
12158
- something a stylesheet can know.
12159
-
12160
- Not said to Blink, where it is not needed and does harm: an element that
12161
- clips is a scroll container to a browser (a line of text with an ellipsis,
12162
- a rounded card, an invisible checkbox covering a row), and Blink asking one
12163
- of those with nothing to scroll gets "no further" for an answer — the wheel
12164
- stops there and the list right above it never moves. A dead zone under the
12165
- pointer, wherever something inside the box happens to clip.
12166
-
12167
- Blink is told apart by a property only it has, rather than by reading a user
12168
- agent: the split above is between engines, and -webkit-app-region is one of
12169
- the few things that names one. */
12170
- @supports not (-webkit-app-region: none) {
12171
- [data-drag-travel*="x"] * {
12172
- overscroll-behavior-x: contain !important;
12173
- }
12174
- [data-drag-travel*="y"] * {
12175
- overscroll-behavior-y: contain !important;
12176
- }
12177
- }
12207
+ }
12178
12208
  `, "@jsenv/dom/src/interaction/drag/drag_to_travel.js"];
12179
12209
 
12180
12210
  // How far a pointer goes before it is a travel rather than a click: below this
@@ -15760,9 +15790,9 @@ const isAncestorOpen = (ancestor) => {
15760
15790
  };
15761
15791
 
15762
15792
  /**
15763
- * Whether `element` is on screen even though the openable ancestor it was
15764
- * resolved against is closed. Ask it only about an ancestor `isAncestorOpen`
15765
- * already said is closed.
15793
+ * Whether `element` is on screen even though `ancestor`, the openable ancestor
15794
+ * it was resolved against, is closed. Ask it only about an ancestor
15795
+ * `isAncestorOpen` already said is closed.
15766
15796
  *
15767
15797
  * `[aria-expanded]` in OPENABLE_SELECTOR covers two opposite kinds of element:
15768
15798
  * the surface being opened (a <dialog>, a [popover], and the plain <div> navi's
@@ -15772,11 +15802,19 @@ const isAncestorOpen = (ancestor) => {
15772
15802
  * aria-expanded describes the popup it controls rather than its own contents:
15773
15803
  * its façade stays on screen the entire time aria-expanded is "false".
15774
15804
  *
15775
- * Markup tells the two apart badly, so ask the layout instead. A closed surface
15776
- * is display:none, natively for [popover]/<dialog> and through the library's
15777
- * own closed-state CSS ([navi-hidden], :not([popover])) for the custom
15778
- * renderers — so nothing inside one answers true here, while everything a
15779
- * trigger keeps on screen does.
15805
+ * A <dialog> or a [popover] is only ever a surface, and the UA hides a closed
15806
+ * one outright (display: none), so nothing inside has a box: answered from the
15807
+ * markup, without touching the layout. Anything else — a <details> whose
15808
+ * <summary> stays on screen, a bare [aria-expanded] — is asked of the layout
15809
+ * instead: a closed custom surface is display:none through the library's own
15810
+ * closed-state CSS ([navi-hidden], :not([popover])), so nothing inside one
15811
+ * answers true here, while everything a trigger keeps on screen does.
15812
+ *
15813
+ * The layout question is a forced style recalculation. Asked once per element
15814
+ * from a mount that also writes styles between the questions, each one costs a
15815
+ * recalculation of everything dirtied since the last, so a caller that knows
15816
+ * the answer another way (a surface it is itself building the content of, see
15817
+ * @jsenv/navi's use_displayed_layout_effect.js) should not reach this.
15780
15818
  *
15781
15819
  * Ask it about an ancestor that is closed AND settled — on mount, or when
15782
15820
  * setting up a long-lived observer. A surface animating its way out still has a
@@ -15784,7 +15822,10 @@ const isAncestorOpen = (ancestor) => {
15784
15822
  * display/overlay), so asked at the instant one closes this says "on screen"
15785
15823
  * about something on its way off it.
15786
15824
  */
15787
- const isDisplayedDespiteClosedAncestor = (element) => {
15825
+ const isDisplayedDespiteClosedAncestor = (element, ancestor) => {
15826
+ if (ancestor.tagName === "DIALOG" || ancestor.hasAttribute("popover")) {
15827
+ return false;
15828
+ }
15788
15829
  if (typeof element.checkVisibility !== "function") {
15789
15830
  // Nothing to tell the two apart with: leave the caller treating the closed
15790
15831
  // ancestor as hiding this element.
@@ -17111,7 +17152,8 @@ const visibleRectEffect = (
17111
17152
  // which is the opposite answer — so a surface closing later goes on
17112
17153
  // counting, unasked.
17113
17154
  const elementIsInAncestorFacade =
17114
- !openableAncestorIsOpen && isDisplayedDespiteClosedAncestor(element);
17155
+ !openableAncestorIsOpen &&
17156
+ isDisplayedDespiteClosedAncestor(element, openableAncestor);
17115
17157
  if (!openableAncestorIsOpen && !elementIsInAncestorFacade) {
17116
17158
  ancestorClosedCount++;
17117
17159
  pauseResizeWatching();
@@ -17525,6 +17567,11 @@ const toContainerAlignedPosition = (value) => {
17525
17567
  * many px of that same edge — avoids the (wider) element overflowing past it. 0 disables
17526
17568
  * the snap entirely.
17527
17569
  * @param {number} [options.minLeft=0] - Minimum left coordinate (document-relative).
17570
+ * @param {boolean} [options.fill=false] - `element` is known to take the whole available
17571
+ * area net of `marginWithContainer`, on both axes (a dialog stretched to its container
17572
+ * by CSS). Its box is then derived from the container rather than measured: reading
17573
+ * offsetWidth/offsetHeight forces a layout of everything the element holds, for a number
17574
+ * the caller already knows. Only meaningful without an `anchor`.
17528
17575
  * @param {HTMLElement|null} [options.container] - The container `element` is genuinely
17529
17576
  * `position: absolute` relative to (its own containing block) — decoupled from whether
17530
17577
  * there's a real `anchor`, since `element` can be container-relative either way (e.g. the
@@ -17565,6 +17612,7 @@ const pickPositionRelativeTo = (
17565
17612
  marginWithAnchor = 0,
17566
17613
  alignToAnchorBox = "border-box",
17567
17614
  marginWithContainer = 0,
17615
+ fill = false,
17568
17616
  container,
17569
17617
  } = {},
17570
17618
  ) => {
@@ -17711,8 +17759,12 @@ const pickPositionRelativeTo = (
17711
17759
  // instant (a popover using animation="scaling"/"expand-*") — so
17712
17760
  // getBoundingClientRect() answers where it is painted, at its *shrunk*
17713
17761
  // mid-animation size, instead of the box being measured here.
17714
- const elementWidth = element.offsetWidth;
17715
- const elementHeight = element.offsetHeight;
17762
+ const elementWidth = fill
17763
+ ? availableWidth - 2 * marginWithContainer
17764
+ : element.offsetWidth;
17765
+ const elementHeight = fill
17766
+ ? availableHeight - 2 * marginWithContainer
17767
+ : element.offsetHeight;
17716
17768
  const anchorWidth = anchorRight - anchorLeft;
17717
17769
  const anchorHeight = anchorBottom - anchorTop;
17718
17770
 
@@ -21710,4 +21762,4 @@ const useResizeStatus = (elementRef, { as = "number" } = {}) => {
21710
21762
  };
21711
21763
  };
21712
21764
 
21713
- 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, 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, watchWheelTravel, wheelGestureIsTakenFrom };
21765
+ 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, 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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/dom",
3
- "version": "0.17.61",
3
+ "version": "0.17.63",
4
4
  "type": "module",
5
5
  "description": "DOM utilities for writing frontend code",
6
6
  "repository": {
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@preact/signals": "^2.11.2",
40
- "preact": "^11.0.0-beta.2"
40
+ "preact": "^11.0.0-rc.2"
41
41
  },
42
42
  "dependencies": {},
43
43
  "devDependencies": {
@@ -45,7 +45,7 @@
45
45
  "@jsenv/navi": "../navi",
46
46
  "@jsenv/snapshot": "../../tooling/snapshot",
47
47
  "@preact/signals": "2.11.2",
48
- "preact": "11.0.0-beta.2"
48
+ "preact": "11.0.0-rc.2"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public"