@surdeddd/bottom-sheet 0.6.1 → 0.8.0
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/README.md +31 -3
- package/dist/{BottomSheetEngine-CqiCz64W.d.cts → BottomSheetEngine-BD1mSExI.d.cts} +2 -1
- package/dist/{BottomSheetEngine-BHjKFtnM.d.ts → BottomSheetEngine-BDGRWa2i.d.ts} +2 -1
- package/dist/element.cjs +62 -57
- package/dist/element.d.cts +1 -1
- package/dist/element.d.ts +1 -1
- package/dist/element.iife.global.js +2 -2
- package/dist/element.js +62 -57
- package/dist/index.cjs +62 -57
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +62 -57
- package/dist/integrations/formik.d.cts +1 -1
- package/dist/integrations/formik.d.ts +1 -1
- package/dist/integrations/react-hook-form.d.cts +1 -1
- package/dist/integrations/react-hook-form.d.ts +1 -1
- package/dist/preact.d.cts +1 -1
- package/dist/preact.d.ts +1 -1
- package/dist/qwik.cjs +89 -59
- package/dist/qwik.d.cts +8 -3
- package/dist/qwik.d.ts +8 -3
- package/dist/qwik.js +89 -59
- package/dist/react.cjs +74 -57
- package/dist/react.d.cts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +74 -57
- package/dist/solid.cjs +71 -59
- package/dist/solid.d.cts +9 -1
- package/dist/solid.d.ts +9 -1
- package/dist/solid.js +71 -59
- package/dist/solid.source.jsx +71 -59
- package/dist/styles.css +4 -4
- package/dist/svelte-core.cjs +62 -57
- package/dist/svelte-core.js +62 -57
- package/dist/svelte-src/BottomSheet.svelte +0 -10
- package/dist/svelte.cjs +70 -77
- package/dist/svelte.js +70 -77
- package/dist/vue.cjs +62 -73
- package/dist/vue.js +62 -73
- package/package.json +1 -1
package/dist/element.js
CHANGED
|
@@ -2597,6 +2597,7 @@ var init_BottomSheetEngine = __esm({
|
|
|
2597
2597
|
__publicField(this, "progressWriteSentinel", new WriteSentinel());
|
|
2598
2598
|
__publicField(this, "isTopSheet", true);
|
|
2599
2599
|
__publicField(this, "opening", false);
|
|
2600
|
+
__publicField(this, "allowOvershoot", false);
|
|
2600
2601
|
__publicField(this, "progressPayload", {
|
|
2601
2602
|
value: 0,
|
|
2602
2603
|
size: 0
|
|
@@ -2887,8 +2888,8 @@ var init_BottomSheetEngine = __esm({
|
|
|
2887
2888
|
this.updateAriaSlider();
|
|
2888
2889
|
this.emit("snap", {
|
|
2889
2890
|
id,
|
|
2890
|
-
size:
|
|
2891
|
-
progress: this.computeProgress(
|
|
2891
|
+
size: this.size,
|
|
2892
|
+
progress: this.computeProgress(this.size)
|
|
2892
2893
|
});
|
|
2893
2894
|
if (wasClosed && target.size > 0) {
|
|
2894
2895
|
this.emit("open", { id });
|
|
@@ -2967,12 +2968,12 @@ var init_BottomSheetEngine = __esm({
|
|
|
2967
2968
|
const value = typeof h === "number" ? `${h}px` : h;
|
|
2968
2969
|
const axis = layoutAxis(this.mode);
|
|
2969
2970
|
this.element.style.setProperty(
|
|
2970
|
-
axis === "height" ? "
|
|
2971
|
+
axis === "height" ? "max-height" : "max-width",
|
|
2971
2972
|
value
|
|
2972
2973
|
);
|
|
2973
2974
|
if (typeof h === "number") {
|
|
2974
2975
|
this.maxHeightCap = h;
|
|
2975
|
-
this.
|
|
2976
|
+
this.recompute();
|
|
2976
2977
|
} else if (typeof window !== "undefined") {
|
|
2977
2978
|
const probe2 = document.createElement("div");
|
|
2978
2979
|
probe2.style.cssText = `position:absolute;visibility:hidden;pointer-events:none;${axis === "height" ? "height" : "width"}:${value};`;
|
|
@@ -2980,7 +2981,7 @@ var init_BottomSheetEngine = __esm({
|
|
|
2980
2981
|
const measured = axis === "height" ? probe2.offsetHeight : probe2.offsetWidth;
|
|
2981
2982
|
probe2.remove();
|
|
2982
2983
|
this.maxHeightCap = measured > 0 ? measured : void 0;
|
|
2983
|
-
this.
|
|
2984
|
+
this.recompute();
|
|
2984
2985
|
}
|
|
2985
2986
|
}
|
|
2986
2987
|
clampToMaxHeight() {
|
|
@@ -2988,9 +2989,6 @@ var init_BottomSheetEngine = __esm({
|
|
|
2988
2989
|
if (this.snaps.getMaxAxisSize() > this.maxHeightCap) {
|
|
2989
2990
|
this.snaps.setMaxAxisSize(this.maxHeightCap);
|
|
2990
2991
|
}
|
|
2991
|
-
if (this.size > this.maxHeightCap && !this.gesture?.isDragging) {
|
|
2992
|
-
this.applySize(this.maxHeightCap);
|
|
2993
|
-
}
|
|
2994
2992
|
}
|
|
2995
2993
|
setAllowed(ids, snap) {
|
|
2996
2994
|
if (this.destroyed) return;
|
|
@@ -3128,6 +3126,7 @@ var init_BottomSheetEngine = __esm({
|
|
|
3128
3126
|
recompute() {
|
|
3129
3127
|
if (this.destroyed) return;
|
|
3130
3128
|
this.snaps.recompute();
|
|
3129
|
+
this.clampToMaxHeight();
|
|
3131
3130
|
this.scrim.invalidateOpacityCache();
|
|
3132
3131
|
if (this.gesture?.isDragging) return;
|
|
3133
3132
|
const current = this.snaps.findById(this.activeId);
|
|
@@ -3151,43 +3150,36 @@ var init_BottomSheetEngine = __esm({
|
|
|
3151
3150
|
}
|
|
3152
3151
|
return out;
|
|
3153
3152
|
}
|
|
3154
|
-
|
|
3153
|
+
measureSheetNatural(vertical) {
|
|
3154
|
+
const el = this.element;
|
|
3155
3155
|
const content = this.scrollContainer;
|
|
3156
|
-
if (!content)
|
|
3157
|
-
|
|
3158
|
-
if (targets.length === 0) {
|
|
3159
|
-
return vertical ? content.scrollHeight : content.scrollWidth;
|
|
3160
|
-
}
|
|
3161
|
-
let min = Infinity;
|
|
3162
|
-
let max = -Infinity;
|
|
3163
|
-
for (const el of targets) {
|
|
3164
|
-
const r = el.getBoundingClientRect();
|
|
3165
|
-
if (vertical) {
|
|
3166
|
-
if (r.top < min) min = r.top;
|
|
3167
|
-
if (r.bottom > max) max = r.bottom;
|
|
3168
|
-
} else {
|
|
3169
|
-
if (r.left < min) min = r.left;
|
|
3170
|
-
if (r.right > max) max = r.right;
|
|
3171
|
-
}
|
|
3172
|
-
}
|
|
3173
|
-
if (!isFinite(min) || !isFinite(max) || max <= min) {
|
|
3174
|
-
return vertical ? content.scrollHeight : content.scrollWidth;
|
|
3156
|
+
if (!content) {
|
|
3157
|
+
return vertical ? el.offsetHeight : el.offsetWidth;
|
|
3175
3158
|
}
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3159
|
+
const axis = vertical ? "height" : "width";
|
|
3160
|
+
const sheetStyle = el.style;
|
|
3161
|
+
const cs = content.style;
|
|
3162
|
+
const prevSheet = sheetStyle[axis];
|
|
3163
|
+
const prevFlex = cs.flex;
|
|
3164
|
+
const prevContent = vertical ? cs.height : cs.width;
|
|
3165
|
+
sheetStyle[axis] = "auto";
|
|
3166
|
+
cs.flex = "none";
|
|
3167
|
+
if (vertical) cs.height = "auto";
|
|
3168
|
+
else cs.width = "auto";
|
|
3169
|
+
const natural = vertical ? el.offsetHeight : el.offsetWidth;
|
|
3170
|
+
sheetStyle[axis] = prevSheet;
|
|
3171
|
+
cs.flex = prevFlex;
|
|
3172
|
+
if (vertical) cs.height = prevContent;
|
|
3173
|
+
else cs.width = prevContent;
|
|
3174
|
+
return natural;
|
|
3182
3175
|
}
|
|
3183
3176
|
measureFitSize() {
|
|
3184
3177
|
const vertical = layoutAxis(this.mode) === "height";
|
|
3185
|
-
const
|
|
3186
|
-
const
|
|
3187
|
-
|
|
3188
|
-
if (typeof window === "undefined") return natural;
|
|
3178
|
+
const natural = this.measureSheetNatural(vertical);
|
|
3179
|
+
const capped = this.maxHeightCap !== void 0 ? Math.min(natural, this.maxHeightCap) : natural;
|
|
3180
|
+
if (typeof window === "undefined") return capped;
|
|
3189
3181
|
const viewport = vertical ? window.innerHeight : window.innerWidth;
|
|
3190
|
-
return viewport > 0 ? Math.min(
|
|
3182
|
+
return viewport > 0 ? Math.min(capped, viewport) : capped;
|
|
3191
3183
|
}
|
|
3192
3184
|
installFitObserver() {
|
|
3193
3185
|
if (typeof ResizeObserver === "undefined") return;
|
|
@@ -3269,6 +3261,10 @@ var init_BottomSheetEngine = __esm({
|
|
|
3269
3261
|
this.backdrop.style.opacity = "";
|
|
3270
3262
|
this.backdrop.style.pointerEvents = "";
|
|
3271
3263
|
}
|
|
3264
|
+
if (this.anchorHost) {
|
|
3265
|
+
this.anchorHost.style.removeProperty("--bs-size");
|
|
3266
|
+
this.anchorHost.style.removeProperty("--bs-progress");
|
|
3267
|
+
}
|
|
3272
3268
|
if (this.screenComponent) {
|
|
3273
3269
|
this.screenComponent.style.opacity = "";
|
|
3274
3270
|
this.screenComponent.style.display = "";
|
|
@@ -3280,6 +3276,7 @@ var init_BottomSheetEngine = __esm({
|
|
|
3280
3276
|
this.bus.emit(event, payload);
|
|
3281
3277
|
}
|
|
3282
3278
|
newCycle() {
|
|
3279
|
+
this.allowOvershoot = false;
|
|
3283
3280
|
this.currentAbort.abort();
|
|
3284
3281
|
this.currentAbort = new AbortController();
|
|
3285
3282
|
return this.currentAbort.signal;
|
|
@@ -3345,6 +3342,7 @@ var init_BottomSheetEngine = __esm({
|
|
|
3345
3342
|
seen.add(p.id);
|
|
3346
3343
|
}
|
|
3347
3344
|
this.snaps.setRaw(this.snapPointsRaw);
|
|
3345
|
+
this.clampToMaxHeight();
|
|
3348
3346
|
this.scrim.invalidateOpacityCache();
|
|
3349
3347
|
}
|
|
3350
3348
|
getAllowedRange() {
|
|
@@ -3551,15 +3549,19 @@ var init_BottomSheetEngine = __esm({
|
|
|
3551
3549
|
this.opening = true;
|
|
3552
3550
|
sheetStack.promote(this.id);
|
|
3553
3551
|
}
|
|
3554
|
-
|
|
3555
|
-
|
|
3552
|
+
const settleCap = this.snaps.getMaxAxisSize();
|
|
3553
|
+
const settleSize = settleCap > 0 ? Math.min(target.size, settleCap) : target.size;
|
|
3554
|
+
this.allowOvershoot = true;
|
|
3555
|
+
void this.animation.animateTo(settleSize, velocity).then(() => {
|
|
3556
3556
|
if (signal.aborted) return;
|
|
3557
|
+
this.allowOvershoot = false;
|
|
3558
|
+
this.opening = false;
|
|
3557
3559
|
this.scrollCache.restore(target.id, previousSize, target.size);
|
|
3558
3560
|
this.updateAriaSlider();
|
|
3559
3561
|
this.emit("snap", {
|
|
3560
3562
|
id: target.id,
|
|
3561
|
-
size:
|
|
3562
|
-
progress: this.computeProgress(
|
|
3563
|
+
size: this.size,
|
|
3564
|
+
progress: this.computeProgress(this.size)
|
|
3563
3565
|
});
|
|
3564
3566
|
this.haptic();
|
|
3565
3567
|
if (previousSnapSize === 0 && target.size > 0) {
|
|
@@ -3584,23 +3586,25 @@ var init_BottomSheetEngine = __esm({
|
|
|
3584
3586
|
}
|
|
3585
3587
|
}
|
|
3586
3588
|
applySize(size) {
|
|
3587
|
-
|
|
3588
|
-
const
|
|
3589
|
+
const cap = this.snaps.getMaxAxisSize();
|
|
3590
|
+
const clamped = cap > 0 && size > cap && !this.gesture?.isDragging && !this.allowOvershoot ? cap : size;
|
|
3591
|
+
this.size = clamped;
|
|
3592
|
+
const offset = cap - clamped;
|
|
3589
3593
|
const style = this.element.style;
|
|
3590
3594
|
style.transform = this.transformTemplate(offset);
|
|
3591
|
-
if (this.sizeWriteSentinel.shouldWrite(
|
|
3592
|
-
style.setProperty("--bs-size", `${
|
|
3595
|
+
if (this.sizeWriteSentinel.shouldWrite(clamped, SIZE_WRITE_EPSILON)) {
|
|
3596
|
+
style.setProperty("--bs-size", `${clamped}px`);
|
|
3593
3597
|
if (this.scrimParent) {
|
|
3594
|
-
this.scrimParent.style.setProperty("--bs-size", `${
|
|
3598
|
+
this.scrimParent.style.setProperty("--bs-size", `${clamped}px`);
|
|
3595
3599
|
}
|
|
3596
3600
|
if (this.anchorHost && this.anchorHost !== this.scrimParent) {
|
|
3597
|
-
this.anchorHost.style.setProperty("--bs-size", `${
|
|
3601
|
+
this.anchorHost.style.setProperty("--bs-size", `${clamped}px`);
|
|
3598
3602
|
}
|
|
3599
3603
|
if (this.rootEl && this.rootEl !== this.scrimParent && this.rootEl !== this.anchorHost) {
|
|
3600
|
-
this.rootEl.style.setProperty("--bs-size", `${
|
|
3604
|
+
this.rootEl.style.setProperty("--bs-size", `${clamped}px`);
|
|
3601
3605
|
}
|
|
3602
3606
|
}
|
|
3603
|
-
const progress = this.computeProgress(
|
|
3607
|
+
const progress = this.computeProgress(clamped);
|
|
3604
3608
|
const progressChanged = this.progressWriteSentinel.shouldWrite(
|
|
3605
3609
|
progress,
|
|
3606
3610
|
OPACITY_WRITE_EPSILON
|
|
@@ -3617,14 +3621,15 @@ var init_BottomSheetEngine = __esm({
|
|
|
3617
3621
|
this.scrim.applyOpacity(progress, progressChanged);
|
|
3618
3622
|
if (progressChanged && this.bus.listenerCount("progress") > 0) {
|
|
3619
3623
|
this.progressPayload.value = progress;
|
|
3620
|
-
this.progressPayload.size =
|
|
3624
|
+
this.progressPayload.size = clamped;
|
|
3621
3625
|
this.emit("progress", this.progressPayload);
|
|
3622
3626
|
}
|
|
3623
3627
|
}
|
|
3624
3628
|
computeProgress(size) {
|
|
3625
3629
|
const { min, max } = this.getAllowedRange();
|
|
3626
|
-
|
|
3627
|
-
|
|
3630
|
+
const reachableMax = Math.min(max, this.snaps.getMaxAxisSize());
|
|
3631
|
+
if (reachableMax <= min) return 0;
|
|
3632
|
+
return Math.min(Math.max((size - min) / (reachableMax - min), 0), 1);
|
|
3628
3633
|
}
|
|
3629
3634
|
handleOpen() {
|
|
3630
3635
|
sheetStack.promote(this.id);
|
|
@@ -3648,8 +3653,8 @@ var init_BottomSheetEngine = __esm({
|
|
|
3648
3653
|
this.updateAriaSlider();
|
|
3649
3654
|
this.emit("snap", {
|
|
3650
3655
|
id: target.id,
|
|
3651
|
-
size:
|
|
3652
|
-
progress: this.computeProgress(
|
|
3656
|
+
size: this.size,
|
|
3657
|
+
progress: this.computeProgress(this.size)
|
|
3653
3658
|
});
|
|
3654
3659
|
if (target.size > 0 && !this.lifecycle.isInstalled) {
|
|
3655
3660
|
this.emit("open", { id: target.id });
|
|
@@ -3675,7 +3680,7 @@ var init_BottomSheetEngine = __esm({
|
|
|
3675
3680
|
var baseStyles;
|
|
3676
3681
|
var init_baseStyles = __esm({
|
|
3677
3682
|
"src/web-component/baseStyles.ts"() {
|
|
3678
|
-
baseStyles = `:where(.bs-root){--bs-surface-d:#ffffff;--bs-surface-border-d:rgba(225,227,237,1);--bs-radius-d:20px;--bs-handle-color-d:rgba(26,22,20,0.3);--bs-handle-width:40px;--bs-handle-height:5px;--bs-z-backdrop:90;--bs-z-sheet:100;--bs-header-min-height:80px;--bs-backdrop-color-d:rgba(0,0,0,0.5);--bs-scrim-color-d:transparent;--bs-scrim-blur:0px;--bs-z-scrim:calc(var(--bs-z-sheet) - 1);--bs-size:0px;--bs-progress:0}.bs-backdrop{position:fixed;inset:0;background:var(--bs-backdrop-color,var(--bs-backdrop-color-d));opacity:0;pointer-events:none;z-index:var(--bs-z-backdrop);transition:opacity 0.24s cubic-bezier(0.22,1,0.36,1);will-change:opacity}.bs-root[data-dragging="true"] .bs-backdrop,.bs-root[data-animating="true"] .bs-backdrop{transition:none}.bs-sheet{position:fixed;background:var(--bs-surface,var(--bs-surface-d));box-shadow:var(--bs-shadow,var(--bs-shadow-auto,none));z-index:var(--bs-z-sheet);pointer-events:auto;overflow:hidden;display:flex;flex-direction:column;-webkit-tap-highlight-color:transparent;user-select:none;overscroll-behavior:contain}.bs-sheet[data-mode="bottom"]{left:0;right:0;bottom:0;width:100%;border-top-left-radius:var(--bs-radius,var(--bs-radius-d));border-top-right-radius:var(--bs-radius,var(--bs-radius-d));border-top:1px solid var(--bs-surface-border,var(--bs-surface-border-d));padding-bottom:env(safe-area-inset-bottom);--bs-shadow-auto:0 calc(var(--bs-progress,0) * -2px - 3px) calc(var(--bs-progress,0) * 18px + 12px) rgba(0,0,0,calc(var(--bs-progress,0) * 0.15 + 0.12))}.bs-sheet[data-mode="top"]{left:0;right:0;top:0;width:100%;border-bottom-left-radius:var(--bs-radius,var(--bs-radius-d));border-bottom-right-radius:var(--bs-radius,var(--bs-radius-d));border-bottom:1px solid var(--bs-surface-border,var(--bs-surface-border-d));flex-direction:column-reverse;--bs-shadow-auto:0 3px 12px rgba(0,0,0,0.12);padding-top:env(safe-area-inset-top)}.bs-sheet[data-mode="left"]{top:0;bottom:0;left:0;height:100%;border-top-right-radius:var(--bs-radius,var(--bs-radius-d));border-bottom-right-radius:var(--bs-radius,var(--bs-radius-d));border-right:1px solid var(--bs-surface-border,var(--bs-surface-border-d));--bs-shadow-auto:3px 0 12px rgba(0,0,0,0.12)}.bs-sheet[data-mode="right"]{top:0;bottom:0;right:0;height:100%;border-top-left-radius:var(--bs-radius,var(--bs-radius-d));border-bottom-left-radius:var(--bs-radius,var(--bs-radius-d));border-left:1px solid var(--bs-surface-border,var(--bs-surface-border-d));--bs-shadow-auto:-3px 0 12px rgba(0,0,0,0.12)}.bs-sheet[data-mode="left"] .bs-content{padding-right:36px}.bs-sheet[data-mode="right"] .bs-content{padding-left:36px}.bs-handle{flex-shrink:0;min-height:44px;display:flex;flex-direction:column;justify-content:center;padding:8px 16px 4px;cursor:grab;touch-action:none;user-select:none;background:var(--bs-surface,var(--bs-surface-d));-webkit-tap-highlight-color:transparent;outline:none;position:relative}.bs-handle:active{cursor:grabbing}.bs-handle:focus-visible{outline:2px solid currentColor;outline-offset:-2px;border-radius:var(--bs-radius,var(--bs-radius-d))}.bs-handle::before{content:"";display:block;width:var(--bs-handle-width);height:var(--bs-handle-height);background:var(--bs-handle-color,var(--bs-handle-color-d));border-radius:calc(var(--bs-handle-height) / 2);margin:0 auto 8px;transition:width 0.15s ease,background 0.15s ease,transform 0.15s ease;pointer-events:none}.bs-sheet[data-mode="left"] .bs-handle,.bs-sheet[data-mode="right"] .bs-handle{position:absolute;top:0;bottom:0;width:28px;min-width:0;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0;background:var(--bs-surface,var(--bs-surface-d));z-index:1;overflow:hidden}.bs-sheet[data-mode="left"] .bs-handle>*,.bs-sheet[data-mode="right"] .bs-handle>*{display:none}.bs-sheet[data-mode="left"] .bs-handle{right:0;border-left:1px solid var(--bs-surface-border,var(--bs-surface-border-d))}.bs-sheet[data-mode="right"] .bs-handle{left:0;border-right:1px solid var(--bs-surface-border,var(--bs-surface-border-d))}.bs-sheet[data-mode="left"] .bs-handle::before,.bs-sheet[data-mode="right"] .bs-handle::before{width:var(--bs-handle-height);height:var(--bs-handle-width);margin:0}.bs-sheet:hover .bs-handle::before{background:color-mix(in oklab,var(--bs-handle-color,var(--bs-handle-color-d)),#000 15%)}.bs-handle:active::before{background:color-mix(in oklab,var(--bs-handle-color,var(--bs-handle-color-d)),#000 35%);transform:scaleX(1.15)}.bs-handle.bs-handle--ticks::after{content:"";display:block;position:absolute;left:50%;bottom:6px;transform:translateX(-50%);width:calc(var(--bs-handle-width) * 2);height:3px;background-image:radial-gradient( circle,var(--bs-handle-color,var(--bs-handle-color-d)) 0 1.5px,transparent 1.6px );background-size:8px 3px;background-repeat:repeat-x;background-position:center;opacity:0;transition:opacity 0.18s ease-out;pointer-events:none}.bs-root[data-dragging="true"] .bs-handle.bs-handle--ticks::after{opacity:0.4}.bs-sheet[data-mode="top"] .bs-handle.bs-handle--ticks::after{bottom:auto;top:6px}.bs-sheet[data-mode="left"] .bs-handle.bs-handle--ticks::after,.bs-sheet[data-mode="right"] .bs-handle.bs-handle--ticks::after{left:50%;top:50%;bottom:auto;transform:translate(-50%,-50%);width:3px;height:calc(var(--bs-handle-width) * 2);background-size:3px 8px;background-repeat:repeat-y;margin-left:calc(var(--bs-handle-height) + 6px)}.bs-sheet[data-mode="right"] .bs-handle.bs-handle--ticks::after{margin-left:calc(-1 * (var(--bs-handle-height) + 6px))}.bs-header{flex:0 0 auto;padding:0 16px 8px;background:var(--bs-surface,var(--bs-surface-d))}.bs-content{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;user-select:text;padding:0 16px 16px}.bs-footer{flex:0 0 auto;padding:12px 16px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--bs-surface-border,var(--bs-surface-border-d));background:var(--bs-surface,var(--bs-surface-d))}.bs-sheet[data-mode="bottom"]:has(.bs-footer:not([hidden]):has(*)){padding-bottom:0}.bs-header:not(:has(*)),.bs-footer:not(:has(*)),.bs-header[hidden],.bs-footer[hidden]{display:none}.bs-screen{position:absolute;inset:0;pointer-events:none;z-index:var(--bs-z-scrim);background:var(--bs-scrim-color,var(--bs-scrim-color-d));transition:opacity 0.24s cubic-bezier(0.22,1,0.36,1);will-change:opacity}.bs-root[data-dragging="true"] .bs-screen,.bs-root[data-animating="true"] .bs-screen{transition:none}.bs-scrim-overlay{z-index:calc(var(--bs-z-sheet) + 1);pointer-events:none}.bs-button-slot{position:fixed;z-index:calc(var(--bs-z-sheet) + 1);pointer-events:auto}.bs-button-slot[data-side="left"]{left:16px;bottom:calc(var(--bs-size,0px) + 12px)}.bs-button-slot[data-side="right"]{right:16px;bottom:calc(var(--bs-size,0px) + 12px)}.bs-button-slot[data-mode="top"]{bottom:auto;top:calc(var(--bs-size,0px) + 12px)}.bs-button-slot[data-mode="left"]{left:calc(var(--bs-size,0px) + 12px);right:auto;bottom:auto;top:16px}.bs-button-slot[data-mode="right"]{right:calc(var(--bs-size,0px) + 12px);left:auto;bottom:auto;top:16px}@media (prefers-reduced-motion:reduce){.bs-backdrop,.bs-handle::before,.bs-button-slot[data-side="left"],.bs-button-slot[data-side="right"]{transition:none !important}}@media (prefers-color-scheme:dark){:where(.bs-root){--bs-surface-d:#1a1a1d;--bs-surface-border-d:rgba(255,255,255,0.08);--bs-handle-color-d:rgba(255,255,255,0.45);--bs-shadow-auto:0 -3px 16px rgba(0,0,0,0.5)}}.bs-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:where(.ovl-root){--ovl-surface:var(--bs-surface,var(--bs-surface-d,#ffffff));--ovl-surface-border:var(--bs-surface-border,var(--bs-surface-border-d,rgba(0,0,0,0.08)));--ovl-shadow:0 -8px 40px rgba(0,0,0,0.35);--ovl-radius:var(--bs-radius,var(--bs-radius-d,20px));--ovl-backdrop-color:rgba(0,0,0,0.5);--ovl-z-backdrop:200;--ovl-z-panel:201}.ovl-backdrop{position:fixed;inset:0;background:var(--ovl-backdrop-color);opacity:0;pointer-events:none;z-index:var(--ovl-z-backdrop)}.ovl-panel{position:fixed;background:var(--ovl-surface);box-shadow:var(--ovl-shadow);z-index:var(--ovl-z-panel);-webkit-tap-highlight-color:transparent;outline:none;transition:transform 0.32s cubic-bezier(0.29,1.24,0.84,0.99),opacity 0.32s ease-out}.ovl-panel[data-state="open"]{transform:translate3d(0,0,0);opacity:1}@starting-style{.ovl-panel[data-edge="bottom"][data-state="open"]{transform:translate3d(0,100%,0);opacity:0}.ovl-panel[data-edge="top"][data-state="open"]{transform:translate3d(0,-100%,0);opacity:0}.ovl-panel[data-edge="left"][data-state="open"]{transform:translate3d(-100%,0,0);opacity:0}.ovl-panel[data-edge="right"][data-state="open"]{transform:translate3d(100%,0,0);opacity:0}}.ovl-panel[data-edge="bottom"]{left:0;right:0;bottom:0;width:100%;border-top-left-radius:var(--ovl-radius);border-top-right-radius:var(--ovl-radius);border-top:1px solid var(--ovl-surface-border);padding-bottom:env(safe-area-inset-bottom)}.ovl-panel[data-edge="top"]{left:0;right:0;top:0;width:100%;border-bottom-left-radius:var(--ovl-radius);border-bottom-right-radius:var(--ovl-radius);border-bottom:1px solid var(--ovl-surface-border);padding-top:env(safe-area-inset-top)}.ovl-panel[data-edge="left"]{top:0;bottom:0;left:0;height:100%;border-top-right-radius:var(--ovl-radius);border-bottom-right-radius:var(--ovl-radius);border-right:1px solid var(--ovl-surface-border)}.ovl-panel[data-edge="right"]{top:0;bottom:0;right:0;height:100%;border-top-left-radius:var(--ovl-radius);border-bottom-left-radius:var(--ovl-radius);border-left:1px solid var(--ovl-surface-border)}@media (prefers-reduced-motion:reduce){.ovl-panel,.ovl-backdrop{transition:none !important}}`;
|
|
3683
|
+
baseStyles = `:where(.bs-root){--bs-surface-d:#ffffff;--bs-surface-border-d:rgba(225,227,237,1);--bs-radius-d:20px;--bs-handle-color-d:rgba(26,22,20,0.3);--bs-handle-width:40px;--bs-handle-height:5px;--bs-z-backdrop:90;--bs-z-sheet:100;--bs-header-min-height:80px;--bs-backdrop-color-d:rgba(0,0,0,0.5);--bs-scrim-color-d:transparent;--bs-scrim-blur:0px;--bs-z-scrim:calc(var(--bs-z-sheet) - 1);--bs-size:0px;--bs-progress:0}.bs-backdrop{position:fixed;inset:0;background:var(--bs-backdrop-color,var(--bs-backdrop-color-d));opacity:0;pointer-events:none;z-index:var(--bs-z-backdrop);transition:opacity 0.24s cubic-bezier(0.22,1,0.36,1);will-change:opacity}.bs-root[data-dragging="true"] .bs-backdrop,.bs-root[data-animating="true"] .bs-backdrop{transition:none}.bs-sheet{position:fixed;background:var(--bs-surface,var(--bs-surface-d));box-shadow:var(--bs-shadow,var(--bs-shadow-auto,none));z-index:var(--bs-z-sheet);pointer-events:auto;overflow:hidden;display:flex;flex-direction:column;-webkit-tap-highlight-color:transparent;user-select:none;overscroll-behavior:contain}.bs-sheet[data-mode="bottom"]{left:0;right:0;bottom:0;width:100%;border-top-left-radius:var(--bs-radius,var(--bs-radius-d));border-top-right-radius:var(--bs-radius,var(--bs-radius-d));border-top:1px solid var(--bs-surface-border,var(--bs-surface-border-d));padding-bottom:env(safe-area-inset-bottom);--bs-shadow-auto:0 calc(var(--bs-progress,0) * -2px - 3px) calc(var(--bs-progress,0) * 18px + 12px) rgba(0,0,0,calc(var(--bs-progress,0) * 0.15 + 0.12))}.bs-sheet[data-mode="top"]{left:0;right:0;top:0;width:100%;border-bottom-left-radius:var(--bs-radius,var(--bs-radius-d));border-bottom-right-radius:var(--bs-radius,var(--bs-radius-d));border-bottom:1px solid var(--bs-surface-border,var(--bs-surface-border-d));flex-direction:column-reverse;--bs-shadow-auto:0 3px 12px rgba(0,0,0,0.12);padding-top:env(safe-area-inset-top)}.bs-sheet[data-mode="left"]{top:0;bottom:0;left:0;height:100%;border-top-right-radius:var(--bs-radius,var(--bs-radius-d));border-bottom-right-radius:var(--bs-radius,var(--bs-radius-d));border-right:1px solid var(--bs-surface-border,var(--bs-surface-border-d));--bs-shadow-auto:3px 0 12px rgba(0,0,0,0.12)}.bs-sheet[data-mode="right"]{top:0;bottom:0;right:0;height:100%;border-top-left-radius:var(--bs-radius,var(--bs-radius-d));border-bottom-left-radius:var(--bs-radius,var(--bs-radius-d));border-left:1px solid var(--bs-surface-border,var(--bs-surface-border-d));--bs-shadow-auto:-3px 0 12px rgba(0,0,0,0.12)}.bs-sheet[data-mode="left"] .bs-content{padding-right:36px}.bs-sheet[data-mode="right"] .bs-content{padding-left:36px}.bs-handle{flex-shrink:0;min-height:44px;display:flex;flex-direction:column;justify-content:center;padding:var(--bs-handle-padding,8px 16px 4px);cursor:grab;touch-action:none;user-select:none;background:var(--bs-surface,var(--bs-surface-d));-webkit-tap-highlight-color:transparent;outline:none;position:relative}.bs-handle:active{cursor:grabbing}.bs-handle:focus-visible{outline:2px solid currentColor;outline-offset:-2px;border-radius:var(--bs-radius,var(--bs-radius-d))}.bs-handle::before{content:"";display:block;width:var(--bs-handle-width);height:var(--bs-handle-height);background:var(--bs-handle-color,var(--bs-handle-color-d));border-radius:calc(var(--bs-handle-height) / 2);margin:0 auto 8px;transition:width 0.15s ease,background 0.15s ease,transform 0.15s ease;pointer-events:none}.bs-sheet[data-mode="left"] .bs-handle,.bs-sheet[data-mode="right"] .bs-handle{position:absolute;top:0;bottom:0;width:28px;min-width:0;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0;background:var(--bs-surface,var(--bs-surface-d));z-index:1;overflow:hidden}.bs-sheet[data-mode="left"] .bs-handle>*,.bs-sheet[data-mode="right"] .bs-handle>*{display:none}.bs-sheet[data-mode="left"] .bs-handle{right:0;border-left:1px solid var(--bs-surface-border,var(--bs-surface-border-d))}.bs-sheet[data-mode="right"] .bs-handle{left:0;border-right:1px solid var(--bs-surface-border,var(--bs-surface-border-d))}.bs-sheet[data-mode="left"] .bs-handle::before,.bs-sheet[data-mode="right"] .bs-handle::before{width:var(--bs-handle-height);height:var(--bs-handle-width);margin:0}.bs-sheet:hover .bs-handle::before{background:color-mix(in oklab,var(--bs-handle-color,var(--bs-handle-color-d)),#000 15%)}.bs-handle:active::before{background:color-mix(in oklab,var(--bs-handle-color,var(--bs-handle-color-d)),#000 35%);transform:scaleX(1.15)}.bs-handle.bs-handle--ticks::after{content:"";display:block;position:absolute;left:50%;bottom:6px;transform:translateX(-50%);width:calc(var(--bs-handle-width) * 2);height:3px;background-image:radial-gradient( circle,var(--bs-handle-color,var(--bs-handle-color-d)) 0 1.5px,transparent 1.6px );background-size:8px 3px;background-repeat:repeat-x;background-position:center;opacity:0;transition:opacity 0.18s ease-out;pointer-events:none}.bs-root[data-dragging="true"] .bs-handle.bs-handle--ticks::after{opacity:0.4}.bs-sheet[data-mode="top"] .bs-handle.bs-handle--ticks::after{bottom:auto;top:6px}.bs-sheet[data-mode="left"] .bs-handle.bs-handle--ticks::after,.bs-sheet[data-mode="right"] .bs-handle.bs-handle--ticks::after{left:50%;top:50%;bottom:auto;transform:translate(-50%,-50%);width:3px;height:calc(var(--bs-handle-width) * 2);background-size:3px 8px;background-repeat:repeat-y;margin-left:calc(var(--bs-handle-height) + 6px)}.bs-sheet[data-mode="right"] .bs-handle.bs-handle--ticks::after{margin-left:calc(-1 * (var(--bs-handle-height) + 6px))}.bs-header{flex:0 0 auto;padding:var(--bs-header-padding,0 16px 8px);background:var(--bs-surface,var(--bs-surface-d))}.bs-content{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;user-select:text;padding:var(--bs-content-padding,0 16px 16px)}.bs-footer{flex:0 0 auto;padding:var(--bs-footer-padding,12px 16px calc(12px + env(safe-area-inset-bottom)));border-top:1px solid var(--bs-surface-border,var(--bs-surface-border-d));background:var(--bs-surface,var(--bs-surface-d))}.bs-sheet[data-mode="bottom"]:has(.bs-footer:not([hidden]):has(*)){padding-bottom:0}.bs-header:not(:has(*)),.bs-footer:not(:has(*)),.bs-header[hidden],.bs-footer[hidden]{display:none}.bs-screen{position:absolute;inset:0;pointer-events:none;z-index:var(--bs-z-scrim);background:var(--bs-scrim-color,var(--bs-scrim-color-d));transition:opacity 0.24s cubic-bezier(0.22,1,0.36,1);will-change:opacity}.bs-root[data-dragging="true"] .bs-screen,.bs-root[data-animating="true"] .bs-screen{transition:none}.bs-scrim-overlay{z-index:calc(var(--bs-z-sheet) + 1);pointer-events:none}.bs-button-slot{position:fixed;z-index:calc(var(--bs-z-sheet) + 1);pointer-events:auto}.bs-button-slot[data-side="left"]{left:16px;bottom:calc(var(--bs-size,0px) + 12px)}.bs-button-slot[data-side="right"]{right:16px;bottom:calc(var(--bs-size,0px) + 12px)}.bs-button-slot[data-mode="top"]{bottom:auto;top:calc(var(--bs-size,0px) + 12px)}.bs-button-slot[data-mode="left"]{left:calc(var(--bs-size,0px) + 12px);right:auto;bottom:auto;top:16px}.bs-button-slot[data-mode="right"]{right:calc(var(--bs-size,0px) + 12px);left:auto;bottom:auto;top:16px}@media (prefers-reduced-motion:reduce){.bs-backdrop,.bs-handle::before,.bs-button-slot[data-side="left"],.bs-button-slot[data-side="right"]{transition:none !important}}@media (prefers-color-scheme:dark){:where(.bs-root){--bs-surface-d:#1a1a1d;--bs-surface-border-d:rgba(255,255,255,0.08);--bs-handle-color-d:rgba(255,255,255,0.45);--bs-shadow-auto:0 -3px 16px rgba(0,0,0,0.5)}}.bs-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:where(.ovl-root){--ovl-surface:var(--bs-surface,var(--bs-surface-d,#ffffff));--ovl-surface-border:var(--bs-surface-border,var(--bs-surface-border-d,rgba(0,0,0,0.08)));--ovl-shadow:0 -8px 40px rgba(0,0,0,0.35);--ovl-radius:var(--bs-radius,var(--bs-radius-d,20px));--ovl-backdrop-color:rgba(0,0,0,0.5);--ovl-z-backdrop:200;--ovl-z-panel:201}.ovl-backdrop{position:fixed;inset:0;background:var(--ovl-backdrop-color);opacity:0;pointer-events:none;z-index:var(--ovl-z-backdrop)}.ovl-panel{position:fixed;background:var(--ovl-surface);box-shadow:var(--ovl-shadow);z-index:var(--ovl-z-panel);-webkit-tap-highlight-color:transparent;outline:none;transition:transform 0.32s cubic-bezier(0.29,1.24,0.84,0.99),opacity 0.32s ease-out}.ovl-panel[data-state="open"]{transform:translate3d(0,0,0);opacity:1}@starting-style{.ovl-panel[data-edge="bottom"][data-state="open"]{transform:translate3d(0,100%,0);opacity:0}.ovl-panel[data-edge="top"][data-state="open"]{transform:translate3d(0,-100%,0);opacity:0}.ovl-panel[data-edge="left"][data-state="open"]{transform:translate3d(-100%,0,0);opacity:0}.ovl-panel[data-edge="right"][data-state="open"]{transform:translate3d(100%,0,0);opacity:0}}.ovl-panel[data-edge="bottom"]{left:0;right:0;bottom:0;width:100%;border-top-left-radius:var(--ovl-radius);border-top-right-radius:var(--ovl-radius);border-top:1px solid var(--ovl-surface-border);padding-bottom:env(safe-area-inset-bottom)}.ovl-panel[data-edge="top"]{left:0;right:0;top:0;width:100%;border-bottom-left-radius:var(--ovl-radius);border-bottom-right-radius:var(--ovl-radius);border-bottom:1px solid var(--ovl-surface-border);padding-top:env(safe-area-inset-top)}.ovl-panel[data-edge="left"]{top:0;bottom:0;left:0;height:100%;border-top-right-radius:var(--ovl-radius);border-bottom-right-radius:var(--ovl-radius);border-right:1px solid var(--ovl-surface-border)}.ovl-panel[data-edge="right"]{top:0;bottom:0;right:0;height:100%;border-top-left-radius:var(--ovl-radius);border-bottom-left-radius:var(--ovl-radius);border-left:1px solid var(--ovl-surface-border)}@media (prefers-reduced-motion:reduce){.ovl-panel,.ovl-backdrop{transition:none !important}}`;
|
|
3679
3684
|
}
|
|
3680
3685
|
});
|
|
3681
3686
|
|
package/dist/index.cjs
CHANGED
|
@@ -2364,6 +2364,7 @@ var BottomSheetEngine = class {
|
|
|
2364
2364
|
__publicField(this, "progressWriteSentinel", new WriteSentinel());
|
|
2365
2365
|
__publicField(this, "isTopSheet", true);
|
|
2366
2366
|
__publicField(this, "opening", false);
|
|
2367
|
+
__publicField(this, "allowOvershoot", false);
|
|
2367
2368
|
__publicField(this, "progressPayload", {
|
|
2368
2369
|
value: 0,
|
|
2369
2370
|
size: 0
|
|
@@ -2654,8 +2655,8 @@ var BottomSheetEngine = class {
|
|
|
2654
2655
|
this.updateAriaSlider();
|
|
2655
2656
|
this.emit("snap", {
|
|
2656
2657
|
id,
|
|
2657
|
-
size:
|
|
2658
|
-
progress: this.computeProgress(
|
|
2658
|
+
size: this.size,
|
|
2659
|
+
progress: this.computeProgress(this.size)
|
|
2659
2660
|
});
|
|
2660
2661
|
if (wasClosed && target.size > 0) {
|
|
2661
2662
|
this.emit("open", { id });
|
|
@@ -2734,12 +2735,12 @@ var BottomSheetEngine = class {
|
|
|
2734
2735
|
const value = typeof h === "number" ? `${h}px` : h;
|
|
2735
2736
|
const axis = layoutAxis(this.mode);
|
|
2736
2737
|
this.element.style.setProperty(
|
|
2737
|
-
axis === "height" ? "
|
|
2738
|
+
axis === "height" ? "max-height" : "max-width",
|
|
2738
2739
|
value
|
|
2739
2740
|
);
|
|
2740
2741
|
if (typeof h === "number") {
|
|
2741
2742
|
this.maxHeightCap = h;
|
|
2742
|
-
this.
|
|
2743
|
+
this.recompute();
|
|
2743
2744
|
} else if (typeof window !== "undefined") {
|
|
2744
2745
|
const probe2 = document.createElement("div");
|
|
2745
2746
|
probe2.style.cssText = `position:absolute;visibility:hidden;pointer-events:none;${axis === "height" ? "height" : "width"}:${value};`;
|
|
@@ -2747,7 +2748,7 @@ var BottomSheetEngine = class {
|
|
|
2747
2748
|
const measured = axis === "height" ? probe2.offsetHeight : probe2.offsetWidth;
|
|
2748
2749
|
probe2.remove();
|
|
2749
2750
|
this.maxHeightCap = measured > 0 ? measured : void 0;
|
|
2750
|
-
this.
|
|
2751
|
+
this.recompute();
|
|
2751
2752
|
}
|
|
2752
2753
|
}
|
|
2753
2754
|
clampToMaxHeight() {
|
|
@@ -2755,9 +2756,6 @@ var BottomSheetEngine = class {
|
|
|
2755
2756
|
if (this.snaps.getMaxAxisSize() > this.maxHeightCap) {
|
|
2756
2757
|
this.snaps.setMaxAxisSize(this.maxHeightCap);
|
|
2757
2758
|
}
|
|
2758
|
-
if (this.size > this.maxHeightCap && !this.gesture?.isDragging) {
|
|
2759
|
-
this.applySize(this.maxHeightCap);
|
|
2760
|
-
}
|
|
2761
2759
|
}
|
|
2762
2760
|
setAllowed(ids, snap) {
|
|
2763
2761
|
if (this.destroyed) return;
|
|
@@ -2895,6 +2893,7 @@ var BottomSheetEngine = class {
|
|
|
2895
2893
|
recompute() {
|
|
2896
2894
|
if (this.destroyed) return;
|
|
2897
2895
|
this.snaps.recompute();
|
|
2896
|
+
this.clampToMaxHeight();
|
|
2898
2897
|
this.scrim.invalidateOpacityCache();
|
|
2899
2898
|
if (this.gesture?.isDragging) return;
|
|
2900
2899
|
const current = this.snaps.findById(this.activeId);
|
|
@@ -2918,43 +2917,36 @@ var BottomSheetEngine = class {
|
|
|
2918
2917
|
}
|
|
2919
2918
|
return out;
|
|
2920
2919
|
}
|
|
2921
|
-
|
|
2920
|
+
measureSheetNatural(vertical) {
|
|
2921
|
+
const el = this.element;
|
|
2922
2922
|
const content = this.scrollContainer;
|
|
2923
|
-
if (!content)
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
}
|
|
2943
|
-
let pad = 0;
|
|
2944
|
-
if (typeof getComputedStyle !== "undefined") {
|
|
2945
|
-
const cs = getComputedStyle(content);
|
|
2946
|
-
pad = vertical ? (parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.paddingBottom) || 0) : (parseFloat(cs.paddingLeft) || 0) + (parseFloat(cs.paddingRight) || 0);
|
|
2947
|
-
}
|
|
2948
|
-
return max - min + pad;
|
|
2923
|
+
if (!content) {
|
|
2924
|
+
return vertical ? el.offsetHeight : el.offsetWidth;
|
|
2925
|
+
}
|
|
2926
|
+
const axis = vertical ? "height" : "width";
|
|
2927
|
+
const sheetStyle = el.style;
|
|
2928
|
+
const cs = content.style;
|
|
2929
|
+
const prevSheet = sheetStyle[axis];
|
|
2930
|
+
const prevFlex = cs.flex;
|
|
2931
|
+
const prevContent = vertical ? cs.height : cs.width;
|
|
2932
|
+
sheetStyle[axis] = "auto";
|
|
2933
|
+
cs.flex = "none";
|
|
2934
|
+
if (vertical) cs.height = "auto";
|
|
2935
|
+
else cs.width = "auto";
|
|
2936
|
+
const natural = vertical ? el.offsetHeight : el.offsetWidth;
|
|
2937
|
+
sheetStyle[axis] = prevSheet;
|
|
2938
|
+
cs.flex = prevFlex;
|
|
2939
|
+
if (vertical) cs.height = prevContent;
|
|
2940
|
+
else cs.width = prevContent;
|
|
2941
|
+
return natural;
|
|
2949
2942
|
}
|
|
2950
2943
|
measureFitSize() {
|
|
2951
2944
|
const vertical = layoutAxis(this.mode) === "height";
|
|
2952
|
-
const
|
|
2953
|
-
const
|
|
2954
|
-
|
|
2955
|
-
if (typeof window === "undefined") return natural;
|
|
2945
|
+
const natural = this.measureSheetNatural(vertical);
|
|
2946
|
+
const capped = this.maxHeightCap !== void 0 ? Math.min(natural, this.maxHeightCap) : natural;
|
|
2947
|
+
if (typeof window === "undefined") return capped;
|
|
2956
2948
|
const viewport = vertical ? window.innerHeight : window.innerWidth;
|
|
2957
|
-
return viewport > 0 ? Math.min(
|
|
2949
|
+
return viewport > 0 ? Math.min(capped, viewport) : capped;
|
|
2958
2950
|
}
|
|
2959
2951
|
installFitObserver() {
|
|
2960
2952
|
if (typeof ResizeObserver === "undefined") return;
|
|
@@ -3036,6 +3028,10 @@ var BottomSheetEngine = class {
|
|
|
3036
3028
|
this.backdrop.style.opacity = "";
|
|
3037
3029
|
this.backdrop.style.pointerEvents = "";
|
|
3038
3030
|
}
|
|
3031
|
+
if (this.anchorHost) {
|
|
3032
|
+
this.anchorHost.style.removeProperty("--bs-size");
|
|
3033
|
+
this.anchorHost.style.removeProperty("--bs-progress");
|
|
3034
|
+
}
|
|
3039
3035
|
if (this.screenComponent) {
|
|
3040
3036
|
this.screenComponent.style.opacity = "";
|
|
3041
3037
|
this.screenComponent.style.display = "";
|
|
@@ -3047,6 +3043,7 @@ var BottomSheetEngine = class {
|
|
|
3047
3043
|
this.bus.emit(event, payload);
|
|
3048
3044
|
}
|
|
3049
3045
|
newCycle() {
|
|
3046
|
+
this.allowOvershoot = false;
|
|
3050
3047
|
this.currentAbort.abort();
|
|
3051
3048
|
this.currentAbort = new AbortController();
|
|
3052
3049
|
return this.currentAbort.signal;
|
|
@@ -3112,6 +3109,7 @@ var BottomSheetEngine = class {
|
|
|
3112
3109
|
seen.add(p.id);
|
|
3113
3110
|
}
|
|
3114
3111
|
this.snaps.setRaw(this.snapPointsRaw);
|
|
3112
|
+
this.clampToMaxHeight();
|
|
3115
3113
|
this.scrim.invalidateOpacityCache();
|
|
3116
3114
|
}
|
|
3117
3115
|
getAllowedRange() {
|
|
@@ -3318,15 +3316,19 @@ var BottomSheetEngine = class {
|
|
|
3318
3316
|
this.opening = true;
|
|
3319
3317
|
sheetStack.promote(this.id);
|
|
3320
3318
|
}
|
|
3321
|
-
|
|
3322
|
-
|
|
3319
|
+
const settleCap = this.snaps.getMaxAxisSize();
|
|
3320
|
+
const settleSize = settleCap > 0 ? Math.min(target.size, settleCap) : target.size;
|
|
3321
|
+
this.allowOvershoot = true;
|
|
3322
|
+
void this.animation.animateTo(settleSize, velocity).then(() => {
|
|
3323
3323
|
if (signal.aborted) return;
|
|
3324
|
+
this.allowOvershoot = false;
|
|
3325
|
+
this.opening = false;
|
|
3324
3326
|
this.scrollCache.restore(target.id, previousSize, target.size);
|
|
3325
3327
|
this.updateAriaSlider();
|
|
3326
3328
|
this.emit("snap", {
|
|
3327
3329
|
id: target.id,
|
|
3328
|
-
size:
|
|
3329
|
-
progress: this.computeProgress(
|
|
3330
|
+
size: this.size,
|
|
3331
|
+
progress: this.computeProgress(this.size)
|
|
3330
3332
|
});
|
|
3331
3333
|
this.haptic();
|
|
3332
3334
|
if (previousSnapSize === 0 && target.size > 0) {
|
|
@@ -3351,23 +3353,25 @@ var BottomSheetEngine = class {
|
|
|
3351
3353
|
}
|
|
3352
3354
|
}
|
|
3353
3355
|
applySize(size) {
|
|
3354
|
-
|
|
3355
|
-
const
|
|
3356
|
+
const cap = this.snaps.getMaxAxisSize();
|
|
3357
|
+
const clamped = cap > 0 && size > cap && !this.gesture?.isDragging && !this.allowOvershoot ? cap : size;
|
|
3358
|
+
this.size = clamped;
|
|
3359
|
+
const offset = cap - clamped;
|
|
3356
3360
|
const style = this.element.style;
|
|
3357
3361
|
style.transform = this.transformTemplate(offset);
|
|
3358
|
-
if (this.sizeWriteSentinel.shouldWrite(
|
|
3359
|
-
style.setProperty("--bs-size", `${
|
|
3362
|
+
if (this.sizeWriteSentinel.shouldWrite(clamped, SIZE_WRITE_EPSILON)) {
|
|
3363
|
+
style.setProperty("--bs-size", `${clamped}px`);
|
|
3360
3364
|
if (this.scrimParent) {
|
|
3361
|
-
this.scrimParent.style.setProperty("--bs-size", `${
|
|
3365
|
+
this.scrimParent.style.setProperty("--bs-size", `${clamped}px`);
|
|
3362
3366
|
}
|
|
3363
3367
|
if (this.anchorHost && this.anchorHost !== this.scrimParent) {
|
|
3364
|
-
this.anchorHost.style.setProperty("--bs-size", `${
|
|
3368
|
+
this.anchorHost.style.setProperty("--bs-size", `${clamped}px`);
|
|
3365
3369
|
}
|
|
3366
3370
|
if (this.rootEl && this.rootEl !== this.scrimParent && this.rootEl !== this.anchorHost) {
|
|
3367
|
-
this.rootEl.style.setProperty("--bs-size", `${
|
|
3371
|
+
this.rootEl.style.setProperty("--bs-size", `${clamped}px`);
|
|
3368
3372
|
}
|
|
3369
3373
|
}
|
|
3370
|
-
const progress = this.computeProgress(
|
|
3374
|
+
const progress = this.computeProgress(clamped);
|
|
3371
3375
|
const progressChanged = this.progressWriteSentinel.shouldWrite(
|
|
3372
3376
|
progress,
|
|
3373
3377
|
OPACITY_WRITE_EPSILON
|
|
@@ -3384,14 +3388,15 @@ var BottomSheetEngine = class {
|
|
|
3384
3388
|
this.scrim.applyOpacity(progress, progressChanged);
|
|
3385
3389
|
if (progressChanged && this.bus.listenerCount("progress") > 0) {
|
|
3386
3390
|
this.progressPayload.value = progress;
|
|
3387
|
-
this.progressPayload.size =
|
|
3391
|
+
this.progressPayload.size = clamped;
|
|
3388
3392
|
this.emit("progress", this.progressPayload);
|
|
3389
3393
|
}
|
|
3390
3394
|
}
|
|
3391
3395
|
computeProgress(size) {
|
|
3392
3396
|
const { min, max } = this.getAllowedRange();
|
|
3393
|
-
|
|
3394
|
-
|
|
3397
|
+
const reachableMax = Math.min(max, this.snaps.getMaxAxisSize());
|
|
3398
|
+
if (reachableMax <= min) return 0;
|
|
3399
|
+
return Math.min(Math.max((size - min) / (reachableMax - min), 0), 1);
|
|
3395
3400
|
}
|
|
3396
3401
|
handleOpen() {
|
|
3397
3402
|
sheetStack.promote(this.id);
|
|
@@ -3415,8 +3420,8 @@ var BottomSheetEngine = class {
|
|
|
3415
3420
|
this.updateAriaSlider();
|
|
3416
3421
|
this.emit("snap", {
|
|
3417
3422
|
id: target.id,
|
|
3418
|
-
size:
|
|
3419
|
-
progress: this.computeProgress(
|
|
3423
|
+
size: this.size,
|
|
3424
|
+
progress: this.computeProgress(this.size)
|
|
3420
3425
|
});
|
|
3421
3426
|
if (target.size > 0 && !this.lifecycle.isInstalled) {
|
|
3422
3427
|
this.emit("open", { id: target.id });
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as SnapPoint, b as SheetMode, a as SnapPointDef, c as EngineOptions, f as ScrimOverlayPosition } from './BottomSheetEngine-
|
|
2
|
-
export { g as AnchorAnimationPreset, h as AnchorAnimationSpec, i as AnchorHandle, A as AnchorOptions, j as AnchorPosition, k as AnchorState, B as BottomSheetEngine, C as CloseReason, E as EngineState, P as Plugin, l as SCRIM_PRESETS, m as ScrimOverlayOptions, n as ScrimPreset, o as ScrimPresetConfig, p as ScrimStageDef, S as ScrimStagesOptions, q as ScrimUpdate, e as SheetEventMap, r as SnapId, T as TeardownScope, s as runAnchorTransition } from './BottomSheetEngine-
|
|
1
|
+
import { d as SnapPoint, b as SheetMode, a as SnapPointDef, c as EngineOptions, f as ScrimOverlayPosition } from './BottomSheetEngine-BD1mSExI.cjs';
|
|
2
|
+
export { g as AnchorAnimationPreset, h as AnchorAnimationSpec, i as AnchorHandle, A as AnchorOptions, j as AnchorPosition, k as AnchorState, B as BottomSheetEngine, C as CloseReason, E as EngineState, P as Plugin, l as SCRIM_PRESETS, m as ScrimOverlayOptions, n as ScrimPreset, o as ScrimPresetConfig, p as ScrimStageDef, S as ScrimStagesOptions, q as ScrimUpdate, e as SheetEventMap, r as SnapId, T as TeardownScope, s as runAnchorTransition } from './BottomSheetEngine-BD1mSExI.cjs';
|
|
3
3
|
export { OVERLAY_PRESETS, Overlay, OverlayAnimation, OverlayCloseReason, OverlayEdge, Overlay as OverlayEngine, OverlayEventMap, OverlayMountTarget, OverlayOptions, OverlayPreset, OverlayState, OverlayUpdate, SwipeToCloseConfig, createOverlay } from './overlay.cjs';
|
|
4
4
|
import './transform-jVfAikE9.cjs';
|
|
5
5
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as SnapPoint, b as SheetMode, a as SnapPointDef, c as EngineOptions, f as ScrimOverlayPosition } from './BottomSheetEngine-
|
|
2
|
-
export { g as AnchorAnimationPreset, h as AnchorAnimationSpec, i as AnchorHandle, A as AnchorOptions, j as AnchorPosition, k as AnchorState, B as BottomSheetEngine, C as CloseReason, E as EngineState, P as Plugin, l as SCRIM_PRESETS, m as ScrimOverlayOptions, n as ScrimPreset, o as ScrimPresetConfig, p as ScrimStageDef, S as ScrimStagesOptions, q as ScrimUpdate, e as SheetEventMap, r as SnapId, T as TeardownScope, s as runAnchorTransition } from './BottomSheetEngine-
|
|
1
|
+
import { d as SnapPoint, b as SheetMode, a as SnapPointDef, c as EngineOptions, f as ScrimOverlayPosition } from './BottomSheetEngine-BDGRWa2i.js';
|
|
2
|
+
export { g as AnchorAnimationPreset, h as AnchorAnimationSpec, i as AnchorHandle, A as AnchorOptions, j as AnchorPosition, k as AnchorState, B as BottomSheetEngine, C as CloseReason, E as EngineState, P as Plugin, l as SCRIM_PRESETS, m as ScrimOverlayOptions, n as ScrimPreset, o as ScrimPresetConfig, p as ScrimStageDef, S as ScrimStagesOptions, q as ScrimUpdate, e as SheetEventMap, r as SnapId, T as TeardownScope, s as runAnchorTransition } from './BottomSheetEngine-BDGRWa2i.js';
|
|
3
3
|
export { OVERLAY_PRESETS, Overlay, OverlayAnimation, OverlayCloseReason, OverlayEdge, Overlay as OverlayEngine, OverlayEventMap, OverlayMountTarget, OverlayOptions, OverlayPreset, OverlayState, OverlayUpdate, SwipeToCloseConfig, createOverlay } from './overlay.js';
|
|
4
4
|
import './transform-jVfAikE9.js';
|
|
5
5
|
|