@buoy-gg/bottom-sheet 7.0.41 → 7.0.42
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/lib/commonjs/components/BottomSheet.js +1 -1160
- package/lib/commonjs/components/BottomSheet.web.js +1 -795
- package/lib/commonjs/components/bottomSheetGeometry.js +1 -86
- package/lib/commonjs/components/useMultiTap.js +1 -52
- package/lib/commonjs/index.js +1 -12
- package/lib/commonjs/index.web.js +1 -12
- package/lib/module/components/BottomSheet.js +1 -1157
- package/lib/module/components/BottomSheet.web.js +1 -790
- package/lib/module/components/bottomSheetGeometry.js +1 -79
- package/lib/module/components/useMultiTap.js +1 -47
- package/lib/module/index.js +1 -4
- package/lib/module/index.web.js +1 -6
- package/lib/web/index.mjs +1 -2
- package/package.json +2 -2
- package/lib/typescript/components/BottomSheet.d.ts.map +0 -1
- package/lib/typescript/components/BottomSheet.web.d.ts.map +0 -1
- package/lib/typescript/components/bottomSheetGeometry.d.ts.map +0 -1
- package/lib/typescript/components/useMultiTap.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/index.web.d.ts.map +0 -1
|
@@ -1,79 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Platform-free geometry for the BottomSheet.
|
|
5
|
-
*
|
|
6
|
-
* Extracted verbatim from the native implementation so the web port
|
|
7
|
-
* (BottomSheet.web.tsx) shares the exact clamping behavior:
|
|
8
|
-
* - corner-resize math: BottomSheet.tsx createResizeHandler (lines ~767-869)
|
|
9
|
-
* - close heuristic: BottomSheet.tsx onPanResponderRelease (lines ~706-708)
|
|
10
|
-
* The native file still carries its own inline copy; if you change one,
|
|
11
|
-
* change both (candidate for a later native refactor to import this).
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
export const MIN_HEIGHT = 100;
|
|
15
|
-
export const DEFAULT_HEIGHT = 400;
|
|
16
|
-
export const FLOATING_WIDTH = 380;
|
|
17
|
-
export const FLOATING_HEIGHT = 500;
|
|
18
|
-
export const FLOATING_MIN_HEIGHT = 80;
|
|
19
|
-
|
|
20
|
-
/** Native: FLOATING_MIN_WIDTH = SCREEN.width * 0.25 */
|
|
21
|
-
export function floatingMinWidth(screenWidth) {
|
|
22
|
-
return screenWidth * 0.25;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 4-corner resize with safe-area-clamped bounds and min sizes.
|
|
26
|
-
* Mirrors the switch in the native createResizeHandler exactly.
|
|
27
|
-
*/
|
|
28
|
-
export function resizeCorner(corner, start, dx, dy, container, insets, minWidth, minHeight = FLOATING_MIN_HEIGHT) {
|
|
29
|
-
const minLeft = Math.max(0, insets.left || 0);
|
|
30
|
-
const maxRight = container.width - Math.max(0, insets.right || 0);
|
|
31
|
-
const minTop = Math.max(0, insets.top || 0);
|
|
32
|
-
const maxBottom = container.height - Math.max(0, insets.bottom || 0);
|
|
33
|
-
const startRight = start.left + start.width;
|
|
34
|
-
const startBottom = start.top + start.height;
|
|
35
|
-
let left = start.left;
|
|
36
|
-
let top = start.top;
|
|
37
|
-
let right = startRight;
|
|
38
|
-
let bottom = startBottom;
|
|
39
|
-
switch (corner) {
|
|
40
|
-
case 'topLeft':
|
|
41
|
-
{
|
|
42
|
-
left = Math.max(minLeft, Math.min(start.left + dx, startRight - minWidth));
|
|
43
|
-
top = Math.max(minTop, Math.min(start.top + dy, startBottom - minHeight));
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
case 'topRight':
|
|
47
|
-
{
|
|
48
|
-
right = Math.min(maxRight, Math.max(startRight + dx, start.left + minWidth));
|
|
49
|
-
top = Math.max(minTop, Math.min(start.top + dy, startBottom - minHeight));
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
case 'bottomLeft':
|
|
53
|
-
{
|
|
54
|
-
left = Math.max(minLeft, Math.min(start.left + dx, startRight - minWidth));
|
|
55
|
-
bottom = Math.min(maxBottom, Math.max(startBottom + dy, start.top + minHeight));
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
case 'bottomRight':
|
|
59
|
-
{
|
|
60
|
-
right = Math.min(maxRight, Math.max(startRight + dx, start.left + minWidth));
|
|
61
|
-
bottom = Math.min(maxBottom, Math.max(startBottom + dy, start.top + minHeight));
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
left,
|
|
67
|
-
top,
|
|
68
|
-
width: Math.max(minWidth, right - left),
|
|
69
|
-
height: Math.max(minHeight, bottom - top)
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Drag-to-dismiss heuristic. Native units: vy in px/ms (RN gestureState.vy),
|
|
75
|
-
* dy total drag in px.
|
|
76
|
-
*/
|
|
77
|
-
export function shouldCloseOnRelease(vy, dy, finalHeight, minHeight) {
|
|
78
|
-
return vy > 0.8 && dy > 50 || dy > 150 && finalHeight <= minHeight;
|
|
79
|
-
}
|
|
1
|
+
"use strict";export const MIN_HEIGHT=100;export const DEFAULT_HEIGHT=400;export const FLOATING_WIDTH=380;export const FLOATING_HEIGHT=500;export const FLOATING_MIN_HEIGHT=80;export function floatingMinWidth(a){return a*.25}export function resizeCorner(a,t,o,e,r,x,h,M=FLOATING_MIN_HEIGHT){const i=Math.max(0,x.left||0);const I=r.width-Math.max(0,x.right||0);const T=Math.max(0,x.top||0);const b=r.height-Math.max(0,x.bottom||0);const m=t.left+t.width;const n=t.top+t.height;let c=t.left;let p=t.top;let l=m;let f=n;switch(a){case"topLeft":{c=Math.max(i,Math.min(t.left+o,m-h));p=Math.max(T,Math.min(t.top+e,n-M));break}case"topRight":{l=Math.min(I,Math.max(m+o,t.left+h));p=Math.max(T,Math.min(t.top+e,n-M));break}case"bottomLeft":{c=Math.max(i,Math.min(t.left+o,m-h));f=Math.min(b,Math.max(n+e,t.top+M));break}case"bottomRight":{l=Math.min(I,Math.max(m+o,t.left+h));f=Math.min(b,Math.max(n+e,t.top+M));break}}return{left:c,top:p,width:Math.max(h,l-c),height:Math.max(M,f-p)}}export function shouldCloseOnRelease(a,t,o,e){return a>.8&&t>50||t>150&&o<=e}
|
|
@@ -1,47 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Platform-free tap-count recognizer shared by the BottomSheet header and
|
|
5
|
-
* floating window: 2 taps toggles mode, 3+ closes. Mirrors the native
|
|
6
|
-
* implementation (BottomSheet.tsx ModalHeader.handleHeaderTap /
|
|
7
|
-
* handleFloatingTap): 500ms reset window, 300ms settle timer.
|
|
8
|
-
*/
|
|
9
|
-
import { useEffect, useRef } from 'react';
|
|
10
|
-
export function useMultiTap(onDouble, onTriple) {
|
|
11
|
-
const lastTapRef = useRef(0);
|
|
12
|
-
const tapCountRef = useRef(0);
|
|
13
|
-
const timeoutRef = useRef(null);
|
|
14
|
-
// Latest-ref pattern so the returned handler stays stable without
|
|
15
|
-
// re-arming timers when callbacks change identity.
|
|
16
|
-
const handlersRef = useRef({
|
|
17
|
-
onDouble,
|
|
18
|
-
onTriple
|
|
19
|
-
});
|
|
20
|
-
handlersRef.current = {
|
|
21
|
-
onDouble,
|
|
22
|
-
onTriple
|
|
23
|
-
};
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
return () => {
|
|
26
|
-
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
27
|
-
};
|
|
28
|
-
}, []);
|
|
29
|
-
const tapHandlerRef = useRef(() => {
|
|
30
|
-
const now = Date.now();
|
|
31
|
-
if (now - lastTapRef.current > 500) {
|
|
32
|
-
tapCountRef.current = 0;
|
|
33
|
-
}
|
|
34
|
-
tapCountRef.current++;
|
|
35
|
-
lastTapRef.current = now;
|
|
36
|
-
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
37
|
-
timeoutRef.current = setTimeout(() => {
|
|
38
|
-
if (tapCountRef.current === 2) {
|
|
39
|
-
handlersRef.current.onDouble();
|
|
40
|
-
} else if (tapCountRef.current >= 3) {
|
|
41
|
-
handlersRef.current.onTriple();
|
|
42
|
-
}
|
|
43
|
-
tapCountRef.current = 0;
|
|
44
|
-
}, 300);
|
|
45
|
-
});
|
|
46
|
-
return tapHandlerRef.current;
|
|
47
|
-
}
|
|
1
|
+
"use strict";import{useEffect as i,useRef as t}from"react";export function useMultiTap(u,c){const o=t(0);const r=t(0);const e=t(null);const n=t({onDouble:u,onTriple:c});n.current={onDouble:u,onTriple:c};i(()=>{return()=>{if(e.current)clearTimeout(e.current)}},[]);const s=t(()=>{const f=Date.now();if(f-o.current>500){r.current=0}r.current++;o.current=f;if(e.current)clearTimeout(e.current);e.current=setTimeout(()=>{if(r.current===2){n.current.onDouble()}else if(r.current>=3){n.current.onTriple()}r.current=0},300)});return s.current}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.web.js
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
// Web entry — reached via bundler alias (same pattern as
|
|
4
|
-
// @buoy-gg/core → devtools-floating-menu/src/index.web.tsx; the package
|
|
5
|
-
// exports map has no browser condition, so consumers alias this file).
|
|
6
|
-
export { BottomSheet } from './components/BottomSheet.web';
|
|
1
|
+
"use strict";export{BottomSheet}from"./components/BottomSheet.web";
|
package/lib/web/index.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{useState as T,useRef as I,useEffect as X}from"react";import{ToolBackground as de}from"@buoy-gg/shared-ui/web";function j(t){return t*.25}function q(t,e,n,o,r,l,c,d=80){let h=Math.max(0,l.left||0),m=r.width-Math.max(0,l.right||0),u=Math.max(0,l.top||0),x=r.height-Math.max(0,l.bottom||0),a=e.left+e.width,p=e.top+e.height,b=e.left,g=e.top,y=a,v=p;switch(t){case"topLeft":{b=Math.max(h,Math.min(e.left+n,a-c)),g=Math.max(u,Math.min(e.top+o,p-d));break}case"topRight":{y=Math.min(m,Math.max(a+n,e.left+c)),g=Math.max(u,Math.min(e.top+o,p-d));break}case"bottomLeft":{b=Math.max(h,Math.min(e.left+n,a-c)),v=Math.min(x,Math.max(p+o,e.top+d));break}case"bottomRight":{y=Math.min(m,Math.max(a+n,e.left+c)),v=Math.min(x,Math.max(p+o,e.top+d));break}}return{left:b,top:g,width:Math.max(c,y-b),height:Math.max(d,v-g)}}function J(t,e,n,o){return t>.8&&e>50||e>150&&n<=o}import{useEffect as se,useRef as z}from"react";function K(t,e){let n=z(0),o=z(0),r=z(null),l=z({onDouble:t,onTriple:e});return l.current={onDouble:t,onTriple:e},se(()=>()=>{r.current&&clearTimeout(r.current)},[]),z(()=>{let d=Date.now();d-n.current>500&&(o.current=0),o.current++,n.current=d,r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{o.current===2?l.current.onDouble():o.current>=3&&l.current.onTriple(),o.current=0},300)}).current}import{jsx as s,jsxs as B}from"react/jsx-runtime";var ue={background:"rgba(8, 12, 21, 0.98)",panel:"rgba(16, 22, 35, 0.98)",border:"#00B8E666",primary:"#FFFFFF",secondary:"#B8BFC9",muted:"#7A8599",success:"#4AFF9F",error:"#FF5252",info:"#00B8E6"};function pe(t){return window.addEventListener("resize",t),window.visualViewport?.addEventListener("resize",t),()=>{window.removeEventListener("resize",t),window.visualViewport?.removeEventListener("resize",t)}}function ee(){return{width:window.innerWidth,height:window.innerHeight}}function te(){let t=document.createElement("div");t.style.cssText="position:fixed;visibility:hidden;pointer-events:none;top:env(safe-area-inset-top);bottom:env(safe-area-inset-bottom);left:env(safe-area-inset-left);right:env(safe-area-inset-right)",document.body.appendChild(t);let e=getComputedStyle(t),n={top:parseFloat(e.top)||0,bottom:parseFloat(e.bottom)||0,left:parseFloat(e.left)||0,right:parseFloat(e.right)||0};return document.body.removeChild(t),n}function fe(){let[t,e]=T(()=>({viewport:ee(),insets:te()}));return X(()=>pe(()=>{e({viewport:ee(),insets:te()})}),[]),t}function W(t,e){if(!t.isPrimary)return;let n=t.currentTarget,o=t.clientX,r=t.clientY,l=t.clientY,c=performance.now(),d=0,h=0;e.onStart?.(t),n.setPointerCapture(t.pointerId);let m=a=>{if(a.pointerId!==t.pointerId)return;let p=a.clientX-o,b=a.clientY-r;h=Math.max(h,Math.abs(p)+Math.abs(b));let g=performance.now(),y=g-c;y>0&&(d=(a.clientY-l)/y,l=a.clientY,c=g),e.onMove(a,{dx:p,dy:b})},u=a=>{a.pointerId===t.pointerId&&(x(),e.onEnd(a,{dx:a.clientX-o,dy:a.clientY-r,vy:d,wasTap:h<=5}))},x=()=>{n.removeEventListener("pointermove",m),n.removeEventListener("pointerup",u),n.removeEventListener("pointercancel",u)};n.addEventListener("pointermove",m),n.addEventListener("pointerup",u),n.addEventListener("pointercancel",u)}function oe({isResizing:t,mode:e,hasCustomContent:n=!1,theme:o}){return B("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",padding:n?"6px 0 2px":"8px 0",position:"relative"},children:[s("div",{style:{width:t?40:e==="floating"?50:40,height:e==="floating"?5:3,backgroundColor:t?o.success:e==="floating"?o.muted:o.info+"99",borderRadius:2,boxShadow:`0 0 4px ${o.info}CC`}}),t&&e==="bottomSheet"&&s("div",{style:{position:"absolute",display:"flex",flexDirection:"row",gap:2,marginTop:12},children:[0,1,2].map(r=>s("div",{style:{width:12,height:1,backgroundColor:o.success,opacity:.6}},r))})]})}function re({header:t,isResizing:e,mode:n,theme:o}){return t?.customContent?B("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center"},children:[s(oe,{isResizing:e,mode:n,hasCustomContent:!0,theme:o}),t.customContent]}):B("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",position:"relative"},children:[s(oe,{isResizing:e,mode:n,theme:o}),B("div",{style:{padding:"0 16px",display:"flex",flexDirection:"column",alignItems:"center"},children:[t?.title&&s("span",{style:{fontSize:16,fontWeight:600,color:o.primary},children:t.title}),t?.subtitle&&s("span",{style:{fontSize:12,color:o.secondary,paddingTop:4},children:t.subtitle})]}),s("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:s("span",{style:{fontSize:10,color:o.muted,fontStyle:"italic"},children:"Double tap: Toggle \u2022 Triple tap: Close"})})]})}function ie({children:t,footer:e,footerHeight:n,disableScrollWrapper:o,contentStyle:r,theme:l,background:c}){return B("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",backgroundColor:l.background,borderBottomLeftRadius:16,borderBottomRightRadius:16,overflow:"hidden",position:"relative",...r},children:[c?s(de,{}):null,o?t:s("div",{style:{flex:1,minHeight:0,overflowY:"auto",WebkitOverflowScrolling:"touch",paddingBottom:n},children:t}),e?s("div",{style:{position:"absolute",left:0,right:0,bottom:0,backgroundColor:l.background,borderBottomLeftRadius:16,borderBottomRightRadius:16},children:e}):null]})}var ne="transform 320ms cubic-bezier(0.16, 1, 0.3, 1)",V="opacity 200ms ease";function he({props:t,theme:e,viewport:n,effectiveMaxHeight:o,panelHeight:r,setPanelHeight:l,onHeaderTap:c}){let{onClose:d,children:h,header:m,styles:u={},minHeight:x=100,footer:a,footerHeight:p=0,disableScrollWrapper:b,zIndex:g=1e3,background:y=!0}=t,v=I(null),L=I(null),[M,C]=T(!1),[F,$]=T(!1),A=I(!1),H=I(r);X(()=>{let w=requestAnimationFrame(()=>$(!0));return()=>cancelAnimationFrame(w)},[]);let P=w=>{if(A.current)return;let G=w.currentTarget.getBoundingClientRect().top,Y=w.clientY-G;W(w,{onStart:()=>C(!0),onMove:E=>{let k=E.clientY-Y,i=Math.max(x,Math.min(n.height-k,o));H.current=i,v.current&&(v.current.style.height=`${i}px`)},onEnd:(E,{dy:k,vy:i,wasTap:f})=>{if(C(!1),f){c();return}if(J(i,k,H.current,x)){A.current=!0;let S=L.current;S&&(S.style.transition=`${ne}, ${V}`,S.style.transform="translateY(100%)",S.style.opacity="0"),setTimeout(d,220);return}l(H.current)}})};return s("div",{style:{position:"fixed",inset:0,zIndex:g,pointerEvents:"none"},children:s("div",{ref:L,style:{position:"absolute",bottom:0,left:0,right:0,pointerEvents:"auto",transform:F?"translateY(0)":"translateY(100%)",opacity:F?1:0,transition:`${ne}, ${V}`},children:B("div",{ref:v,style:{display:"flex",flexDirection:"column",height:r,backgroundColor:e.panel,borderTopLeftRadius:16,borderTopRightRadius:16,border:`1px solid ${e.border}`,boxShadow:`0 -4px 12px ${e.info}4D, 0 -2px 24px rgba(0,0,0,0.4)`,...u.container},children:[s("div",{onPointerDown:P,style:{minHeight:56,display:"flex",backgroundColor:e.panel,borderTopLeftRadius:16,borderTopRightRadius:16,borderBottom:"1px solid rgba(255, 255, 255, 0.1)",cursor:M?"ns-resize":"grab",touchAction:"none",userSelect:"none"},children:s(re,{header:m,isResizing:M,mode:"bottomSheet",theme:e})}),s(ie,{footer:a,footerHeight:p,disableScrollWrapper:b,contentStyle:u.content,theme:e,background:y,children:h})]})})})}function me({isActive:t,theme:e}){return s("div",{style:{width:20,height:20,borderRadius:10,margin:5,backgroundColor:t?e.success+"1A":"transparent",border:t?`2px solid ${e.success}`:"2px solid transparent",boxShadow:t?`0 0 8px ${e.success}99`:"none"}})}function be({props:t,theme:e,viewport:n,insets:o,rect:r,setRect:l,onHeaderTap:c}){let{onClose:d,children:h,header:m,styles:u={},footer:x,footerHeight:a=0,onBack:p,disableScrollWrapper:b,zIndex:g=1e3,background:y=!0}=t,v=I(null),[L,M]=T(!1),[C,F]=T(!1),[$,A]=T(!1),H=I(r);H.current=r;let P=I(r);X(()=>{let i=requestAnimationFrame(()=>A(!0));return()=>cancelAnimationFrame(i)},[]);let w=i=>{P.current=i;let f=v.current;f&&(f.style.transform=`translate(${i.left}px, ${i.top}px)`,f.style.width=`${i.width}px`,f.style.height=`${i.height}px`)},G=i=>{let f=H.current,S=i.clientX-f.left,N=i.clientY-f.top;W(i,{onMove:(_,{dx:D,dy:R})=>{Math.abs(D)+Math.abs(R)>5&&M(!0),w({...P.current,left:_.clientX-S,top:_.clientY-N})},onEnd:(_,{wasTap:D})=>{if(M(!1),D){c();return}let R=P.current,U={...R,left:Math.max(o.left,Math.min(R.left,n.width-o.right-R.width)),top:Math.max(o.top,Math.min(R.top,n.height-o.bottom-R.height))};w(U),l(U)}})},Y=i=>f=>{f.stopPropagation();let S={...H.current},N=!1;W(f,{onStart:()=>F(!0),onMove:(_,{dx:D,dy:R})=>{Math.abs(D)<.5&&Math.abs(R)<.5||(N=!0,w(q(i,S,D,R,n,o,j(n.width),80)))},onEnd:()=>{if(F(!1),!N){if(i==="topRight"){d();return}if(i==="topLeft"&&p){p();return}}l(P.current)}})},E=L||C,k=[{corner:"topLeft",style:{top:4,left:4}},{corner:"topRight",style:{top:4,right:4}},{corner:"bottomLeft",style:{bottom:4,left:4}},{corner:"bottomRight",style:{bottom:4,right:4}}];return B("div",{ref:v,style:{position:"fixed",top:0,left:0,transform:`translate(${r.left}px, ${r.top}px)`,width:r.width,height:r.height,display:"flex",flexDirection:"column",backgroundColor:e.panel,borderRadius:16,border:E?`2px solid ${e.success}`:`1px solid ${e.border}`,boxShadow:E?`0 0 12px ${e.success}99`:`0 0 20px ${e.info}80, 0 8px 32px rgba(0,0,0,0.5)`,zIndex:g,opacity:$?1:0,transition:V,...u.container},children:[s("div",{onPointerDown:G,style:{minHeight:56,display:"flex",backgroundColor:e.panel,borderTopLeftRadius:14,borderTopRightRadius:14,borderBottom:"1px solid rgba(255, 255, 255, 0.1)",cursor:L?"grabbing":"grab",touchAction:"none",userSelect:"none"},children:s(re,{header:m,isResizing:E,mode:"floating",theme:e})}),s(ie,{footer:x,footerHeight:a,disableScrollWrapper:b,contentStyle:u.content,theme:e,background:y,children:h}),k.map(({corner:i,style:f})=>s("div",{onPointerDown:Y(i),style:{position:"absolute",width:30,height:30,zIndex:10,touchAction:"none",cursor:i==="topLeft"||i==="bottomRight"?"nwse-resize":"nesw-resize",...f},children:s(me,{isActive:E,theme:e})},i))]})}var ge=t=>{let{visible:e,onClose:n,maxHeight:o,initialHeight:r=400,initialMode:l="bottomSheet",onModeChange:c,theme:d}=t,h={...ue,...d},{viewport:m,insets:u}=fe(),[x,a]=T(l),[p,b]=T(r),[g,y]=T(()=>({width:380,height:500,left:(window.innerWidth-380)/2,top:(window.innerHeight-500)/2})),v=o||m.height-u.top,M=K(()=>{let C=x==="bottomSheet"?"floating":"bottomSheet";a(C),c?.(C)},n);return e?x==="floating"?s(be,{props:t,theme:h,viewport:m,insets:u,rect:g,setRect:y,onHeaderTap:M}):s(he,{props:t,theme:h,viewport:m,effectiveMaxHeight:v,panelHeight:Math.min(p,v),setPanelHeight:b,onHeaderTap:M}):null};export{ge as BottomSheet};
|
|
1
|
+
"use client";typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{useState as R,useRef as E,useEffect as q}from"react";import{ToolBackground as Z}from"@buoy-gg/shared-ui/web";function ee(t){return t*.25}function te(t,e,n,o,r,s,d,p=80){let m=Math.max(0,s.left||0),f=r.width-Math.max(0,s.right||0),c=Math.max(0,s.top||0),y=r.height-Math.max(0,s.bottom||0),l=e.left+e.width,h=e.top+e.height,g=e.left,b=e.top,v=l,x=h;switch(t){case"topLeft":{g=Math.max(m,Math.min(e.left+n,l-d)),b=Math.max(c,Math.min(e.top+o,h-p));break}case"topRight":{v=Math.min(f,Math.max(l+n,e.left+d)),b=Math.max(c,Math.min(e.top+o,h-p));break}case"bottomLeft":{g=Math.max(m,Math.min(e.left+n,l-d)),x=Math.min(y,Math.max(h+o,e.top+p));break}case"bottomRight":{v=Math.min(f,Math.max(l+n,e.left+d)),x=Math.min(y,Math.max(h+o,e.top+p));break}}return{left:g,top:b,width:Math.max(d,v-g),height:Math.max(p,x-b)}}function oe(t,e,n,o){return t>.8&&e>50||e>150&&n<=o}import{useEffect as ne,useRef as D}from"react";function re(t,e){let n=D(0),o=D(0),r=D(null),s=D({onDouble:t,onTriple:e});return s.current={onDouble:t,onTriple:e},ne(()=>()=>{r.current&&clearTimeout(r.current)},[]),D(()=>{let d=Date.now();d-n.current>500&&(o.current=0),o.current++,n.current=d,r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{o.current===2?s.current.onDouble():o.current>=3&&s.current.onTriple(),o.current=0},300)}).current}import{jsx as a,jsxs as z}from"react/jsx-runtime";var ie={background:"rgba(8, 12, 21, 0.98)",panel:"rgba(16, 22, 35, 0.98)",border:"#00B8E666",primary:"#FFFFFF",secondary:"#B8BFC9",muted:"#7A8599",success:"#4AFF9F",error:"#FF5252",info:"#00B8E6"};function ae(t){return window.addEventListener("resize",t),window.visualViewport?.addEventListener("resize",t),()=>{window.removeEventListener("resize",t),window.visualViewport?.removeEventListener("resize",t)}}function J(){return{width:window.innerWidth,height:window.innerHeight}}function K(){let t=document.createElement("div");t.style.cssText="position:fixed;visibility:hidden;pointer-events:none;top:env(safe-area-inset-top);bottom:env(safe-area-inset-bottom);left:env(safe-area-inset-left);right:env(safe-area-inset-right)",document.body.appendChild(t);let e=getComputedStyle(t),n={top:parseFloat(e.top)||0,bottom:parseFloat(e.bottom)||0,left:parseFloat(e.left)||0,right:parseFloat(e.right)||0};return document.body.removeChild(t),n}function le(){let[t,e]=R(()=>({viewport:J(),insets:K()}));return q(()=>ae(()=>{e({viewport:J(),insets:K()})}),[]),t}function V(t,e){if(!t.isPrimary)return;let n=t.currentTarget,o=t.clientX,r=t.clientY,s=t.clientY,d=performance.now(),p=0,m=0;e.onStart?.(t),n.setPointerCapture(t.pointerId);let f=l=>{if(l.pointerId!==t.pointerId)return;let h=l.clientX-o,g=l.clientY-r;m=Math.max(m,Math.abs(h)+Math.abs(g));let b=performance.now(),v=b-d;v>0&&(p=(l.clientY-s)/v,s=l.clientY,d=b),e.onMove(l,{dx:h,dy:g})},c=l=>{l.pointerId===t.pointerId&&(y(),e.onEnd(l,{dx:l.clientX-o,dy:l.clientY-r,vy:p,wasTap:m<=5}))},y=()=>{n.removeEventListener("pointermove",f),n.removeEventListener("pointerup",c),n.removeEventListener("pointercancel",c)};n.addEventListener("pointermove",f),n.addEventListener("pointerup",c),n.addEventListener("pointercancel",c)}function O({isResizing:t,mode:e,hasCustomContent:n=false,theme:o}){return z("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",padding:n?"6px 0 2px":"8px 0",position:"relative"},children:[a("div",{style:{width:t?40:e==="floating"?50:40,height:e==="floating"?5:3,backgroundColor:t?o.success:e==="floating"?o.muted:o.info+"99",borderRadius:2,boxShadow:`0 0 4px ${o.info}CC`}}),t&&e==="bottomSheet"&&a("div",{style:{position:"absolute",display:"flex",flexDirection:"row",gap:2,marginTop:12},children:[0,1,2].map(r=>a("div",{style:{width:12,height:1,backgroundColor:o.success,opacity:.6}},r))})]})}function U({header:t,isResizing:e,mode:n,theme:o}){return t?.customContent?z("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center"},children:[a(O,{isResizing:e,mode:n,hasCustomContent:true,theme:o}),t.customContent]}):z("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",position:"relative"},children:[a(O,{isResizing:e,mode:n,theme:o}),z("div",{style:{padding:"0 16px",display:"flex",flexDirection:"column",alignItems:"center"},children:[t?.title&&a("span",{style:{fontSize:16,fontWeight:600,color:o.primary},children:t.title}),t?.subtitle&&a("span",{style:{fontSize:12,color:o.secondary,paddingTop:4},children:t.subtitle})]}),a("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:a("span",{style:{fontSize:10,color:o.muted,fontStyle:"italic"},children:"Double tap: Toggle \u2022 Triple tap: Close"})})]})}function _({children:t,footer:e,footerHeight:n,disableScrollWrapper:o,contentStyle:r,theme:s,background:d}){return z("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",backgroundColor:s.background,borderBottomLeftRadius:16,borderBottomRightRadius:16,overflow:"hidden",position:"relative",...r},children:[d?a(Z,{}):null,o?t:a("div",{style:{flex:1,minHeight:0,overflowY:"auto",WebkitOverflowScrolling:"touch",paddingBottom:n},children:t}),e?a("div",{style:{position:"absolute",left:0,right:0,bottom:0,backgroundColor:s.background,borderBottomLeftRadius:16,borderBottomRightRadius:16},children:e}):null]})}var Q="transform 320ms cubic-bezier(0.16, 1, 0.3, 1)",G="opacity 200ms ease";function se({props:t,theme:e,viewport:n,effectiveMaxHeight:o,panelHeight:r,setPanelHeight:s,onHeaderTap:d}){let{onClose:p,children:m,header:f,styles:c={},minHeight:y=100,footer:l,footerHeight:h=0,disableScrollWrapper:g,zIndex:b=1e3,background:v=true}=t,x=E(null),C=E(null),[S,Y]=R(false),[$,W]=R(false),A=E(false),k=E(r);q(()=>{let M=requestAnimationFrame(()=>W(true));return()=>cancelAnimationFrame(M)},[]);let L=M=>{if(A.current)return;let j=M.currentTarget.getBoundingClientRect().top,X=M.clientY-j;V(M,{onStart:()=>Y(true),onMove:H=>{let B=H.clientY-X,i=Math.max(y,Math.min(n.height-B,o));k.current=i,x.current&&(x.current.style.height=`${i}px`)},onEnd:(H,{dy:B,vy:i,wasTap:u})=>{if(Y(false),u){d();return}if(oe(i,B,k.current,y)){A.current=true;let T=C.current;T&&(T.style.transition=`${Q}, ${G}`,T.style.transform="translateY(100%)",T.style.opacity="0"),setTimeout(p,220);return}s(k.current)}})};return a("div",{style:{position:"fixed",inset:0,zIndex:b,pointerEvents:"none"},children:a("div",{ref:C,style:{position:"absolute",bottom:0,left:0,right:0,pointerEvents:"auto",transform:$?"translateY(0)":"translateY(100%)",opacity:$?1:0,transition:`${Q}, ${G}`},children:z("div",{ref:x,style:{display:"flex",flexDirection:"column",height:r,backgroundColor:e.panel,borderTopLeftRadius:16,borderTopRightRadius:16,border:`1px solid ${e.border}`,boxShadow:`0 -4px 12px ${e.info}4D, 0 -2px 24px rgba(0,0,0,0.4)`,...c.container},children:[a("div",{onPointerDown:L,style:{minHeight:56,display:"flex",backgroundColor:e.panel,borderTopLeftRadius:16,borderTopRightRadius:16,borderBottom:"1px solid rgba(255, 255, 255, 0.1)",cursor:S?"ns-resize":"grab",touchAction:"none",userSelect:"none"},children:a(U,{header:f,isResizing:S,mode:"bottomSheet",theme:e})}),a(_,{footer:l,footerHeight:h,disableScrollWrapper:g,contentStyle:c.content,theme:e,background:v,children:m})]})})})}function de({isActive:t,theme:e}){return a("div",{style:{width:20,height:20,borderRadius:10,margin:5,backgroundColor:t?e.success+"1A":"transparent",border:t?`2px solid ${e.success}`:"2px solid transparent",boxShadow:t?`0 0 8px ${e.success}99`:"none"}})}function ce({props:t,theme:e,viewport:n,insets:o,rect:r,setRect:s,onHeaderTap:d}){let{onClose:p,children:m,header:f,styles:c={},footer:y,footerHeight:l=0,onBack:h,disableScrollWrapper:g,zIndex:b=1e3,background:v=true}=t,x=E(null),[C,S]=R(false),[Y,$]=R(false),[W,A]=R(false),k=E(r);k.current=r;let L=E(r);q(()=>{let i=requestAnimationFrame(()=>A(true));return()=>cancelAnimationFrame(i)},[]);let M=i=>{L.current=i;let u=x.current;u&&(u.style.transform=`translate(${i.left}px, ${i.top}px)`,u.style.width=`${i.width}px`,u.style.height=`${i.height}px`)},j=i=>{let u=k.current,T=i.clientX-u.left,I=i.clientY-u.top;V(i,{onMove:(P,{dx:F,dy:w})=>{Math.abs(F)+Math.abs(w)>5&&S(true),M({...L.current,left:P.clientX-T,top:P.clientY-I})},onEnd:(P,{wasTap:F})=>{if(S(false),F){d();return}let w=L.current,N={...w,left:Math.max(o.left,Math.min(w.left,n.width-o.right-w.width)),top:Math.max(o.top,Math.min(w.top,n.height-o.bottom-w.height))};M(N),s(N)}})},X=i=>u=>{u.stopPropagation();let T={...k.current},I=false;V(u,{onStart:()=>$(true),onMove:(P,{dx:F,dy:w})=>{Math.abs(F)<.5&&Math.abs(w)<.5||(I=true,M(te(i,T,F,w,n,o,ee(n.width),80)))},onEnd:()=>{if($(false),!I){if(i==="topRight"){p();return}if(i==="topLeft"&&h){h();return}}s(L.current)}})},H=C||Y,B=[{corner:"topLeft",style:{top:4,left:4}},{corner:"topRight",style:{top:4,right:4}},{corner:"bottomLeft",style:{bottom:4,left:4}},{corner:"bottomRight",style:{bottom:4,right:4}}];return z("div",{ref:x,style:{position:"fixed",top:0,left:0,transform:`translate(${r.left}px, ${r.top}px)`,width:r.width,height:r.height,display:"flex",flexDirection:"column",backgroundColor:e.panel,borderRadius:16,border:H?`2px solid ${e.success}`:`1px solid ${e.border}`,boxShadow:H?`0 0 12px ${e.success}99`:`0 0 20px ${e.info}80, 0 8px 32px rgba(0,0,0,0.5)`,zIndex:b,opacity:W?1:0,transition:G,...c.container},children:[a("div",{onPointerDown:j,style:{minHeight:56,display:"flex",backgroundColor:e.panel,borderTopLeftRadius:14,borderTopRightRadius:14,borderBottom:"1px solid rgba(255, 255, 255, 0.1)",cursor:C?"grabbing":"grab",touchAction:"none",userSelect:"none"},children:a(U,{header:f,isResizing:H,mode:"floating",theme:e})}),a(_,{footer:y,footerHeight:l,disableScrollWrapper:g,contentStyle:c.content,theme:e,background:v,children:m}),B.map(({corner:i,style:u})=>a("div",{onPointerDown:X(i),style:{position:"absolute",width:30,height:30,zIndex:10,touchAction:"none",cursor:i==="topLeft"||i==="bottomRight"?"nwse-resize":"nesw-resize",...u},children:a(de,{isActive:H,theme:e})},i))]})}var he=t=>{let{visible:e,onClose:n,maxHeight:o,initialHeight:r=400,initialMode:s="bottomSheet",onModeChange:d,theme:p}=t,m={...ie,...p},{viewport:f,insets:c}=le(),[y,l]=R(s),[h,g]=R(r),[b,v]=R(()=>({width:380,height:500,left:(window.innerWidth-380)/2,top:(window.innerHeight-500)/2})),x=o||f.height-c.top,C=re(()=>{let S=y==="bottomSheet"?"floating":"bottomSheet";l(S),d?.(S)},n);return e?y==="floating"?a(ce,{props:t,theme:m,viewport:f,insets:c,rect:b,setRect:v,onHeaderTap:C}):a(se,{props:t,theme:m,viewport:f,effectiveMaxHeight:x,panelHeight:Math.min(h,x),setPanelHeight:g,onHeaderTap:C}):null};export{he as BottomSheet};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/bottom-sheet",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.42",
|
|
4
4
|
"description": "Bottom sheet and floating window components for React Native, with configurable presentation and native-driver animations.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
],
|
|
35
35
|
"sideEffects": false,
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@buoy-gg/shared-ui": "^7.0.
|
|
37
|
+
"@buoy-gg/shared-ui": "^7.0.42"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"react": "*",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../../src/components/BottomSheet.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAUL,SAAS,EAEV,MAAM,OAAO,CAAC;AACf,OAAO,EASL,SAAS,EAIV,MAAM,cAAc,CAAC;AAgGtB,QAAA,MAAM,YAAY;;;;;;;;;;CAUjB,CAAC;AAKF,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,YAAY,CAAC,CAAC;IACrC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAknCD,eAAO,MAAM,WAAW,wDAA6B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BottomSheet.web.d.ts","sourceRoot":"","sources":["../../../src/components/BottomSheet.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,EAAE,EAER,MAAM,OAAO,CAAC;AAwBf,QAAA,MAAM,YAAY;;;;;;;;;;CAUjB,CAAC;AAKF,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,YAAY,CAAC,CAAC;IACrC,oFAAoF;IACpF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAquBD,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA+D5C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bottomSheetGeometry.d.ts","sourceRoot":"","sources":["../../../src/components/bottomSheetGeometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC;AAE3E,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,IAAI,EACX,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAA4B,GACtC,IAAI,CA2CN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAET"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMultiTap.d.ts","sourceRoot":"","sources":["../../../src/components/useMultiTap.ts"],"names":[],"mappings":"AAQA,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,cAmCrE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../src/index.web.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GACxB,MAAM,8BAA8B,CAAC"}
|