@weareconceptstudio/cart 0.0.1
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 +350 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useCart.d.ts +131 -0
- package/dist/hooks/useCart.d.ts.map +1 -0
- package/dist/hooks/useCart.js +291 -0
- package/dist/hooks/useCart.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/store/cartStore.d.ts +69 -0
- package/dist/store/cartStore.d.ts.map +1 -0
- package/dist/store/cartStore.js +663 -0
- package/dist/store/cartStore.js.map +1 -0
- package/dist/store/index.d.ts +5 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +5 -0
- package/dist/store/index.js.map +1 -0
- package/dist/types/index.d.ts +151 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/helpers.d.ts +48 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +103 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useCart Hook
|
|
3
|
+
* Enhanced hook for cart operations with all features from old Context implementation
|
|
4
|
+
*/
|
|
5
|
+
import { useCartStore } from '../store/cartStore';
|
|
6
|
+
import { isNumeric } from '@weareconceptstudio/core';
|
|
7
|
+
/**
|
|
8
|
+
* Main cart hook with backward compatibility
|
|
9
|
+
* Provides full API matching old Context-based cart
|
|
10
|
+
*/
|
|
11
|
+
export function useCart() {
|
|
12
|
+
const store = useCartStore();
|
|
13
|
+
const state = useCartStore.getState();
|
|
14
|
+
// Legacy toggleCartItem for backward compatibility
|
|
15
|
+
const toggleCartItem = async (params) => {
|
|
16
|
+
const { productId, qty, variantId, optionId, itemId, update } = params;
|
|
17
|
+
const { hasVariants } = store.config;
|
|
18
|
+
if (hasVariants && variantId !== undefined && optionId !== undefined) {
|
|
19
|
+
// Variant product
|
|
20
|
+
if (qty === 0) {
|
|
21
|
+
return store.removeItem({ productId, variantId, optionId });
|
|
22
|
+
}
|
|
23
|
+
// When updating an existing item with itemId, pass it along
|
|
24
|
+
return store.addItem({ productId, variantId, optionId, qty, itemId });
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Simple product
|
|
28
|
+
if (qty === 0) {
|
|
29
|
+
return store.removeItem({ productId });
|
|
30
|
+
}
|
|
31
|
+
return store.updateItem({ productId, qty, itemId });
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
// Legacy deleteCartItem
|
|
35
|
+
const deleteCartItem = async (params) => {
|
|
36
|
+
const { productId, variantId, optionId } = params;
|
|
37
|
+
const { hasVariants } = store.config;
|
|
38
|
+
if (hasVariants && variantId !== undefined && optionId !== undefined) {
|
|
39
|
+
return store.removeItem({ productId, variantId, optionId });
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return store.removeItem({ productId });
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
// Legacy editCartItem
|
|
46
|
+
const editCartItem = async (params) => {
|
|
47
|
+
const { productId, variantId, optionId, qty, oldVariant, oldOption, itemId } = params;
|
|
48
|
+
// Remove old variant if changed
|
|
49
|
+
if (oldVariant && oldOption && (variantId !== oldVariant.id || optionId !== oldOption.id)) {
|
|
50
|
+
await store.removeItem({ productId, variantId: oldVariant.id, optionId: oldOption.id });
|
|
51
|
+
}
|
|
52
|
+
// Add/update new variant
|
|
53
|
+
if (variantId && optionId) {
|
|
54
|
+
return store.addItem({ productId, variantId, optionId, qty, itemId });
|
|
55
|
+
}
|
|
56
|
+
return store.updateItem({ productId, qty, itemId });
|
|
57
|
+
};
|
|
58
|
+
// Legacy setCartState
|
|
59
|
+
const setCartState = (data) => {
|
|
60
|
+
console.warn('setCartState is deprecated, state is managed automatically');
|
|
61
|
+
};
|
|
62
|
+
// Card validation for checkout button
|
|
63
|
+
const checkoutBtnDisabled = (() => {
|
|
64
|
+
if ((store.itemsCount || 0) === 0)
|
|
65
|
+
return true;
|
|
66
|
+
const { checkoutData, user, isCheckoutPage } = store;
|
|
67
|
+
if (isCheckoutPage && isNumeric(checkoutData.paymentType)) {
|
|
68
|
+
const selectedCard = user?.cards?.find((card) => card.id === checkoutData.paymentType);
|
|
69
|
+
return selectedCard?.is_expired || false;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
})();
|
|
73
|
+
return {
|
|
74
|
+
// Cart state
|
|
75
|
+
items: store.items || [],
|
|
76
|
+
itemsCount: store.itemsCount || 0,
|
|
77
|
+
formatted_subtotal: store.formatted_subtotal || 0,
|
|
78
|
+
subtotal: store.subtotal || 0,
|
|
79
|
+
total: store.total || 0,
|
|
80
|
+
formatted_total: store.formatted_total || 0,
|
|
81
|
+
currency: store.currency || 'AMD',
|
|
82
|
+
shippingCost: store.shippingCost || '-',
|
|
83
|
+
formatted_shippingCost: store.formatted_shippingCost || '-',
|
|
84
|
+
loading: store.loading || false,
|
|
85
|
+
discount: store.discount || null,
|
|
86
|
+
formatted_discount: store.formatted_discount || null,
|
|
87
|
+
appliedPromotions: store.appliedPromotions || [],
|
|
88
|
+
remaining: state.remaining || null,
|
|
89
|
+
formatted_remaining: store.formatted_remaining || null,
|
|
90
|
+
shippingCostValue: state.shippingCostValue || null,
|
|
91
|
+
formatted_shippingCostValue: store.formatted_shippingCostValue || null,
|
|
92
|
+
shippingCityName: state.shippingCityName || null,
|
|
93
|
+
hasFreeGift: state.hasFreeGift || null,
|
|
94
|
+
giftThresholdRemaining: state.giftThresholdRemaining || null,
|
|
95
|
+
formatted_giftThresholdRemaining: state.formatted_giftThresholdRemaining || null,
|
|
96
|
+
useBalance: state.useBalance || null,
|
|
97
|
+
formatted_useBalance: store.formatted_useBalance || null,
|
|
98
|
+
promotion_code: state.promotion_code || null,
|
|
99
|
+
promotion_error: state.promotion_error || null,
|
|
100
|
+
utensils: state.utensils || [],
|
|
101
|
+
// Checkout data
|
|
102
|
+
checkoutData: store.checkoutData,
|
|
103
|
+
setCheckoutData: store.updateCheckoutData,
|
|
104
|
+
// New cart actions
|
|
105
|
+
addItem: store.addItem,
|
|
106
|
+
removeItem: store.removeItem,
|
|
107
|
+
updateItem: store.updateItem,
|
|
108
|
+
clearCart: store.clearCart,
|
|
109
|
+
getCart: store.getCart,
|
|
110
|
+
mergeCart: store.mergeCart,
|
|
111
|
+
syncCart: store.syncCart,
|
|
112
|
+
// Legacy methods
|
|
113
|
+
toggleCartItem,
|
|
114
|
+
deleteCartItem,
|
|
115
|
+
editCartItem,
|
|
116
|
+
setGifts: store.setGifts,
|
|
117
|
+
togglePromotion: store.togglePromotion,
|
|
118
|
+
fillCheckoutData: store.fillCheckoutData,
|
|
119
|
+
fillCart: store.fillCart,
|
|
120
|
+
setCartState,
|
|
121
|
+
resetCart: store.resetCart,
|
|
122
|
+
// Gifts & Promotions (direct from store)
|
|
123
|
+
// setGifts and togglePromotion are now in store
|
|
124
|
+
// Reorder
|
|
125
|
+
reorder: store.reorder,
|
|
126
|
+
// Checkout
|
|
127
|
+
updateCheckoutData: store.updateCheckoutData,
|
|
128
|
+
checkout: store.checkout,
|
|
129
|
+
handleCheckout: store.checkout,
|
|
130
|
+
// Idram payment
|
|
131
|
+
idramFormData: store.idramFormData,
|
|
132
|
+
setIdramForm: store.setIdramForm,
|
|
133
|
+
submitIdramPayment: store.submitIdramPayment,
|
|
134
|
+
// Flags
|
|
135
|
+
checkoutBtnDisabled,
|
|
136
|
+
isCheckoutPage: store.isCheckoutPage,
|
|
137
|
+
isCartPage: store.isCartPage,
|
|
138
|
+
isLoggedIn: store.isLoggedIn,
|
|
139
|
+
// Configuration
|
|
140
|
+
config: store.config,
|
|
141
|
+
// User
|
|
142
|
+
user: store.user,
|
|
143
|
+
setUser: store.setUser,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Hook for simple add to cart (without variants)
|
|
148
|
+
*/
|
|
149
|
+
export function useSimpleCart() {
|
|
150
|
+
const { addItem, removeItem, updateItem, items, itemsCount, loading } = useCart();
|
|
151
|
+
/**
|
|
152
|
+
* Add simple product (no variants)
|
|
153
|
+
*/
|
|
154
|
+
const addProduct = async (productId, qty = 1) => {
|
|
155
|
+
return addItem({ productId, qty });
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Remove simple product
|
|
159
|
+
*/
|
|
160
|
+
const removeProduct = async (productId) => {
|
|
161
|
+
return removeItem({ productId });
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Update product quantity
|
|
165
|
+
*/
|
|
166
|
+
const updateProductQty = async (productId, qty) => {
|
|
167
|
+
return updateItem({ productId, qty });
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Check if product is in cart
|
|
171
|
+
*/
|
|
172
|
+
const isInCart = (productId) => {
|
|
173
|
+
return items.some((item) => item.product.id === productId);
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Get product quantity in cart
|
|
177
|
+
*/
|
|
178
|
+
const getProductQty = (productId) => {
|
|
179
|
+
const item = items.find((item) => item.product.id === productId);
|
|
180
|
+
return item?.qty || 0;
|
|
181
|
+
};
|
|
182
|
+
return {
|
|
183
|
+
addProduct,
|
|
184
|
+
removeProduct,
|
|
185
|
+
updateProductQty,
|
|
186
|
+
isInCart,
|
|
187
|
+
getProductQty,
|
|
188
|
+
items,
|
|
189
|
+
itemsCount,
|
|
190
|
+
loading,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Hook for variant products (with color/size)
|
|
195
|
+
*/
|
|
196
|
+
export function useVariantCart() {
|
|
197
|
+
const { addItem, removeItem, updateItem, items, itemsCount, loading } = useCart();
|
|
198
|
+
/**
|
|
199
|
+
* Add variant product
|
|
200
|
+
*/
|
|
201
|
+
const addVariantProduct = async (productId, variantId, optionId, qty = 1) => {
|
|
202
|
+
return addItem({ productId, variantId, optionId, qty });
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* Remove variant product
|
|
206
|
+
*/
|
|
207
|
+
const removeVariantProduct = async (productId, variantId, optionId) => {
|
|
208
|
+
return removeItem({ productId, variantId, optionId });
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Update variant product quantity
|
|
212
|
+
*/
|
|
213
|
+
const updateVariantProductQty = async (productId, variantId, optionId, qty) => {
|
|
214
|
+
return updateItem({ productId, variantId, optionId, qty });
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Check if variant is in cart
|
|
218
|
+
*/
|
|
219
|
+
const isVariantInCart = (productId, variantId, optionId) => {
|
|
220
|
+
return items.some((item) => item.product.id === productId && item.variantId === variantId && item.optionId === optionId);
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Get variant quantity in cart
|
|
224
|
+
*/
|
|
225
|
+
const getVariantQty = (productId, variantId, optionId) => {
|
|
226
|
+
const item = items.find((item) => item.product.id === productId && item.variantId === variantId && item.optionId === optionId);
|
|
227
|
+
return item?.qty || 0;
|
|
228
|
+
};
|
|
229
|
+
return {
|
|
230
|
+
addVariantProduct,
|
|
231
|
+
removeVariantProduct,
|
|
232
|
+
updateVariantProductQty,
|
|
233
|
+
isVariantInCart,
|
|
234
|
+
getVariantQty,
|
|
235
|
+
items,
|
|
236
|
+
itemsCount,
|
|
237
|
+
loading,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Hook for checkout operations
|
|
242
|
+
*/
|
|
243
|
+
export function useCheckout() {
|
|
244
|
+
const { checkoutData, updateCheckoutData, checkout, itemsCount, total, subtotal, shippingCost, loading } = useCart();
|
|
245
|
+
/**
|
|
246
|
+
* Update address
|
|
247
|
+
*/
|
|
248
|
+
const setAddress = (addressId) => {
|
|
249
|
+
updateCheckoutData({ addressId });
|
|
250
|
+
};
|
|
251
|
+
/**
|
|
252
|
+
* Update payment method
|
|
253
|
+
*/
|
|
254
|
+
const setPaymentMethod = (paymentType, cardId) => {
|
|
255
|
+
updateCheckoutData({ paymentType, card_id: cardId || null });
|
|
256
|
+
};
|
|
257
|
+
/**
|
|
258
|
+
* Add note
|
|
259
|
+
*/
|
|
260
|
+
const setNote = (note) => {
|
|
261
|
+
updateCheckoutData({ note });
|
|
262
|
+
};
|
|
263
|
+
/**
|
|
264
|
+
* Apply promo code
|
|
265
|
+
*/
|
|
266
|
+
const applyPromoCode = (code) => {
|
|
267
|
+
updateCheckoutData({ promotion_code: code });
|
|
268
|
+
};
|
|
269
|
+
/**
|
|
270
|
+
* Check if cart is ready for checkout
|
|
271
|
+
*/
|
|
272
|
+
const isReadyForCheckout = () => {
|
|
273
|
+
return itemsCount > 0 && !loading;
|
|
274
|
+
};
|
|
275
|
+
return {
|
|
276
|
+
checkoutData,
|
|
277
|
+
updateCheckoutData,
|
|
278
|
+
checkout,
|
|
279
|
+
setAddress,
|
|
280
|
+
setPaymentMethod,
|
|
281
|
+
setNote,
|
|
282
|
+
applyPromoCode,
|
|
283
|
+
isReadyForCheckout,
|
|
284
|
+
itemsCount,
|
|
285
|
+
total,
|
|
286
|
+
subtotal,
|
|
287
|
+
shippingCost,
|
|
288
|
+
loading,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=useCart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCart.js","sourceRoot":"","sources":["../../src/hooks/useCart.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @weareconceptstudio/cart
|
|
3
|
+
* Simple Zustand-based cart management for single and variant products
|
|
4
|
+
*/
|
|
5
|
+
export { useCart, useSimpleCart, useVariantCart, useCheckout } from './hooks';
|
|
6
|
+
export { useCartStore, initCartStore } from './store';
|
|
7
|
+
export * from './types';
|
|
8
|
+
export * from './utils';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG9E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGtD,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @weareconceptstudio/cart
|
|
3
|
+
* Simple Zustand-based cart management for single and variant products
|
|
4
|
+
*/
|
|
5
|
+
// Main hooks
|
|
6
|
+
export { useCart, useSimpleCart, useVariantCart, useCheckout } from './hooks';
|
|
7
|
+
// Store
|
|
8
|
+
export { useCartStore, initCartStore } from './store';
|
|
9
|
+
// Types
|
|
10
|
+
export * from './types';
|
|
11
|
+
// Utils
|
|
12
|
+
export * from './utils';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9E,QAAQ;AACR,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEtD,QAAQ;AACR,cAAc,SAAS,CAAC;AAExB,QAAQ;AACR,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cart Store - Zustand Implementation
|
|
3
|
+
* Enhanced with all features from old Context implementation
|
|
4
|
+
*/
|
|
5
|
+
import { CartState, CartConfig, AddToCartParams, RemoveFromCartParams, UpdateCartItemParams, CheckoutData } from '../types';
|
|
6
|
+
interface CartActions {
|
|
7
|
+
addItem: (params: AddToCartParams) => Promise<void>;
|
|
8
|
+
removeItem: (params: RemoveFromCartParams) => Promise<void>;
|
|
9
|
+
updateItem: (params: UpdateCartItemParams) => Promise<void>;
|
|
10
|
+
clearCart: () => Promise<void>;
|
|
11
|
+
getCart: (params?: Record<string, any>) => Promise<void>;
|
|
12
|
+
syncCart: () => Promise<void>;
|
|
13
|
+
mergeCart: () => Promise<void>;
|
|
14
|
+
updateCheckoutData: (data: Partial<CheckoutData>) => void;
|
|
15
|
+
fillCheckoutData: (keyOrObject: keyof CheckoutData | Partial<CheckoutData>, value?: any) => void;
|
|
16
|
+
fillCart: (key: string, value: any) => void;
|
|
17
|
+
checkout: () => Promise<any>;
|
|
18
|
+
setGifts: ({ promotionId, qty, productId }: {
|
|
19
|
+
promotionId: number;
|
|
20
|
+
qty: number;
|
|
21
|
+
productId: number;
|
|
22
|
+
}) => void;
|
|
23
|
+
togglePromotion: ({ promotionId }: {
|
|
24
|
+
promotionId: number;
|
|
25
|
+
}) => void;
|
|
26
|
+
reorder: (orderId: number) => Promise<void>;
|
|
27
|
+
setIdramForm: (form: any) => void;
|
|
28
|
+
submitIdramPayment: () => void;
|
|
29
|
+
setLoading: (loading: boolean) => void;
|
|
30
|
+
resetCart: () => void;
|
|
31
|
+
setUser: (user: any) => void;
|
|
32
|
+
}
|
|
33
|
+
interface CartStore extends CartState, CartActions {
|
|
34
|
+
config: CartConfig;
|
|
35
|
+
checkoutData: CheckoutData;
|
|
36
|
+
isLoggedIn: boolean;
|
|
37
|
+
selectedLang: string;
|
|
38
|
+
user: any;
|
|
39
|
+
idramFormData: any;
|
|
40
|
+
isCheckoutPage: boolean;
|
|
41
|
+
isCartPage: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create cart store
|
|
45
|
+
*/
|
|
46
|
+
export declare const useCartStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<CartStore>, "setState" | "devtools"> & {
|
|
47
|
+
setState(partial: CartStore | Partial<CartStore> | ((state: CartStore) => CartStore | Partial<CartStore>), replace?: false, action?: string | {
|
|
48
|
+
[x: string]: unknown;
|
|
49
|
+
[x: number]: unknown;
|
|
50
|
+
[x: symbol]: unknown;
|
|
51
|
+
type: string;
|
|
52
|
+
}): void;
|
|
53
|
+
setState(state: CartStore | ((state: CartStore) => CartStore), replace: true, action?: string | {
|
|
54
|
+
[x: string]: unknown;
|
|
55
|
+
[x: number]: unknown;
|
|
56
|
+
[x: symbol]: unknown;
|
|
57
|
+
type: string;
|
|
58
|
+
}): void;
|
|
59
|
+
devtools: {
|
|
60
|
+
cleanup: () => void;
|
|
61
|
+
};
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Initialize cart store
|
|
65
|
+
* Call this once when your app starts
|
|
66
|
+
*/
|
|
67
|
+
export declare function initCartStore(config: CartConfig, isLoggedIn: boolean, selectedLang?: string, user?: any): void;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=cartStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cartStore.d.ts","sourceRoot":"","sources":["../../src/store/cartStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,SAAS,EACT,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EAIZ,MAAM,UAAU,CAAC;AAWlB,UAAU,WAAW;IAEpB,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,UAAU,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAG/B,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAG/B,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAC1D,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjG,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAG7B,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7G,eAAe,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAGpE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5C,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAG/B,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CAC7B;AAED,UAAU,SAAU,SAAQ,SAAS,EAAE,WAAW;IACjD,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,GAAG,CAAC;IACV,aAAa,EAAE,GAAG,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACpB;AA+ED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;EAujBxB,CAAC;AAkFF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAE,MAAa,EAAE,IAAI,GAAE,GAAU,QAyCnH"}
|