reflet-sdk 0.1.5 → 0.2.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.
@@ -0,0 +1,85 @@
1
+ import { t as Reflet } from "./client-BYuSKJw5.js";
2
+ import { createContext, useContext, useEffect, useMemo, useState } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/react-context.tsx
5
+ const RefletContext = createContext(null);
6
+ /**
7
+ * Provider component for Reflet SDK
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { RefletProvider } from 'reflet-sdk/react';
12
+ *
13
+ * function App() {
14
+ * return (
15
+ * <RefletProvider
16
+ * publicKey="fb_pub_xxx"
17
+ * user={{ id: 'user_123', email: 'user@example.com', name: 'John' }}
18
+ * >
19
+ * <YourApp />
20
+ * </RefletProvider>
21
+ * );
22
+ * }
23
+ * ```
24
+ */
25
+ function RefletProvider({ publicKey, baseUrl, user: initialUser, userToken, children }) {
26
+ const [user, setUser] = useState(initialUser);
27
+ const [isReady, setIsReady] = useState(false);
28
+ const client = useMemo(() => {
29
+ return new Reflet({
30
+ baseUrl,
31
+ publicKey,
32
+ user,
33
+ userToken
34
+ });
35
+ }, [
36
+ publicKey,
37
+ baseUrl,
38
+ user,
39
+ userToken
40
+ ]);
41
+ useEffect(() => {
42
+ if (userToken) client.setUserToken(userToken);
43
+ else client.setUser(user);
44
+ }, [
45
+ client,
46
+ user,
47
+ userToken
48
+ ]);
49
+ useEffect(() => {
50
+ setIsReady(true);
51
+ }, []);
52
+ const value = useMemo(() => ({
53
+ baseUrl,
54
+ client,
55
+ isReady,
56
+ publicKey,
57
+ setUser,
58
+ user,
59
+ userToken
60
+ }), [
61
+ client,
62
+ publicKey,
63
+ baseUrl,
64
+ isReady,
65
+ user,
66
+ userToken
67
+ ]);
68
+ return /* @__PURE__ */ jsx(RefletContext.Provider, {
69
+ value,
70
+ children
71
+ });
72
+ }
73
+ function useRefletContext() {
74
+ const context = useContext(RefletContext);
75
+ if (!context) throw new Error("useRefletContext must be used within a RefletProvider");
76
+ return context;
77
+ }
78
+ function useRefletClient() {
79
+ const { client } = useRefletContext();
80
+ return client;
81
+ }
82
+ //#endregion
83
+ export { useRefletContext as i, RefletProvider as n, useRefletClient as r, RefletContext as t };
84
+
85
+ //# sourceMappingURL=react-context-DZw_HHjj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-context-DZw_HHjj.js","names":[],"sources":["../src/react-context.tsx"],"sourcesContent":["import {\n createContext,\n type ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { Reflet } from \"./client\";\nimport type { RefletConfig, RefletUser } from \"./types\";\n\n// ============================================\n// Context Types\n// ============================================\n\nexport interface RefletContextValue {\n baseUrl?: string;\n client: Reflet;\n isReady: boolean;\n publicKey: string;\n setUser: (user: RefletUser | undefined) => void;\n user: RefletUser | undefined;\n userToken: string | undefined;\n}\n\n// ============================================\n// Context\n// ============================================\n\nexport const RefletContext = createContext<RefletContextValue | null>(null);\n\n// ============================================\n// Provider\n// ============================================\n\nexport interface RefletProviderProps {\n /** API base URL (optional, defaults to Reflet production API) */\n baseUrl?: string;\n /** Children */\n children: ReactNode;\n /** Your organization's public API key */\n publicKey: string;\n /** Initial user identification */\n user?: RefletUser;\n /** Pre-signed user token (alternative to user) */\n userToken?: string;\n}\n\n/**\n * Provider component for Reflet SDK\n *\n * @example\n * ```tsx\n * import { RefletProvider } from 'reflet-sdk/react';\n *\n * function App() {\n * return (\n * <RefletProvider\n * publicKey=\"fb_pub_xxx\"\n * user={{ id: 'user_123', email: 'user@example.com', name: 'John' }}\n * >\n * <YourApp />\n * </RefletProvider>\n * );\n * }\n * ```\n */\nexport function RefletProvider({\n publicKey,\n baseUrl,\n user: initialUser,\n userToken,\n children,\n}: RefletProviderProps) {\n const [user, setUser] = useState<RefletUser | undefined>(initialUser);\n const [isReady, setIsReady] = useState(false);\n\n const client = useMemo(() => {\n const config: RefletConfig = {\n baseUrl,\n publicKey,\n user,\n userToken,\n };\n return new Reflet(config);\n }, [publicKey, baseUrl, user, userToken]);\n\n // Update client when user changes\n useEffect(() => {\n if (userToken) {\n client.setUserToken(userToken);\n } else {\n client.setUser(user);\n }\n }, [client, user, userToken]);\n\n // Mark as ready after mount\n useEffect(() => {\n setIsReady(true);\n }, []);\n\n const value = useMemo(\n () => ({\n baseUrl,\n client,\n isReady,\n publicKey,\n setUser,\n user,\n userToken,\n }),\n [client, publicKey, baseUrl, isReady, user, userToken]\n );\n\n return (\n <RefletContext.Provider value={value}>{children}</RefletContext.Provider>\n );\n}\n\n// ============================================\n// Hook to access context\n// ============================================\n\nexport function useRefletContext(): RefletContextValue {\n const context = useContext(RefletContext);\n if (!context) {\n throw new Error(\"useRefletContext must be used within a RefletProvider\");\n }\n return context;\n}\n\nexport function useRefletClient(): Reflet {\n const { client } = useRefletContext();\n return client;\n}\n"],"mappings":";;;;AA6BA,MAAa,gBAAgB,cAAyC,IAAI;;;;;;;;;;;;;;;;;;;;AAsC1E,SAAgB,eAAe,EAC7B,WACA,SACA,MAAM,aACN,WACA,YACsB;CACtB,MAAM,CAAC,MAAM,WAAW,SAAiC,WAAW;CACpE,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAE5C,MAAM,SAAS,cAAc;EAO3B,OAAO,IAAI,OAAO;GALhB;GACA;GACA;GACA;EAEqB,CAAC;CAC1B,GAAG;EAAC;EAAW;EAAS;EAAM;CAAS,CAAC;CAGxC,gBAAgB;EACd,IAAI,WACF,OAAO,aAAa,SAAS;OAE7B,OAAO,QAAQ,IAAI;CAEvB,GAAG;EAAC;EAAQ;EAAM;CAAS,CAAC;CAG5B,gBAAgB;EACd,WAAW,IAAI;CACjB,GAAG,CAAC,CAAC;CAEL,MAAM,QAAQ,eACL;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EAAC;EAAQ;EAAW;EAAS;EAAS;EAAM;CAAS,CACvD;CAEA,OACE,oBAAC,cAAc,UAAf;EAA+B;EAAQ;CAAiC,CAAA;AAE5E;AAMA,SAAgB,mBAAuC;CACrD,MAAM,UAAU,WAAW,aAAa;CACxC,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,uDAAuD;CAEzE,OAAO;AACT;AAEA,SAAgB,kBAA0B;CACxC,MAAM,EAAE,WAAW,iBAAiB;CACpC,OAAO;AACT"}
package/dist/react.d.ts CHANGED
@@ -1,25 +1,72 @@
1
- import { RefletUser, Reflet, FeedbackListParams, AddCommentParams, ChangelogEntry, Comment, CreateFeedbackParams, FeedbackDetail, FeedbackItem, OrganizationConfig, Roadmap } from './index.js';
2
- export { FeedbackStatus, FeedbackTag, OrganizationSettings, OrganizationStatus, RefletConfig, RoadmapItem, RoadmapLane } from './index.js';
3
- import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import { ReactNode } from 'react';
5
-
1
+ import { D as RoadmapItem, E as Roadmap, O as RoadmapLane, _ as OrganizationConfig, d as FeedbackDetail, f as FeedbackItem, g as FeedbackTag, h as FeedbackStatus, i as Comment, o as CreateFeedbackParams, p as FeedbackListParams, r as ChangelogEntry, s as CreateFeedbackResponse, t as AddCommentParams, v as OrganizationSettings, w as RefletUser, x as RefletConfig, y as OrganizationStatus } from "./types-xyOadyfX.js";
2
+ import { t as Reflet } from "./client-Bi-GlSii.js";
3
+ import { ReactNode } from "react";
4
+ //#region src/react-changelog-widget.d.ts
5
+ interface ChangelogWidgetProps {
6
+ autoOpenForNew?: boolean;
7
+ locale?: string;
8
+ maxEntries?: number;
9
+ mode?: "card" | "popup" | "trigger";
10
+ onClose?: () => void;
11
+ onEntryClick?: (entry: ChangelogEntry) => void;
12
+ onOpen?: () => void;
13
+ position?: "bottom-right" | "bottom-left";
14
+ primaryColor?: string;
15
+ publicKey: string;
16
+ theme?: "light" | "dark" | "auto";
17
+ triggerSelector?: string;
18
+ }
19
+ interface WidgetInstance {
20
+ close: () => void;
21
+ destroy: () => void;
22
+ getUnreadCount: () => number;
23
+ init: () => Promise<void>;
24
+ markAsRead: () => void;
25
+ open: () => void;
26
+ }
27
+ declare global {
28
+ interface Window {
29
+ RefletChangelogWidget?: new (config: ChangelogWidgetProps) => WidgetInstance;
30
+ }
31
+ }
32
+ /**
33
+ * React component that wraps the Reflet Changelog Widget.
34
+ *
35
+ * Dynamically loads and initializes a RefletChangelogWidget instance.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * import { ChangelogWidget } from 'reflet-sdk/react';
40
+ *
41
+ * export function MyApp() {
42
+ * return <ChangelogWidget publicKey="fb_pub_xxx" mode="card" theme="auto" />;
43
+ * }
44
+ * ```
45
+ */
46
+ declare function ChangelogWidget({ publicKey, mode, position, theme, primaryColor, maxEntries, triggerSelector, autoOpenForNew, locale, onOpen, onClose, onEntryClick }: ChangelogWidgetProps): null;
47
+ //#endregion
48
+ //#region src/react-context.d.ts
6
49
  interface RefletContextValue {
7
- client: Reflet;
8
- isReady: boolean;
9
- user: RefletUser | undefined;
10
- setUser: (user: RefletUser | undefined) => void;
50
+ baseUrl?: string;
51
+ client: Reflet;
52
+ isReady: boolean;
53
+ publicKey: string;
54
+ setUser: (user: RefletUser | undefined) => void;
55
+ user: RefletUser | undefined;
56
+ userToken: string | undefined;
11
57
  }
58
+ declare const RefletContext: import("react").Context<RefletContextValue | null>;
12
59
  interface RefletProviderProps {
13
- /** Your organization's public API key */
14
- publicKey: string;
15
- /** API base URL (optional, defaults to Reflet production API) */
16
- baseUrl?: string;
17
- /** Initial user identification */
18
- user?: RefletUser;
19
- /** Pre-signed user token (alternative to user) */
20
- userToken?: string;
21
- /** Children */
22
- children: ReactNode;
60
+ /** API base URL (optional, defaults to Reflet production API) */
61
+ baseUrl?: string;
62
+ /** Children */
63
+ children: ReactNode;
64
+ /** Your organization's public API key */
65
+ publicKey: string;
66
+ /** Initial user identification */
67
+ user?: RefletUser;
68
+ /** Pre-signed user token (alternative to user) */
69
+ userToken?: string;
23
70
  }
24
71
  /**
25
72
  * Provider component for Reflet SDK
@@ -40,65 +87,117 @@ interface RefletProviderProps {
40
87
  * }
41
88
  * ```
42
89
  */
43
- declare function RefletProvider({ publicKey, baseUrl, user: initialUser, userToken, children, }: RefletProviderProps): react_jsx_runtime.JSX.Element;
90
+ declare function RefletProvider({ publicKey, baseUrl, user: initialUser, userToken, children }: RefletProviderProps): import("react").JSX.Element;
44
91
  declare function useRefletContext(): RefletContextValue;
45
92
  declare function useRefletClient(): Reflet;
46
-
93
+ //#endregion
94
+ //#region src/react-feedback-dialog-types.d.ts
95
+ type FeedbackCategory = "feature" | "bug" | "question";
96
+ interface FeedbackDialogLabels {
97
+ cancel?: string;
98
+ categoryBug?: string;
99
+ categoryFeature?: string;
100
+ categoryQuestion?: string;
101
+ descriptionPlaceholder?: string;
102
+ emailLabel?: string;
103
+ emailPlaceholder?: string;
104
+ required?: string;
105
+ submit?: string;
106
+ successMessage?: string;
107
+ successTitle?: string;
108
+ title?: string;
109
+ titlePlaceholder?: string;
110
+ }
111
+ interface FeedbackDialogProps {
112
+ /** API base URL override */
113
+ baseUrl?: string;
114
+ /** Categories to show (default: all three) */
115
+ categories?: FeedbackCategory[];
116
+ /** Default selected category */
117
+ defaultCategory?: FeedbackCategory;
118
+ /** Custom labels / i18n */
119
+ labels?: FeedbackDialogLabels;
120
+ /** Called when dialog closes */
121
+ onClose?: () => void;
122
+ /** Called when dialog opens */
123
+ onOpen?: () => void;
124
+ /** Callback when open state changes */
125
+ onOpenChange: (open: boolean) => void;
126
+ /** Called after successful submission */
127
+ onSubmit?: (result: CreateFeedbackResponse) => void;
128
+ /** Whether the dialog is open */
129
+ open: boolean;
130
+ /** Primary brand color (CSS value) */
131
+ primaryColor?: string;
132
+ /** Public API key (falls back to RefletProvider context) */
133
+ publicKey?: string;
134
+ /** Color theme */
135
+ theme?: "light" | "dark" | "auto";
136
+ /** User identification (falls back to RefletProvider context) */
137
+ user?: RefletUser;
138
+ /** Pre-signed user token */
139
+ userToken?: string;
140
+ }
141
+ //#endregion
142
+ //#region src/react-feedback-dialog.d.ts
143
+ declare function FeedbackDialog({ open, onOpenChange, publicKey, baseUrl, user, userToken, theme, primaryColor, defaultCategory, categories, labels: labelsProp, onSubmit, onOpen, onClose }: FeedbackDialogProps): import("react").JSX.Element | null;
144
+ //#endregion
145
+ //#region src/react-feedback-button.d.ts
146
+ interface FeedbackButtonProps {
147
+ /**
148
+ * Render as child element instead of the default button.
149
+ * When true, the first child element receives the onClick handler.
150
+ */
151
+ asChild?: boolean;
152
+ /** API base URL override */
153
+ baseUrl?: string;
154
+ /** Categories to show */
155
+ categories?: FeedbackCategory[];
156
+ /** Custom trigger content or element (used with asChild) */
157
+ children?: ReactNode;
158
+ /** Custom CSS class for the default trigger button */
159
+ className?: string;
160
+ /** Default selected category */
161
+ defaultCategory?: FeedbackCategory;
162
+ /** Custom labels / i18n */
163
+ labels?: FeedbackDialogLabels & {
164
+ trigger?: string;
165
+ };
166
+ /** Called when dialog closes */
167
+ onClose?: () => void;
168
+ /** Called when dialog opens */
169
+ onOpen?: () => void;
170
+ /** Called after successful submission */
171
+ onSubmit?: (result: CreateFeedbackResponse) => void;
172
+ /** Primary brand color (CSS value) */
173
+ primaryColor?: string;
174
+ /** Public API key (falls back to RefletProvider context) */
175
+ publicKey?: string;
176
+ /** Color theme */
177
+ theme?: "light" | "dark" | "auto";
178
+ /** User identification (falls back to RefletProvider context) */
179
+ user?: RefletUser;
180
+ /** Pre-signed user token */
181
+ userToken?: string;
182
+ }
183
+ declare function FeedbackButton({ publicKey, baseUrl, user, userToken, theme, primaryColor, defaultCategory, categories, labels, onSubmit, onOpen, onClose, className, asChild, children }: FeedbackButtonProps): import("react").JSX.Element;
184
+ //#endregion
185
+ //#region src/react-hooks-types.d.ts
47
186
  interface UseQueryResult<T> {
48
- data: T | undefined;
49
- isLoading: boolean;
50
- error: Error | null;
51
- refetch: () => Promise<void>;
187
+ data: T | undefined;
188
+ error: Error | null;
189
+ isLoading: boolean;
190
+ refetch: () => Promise<void>;
52
191
  }
53
192
  interface UseMutationResult<TData, TVariables> {
54
- mutate: (variables: TVariables) => Promise<TData>;
55
- isLoading: boolean;
56
- error: Error | null;
57
- data: TData | undefined;
58
- reset: () => void;
193
+ data: TData | undefined;
194
+ error: Error | null;
195
+ isLoading: boolean;
196
+ mutate: (variables: TVariables) => Promise<TData>;
197
+ reset: () => void;
59
198
  }
60
- /**
61
- * Hook to fetch organization configuration
62
- */
63
- declare function useOrganizationConfig(): UseQueryResult<OrganizationConfig>;
64
- interface UseFeedbackListOptions extends FeedbackListParams {
65
- /** Auto-fetch on mount */
66
- enabled?: boolean;
67
- }
68
- /**
69
- * Hook to fetch feedback list with filtering
70
- *
71
- * @example
72
- * ```tsx
73
- * const { data, isLoading } = useFeedbackList({ status: 'open', sortBy: 'votes' });
74
- * ```
75
- */
76
- declare function useFeedbackList(options?: UseFeedbackListOptions): UseQueryResult<{
77
- items: FeedbackItem[];
78
- total: number;
79
- hasMore: boolean;
80
- }>;
81
- /**
82
- * Hook to fetch a single feedback item
83
- *
84
- * @example
85
- * ```tsx
86
- * const { data: feedback, isLoading } = useFeedback('feedback_id');
87
- * ```
88
- */
89
- declare function useFeedback(feedbackId: string | undefined): UseQueryResult<FeedbackDetail>;
90
- /**
91
- * Hook to fetch comments for a feedback item
92
- */
93
- declare function useComments(feedbackId: string | undefined, sortBy?: "newest" | "oldest"): UseQueryResult<Comment[]>;
94
- /**
95
- * Hook to fetch roadmap data
96
- */
97
- declare function useRoadmap(): UseQueryResult<Roadmap>;
98
- /**
99
- * Hook to fetch changelog entries
100
- */
101
- declare function useChangelog(limit?: number): UseQueryResult<ChangelogEntry[]>;
199
+ //#endregion
200
+ //#region src/react-mutation-hooks.d.ts
102
201
  /**
103
202
  * Hook to create new feedback
104
203
  *
@@ -113,8 +212,8 @@ declare function useChangelog(limit?: number): UseQueryResult<ChangelogEntry[]>;
113
212
  * ```
114
213
  */
115
214
  declare function useCreateFeedback(): UseMutationResult<{
116
- feedbackId: string;
117
- isApproved: boolean;
215
+ feedbackId: string;
216
+ isApproved: boolean;
118
217
  }, CreateFeedbackParams>;
119
218
  /**
120
219
  * Hook to vote on feedback
@@ -129,30 +228,50 @@ declare function useCreateFeedback(): UseMutationResult<{
129
228
  * ```
130
229
  */
131
230
  declare function useVote(): UseMutationResult<{
132
- voted: boolean;
133
- voteCount: number;
231
+ voted: boolean;
232
+ voteCount: number;
134
233
  }, {
135
- feedbackId: string;
136
- type?: "upvote" | "downvote";
234
+ feedbackId: string;
235
+ type?: "upvote" | "downvote";
137
236
  }>;
138
237
  /**
139
238
  * Hook to add a comment
140
239
  */
141
240
  declare function useAddComment(): UseMutationResult<{
142
- commentId: string;
241
+ commentId: string;
143
242
  }, AddCommentParams>;
144
243
  /**
145
244
  * Hook to subscribe/unsubscribe to feedback
146
245
  */
147
246
  declare function useSubscription(): {
148
- subscribe: (feedbackId: string) => Promise<{
149
- subscribed: boolean;
150
- }>;
151
- unsubscribe: (feedbackId: string) => Promise<{
152
- unsubscribed: boolean;
153
- }>;
154
- isLoading: boolean;
155
- error: Error | null;
247
+ subscribe: (feedbackId: string) => Promise<{
248
+ subscribed: boolean;
249
+ }>;
250
+ unsubscribe: (feedbackId: string) => Promise<{
251
+ unsubscribed: boolean;
252
+ }>;
253
+ isLoading: boolean;
254
+ error: Error | null;
255
+ };
256
+ //#endregion
257
+ //#region src/react-query-hooks.d.ts
258
+ declare function useOrganizationConfig(): UseQueryResult<OrganizationConfig>;
259
+ interface UseFeedbackListOptions extends FeedbackListParams {
260
+ enabled?: boolean;
261
+ }
262
+ declare function useFeedbackList(options?: UseFeedbackListOptions): UseQueryResult<{
263
+ items: FeedbackItem[];
264
+ total: number;
265
+ hasMore: boolean;
266
+ }>;
267
+ declare function useFeedback(feedbackId: string | undefined): UseQueryResult<FeedbackDetail>;
268
+ declare function useComments(feedbackId: string | undefined, sortBy?: "newest" | "oldest"): UseQueryResult<Comment[]>;
269
+ declare function useRoadmap(): UseQueryResult<Roadmap>;
270
+ declare function useChangelog(limit?: number): UseQueryResult<ChangelogEntry[]>;
271
+ declare function useUnreadChangelogCount(publicKey: string): {
272
+ unreadCount: number;
273
+ markAsRead: () => void;
156
274
  };
157
-
158
- export { AddCommentParams, ChangelogEntry, Comment, CreateFeedbackParams, FeedbackDetail, FeedbackItem, FeedbackListParams, OrganizationConfig, Reflet, RefletProvider, type RefletProviderProps, RefletUser, Roadmap, type UseFeedbackListOptions, useAddComment, useChangelog, useComments, useCreateFeedback, useFeedback, useFeedbackList, useOrganizationConfig, useRefletClient, useRefletContext, useRoadmap, useSubscription, useVote };
275
+ //#endregion
276
+ export { type AddCommentParams, type ChangelogEntry, ChangelogWidget, type Comment, type CreateFeedbackParams, FeedbackButton, type FeedbackButtonProps, type FeedbackCategory, type FeedbackDetail, FeedbackDialog, type FeedbackDialogLabels, type FeedbackDialogProps, type FeedbackItem, type FeedbackListParams, type FeedbackStatus, type FeedbackTag, type OrganizationConfig, type OrganizationSettings, type OrganizationStatus, Reflet, type RefletConfig, RefletContext, type RefletContextValue, RefletProvider, type RefletProviderProps, type RefletUser, type Roadmap, type RoadmapItem, type RoadmapLane, type UseFeedbackListOptions, useAddComment, useChangelog, useComments, useCreateFeedback, useFeedback, useFeedbackList, useOrganizationConfig, useRefletClient, useRefletContext, useRoadmap, useSubscription, useUnreadChangelogCount, useVote };
277
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","names":[],"sources":["../src/react-changelog-widget.tsx","../src/react-context.tsx","../src/react-feedback-dialog-types.ts","../src/react-feedback-dialog.tsx","../src/react-feedback-button.tsx","../src/react-hooks-types.ts","../src/react-mutation-hooks.ts","../src/react-query-hooks.ts"],"mappings":";;;;UAGU;EACR;EACA;EACA;EACA;EACA;EACA,gBAAgB,OAAO;EACvB;EACA;EACA;EACA;EACA;EACA;;UAGQ;EACR;EACA;EACA;EACA,YAAY;EACZ;EACA;;QAGM;YACI;IACR,6BACE,QAAQ,yBACL;;;;;;;;;;;;;;;;;iBAkBO,kBACd,WACA,MACA,UACA,OACA,cACA,YACA,iBACA,gBACA,QACA,QACA,SACA,gBACC;;;UC/Cc;EACf;EACA,QAAQ;EACR;EACA;EACA,UAAU,MAAM;EAChB,MAAM;EACN;;cAOW,+BAAa,QAAA;UAMT;;EAEf;;EAEA,UAAU;;EAEV;;EAEA,OAAO;;EAEP;;;;;;;;;;;;;;;;;;;;;iBAsBc,iBACd,WACA,SACA,MAAM,aACN,WACA,YACC,sCAAmB,IAAA;iBAkDN,oBAAoB;iBAQpB,mBAAmB;;;KCjIvB;UAEK;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;;EAEf;;EAEA,aAAa;;EAEb,kBAAkB;;EAElB,SAAS;;EAET;;EAEA;;EAEA,eAAe;;EAEf,YAAY,QAAQ;;EAEpB;;EAEA;;EAEA;;EAEA;;EAEA,OAAO;;EAEP;;;;iBCnCc,iBACd,MACA,cACA,WACA,SACA,MACA,WACA,OACA,cACA,iBACA,YACA,QAAQ,YACR,UACA,QACA,WACC,sCAAmB,IAAA;;;UCRL;;;;;EAKf;;EAEA;;EAEA,aAAa;;EAEb,WAAW;;EAEX;;EAEA,kBAAkB;;EAElB,SAAS;IAAyB;;;EAElC;;EAEA;;EAEA,YAAY,QAAQ;;EAEpB;;EAEA;;EAEA;;EAEA,OAAO;;EAEP;;iBA6Bc,iBACd,WACA,SACA,MACA,WACA,OACA,cACA,iBACA,YACA,QACA,UACA,QACA,SACA,WACA,SACA,YACC,sCAAmB,IAAA;;;UClGL,eAAe;EAC9B,MAAM;EACN,OAAO;EACP;EACA,eAAe;;UAGA,kBAAkB,OAAO;EACxC,MAAM;EACN,OAAO;EACP;EACA,SAAS,WAAW,eAAe,QAAQ;EAC3C;;;;;;;;;;;;;;;;;iBCiDc,qBAAqB;EACjC;EAAoB;GACtB;;;;;;;;;;;;;iBA0Bc,WAAW;EACvB;EAAgB;;EAChB;EAAoB;;;;;iBAuBR,iBAAiB;EAC7B;GACF;;;;iBAiBc;EACd,YAAY,uBAAuB;IAAU;;EAC7C,cAAc,uBAAuB;IAAU;;EAC/C;EACA,OAAO;;;;iBCtFO,yBAAyB,eAAe;UAUvC,+BAA+B;EAC9C;;iBAGc,gBACd,UAAS,yBACR;EAAiB,OAAO;EAAgB;EAAe;;iBAyB1C,YACd,iCACC,eAAe;iBAiBF,YACd,gCACA,+BACC,eAAe;iBAiBF,cAAc,eAAe;iBAU7B,aAAa,iBAAiB,eAAe;iBAe7C,wBAAwB;EACtC;EACA"}