@tamagui/sheet 1.2.9 → 1.2.10
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/esm/Sheet.mjs +616 -0
- package/dist/esm/Sheet.mjs.map +7 -0
- package/dist/esm/SheetContext.mjs +14 -0
- package/dist/esm/SheetContext.mjs.map +7 -0
- package/dist/esm/SheetScrollView.mjs +81 -0
- package/dist/esm/SheetScrollView.mjs.map +7 -0
- package/dist/esm/constants.mjs +9 -0
- package/dist/esm/constants.mjs.map +7 -0
- package/dist/esm/index.mjs +2 -0
- package/dist/esm/index.mjs.map +7 -0
- package/dist/esm/types.mjs +1 -0
- package/dist/esm/types.mjs.map +7 -0
- package/dist/jsx/Sheet.mjs +594 -0
- package/dist/jsx/Sheet.mjs.map +7 -0
- package/dist/jsx/SheetContext.mjs +14 -0
- package/dist/jsx/SheetContext.mjs.map +7 -0
- package/dist/jsx/SheetScrollView.mjs +76 -0
- package/dist/jsx/SheetScrollView.mjs.map +7 -0
- package/dist/jsx/constants.mjs +9 -0
- package/dist/jsx/constants.mjs.map +7 -0
- package/dist/jsx/index.mjs +2 -0
- package/dist/jsx/index.mjs.map +7 -0
- package/dist/jsx/types.mjs +1 -0
- package/dist/jsx/types.mjs.map +7 -0
- package/package.json +12 -12
- package/types/SheetContext.d.ts +8 -2
- package/types/SheetContext.d.ts.map +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/SheetContext.tsx"],
|
|
4
|
+
"sourcesContent": ["import { TamaguiElement } from '@tamagui/core'\nimport { createContextScope } from '@tamagui/create-context'\nimport React from 'react'\n\nimport { SHEET_NAME } from './constants'\nimport { PositionChangeHandler, ScrollBridge, SheetProps } from './types'\n\ntype SheetContextValue = Required<\n Pick<SheetProps, 'open' | 'position' | 'snapPoints' | 'dismissOnOverlayPress'>\n> & {\n hidden: boolean\n setPosition: PositionChangeHandler\n setOpen: React.Dispatch<React.SetStateAction<boolean>>\n contentRef: React.RefObject<TamaguiElement>\n dismissOnSnapToBottom: boolean\n scrollBridge: ScrollBridge\n frameSize: number\n modal: boolean\n}\n\nexport const [createSheetContext, createSheetScope] = createContextScope(SHEET_NAME)\n\nexport const [SheetProvider, useSheetContext] = createSheetContext<SheetContextValue>(\n SHEET_NAME,\n {} as any\n)\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,0BAA0B;AAGnC,SAAS,kBAAkB;AAgBpB,MAAM,CAAC,oBAAoB,gBAAgB,IAAI,mBAAmB,UAAU;AAE5E,MAAM,CAAC,eAAe,eAAe,IAAI;AAAA,EAC9C;AAAA,EACA,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Stack, composeRefs } from "@tamagui/core";
|
|
2
|
+
import { ScrollView } from "@tamagui/scroll-view";
|
|
3
|
+
import { forwardRef, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { useSheetContext } from "./SheetContext";
|
|
5
|
+
const SHEET_SCROLL_VIEW_NAME = "SheetScrollView";
|
|
6
|
+
const SheetScrollView = forwardRef(
|
|
7
|
+
({ __scopeSheet, children, ...props }, ref) => {
|
|
8
|
+
const { scrollBridge, position, snapPoints, frameSize, open } = useSheetContext(
|
|
9
|
+
SHEET_SCROLL_VIEW_NAME,
|
|
10
|
+
__scopeSheet
|
|
11
|
+
);
|
|
12
|
+
const scrollRef = useRef(null);
|
|
13
|
+
const percentOpened = snapPoints[position] ?? 0;
|
|
14
|
+
const [percentToPadBottom, setPercentToPadBottom] = useState(0);
|
|
15
|
+
const next = 100 - percentOpened;
|
|
16
|
+
if (open && next !== percentToPadBottom) {
|
|
17
|
+
setPercentToPadBottom(next);
|
|
18
|
+
}
|
|
19
|
+
const state = useRef({
|
|
20
|
+
lastPageY: 0,
|
|
21
|
+
dragAt: 0,
|
|
22
|
+
dys: [],
|
|
23
|
+
// store a few recent dys to get velocity on release
|
|
24
|
+
isScrolling: false,
|
|
25
|
+
isDragging: false
|
|
26
|
+
});
|
|
27
|
+
const release = () => {
|
|
28
|
+
if (!state.current.isDragging) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
state.current.isDragging = false;
|
|
32
|
+
scrollBridge.scrollStartY = -1;
|
|
33
|
+
state.current.isScrolling = false;
|
|
34
|
+
let vy = 0;
|
|
35
|
+
if (state.current.dys.length) {
|
|
36
|
+
const recentDys = state.current.dys.slice(-10);
|
|
37
|
+
const dist = recentDys.length ? recentDys.reduce((a, b) => a + b, 0) : 0;
|
|
38
|
+
const avgDy = dist / recentDys.length;
|
|
39
|
+
vy = avgDy * 0.04;
|
|
40
|
+
}
|
|
41
|
+
state.current.dys = [];
|
|
42
|
+
scrollBridge.release({
|
|
43
|
+
dragAt: state.current.dragAt,
|
|
44
|
+
vy
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
return <ScrollView
|
|
48
|
+
ref={composeRefs(scrollRef, ref)}
|
|
49
|
+
flex={1}
|
|
50
|
+
scrollEventThrottle={8}
|
|
51
|
+
onScroll={(e) => {
|
|
52
|
+
const { y } = e.nativeEvent.contentOffset;
|
|
53
|
+
scrollBridge.y = y;
|
|
54
|
+
if (y > 0) {
|
|
55
|
+
scrollBridge.scrollStartY = -1;
|
|
56
|
+
}
|
|
57
|
+
}}
|
|
58
|
+
onStartShouldSetResponder={() => {
|
|
59
|
+
scrollBridge.scrollStartY = -1;
|
|
60
|
+
state.current.isDragging = true;
|
|
61
|
+
return true;
|
|
62
|
+
}}
|
|
63
|
+
onMoveShouldSetResponder={() => false}
|
|
64
|
+
onResponderRelease={release}
|
|
65
|
+
className="_ovs-contain"
|
|
66
|
+
{...props}
|
|
67
|
+
>
|
|
68
|
+
{useMemo(() => children, [children])}
|
|
69
|
+
<Stack height={percentToPadBottom / 100 * frameSize} width={0} />
|
|
70
|
+
</ScrollView>;
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
export {
|
|
74
|
+
SheetScrollView
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=SheetScrollView.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/SheetScrollView.tsx"],
|
|
4
|
+
"sourcesContent": ["import { Stack, TamaguiElement, composeRefs } from '@tamagui/core'\nimport { ScrollView, ScrollViewProps } from '@tamagui/scroll-view'\nimport { forwardRef, useMemo, useRef, useState } from 'react'\nimport { ScrollView as RNScrollView } from 'react-native'\n\nimport { useSheetContext } from './SheetContext'\nimport { SheetScopedProps } from './types'\n\n// TODO ideally would replicate https://github.com/ammarahm-ed/react-native-actions-sheet/blob/master/src/index.tsx\n\n/* -------------------------------------------------------------------------------------------------\n * SheetScrollView\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_SCROLL_VIEW_NAME = 'SheetScrollView'\n\nexport const SheetScrollView = forwardRef<TamaguiElement, ScrollViewProps>(\n ({ __scopeSheet, children, ...props }: SheetScopedProps<ScrollViewProps>, ref) => {\n const { scrollBridge, position, snapPoints, frameSize, open } = useSheetContext(\n SHEET_SCROLL_VIEW_NAME,\n __scopeSheet\n )\n // const [scrollEnabled, setScrollEnabled_] = useState(true)\n const scrollRef = useRef<RNScrollView | null>(null)\n\n const percentOpened = snapPoints[position] ?? 0\n const [percentToPadBottom, setPercentToPadBottom] = useState(0)\n\n const next = 100 - percentOpened\n if (open && next !== percentToPadBottom) {\n setPercentToPadBottom(next)\n }\n\n // const setScrollEnabled = (next: boolean) => {\n // scrollRef.current?.setNativeProps?.({\n // scrollEnabled: next,\n // })\n // setScrollEnabled_(next)\n // }\n\n const state = useRef({\n lastPageY: 0,\n dragAt: 0,\n dys: [] as number[], // store a few recent dys to get velocity on release\n isScrolling: false,\n isDragging: false,\n })\n\n const release = () => {\n if (!state.current.isDragging) {\n return\n }\n state.current.isDragging = false\n scrollBridge.scrollStartY = -1\n state.current.isScrolling = false\n // setScrollEnabled(true)\n let vy = 0\n if (state.current.dys.length) {\n const recentDys = state.current.dys.slice(-10)\n const dist = recentDys.length ? recentDys.reduce((a, b) => a + b, 0) : 0\n const avgDy = dist / recentDys.length\n vy = avgDy * 0.04\n }\n state.current.dys = []\n scrollBridge.release({\n dragAt: state.current.dragAt,\n vy,\n })\n }\n\n return (\n <ScrollView\n ref={composeRefs(scrollRef as any, ref)}\n flex={1}\n scrollEventThrottle={8}\n // scrollEnabled={scrollEnabled}\n onScroll={(e) => {\n const { y } = e.nativeEvent.contentOffset\n scrollBridge.y = y\n if (y > 0) {\n scrollBridge.scrollStartY = -1\n }\n }}\n onStartShouldSetResponder={() => {\n scrollBridge.scrollStartY = -1\n state.current.isDragging = true\n return true\n }}\n // setting to false while onResponderMove is disabled\n onMoveShouldSetResponder={() => false}\n // somehow disabling works better, regression, no more nice drag continue scroll\n // onResponderMove={(e) => {\n // const { pageY } = e.nativeEvent\n\n // if (state.current.isScrolling) {\n // return\n // }\n\n // if (scrollBridge.scrollStartY === -1) {\n // scrollBridge.scrollStartY = pageY\n // state.current.lastPageY = pageY\n // }\n\n // const dragAt = pageY - scrollBridge.scrollStartY\n // const dy = pageY - state.current.lastPageY\n // state.current.lastPageY = pageY // after dy\n // const isDraggingUp = dy < 0\n // const isPaneAtTop = scrollBridge.paneY <= scrollBridge.paneMinY\n\n // if ((dy === 0 || isDraggingUp) && isPaneAtTop) {\n // state.current.isScrolling = true\n // setScrollEnabled(true)\n // return\n // }\n\n // setScrollEnabled(false)\n // scrollBridge.drag(dragAt)\n // state.current.dragAt = dragAt\n // state.current.dys.push(dy)\n // // only do every so often, cut down to 10 again\n // if (state.current.dys.length > 100) {\n // state.current.dys = state.current.dys.slice(-10)\n // }\n // }}\n onResponderRelease={release}\n className=\"_ovs-contain\"\n {...props}\n >\n {useMemo(() => children, [children])}\n <Stack height={(percentToPadBottom / 100) * frameSize} width={0} />\n </ScrollView>\n )\n }\n)\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,OAAuB,mBAAmB;AACnD,SAAS,kBAAmC;AAC5C,SAAS,YAAY,SAAS,QAAQ,gBAAgB;AAGtD,SAAS,uBAAuB;AAShC,MAAM,yBAAyB;AAExB,MAAM,kBAAkB;AAAA,EAC7B,CAAC,EAAE,cAAc,UAAU,GAAG,MAAM,GAAsC,QAAQ;AAChF,UAAM,EAAE,cAAc,UAAU,YAAY,WAAW,KAAK,IAAI;AAAA,MAC9D;AAAA,MACA;AAAA,IACF;AAEA,UAAM,YAAY,OAA4B,IAAI;AAElD,UAAM,gBAAgB,WAAW,QAAQ,KAAK;AAC9C,UAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAS,CAAC;AAE9D,UAAM,OAAO,MAAM;AACnB,QAAI,QAAQ,SAAS,oBAAoB;AACvC,4BAAsB,IAAI;AAAA,IAC5B;AASA,UAAM,QAAQ,OAAO;AAAA,MACnB,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,KAAK,CAAC;AAAA;AAAA,MACN,aAAa;AAAA,MACb,YAAY;AAAA,IACd,CAAC;AAED,UAAM,UAAU,MAAM;AACpB,UAAI,CAAC,MAAM,QAAQ,YAAY;AAC7B;AAAA,MACF;AACA,YAAM,QAAQ,aAAa;AAC3B,mBAAa,eAAe;AAC5B,YAAM,QAAQ,cAAc;AAE5B,UAAI,KAAK;AACT,UAAI,MAAM,QAAQ,IAAI,QAAQ;AAC5B,cAAM,YAAY,MAAM,QAAQ,IAAI,MAAM,GAAG;AAC7C,cAAM,OAAO,UAAU,SAAS,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI;AACvE,cAAM,QAAQ,OAAO,UAAU;AAC/B,aAAK,QAAQ;AAAA,MACf;AACA,YAAM,QAAQ,MAAM,CAAC;AACrB,mBAAa,QAAQ;AAAA,QACnB,QAAQ,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WACE,CAAC;AAAA,MACC,KAAK,YAAY,WAAkB,GAAG;AAAA,MACtC,MAAM;AAAA,MACN,qBAAqB;AAAA,MAErB,UAAU,CAAC,MAAM;AACf,cAAM,EAAE,EAAE,IAAI,EAAE,YAAY;AAC5B,qBAAa,IAAI;AACjB,YAAI,IAAI,GAAG;AACT,uBAAa,eAAe;AAAA,QAC9B;AAAA,MACF;AAAA,MACA,2BAA2B,MAAM;AAC/B,qBAAa,eAAe;AAC5B,cAAM,QAAQ,aAAa;AAC3B,eAAO;AAAA,MACT;AAAA,MAEA,0BAA0B,MAAM;AAAA,MAmChC,oBAAoB;AAAA,MACpB,UAAU;AAAA,UACN;AAAA;AAAA,OAEH,QAAQ,MAAM,UAAU,CAAC,QAAQ,CAAC;AAAA,MACnC,CAAC,MAAM,QAAS,qBAAqB,MAAO,WAAW,OAAO,GAAG;AAAA,IACnE,EA3DC;AAAA,EA6DL;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/constants.tsx"],
|
|
4
|
+
"sourcesContent": ["export const constants = {}\n\nexport const SHEET_NAME = 'Sheet'\nexport const SHEET_HANDLE_NAME = 'SheetHandle'\n"],
|
|
5
|
+
"mappings": "AAAO,MAAM,YAAY,CAAC;AAEnB,MAAM,aAAa;AACnB,MAAM,oBAAoB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/sheet",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.10",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"*.css"
|
|
6
6
|
],
|
|
@@ -22,16 +22,16 @@
|
|
|
22
22
|
"lint:fix": "../../node_modules/.bin/rome check --apply-suggested src"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@tamagui/animations-react-native": "^1.2.
|
|
26
|
-
"@tamagui/compose-refs": "^1.2.
|
|
27
|
-
"@tamagui/core": "^1.2.
|
|
28
|
-
"@tamagui/create-context": "^1.2.
|
|
29
|
-
"@tamagui/portal": "^1.2.
|
|
30
|
-
"@tamagui/remove-scroll": "^1.2.
|
|
31
|
-
"@tamagui/scroll-view": "^1.2.
|
|
32
|
-
"@tamagui/stacks": "^1.2.
|
|
33
|
-
"@tamagui/use-constant": "^1.2.
|
|
34
|
-
"@tamagui/use-controllable-state": "^1.2.
|
|
25
|
+
"@tamagui/animations-react-native": "^1.2.10",
|
|
26
|
+
"@tamagui/compose-refs": "^1.2.10",
|
|
27
|
+
"@tamagui/core": "^1.2.10",
|
|
28
|
+
"@tamagui/create-context": "^1.2.10",
|
|
29
|
+
"@tamagui/portal": "^1.2.10",
|
|
30
|
+
"@tamagui/remove-scroll": "^1.2.10",
|
|
31
|
+
"@tamagui/scroll-view": "^1.2.10",
|
|
32
|
+
"@tamagui/stacks": "^1.2.10",
|
|
33
|
+
"@tamagui/use-constant": "^1.2.10",
|
|
34
|
+
"@tamagui/use-controllable-state": "^1.2.10"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"react": "*",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"react-native": "*"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@tamagui/build": "^1.2.
|
|
42
|
+
"@tamagui/build": "^1.2.10",
|
|
43
43
|
"react": "^18.2.0",
|
|
44
44
|
"react-dom": "^18.2.0",
|
|
45
45
|
"react-native": "*"
|
package/types/SheetContext.d.ts
CHANGED
|
@@ -17,7 +17,10 @@ export declare const createSheetContext: <ContextValueType extends object | null
|
|
|
17
17
|
children: React.ReactNode;
|
|
18
18
|
}): JSX.Element;
|
|
19
19
|
displayName: string;
|
|
20
|
-
}, (consumerName: string, scope: import("@tamagui/create-context").Scope<ContextValueType | undefined
|
|
20
|
+
}, (consumerName: string, scope: import("@tamagui/create-context").Scope<ContextValueType | undefined>, options?: {
|
|
21
|
+
warn?: boolean | undefined;
|
|
22
|
+
fallback?: Partial<ContextValueType> | undefined;
|
|
23
|
+
} | undefined) => ContextValueType], createSheetScope: import("@tamagui/create-context").CreateScope;
|
|
21
24
|
export declare const SheetProvider: {
|
|
22
25
|
(props: Required<Pick<SheetProps, "position" | "open" | "snapPoints" | "dismissOnOverlayPress">> & {
|
|
23
26
|
hidden: boolean;
|
|
@@ -33,6 +36,9 @@ export declare const SheetProvider: {
|
|
|
33
36
|
children: React.ReactNode;
|
|
34
37
|
}): JSX.Element;
|
|
35
38
|
displayName: string;
|
|
36
|
-
}, useSheetContext: (consumerName: string, scope: import("@tamagui/create-context").Scope<SheetContextValue | undefined
|
|
39
|
+
}, useSheetContext: (consumerName: string, scope: import("@tamagui/create-context").Scope<SheetContextValue | undefined>, options?: {
|
|
40
|
+
warn?: boolean | undefined;
|
|
41
|
+
fallback?: Partial<SheetContextValue> | undefined;
|
|
42
|
+
} | undefined) => SheetContextValue;
|
|
37
43
|
export {};
|
|
38
44
|
//# sourceMappingURL=SheetContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SheetContext.d.ts","sourceRoot":"","sources":["../src/SheetContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzE,KAAK,iBAAiB,GAAG,QAAQ,CAC/B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,uBAAuB,CAAC,CAC/E,GAAG;IACF,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,qBAAqB,CAAA;IAClC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IACtD,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IAC3C,qBAAqB,EAAE,OAAO,CAAA;IAC9B,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,eAAO,MAAO,kBAAkB
|
|
1
|
+
{"version":3,"file":"SheetContext.d.ts","sourceRoot":"","sources":["../src/SheetContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzE,KAAK,iBAAiB,GAAG,QAAQ,CAC/B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,uBAAuB,CAAC,CAC/E,GAAG;IACF,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,qBAAqB,CAAA;IAClC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IACtD,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IAC3C,qBAAqB,EAAE,OAAO,CAAA;IAC9B,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,eAAO,MAAO,kBAAkB;;;;;;;;;qCAAE,gBAAgB,+CAAkC,CAAA;AAEpF,eAAO,MAAO,aAAa;;gBAZjB,OAAO;qBACF,qBAAqB;iBACzB,MAAM,QAAQ,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;oBAC1C,MAAM,SAAS,CAAC,cAAc,CAAC;+BACpB,OAAO;sBAChB,YAAY;mBACf,MAAM;eACV,OAAO;;;;;;GAKa,eAAe;;;mCAG3C,CAAA"}
|