@astryxdesign/lab 0.2.0-canary.fc53ff7 → 0.3.0-canary.2d2dba1
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 +6 -0
- package/dist/BottomSheet/BottomSheet.d.ts +63 -35
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +271 -75
- package/dist/BottomSheet/snapOffsets.d.ts +62 -0
- package/dist/BottomSheet/snapOffsets.d.ts.map +1 -0
- package/dist/BottomSheet/snapOffsets.js +114 -0
- package/dist/BottomSheet/useSheetGestures.d.ts +55 -12
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +383 -40
- package/dist/Chart/index.d.ts +1 -1
- package/dist/Chart/index.d.ts.map +1 -1
- package/dist/Chart/index.js +1 -1
- package/dist/ChatReasoning/ChatReasoning.d.ts.map +1 -1
- package/dist/ChatReasoning/ChatReasoning.js +10 -1
- package/dist/LogStream/LogStream.d.ts +4 -0
- package/dist/LogStream/LogStream.d.ts.map +1 -1
- package/dist/LogStream/LogStream.js +12 -1
- package/dist/RichTextEditor/RichTextEditor.d.ts +18 -2
- package/dist/RichTextEditor/RichTextEditor.d.ts.map +1 -1
- package/dist/RichTextEditor/RichTextEditor.js +87 -13
- package/dist/RichTextEditor/RichTextEditorAutoLinkPlugin.d.ts +85 -0
- package/dist/RichTextEditor/RichTextEditorAutoLinkPlugin.d.ts.map +1 -0
- package/dist/RichTextEditor/RichTextEditorAutoLinkPlugin.js +95 -0
- package/dist/RichTextEditor/RichTextEditorToolbar.d.ts +126 -0
- package/dist/RichTextEditor/RichTextEditorToolbar.d.ts.map +1 -0
- package/dist/RichTextEditor/RichTextEditorToolbar.js +633 -0
- package/dist/RichTextEditor/RichTextView.d.ts.map +1 -1
- package/dist/RichTextEditor/RichTextView.js +48 -2
- package/dist/RichTextEditor/editorNodes.d.ts +8 -0
- package/dist/RichTextEditor/editorNodes.d.ts.map +1 -0
- package/dist/RichTextEditor/editorNodes.js +23 -0
- package/dist/RichTextEditor/index.d.ts +7 -0
- package/dist/RichTextEditor/index.d.ts.map +1 -1
- package/dist/RichTextEditor/index.js +5 -1
- package/dist/RichTextEditor/linkUtils.d.ts +22 -0
- package/dist/RichTextEditor/linkUtils.d.ts.map +1 -0
- package/dist/RichTextEditor/linkUtils.js +91 -0
- package/dist/RichTextEditor/markdownSerializers.d.ts +40 -0
- package/dist/RichTextEditor/markdownSerializers.d.ts.map +1 -0
- package/dist/RichTextEditor/markdownSerializers.js +85 -0
- package/dist/SVGIcon/SVGIcon.d.ts.map +1 -1
- package/dist/SVGIcon/SVGIcon.js +14 -1
- package/dist/Stepper/Step.d.ts +6 -1
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +34 -7
- package/dist/Stepper/Stepper.d.ts +1 -1
- package/dist/Stepper/Stepper.js +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/lab.css +16 -7
- package/package.json +19 -3
- package/src/BottomSheet/BottomSheet.doc.mjs +32 -13
- package/src/BottomSheet/BottomSheet.test.tsx +174 -4
- package/src/BottomSheet/BottomSheet.tsx +404 -97
- package/src/BottomSheet/snapOffsets.test.ts +152 -0
- package/src/BottomSheet/snapOffsets.ts +139 -0
- package/src/BottomSheet/useSheetGestures.doc.mjs +7 -6
- package/src/BottomSheet/useSheetGestures.test.ts +316 -65
- package/src/BottomSheet/useSheetGestures.ts +515 -55
- package/src/Chart/ChartArea.doc.mjs +1 -1
- package/src/Chart/ChartBar.doc.mjs +1 -1
- package/src/Chart/ChartCandlestick.doc.mjs +1 -1
- package/src/Chart/ChartDot.doc.mjs +1 -1
- package/src/Chart/ChartDotGL.doc.mjs +1 -1
- package/src/Chart/ChartDotGLInteractive.doc.mjs +1 -1
- package/src/Chart/ChartHeatmapGL.doc.mjs +1 -1
- package/src/Chart/ChartLine.doc.mjs +1 -1
- package/src/Chart/ChartStreamGL.doc.mjs +1 -1
- package/src/Chart/index.ts +0 -1
- package/src/Chat/ChatEmojiPicker.doc.mjs +1 -1
- package/src/Chat/ChatReactionBar.doc.mjs +1 -1
- package/src/Chat/ChatTypingIndicator.doc.mjs +1 -1
- package/src/Chat/ChatUnreadDivider.doc.mjs +1 -1
- package/src/ChatReasoning/ChatReasoning.doc.mjs +1 -1
- package/src/ChatReasoning/ChatReasoning.test.tsx +25 -0
- package/src/ChatReasoning/ChatReasoning.tsx +9 -1
- package/src/CircularProgress/CircularProgress.doc.mjs +3 -3
- package/src/CodeEditor/CodeEditor.doc.mjs +1 -1
- package/src/Drawer/Drawer.doc.mjs +3 -3
- package/src/InfoTip/InfoTip.doc.mjs +3 -3
- package/src/LogStream/LogStream.doc.mjs +2 -2
- package/src/LogStream/LogStream.test.tsx +25 -0
- package/src/LogStream/LogStream.tsx +10 -0
- package/src/Radial/RadialChart.doc.mjs +1 -1
- package/src/RichTextEditor/RichTextEditor.doc.mjs +34 -2
- package/src/RichTextEditor/RichTextEditor.test.tsx +761 -22
- package/src/RichTextEditor/RichTextEditor.tsx +138 -22
- package/src/RichTextEditor/RichTextEditorAutoLinkPlugin.tsx +116 -0
- package/src/RichTextEditor/RichTextEditorToolbar.tsx +789 -0
- package/src/RichTextEditor/RichTextView.tsx +44 -1
- package/src/RichTextEditor/editorNodes.ts +34 -0
- package/src/RichTextEditor/index.ts +26 -0
- package/src/RichTextEditor/linkUtils.ts +93 -0
- package/src/RichTextEditor/markdownSerializers.ts +105 -0
- package/src/SVGIcon/SVGIcon.doc.mjs +1 -1
- package/src/SVGIcon/SVGIcon.test.tsx +40 -0
- package/src/SVGIcon/SVGIcon.tsx +14 -6
- package/src/Sankey/SankeyChart.doc.mjs +1 -1
- package/src/Schedule/Schedule.doc.mjs +1 -1
- package/src/Stat/Stat.doc.mjs +3 -3
- package/src/Stepper/Step.doc.mjs +1 -1
- package/src/Stepper/Step.tsx +45 -5
- package/src/Stepper/Stepper.doc.mjs +3 -3
- package/src/Stepper/Stepper.test.tsx +84 -3
- package/src/Stepper/Stepper.tsx +1 -1
- package/src/ThreeD/3DBar.doc.mjs +1 -1
- package/src/ThreeD/3DChart.doc.mjs +1 -1
- package/src/ThreeD/3DScatter.doc.mjs +1 -1
- package/src/ThreeD/3DScatterGL.doc.mjs +1 -1
- package/src/ThreeD/3DSurface.doc.mjs +1 -1
- package/src/index.ts +15 -2
- package/dist/CodeBlock/index.d.ts +0 -8
- package/dist/CodeBlock/index.d.ts.map +0 -1
- package/dist/CodeBlock/index.js +0 -9
- package/src/CodeBlock/index.ts +0 -10
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file snapOffsets.ts
|
|
5
|
+
* @input Pure geometry helpers — no React, no DOM.
|
|
6
|
+
* @output Converts snap points to translateY offsets for the sheet surface.
|
|
7
|
+
* @position Internal to BottomSheet; consumed by useSheetGestures, tested by
|
|
8
|
+
* snapOffsets.test.ts.
|
|
9
|
+
*
|
|
10
|
+
* The sheet is rendered at its full (fully-open) height and *translated down*
|
|
11
|
+
* to express shorter detents — translate is GPU-composited, so this is cheaper
|
|
12
|
+
* than animating layout height. A detent is therefore a translateY offset in
|
|
13
|
+
* px from the fully-open position (0 = fully open, larger = more collapsed).
|
|
14
|
+
* These helpers turn snap points into that offset list; they are pure so the
|
|
15
|
+
* geometry can be unit-tested without a DOM.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Detents whose resting offsets land within this many px of each other are
|
|
20
|
+
* treated as the same stop (the taller one wins). Stops the sheet from having
|
|
21
|
+
* two near-identical rest positions — e.g. when a content-hugging height sits
|
|
22
|
+
* a hair away from a fractional snap point.
|
|
23
|
+
*/
|
|
24
|
+
export const DETENT_DEDUP_PX = 48;
|
|
25
|
+
|
|
26
|
+
/** Resolve snap points given as viewport fractions (0, 1] to px heights. */
|
|
27
|
+
export function snapFractionsToHeights(fractions, viewportPx) {
|
|
28
|
+
return fractions.filter(f => f > 0 && f <= 1).map(f => f * viewportPx);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Given the sheet's full height (px, as rendered fully open) and a set of
|
|
33
|
+
* candidate detent *visible heights* (px), return the resting translateY
|
|
34
|
+
* offsets from fully-open, ascending and de-duplicated.
|
|
35
|
+
*
|
|
36
|
+
* - `0` (fully open) is always the first detent.
|
|
37
|
+
* - Only heights strictly shorter than the sheet become collapsed detents; a
|
|
38
|
+
* height >= the sheet can't be shown by translating down, so it's dropped.
|
|
39
|
+
* - Offsets closer than `dedupPx` collapse to the smaller (taller) offset, so
|
|
40
|
+
* near-identical detents — e.g. a hug height ≈ a snap point — become one stop.
|
|
41
|
+
*/
|
|
42
|
+
export function computeDetentOffsets(sheetHeight, detentHeights, dedupPx = DETENT_DEDUP_PX) {
|
|
43
|
+
const collapsed = detentHeights.filter(h => h > 0 && h < sheetHeight).map(h => sheetHeight - h);
|
|
44
|
+
const ascending = [0, ...collapsed].sort((a, b) => a - b);
|
|
45
|
+
const deduped = [];
|
|
46
|
+
for (const offset of ascending) {
|
|
47
|
+
const last = deduped[deduped.length - 1];
|
|
48
|
+
if (last === undefined || offset - last >= dedupPx) {
|
|
49
|
+
deduped.push(offset);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return deduped;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Nearest value in `offsets` to `value` (offsets must be non-empty). */
|
|
56
|
+
export function nearestOffset(value, offsets) {
|
|
57
|
+
return offsets.reduce((best, o) => Math.abs(o - value) < Math.abs(best - value) ? o : best, offsets[0]);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Minimum scrim opacity at the peek detent. The scrim thins to a glance state
|
|
62
|
+
* but never fully vanishes, because a modal sheet keeps the background inert —
|
|
63
|
+
* a fully clear backdrop would read as "interactive" when it isn't. (For a
|
|
64
|
+
* genuinely interactive, undimmed peek, use a non-modal sheet, `hasScrim=false`.)
|
|
65
|
+
*/
|
|
66
|
+
export const MIN_PEEK_SCRIM_OPACITY = 0.3;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Scrim opacity (1 = fully visible) for a drag/settle `offset`.
|
|
70
|
+
* The scrim stays full while the sheet is at or above its second-shortest
|
|
71
|
+
* detent, then fades as it collapses onto the shortest ("peek") detent — a
|
|
72
|
+
* glance state that thins the backdrop to `MIN_PEEK_SCRIM_OPACITY` (not fully
|
|
73
|
+
* gone, since the sheet is still modal) and holds there below it.
|
|
74
|
+
* A single-detent sheet has no peek, so it instead fades all the way to 0
|
|
75
|
+
* across the dismiss overshoot toward `dismissOffset` (the sheet is leaving).
|
|
76
|
+
*/
|
|
77
|
+
export function scrimOpacityForOffset(offset, offsets, dismissOffset) {
|
|
78
|
+
const shortest = offsets[offsets.length - 1];
|
|
79
|
+
const hasPeek = offsets.length >= 2;
|
|
80
|
+
const fadeStart = hasPeek ? offsets[offsets.length - 2] : 0;
|
|
81
|
+
const fadeEnd = hasPeek ? shortest : dismissOffset;
|
|
82
|
+
// Peek is a resting state on a still-modal sheet, so keep a floor; the
|
|
83
|
+
// dismiss overshoot is a sheet on its way out, so let it clear completely.
|
|
84
|
+
const floor = hasPeek ? MIN_PEEK_SCRIM_OPACITY : 0;
|
|
85
|
+
if (offset <= fadeStart) {
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
if (offset >= fadeEnd) {
|
|
89
|
+
return floor;
|
|
90
|
+
}
|
|
91
|
+
return 1 - (1 - floor) * ((offset - fadeStart) / (fadeEnd - fadeStart));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Settle target for a released drag. Restricts candidates to the drag
|
|
96
|
+
* direction so a committed drag never snaps *back past* where it started
|
|
97
|
+
* (a down-drag settles at/below the start, an up-drag at/above), then picks
|
|
98
|
+
* the nearest remaining detent. `dir`: 1 = dragged down, -1 = up, 0 = neither.
|
|
99
|
+
*/
|
|
100
|
+
export function resolveSettleOffset(value, offsets, dir, baseOffset) {
|
|
101
|
+
let candidates = offsets;
|
|
102
|
+
if (dir > 0) {
|
|
103
|
+
const downward = offsets.filter(o => o >= baseOffset);
|
|
104
|
+
if (downward.length > 0) {
|
|
105
|
+
candidates = downward;
|
|
106
|
+
}
|
|
107
|
+
} else if (dir < 0) {
|
|
108
|
+
const upward = offsets.filter(o => o <= baseOffset);
|
|
109
|
+
if (upward.length > 0) {
|
|
110
|
+
candidates = upward;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return nearestOffset(value, candidates);
|
|
114
|
+
}
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* @output Exports useSheetGestures hook and its option/result types
|
|
5
5
|
* @position Internal to BottomSheet; not exported from the lab entry point
|
|
6
6
|
*
|
|
7
|
-
* Drag
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Drag + snap machinery for the bottom sheet. Tracks a pointer drag down the
|
|
8
|
+
* block axis, translates the sliding surface live, and on release either
|
|
9
|
+
* settles to the nearest snap detent (a slow drag) or dismisses (a fast flick
|
|
10
|
+
* down). A fast flick up expands to the tallest detent. This is the core
|
|
11
|
+
* behavior split the sheet needs: DRAG places, SWIPE closes.
|
|
11
12
|
*
|
|
12
|
-
* Kept private to BottomSheet:
|
|
13
|
-
*
|
|
13
|
+
* Kept private to BottomSheet: a dismiss edge + detents on a bottom-anchored
|
|
14
|
+
* surface are inherently sheet concepts. It is not a general primitive and is
|
|
14
15
|
* intentionally not exported.
|
|
15
16
|
*
|
|
16
17
|
* SSR-safe: no window/document access at module scope; all measurement
|
|
@@ -25,8 +26,27 @@ import { type CSSProperties, type PointerEvent as ReactPointerEvent } from 'reac
|
|
|
25
26
|
export interface UseSheetGesturesOptions {
|
|
26
27
|
/** Whether the owning sheet is open. Drag state resets when it closes. */
|
|
27
28
|
isOpen: boolean;
|
|
28
|
-
/** Called
|
|
29
|
+
/** Called on a swipe-to-close (fast downward flick, or drag past the floor). */
|
|
29
30
|
onDismiss: () => void;
|
|
31
|
+
/**
|
|
32
|
+
* Resolver for candidate detent heights in px BELOW the full sheet height.
|
|
33
|
+
* Called lazily at the start of each drag so the values stay current (e.g.
|
|
34
|
+
* after a rotation or the virtual keyboard opening) without a persistent
|
|
35
|
+
* resize listener. The measured full height is always the tallest detent,
|
|
36
|
+
* so the effective detent set is `[...snapHeights(), fullHeight]`. Omit for
|
|
37
|
+
* a single-height sheet (a drag then only dismisses or springs back).
|
|
38
|
+
*/
|
|
39
|
+
snapHeights?: () => number[];
|
|
40
|
+
/** Notified when the settled detent height (px) changes. */
|
|
41
|
+
onSnap?: (heightPx: number) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Called with the scrim opacity the sheet should show (1 = fully visible,
|
|
44
|
+
* 0 = hidden) as the drag moves and on settle. Full while the sheet is at
|
|
45
|
+
* or above its mid detent, fading to 0 as it collapses onto the shortest
|
|
46
|
+
* "peek" detent — thinning to a faint glance state without fully clearing — and
|
|
47
|
+
* on the dismiss overshoot. Lets the owner mirror it onto the scrim.
|
|
48
|
+
*/
|
|
49
|
+
onScrimOpacity?: (opacity: number) => void;
|
|
30
50
|
}
|
|
31
51
|
export interface SheetContentProps {
|
|
32
52
|
style: CSSProperties;
|
|
@@ -38,26 +58,49 @@ export interface SheetHandleProps {
|
|
|
38
58
|
onPointerUp: (event: ReactPointerEvent) => void;
|
|
39
59
|
onPointerCancel: (event: ReactPointerEvent) => void;
|
|
40
60
|
}
|
|
61
|
+
export interface SheetBodyProps {
|
|
62
|
+
ref: (node: HTMLElement | null) => void;
|
|
63
|
+
onPointerDown: (event: ReactPointerEvent) => void;
|
|
64
|
+
onPointerMove: (event: ReactPointerEvent) => void;
|
|
65
|
+
onPointerUp: (event: ReactPointerEvent) => void;
|
|
66
|
+
onPointerCancel: (event: ReactPointerEvent) => void;
|
|
67
|
+
}
|
|
41
68
|
export interface UseSheetGesturesResult {
|
|
69
|
+
/**
|
|
70
|
+
* Callback ref for the sheet surface. The hook observes it (ResizeObserver)
|
|
71
|
+
* to keep the fully-open height current, so detents stay correct across
|
|
72
|
+
* rotation / viewport changes without re-measuring mid-drag.
|
|
73
|
+
*/
|
|
74
|
+
sheetRef: (node: HTMLElement | null) => void;
|
|
42
75
|
/** Spread on the sliding surface: live translate + touch-action guard. */
|
|
43
76
|
contentProps: SheetContentProps;
|
|
44
77
|
/** Spread on the grab-handle element: pointer drag handlers. */
|
|
45
78
|
handleProps: SheetHandleProps;
|
|
46
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Spread on the scrollable body. An overscroll-at-top pull-down starts a
|
|
81
|
+
* sheet drag (a larger, more forgiving target when the content isn't itself
|
|
82
|
+
* scrolling); normal scrolling passes through untouched.
|
|
83
|
+
*/
|
|
84
|
+
bodyProps: SheetBodyProps;
|
|
85
|
+
/** Current live drag translate in px (0 = fully expanded, larger = collapsed). */
|
|
47
86
|
dragOffset: number;
|
|
87
|
+
/** Translate of the resting detent in px (0 = tallest detent). */
|
|
88
|
+
settledOffset: number;
|
|
48
89
|
/** Whether a drag is currently in progress. */
|
|
49
90
|
isDragging: boolean;
|
|
50
91
|
}
|
|
51
92
|
/**
|
|
52
|
-
* Drag
|
|
53
|
-
*
|
|
54
|
-
*
|
|
93
|
+
* Drag + snap machinery for the bottom sheet. Returns props to spread on the
|
|
94
|
+
* grab handle and the sliding surface, plus live drag state. A slow drag
|
|
95
|
+
* settles to the nearest detent; a fast downward flick dismisses; a fast
|
|
96
|
+
* upward flick expands to the tallest detent.
|
|
55
97
|
*
|
|
56
98
|
* @example
|
|
57
99
|
* ```
|
|
58
100
|
* const {contentProps, handleProps} = useSheetGestures({
|
|
59
101
|
* isOpen,
|
|
60
102
|
* onDismiss: () => onOpenChange(false),
|
|
103
|
+
* snapHeights: () => [240, 0.5 * (window.visualViewport?.height ?? 0)],
|
|
61
104
|
* });
|
|
62
105
|
* <div {...contentProps}>
|
|
63
106
|
* <div {...handleProps} />
|
|
@@ -65,5 +108,5 @@ export interface UseSheetGesturesResult {
|
|
|
65
108
|
* </div>
|
|
66
109
|
* ```
|
|
67
110
|
*/
|
|
68
|
-
export declare function useSheetGestures({ isOpen, onDismiss, }: UseSheetGesturesOptions): UseSheetGesturesResult;
|
|
111
|
+
export declare function useSheetGestures({ isOpen, onDismiss, snapHeights, onSnap, onScrimOpacity, }: UseSheetGesturesOptions): UseSheetGesturesResult;
|
|
69
112
|
//# sourceMappingURL=useSheetGestures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSheetGestures.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/useSheetGestures.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"useSheetGestures.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/useSheetGestures.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,YAAY,IAAI,iBAAiB,EACvC,MAAM,OAAO,CAAC;AAgEf,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;IAChB,gFAAgF;IAChF,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,0EAA0E;IAC1E,YAAY,EAAE,iBAAiB,CAAC;IAChC,gEAAgE;IAChE,WAAW,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,SAAS,EAAE,cAAc,CAAC;IAC1B,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC;CACrB;AASD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,WAAW,EACX,MAAM,EACN,cAAc,GACf,EAAE,uBAAuB,GAAG,sBAAsB,CAielD"}
|