@jsenv/dom 0.17.61 → 0.17.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/jsenv_dom.js +129 -99
- 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
|
|
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
|
-
:
|
|
12080
|
-
|
|
12081
|
-
|
|
12082
|
-
|
|
12083
|
-
|
|
12084
|
-
|
|
12085
|
-
|
|
12086
|
-
|
|
12087
|
-
|
|
12088
|
-
|
|
12089
|
-
|
|
12090
|
-
|
|
12091
|
-
|
|
12092
|
-
|
|
12093
|
-
|
|
12094
|
-
|
|
12095
|
-
|
|
12096
|
-
|
|
12097
|
-
|
|
12098
|
-
|
|
12099
|
-
|
|
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
|
-
|
|
12203
|
+
|
|
12204
|
+
[data-drag-travel*="y"] * {
|
|
12145
12205
|
overscroll-behavior-y: contain !important;
|
|
12146
12206
|
}
|
|
12147
|
-
|
|
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
|
|
@@ -21710,4 +21740,4 @@ const useResizeStatus = (elementRef, { as = "number" } = {}) => {
|
|
|
21710
21740
|
};
|
|
21711
21741
|
};
|
|
21712
21742
|
|
|
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 };
|
|
21743
|
+
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.
|
|
3
|
+
"version": "0.17.62",
|
|
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-
|
|
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-
|
|
48
|
+
"preact": "11.0.0-rc.2"
|
|
49
49
|
},
|
|
50
50
|
"publishConfig": {
|
|
51
51
|
"access": "public"
|