@cloudgrid-io/ui 0.35.0 → 0.37.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/dist/badge/css-base.d.ts +4 -0
- package/dist/badge/css-base.d.ts.map +1 -1
- package/dist/badge/css-base.js +6 -2
- package/dist/badge/css-base.js.map +1 -1
- package/dist/badge/css-fan.d.ts +30 -0
- package/dist/badge/css-fan.d.ts.map +1 -0
- package/dist/badge/css-fan.js +90 -0
- package/dist/badge/css-fan.js.map +1 -0
- package/dist/badge/css-live.d.ts.map +1 -1
- package/dist/badge/css-live.js +8 -0
- package/dist/badge/css-live.js.map +1 -1
- package/dist/badge/css-owner.d.ts +4 -0
- package/dist/badge/css-owner.d.ts.map +1 -1
- package/dist/badge/css-owner.js +34 -15
- package/dist/badge/css-owner.js.map +1 -1
- package/dist/badge/css-visitor.d.ts +5 -1
- package/dist/badge/css-visitor.d.ts.map +1 -1
- package/dist/badge/css-visitor.js +7 -2
- package/dist/badge/css-visitor.js.map +1 -1
- package/dist/badge/fan-geometry.d.ts +27 -0
- package/dist/badge/fan-geometry.d.ts.map +1 -0
- package/dist/badge/fan-geometry.js +24 -0
- package/dist/badge/fan-geometry.js.map +1 -0
- package/dist/badge/fan.d.ts +211 -0
- package/dist/badge/fan.d.ts.map +1 -0
- package/dist/badge/fan.js +599 -0
- package/dist/badge/fan.js.map +1 -0
- package/dist/badge/index.d.ts +4 -1
- package/dist/badge/index.d.ts.map +1 -1
- package/dist/badge/index.js +8 -4
- package/dist/badge/index.js.map +1 -1
- package/dist/badge/marks.d.ts +2 -0
- package/dist/badge/marks.d.ts.map +1 -1
- package/dist/badge/marks.js +5 -0
- package/dist/badge/marks.js.map +1 -1
- package/dist/badge/owner.d.ts +10 -0
- package/dist/badge/owner.d.ts.map +1 -1
- package/dist/badge/owner.js +20 -14
- package/dist/badge/owner.js.map +1 -1
- package/dist/badge/reactions.d.ts +20 -0
- package/dist/badge/reactions.d.ts.map +1 -0
- package/dist/badge/reactions.js +26 -0
- package/dist/badge/reactions.js.map +1 -0
- package/dist/badge/visitor.d.ts +6 -12
- package/dist/badge/visitor.d.ts.map +1 -1
- package/dist/badge/visitor.js +11 -18
- package/dist/badge/visitor.js.map +1 -1
- package/dist/blocks/icons.d.ts +8 -0
- package/dist/blocks/icons.d.ts.map +1 -1
- package/dist/blocks/icons.js +8 -0
- package/dist/blocks/icons.js.map +1 -1
- package/dist/blocks/phosphor-marks.d.ts +2 -0
- package/dist/blocks/phosphor-marks.d.ts.map +1 -1
- package/dist/blocks/phosphor-marks.js +3 -0
- package/dist/blocks/phosphor-marks.js.map +1 -1
- package/dist/claim-banner/css.d.ts +4 -3
- package/dist/claim-banner/css.d.ts.map +1 -1
- package/dist/claim-banner/css.js +8 -12
- package/dist/claim-banner/css.js.map +1 -1
- package/dist/claim-banner/index.d.ts +21 -14
- package/dist/claim-banner/index.d.ts.map +1 -1
- package/dist/claim-banner/index.js +25 -24
- package/dist/claim-banner/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE REACTION FAN (ui#351): the visitor's way in, replacing the feedback
|
|
3
|
+
* bubble. Vlad's design, as Tamir approved it on 2026-10-21 after trying the
|
|
4
|
+
* prototype on a desktop and an iPhone.
|
|
5
|
+
*
|
|
6
|
+
* At rest it is a small drop in the bottom-right corner, round with one sharp
|
|
7
|
+
* corner at the bottom left, holding the CloudGrid plug. It follows the system
|
|
8
|
+
* theme: purple with a white plug on a light system, white with a purple plug on
|
|
9
|
+
* a dark one. Opened, four options fan out up and to the left: Like, Dislike,
|
|
10
|
+
* Clever idea and Comment. The first three save in one tap; Comment opens the
|
|
11
|
+
* visitor panel, which is unchanged.
|
|
12
|
+
*
|
|
13
|
+
* This module has three parts, in the badge's usual style:
|
|
14
|
+
*
|
|
15
|
+
* markup `fan()`, an HTML string like `bubble()`; the stylesheet is
|
|
16
|
+
* `BADGE_FAN_CSS`, already inside `BADGE_VISITOR_CSS` and
|
|
17
|
+
* `BADGE_OWNER_CSS`
|
|
18
|
+
* helpers pure functions and the approved timings, tested in node
|
|
19
|
+
* behaviour `wireFan()`, which attaches the approved hover, touch and
|
|
20
|
+
* keyboard behaviour to a rendered fan and reports each choice;
|
|
21
|
+
* `wireFanPreview()` does the same for the owner's small copy
|
|
22
|
+
*
|
|
23
|
+
* Unlike the panels, the fan's state is not all in its markup: whether it is
|
|
24
|
+
* open, which option is under a finger and the cue that plays on a press are
|
|
25
|
+
* moment-to-moment, and live on the element. Render `fan()` once, wire it, and
|
|
26
|
+
* from then on update it with the handle (`sync`, `chosen`, `setHidden`), never
|
|
27
|
+
* by re-rendering or morphing it. The pressed state the markup takes is only the
|
|
28
|
+
* first paint.
|
|
29
|
+
*
|
|
30
|
+
* Importing this module does nothing: every DOM call is inside `wireFan()`.
|
|
31
|
+
*/
|
|
32
|
+
import { type ReactionKind } from "./reactions.js";
|
|
33
|
+
export { BADGE_FAN_CSS } from "./css-fan.js";
|
|
34
|
+
/** Desktop: how long the pointer rests on the icon before the fan opens. */
|
|
35
|
+
export declare const FAN_HOVER_OPEN_MS = 120;
|
|
36
|
+
/** Desktop: how long after the pointer leaves the fan before it closes. */
|
|
37
|
+
export declare const FAN_HOVER_CLOSE_MS = 300;
|
|
38
|
+
/**
|
|
39
|
+
* Touch: after every lift the fan stays open this long, then closes by itself.
|
|
40
|
+
* A tap inside the window chooses (founder, 2026-10-21; it was 0.5s).
|
|
41
|
+
*/
|
|
42
|
+
export declare const FAN_RELEASE_MS = 1200;
|
|
43
|
+
/** After Like, Dislike or Clever idea is pressed, the fan closes this long after the cue starts. */
|
|
44
|
+
export declare const FAN_CHOICE_CLOSE_MS = 1000;
|
|
45
|
+
/** How long the check shows in a pressed option before its glyph comes back. */
|
|
46
|
+
export declare const FAN_CHECK_MS = 650;
|
|
47
|
+
/** A click this soon after hover opened the fan is the same intent: it keeps the fan open. */
|
|
48
|
+
export declare const FAN_CLICK_AFTER_HOVER_MS = 700;
|
|
49
|
+
/** A click this soon after a touch is the touch's own echo, and is ignored. */
|
|
50
|
+
export declare const FAN_TOUCH_ECHO_MS = 800;
|
|
51
|
+
/** The haptic tick when a finger slides onto an option, where the browser has one. */
|
|
52
|
+
export declare const FAN_VIBRATE_MS = 10;
|
|
53
|
+
export { FAN_DIRECTIONS, FAN_HIT_SLOP, FAN_HOT_SCALE, FAN_SIZE } from "./fan-geometry.js";
|
|
54
|
+
/** What a fan option does: one of the three one-tap reactions, or Comment. */
|
|
55
|
+
export type FanKind = "like" | "dislike" | "idea" | "comment";
|
|
56
|
+
/**
|
|
57
|
+
* The four options, in order around the fan. The three reactions take the
|
|
58
|
+
* panel's own names, so the fan and the panel never call one thing two names.
|
|
59
|
+
*/
|
|
60
|
+
export declare const FAN_OPTIONS: ReadonlyArray<{
|
|
61
|
+
kind: FanKind;
|
|
62
|
+
label: string;
|
|
63
|
+
paths: readonly string[];
|
|
64
|
+
}>;
|
|
65
|
+
/** The icon's accessible name, the bubble's: the word "React" is never used. */
|
|
66
|
+
export declare const FAN_LABEL = "Leave feedback on this app";
|
|
67
|
+
/**
|
|
68
|
+
* The small marks the icon keeps for what this visitor has chosen, in this
|
|
69
|
+
* order. Rocket and Bug are chosen in the panel only, and still show here.
|
|
70
|
+
*/
|
|
71
|
+
export declare function fanMarkKinds(pressed: readonly ReactionKind[]): ReactionKind[];
|
|
72
|
+
/** The line a screen reader hears after a press: "Like saved", "Like removed". */
|
|
73
|
+
export declare function fanAnnouncement(kind: ReactionKind, on: boolean): string;
|
|
74
|
+
/**
|
|
75
|
+
* What a press on `kind` does to the pressed set, and which cues play: the
|
|
76
|
+
* pressed option pops (or shrinks, when it is taken back), and an option the
|
|
77
|
+
* press cleared (Like and Dislike exclude each other) shrinks too. Comment is
|
|
78
|
+
* not a reaction and changes nothing here.
|
|
79
|
+
*/
|
|
80
|
+
export declare function fanPress(pressed: readonly ReactionKind[], kind: ReactionKind): {
|
|
81
|
+
next: ReactionKind[];
|
|
82
|
+
on: boolean;
|
|
83
|
+
cleared: ReactionKind[];
|
|
84
|
+
};
|
|
85
|
+
export interface FanHitGeometry {
|
|
86
|
+
/** The icon's centre, in client pixels. */
|
|
87
|
+
cx: number;
|
|
88
|
+
cy: number;
|
|
89
|
+
/** Half the icon's drawn width. A point on the icon is never an option. */
|
|
90
|
+
iconHalf: number;
|
|
91
|
+
/** The radius and option size, unscaled (`FAN_SIZE`). */
|
|
92
|
+
radius: number;
|
|
93
|
+
option: number;
|
|
94
|
+
/** The drawn scale: 1 in the corner, 0.5 in the owner's preview. */
|
|
95
|
+
scale?: number;
|
|
96
|
+
/** The option currently under the finger, whose hit area has grown with it. */
|
|
97
|
+
hot?: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The option under a point, or -1. It tests where each option LANDS, not where
|
|
101
|
+
* it is mid-spread, so a quick tap on the icon never picks an option that is
|
|
102
|
+
* still passing under it. A point on the icon is never an option. Of the
|
|
103
|
+
* options whose square (half the option, grown when hot, plus the slop) holds
|
|
104
|
+
* the point, the nearest wins.
|
|
105
|
+
*/
|
|
106
|
+
export declare function fanOptionAt(x: number, y: number, g: FanHitGeometry): number;
|
|
107
|
+
/** `auto` follows the system setting; `light` and `dark` pin the icon, for a frozen frame. */
|
|
108
|
+
export type FanTheme = "auto" | "light" | "dark";
|
|
109
|
+
export interface FanOptions {
|
|
110
|
+
/** The kinds this visitor has already chosen: options drawn pressed, and the marks on the icon. First paint only. */
|
|
111
|
+
pressed?: readonly ReactionKind[];
|
|
112
|
+
/** Render it open, for a frozen frame and for the owner's preview. The badge opens it through the handle. */
|
|
113
|
+
open?: boolean;
|
|
114
|
+
/** Default `auto`. */
|
|
115
|
+
theme?: FanTheme;
|
|
116
|
+
/** The icon's accessible name. Default `FAN_LABEL`. */
|
|
117
|
+
label?: string;
|
|
118
|
+
/**
|
|
119
|
+
* When the arrival starts, in ms after insertion. Default 600, after the
|
|
120
|
+
* live badge's, as the bubble's was. `0` for a re-show.
|
|
121
|
+
*/
|
|
122
|
+
delay?: number;
|
|
123
|
+
/**
|
|
124
|
+
* The owner's small working copy in the "Ask visitors for feedback"
|
|
125
|
+
* explanation: no tab stops, no arrival, no status line, never the touch
|
|
126
|
+
* sizes. It sits inside a decorative (`aria-hidden`) tile.
|
|
127
|
+
*/
|
|
128
|
+
preview?: boolean;
|
|
129
|
+
}
|
|
130
|
+
/** One mark on the icon. `fresh` pops in; the first paint's marks are at rest. */
|
|
131
|
+
export declare function fanMark(kind: ReactionKind, fresh?: boolean): string;
|
|
132
|
+
/**
|
|
133
|
+
* The fan: the drop icon, its marks, and the four options. Closed and at rest
|
|
134
|
+
* unless `open`. Every option is a button with its name and tooltip; the three
|
|
135
|
+
* reactions carry `aria-pressed`, Comment `aria-haspopup="dialog"`. The options
|
|
136
|
+
* are `inert` while the fan is closed.
|
|
137
|
+
*
|
|
138
|
+
* No `data-action` anywhere: `wireFan()` handles every press itself and reports
|
|
139
|
+
* the choice, so a delegated `[data-action]` listener never sees the fan.
|
|
140
|
+
*/
|
|
141
|
+
export declare function fan({ pressed, open, theme, label: name, delay, preview }?: FanOptions): string;
|
|
142
|
+
export interface WireFanOptions {
|
|
143
|
+
/**
|
|
144
|
+
* A press on an option. Like, Dislike and Clever idea: save the reaction, then
|
|
145
|
+
* call `handle.chosen(before, after, kind)` for the cue. Comment: close the
|
|
146
|
+
* fan and open the visitor panel. On an app that needs sign-in, close the fan
|
|
147
|
+
* and open the sign-in step instead.
|
|
148
|
+
*/
|
|
149
|
+
onChoose: (kind: FanKind, handle: FanHandle) => void;
|
|
150
|
+
/**
|
|
151
|
+
* Use the touch sizes from the start. Default: on where the primary pointer
|
|
152
|
+
* is coarse or there is no hover. The first touch turns them on regardless.
|
|
153
|
+
*/
|
|
154
|
+
touch?: boolean;
|
|
155
|
+
/** Close on a press anywhere outside the fan, and on Escape, in an open or a closed shadow root alike. Default true; the owner's preview turns it off. */
|
|
156
|
+
dismissable?: boolean;
|
|
157
|
+
}
|
|
158
|
+
export interface FanHandle {
|
|
159
|
+
/** The `.cgf` element. */
|
|
160
|
+
readonly el: HTMLElement;
|
|
161
|
+
readonly isOpen: boolean;
|
|
162
|
+
open(): void;
|
|
163
|
+
close(): void;
|
|
164
|
+
toggle(): void;
|
|
165
|
+
/** The pressed state, without a cue: `aria-pressed` on the options and the marks on the icon. Marks already shown are kept, never popped again. */
|
|
166
|
+
sync(pressed: readonly ReactionKind[]): void;
|
|
167
|
+
/**
|
|
168
|
+
* After a press on a reaction: sync to `after`, pop the pressed option (or
|
|
169
|
+
* shrink it, when it was taken back) with a check, shrink any option the
|
|
170
|
+
* press cleared, announce it, and close `FAN_CHOICE_CLOSE_MS` later.
|
|
171
|
+
*/
|
|
172
|
+
chosen(before: readonly ReactionKind[], after: readonly ReactionKind[], kind: ReactionKind): void;
|
|
173
|
+
/** Play one option's cue: `on` pops it (with the check unless `check` is false), otherwise it shrinks. */
|
|
174
|
+
cue(kind: FanKind | ReactionKind, on: boolean, check?: boolean): void;
|
|
175
|
+
/** Close `FAN_CHOICE_CLOSE_MS` from now, as after a choice. The pointer leaving does not cut it short. */
|
|
176
|
+
closeAfterCue(): void;
|
|
177
|
+
/** Hide it while a panel is open; showing it again replays the arrival at once. */
|
|
178
|
+
setHidden(hidden: boolean): void;
|
|
179
|
+
/** Focus the icon without opening the fan, as after a panel closes. */
|
|
180
|
+
focusIcon(): void;
|
|
181
|
+
/** Remove every listener and timer. */
|
|
182
|
+
destroy(): void;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Attach the approved behaviour to a fan rendered by `fan()`.
|
|
186
|
+
*
|
|
187
|
+
* desktop hover opens it after `FAN_HOVER_OPEN_MS`, leaving closes it
|
|
188
|
+
* after `FAN_HOVER_CLOSE_MS`; a quick pass never opens it. A click
|
|
189
|
+
* on the icon toggles (but not one right after hover opened it).
|
|
190
|
+
* Closed while the pointer is still over it (after a choice, a
|
|
191
|
+
* click, Escape), it reopens only once the pointer has left.
|
|
192
|
+
* keyboard focus on the icon opens it, Tab walks the options, Escape closes
|
|
193
|
+
* it, and focus leaving the fan closes it.
|
|
194
|
+
* touch a press opens it; slide onto an option (it grows, and the phone
|
|
195
|
+
* ticks) and lift to choose. After every lift it stays open for
|
|
196
|
+
* `FAN_RELEASE_MS`, then closes; a tap inside that window chooses.
|
|
197
|
+
* A tap on the icon while it is open closes it.
|
|
198
|
+
*
|
|
199
|
+
* The page never scrolls under a finger on the fan: the icon and the options
|
|
200
|
+
* take no touch gestures.
|
|
201
|
+
*/
|
|
202
|
+
export declare function wireFan(el: HTMLElement, { onChoose, touch, dismissable }: WireFanOptions): FanHandle;
|
|
203
|
+
/**
|
|
204
|
+
* Wire the owner's small copy of the fan, in the "Ask visitors for feedback"
|
|
205
|
+
* explanation, so the owner can try exactly what visitors get. Choices are kept
|
|
206
|
+
* in the preview only and saved nowhere; Comment plays its pop and nothing
|
|
207
|
+
* opens. Call it after each render that shows the explanation, on
|
|
208
|
+
* `.cgb-info .cgf`, and `destroy()` the handle when the explanation closes.
|
|
209
|
+
*/
|
|
210
|
+
export declare function wireFanPreview(el: HTMLElement): FanHandle;
|
|
211
|
+
//# sourceMappingURL=fan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fan.d.ts","sourceRoot":"","sources":["../../src/badge/fan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAOH,OAAO,EAA6B,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAI5C,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,MAAM,CAAA;AACpC,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC;;;GAGG;AACH,eAAO,MAAM,cAAc,OAAO,CAAA;AAClC,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,OAAO,CAAA;AACvC,gFAAgF;AAChF,eAAO,MAAM,YAAY,MAAM,CAAA;AAC/B,8FAA8F;AAC9F,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,MAAM,CAAA;AACpC,sFAAsF;AACtF,eAAO,MAAM,cAAc,KAAK,CAAA;AAEhC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAIzF,8EAA8E;AAC9E,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;AAI7D;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAKjG,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,SAAS,+BAA+B,CAAA;AAErD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,EAAE,CAE7E;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,IAAI,EAAE,YAAY,GACjB;IAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAIhE;AAED,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAA;IAChB,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,CAiB3E;AAID,8FAA8F;AAC9F,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAEhD,MAAM,WAAW,UAAU;IACzB,qHAAqH;IACrH,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IACjC,6GAA6G;IAC7G,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,sBAAsB;IACtB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAMD,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,UAAQ,GAAG,MAAM,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,EAAE,OAAY,EAAE,IAAY,EAAE,KAAc,EAAE,KAAK,EAAE,IAAgB,EAAE,KAAK,EAAE,OAAe,EAAE,GAAE,UAAe,GAAG,MAAM,CAkB5I;AAID,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,CAAA;IACpD;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,0JAA0J;IAC1J,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,IAAI,IAAI,IAAI,CAAA;IACZ,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,IAAI,IAAI,CAAA;IACd,mJAAmJ;IACnJ,IAAI,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI,CAAA;IAC5C;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;IACjG,0GAA0G;IAC1G,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACrE,0GAA0G;IAC1G,aAAa,IAAI,IAAI,CAAA;IACrB,mFAAmF;IACnF,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,uEAAuE;IACvE,SAAS,IAAI,IAAI,CAAA;IACjB,uCAAuC;IACvC,OAAO,IAAI,IAAI,CAAA;CAChB;AAID;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAkB,EAAE,EAAE,cAAc,GAAG,SAAS,CAoY3G;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,CAgBzD"}
|