@tamagui/create-menu 2.6.3 → 2.7.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/cjs/createNativeMenu/createNativeMenu.cjs +49 -31
- package/dist/cjs/createNativeMenu/createNativeMenu.native.js +49 -31
- package/dist/cjs/createNativeMenu/createNativeMenu.native.js.map +1 -1
- package/dist/esm/createNativeMenu/createNativeMenu.mjs +50 -32
- package/dist/esm/createNativeMenu/createNativeMenu.mjs.map +1 -1
- package/dist/esm/createNativeMenu/createNativeMenu.native.js +50 -32
- package/dist/esm/createNativeMenu/createNativeMenu.native.js.map +1 -1
- package/dist/jsx/createNativeMenu/createNativeMenu.mjs +50 -32
- package/dist/jsx/createNativeMenu/createNativeMenu.mjs.map +1 -1
- package/dist/jsx/createNativeMenu/createNativeMenu.native.js +49 -31
- package/dist/jsx/createNativeMenu/createNativeMenu.native.js.map +1 -1
- package/package.json +21 -21
- package/src/createNativeMenu/createNativeMenu.tsx +128 -61
- package/types/createNativeMenu/createNativeMenu.d.ts +1 -1
- package/types/createNativeMenu/createNativeMenu.d.ts.map +1 -1
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* createNativeMenu - native menu implementation for React Native
|
|
3
3
|
*
|
|
4
4
|
* Web: returns empty stub components (withNativeMenu uses the web components instead)
|
|
5
|
-
* Native: lazily resolves
|
|
5
|
+
* Native: lazily resolves the registered adapter at render time.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
|
-
|
|
9
|
+
getNativeMenuAdapter,
|
|
10
10
|
NativeMenuContext,
|
|
11
11
|
unstable_claimExternalPressOwnership,
|
|
12
12
|
unstable_releaseExternalPressOwnership,
|
|
@@ -36,8 +36,8 @@ import type {
|
|
|
36
36
|
MenuTriggerProps,
|
|
37
37
|
} from './createNativeMenuTypes'
|
|
38
38
|
|
|
39
|
-
//
|
|
40
|
-
type
|
|
39
|
+
// native menu modules share this compound-component shape
|
|
40
|
+
type NativeMenuModule = {
|
|
41
41
|
Root: FC<Record<string, unknown>>
|
|
42
42
|
Trigger: FC<MenuTriggerProps>
|
|
43
43
|
Content: FC<NativeMenuContentProps>
|
|
@@ -65,7 +65,17 @@ type MappedComponentType =
|
|
|
65
65
|
| 'Content'
|
|
66
66
|
| 'Sub'
|
|
67
67
|
| 'Group'
|
|
68
|
+
| 'Item'
|
|
69
|
+
| 'ItemTitle'
|
|
70
|
+
| 'ItemSubtitle'
|
|
71
|
+
| 'ItemIcon'
|
|
72
|
+
| 'ItemImage'
|
|
73
|
+
| 'ItemIndicator'
|
|
74
|
+
| 'Label'
|
|
75
|
+
| 'Separator'
|
|
68
76
|
| 'CheckboxItem'
|
|
77
|
+
| 'Preview'
|
|
78
|
+
| 'Auxiliary'
|
|
69
79
|
|
|
70
80
|
const MAPPED_TYPES: MappedComponentType[] = [
|
|
71
81
|
'SubContent',
|
|
@@ -73,16 +83,30 @@ const MAPPED_TYPES: MappedComponentType[] = [
|
|
|
73
83
|
'Content',
|
|
74
84
|
'Sub',
|
|
75
85
|
'Group',
|
|
86
|
+
'Item',
|
|
87
|
+
'ItemTitle',
|
|
88
|
+
'ItemSubtitle',
|
|
89
|
+
'ItemIcon',
|
|
90
|
+
'ItemImage',
|
|
91
|
+
'ItemIndicator',
|
|
92
|
+
'Label',
|
|
93
|
+
'Separator',
|
|
76
94
|
'CheckboxItem',
|
|
95
|
+
'Preview',
|
|
96
|
+
'Auxiliary',
|
|
77
97
|
]
|
|
78
98
|
|
|
79
99
|
// types whose children get recursively transformed
|
|
80
|
-
const CONTAINER_TYPES: MappedComponentType[] = [
|
|
100
|
+
const CONTAINER_TYPES: MappedComponentType[] = [
|
|
101
|
+
'SubContent',
|
|
102
|
+
'SubTrigger',
|
|
103
|
+
'Content',
|
|
104
|
+
'Sub',
|
|
105
|
+
'Group',
|
|
106
|
+
'Item',
|
|
107
|
+
]
|
|
81
108
|
|
|
82
|
-
type ComponentMap = Pick<
|
|
83
|
-
ZeegoMenuModule,
|
|
84
|
-
'SubContent' | 'Content' | 'Sub' | 'Group' | 'SubTrigger'
|
|
85
|
-
>
|
|
109
|
+
type ComponentMap = Pick<NativeMenuModule, MappedComponentType>
|
|
86
110
|
|
|
87
111
|
type TriggerPressBoundaryHandlers = {
|
|
88
112
|
claim(debugName?: string | null): void
|
|
@@ -119,7 +143,12 @@ export type NativeMenuComponents = {
|
|
|
119
143
|
|
|
120
144
|
function getComponentType(displayName: string): MappedComponentType | null {
|
|
121
145
|
for (const type of MAPPED_TYPES) {
|
|
122
|
-
if (
|
|
146
|
+
if (
|
|
147
|
+
displayName === type ||
|
|
148
|
+
displayName === `Menu${type}` ||
|
|
149
|
+
displayName === `ContextMenu${type}` ||
|
|
150
|
+
displayName.includes(`(${type})`)
|
|
151
|
+
) {
|
|
123
152
|
return type
|
|
124
153
|
}
|
|
125
154
|
}
|
|
@@ -164,7 +193,7 @@ function getTriggerDebugName(
|
|
|
164
193
|
return [prefix, detail].filter(Boolean).join(':') || prefix
|
|
165
194
|
}
|
|
166
195
|
|
|
167
|
-
//
|
|
196
|
+
// web never renders these stubs, but withNativeMenu requires their component shape
|
|
168
197
|
const emptyStub = (() => null) as FC<any>
|
|
169
198
|
|
|
170
199
|
function createWebStubs(): NativeMenuComponents {
|
|
@@ -203,39 +232,48 @@ export const createNativeMenu = (
|
|
|
203
232
|
}
|
|
204
233
|
|
|
205
234
|
// ===========================================
|
|
206
|
-
// native implementation
|
|
235
|
+
// native implementation lazily resolves the registered adapter
|
|
207
236
|
// ===========================================
|
|
208
237
|
|
|
209
238
|
const isContextMenu = MenuType === 'ContextMenu'
|
|
210
239
|
const isAndroid = !isIos && !isWeb
|
|
211
240
|
|
|
212
241
|
// cached after first successful resolve
|
|
213
|
-
let resolved: { menu:
|
|
242
|
+
let resolved: { menu: NativeMenuModule; componentMap: ComponentMap } | null = null
|
|
214
243
|
let warned = false
|
|
215
244
|
|
|
216
245
|
function resolve(): typeof resolved {
|
|
217
246
|
if (resolved) return resolved
|
|
218
|
-
const
|
|
219
|
-
if (!
|
|
247
|
+
const adapter = getNativeMenuAdapter()
|
|
248
|
+
if (!adapter) {
|
|
220
249
|
if (!warned) {
|
|
221
250
|
warned = true
|
|
222
251
|
console.warn(
|
|
223
|
-
`Warning:
|
|
252
|
+
`Warning: Register a native menu adapter before rendering Tamagui native menus`
|
|
224
253
|
)
|
|
225
254
|
}
|
|
226
255
|
return null
|
|
227
256
|
}
|
|
228
|
-
const menu = (
|
|
229
|
-
isContextMenu ? zeego.state.ContextMenu : zeego.state.DropdownMenu
|
|
230
|
-
) as ZeegoMenuModule
|
|
257
|
+
const menu = (isContextMenu ? adapter.ContextMenu : adapter.Menu) as NativeMenuModule
|
|
231
258
|
resolved = {
|
|
232
259
|
menu,
|
|
233
260
|
componentMap: {
|
|
234
261
|
SubContent: menu.SubContent,
|
|
262
|
+
SubTrigger: menu.SubTrigger,
|
|
235
263
|
Content: menu.Content,
|
|
236
264
|
Sub: menu.Sub,
|
|
237
265
|
Group: menu.Group,
|
|
238
|
-
|
|
266
|
+
Item: menu.Item,
|
|
267
|
+
ItemTitle: menu.ItemTitle,
|
|
268
|
+
ItemSubtitle: menu.ItemSubtitle,
|
|
269
|
+
ItemIcon: menu.ItemIcon,
|
|
270
|
+
ItemImage: menu.ItemImage,
|
|
271
|
+
ItemIndicator: menu.ItemIndicator,
|
|
272
|
+
Label: menu.Label,
|
|
273
|
+
Separator: menu.Separator,
|
|
274
|
+
CheckboxItem: menu.CheckboxItem,
|
|
275
|
+
Preview: menu.Preview,
|
|
276
|
+
Auxiliary: menu.Auxiliary,
|
|
239
277
|
},
|
|
240
278
|
}
|
|
241
279
|
return resolved
|
|
@@ -246,9 +284,9 @@ export const createNativeMenu = (
|
|
|
246
284
|
onValueChange?: (value: string) => void
|
|
247
285
|
}
|
|
248
286
|
|
|
249
|
-
// transform children
|
|
287
|
+
// transform Tamagui menu children into the registered adapter's components
|
|
250
288
|
function transformChildren(
|
|
251
|
-
menu:
|
|
289
|
+
menu: NativeMenuModule,
|
|
252
290
|
map: ComponentMap,
|
|
253
291
|
children: React.ReactNode,
|
|
254
292
|
shouldReverseOnIos = false,
|
|
@@ -280,7 +318,7 @@ export const createNativeMenu = (
|
|
|
280
318
|
return
|
|
281
319
|
}
|
|
282
320
|
|
|
283
|
-
// flatten ScrollView
|
|
321
|
+
// flatten ScrollView so the adapter can inspect every menu item
|
|
284
322
|
if (displayName.includes('ScrollView')) {
|
|
285
323
|
const inner = transformChildren(
|
|
286
324
|
menu,
|
|
@@ -298,23 +336,30 @@ export const createNativeMenu = (
|
|
|
298
336
|
const debugName = getTriggerDebugName(MenuType, props)
|
|
299
337
|
const claim = () => triggerBoundaryHandlers?.claim(debugName)
|
|
300
338
|
const release = () => triggerBoundaryHandlers?.release(debugName)
|
|
339
|
+
const { children: triggerChildren, ...triggerProps } = props
|
|
301
340
|
|
|
302
341
|
result.push(
|
|
303
|
-
React.
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
342
|
+
React.createElement(
|
|
343
|
+
menu.Trigger,
|
|
344
|
+
{
|
|
345
|
+
...triggerProps,
|
|
346
|
+
key: child.key,
|
|
347
|
+
onTouchStart: composeHandlers(claim, props.onTouchStart),
|
|
348
|
+
onTouchEnd: composeHandlers(props.onTouchEnd, release),
|
|
349
|
+
onTouchCancel: composeHandlers(props.onTouchCancel, release),
|
|
350
|
+
onResponderGrant: composeHandlers(claim, props.onResponderGrant),
|
|
351
|
+
onResponderRelease: composeHandlers(props.onResponderRelease, release),
|
|
352
|
+
onResponderTerminate: composeHandlers(props.onResponderTerminate, release),
|
|
353
|
+
onPressIn: composeHandlers(claim, props.onPressIn),
|
|
354
|
+
onPressOut: composeHandlers(props.onPressOut, release),
|
|
355
|
+
} as any,
|
|
356
|
+
triggerChildren
|
|
357
|
+
)
|
|
313
358
|
)
|
|
314
359
|
return
|
|
315
360
|
}
|
|
316
361
|
|
|
317
|
-
// RadioGroup: render as
|
|
362
|
+
// RadioGroup: render as an adapter Group and pipe value/onValueChange
|
|
318
363
|
// down to any RadioItem descendants via radioContext
|
|
319
364
|
if (displayName.includes('RadioGroup')) {
|
|
320
365
|
const {
|
|
@@ -341,7 +386,7 @@ export const createNativeMenu = (
|
|
|
341
386
|
return
|
|
342
387
|
}
|
|
343
388
|
|
|
344
|
-
//
|
|
389
|
+
// Native adapters share a checkbox primitive, so emit a CheckboxItem whose
|
|
345
390
|
// 'on'/'off' state is derived from the enclosing RadioGroup's value.
|
|
346
391
|
if (displayName.includes('RadioItem') && radioContext) {
|
|
347
392
|
const {
|
|
@@ -366,7 +411,14 @@ export const createNativeMenu = (
|
|
|
366
411
|
value: itemValue === radioContext.value ? 'on' : 'off',
|
|
367
412
|
onValueChange: () => radioContext.onValueChange?.(itemValue),
|
|
368
413
|
} as any,
|
|
369
|
-
|
|
414
|
+
transformChildren(
|
|
415
|
+
menu,
|
|
416
|
+
map,
|
|
417
|
+
cleanChildren,
|
|
418
|
+
false,
|
|
419
|
+
triggerBoundaryHandlers,
|
|
420
|
+
radioContext
|
|
421
|
+
)
|
|
370
422
|
)
|
|
371
423
|
)
|
|
372
424
|
return
|
|
@@ -406,7 +458,14 @@ export const createNativeMenu = (
|
|
|
406
458
|
value: finalValue,
|
|
407
459
|
onValueChange: finalOnValueChange,
|
|
408
460
|
} as any,
|
|
409
|
-
|
|
461
|
+
transformChildren(
|
|
462
|
+
menu,
|
|
463
|
+
map,
|
|
464
|
+
cleanChildren,
|
|
465
|
+
false,
|
|
466
|
+
triggerBoundaryHandlers,
|
|
467
|
+
radioContext
|
|
468
|
+
)
|
|
410
469
|
)
|
|
411
470
|
)
|
|
412
471
|
return
|
|
@@ -414,18 +473,19 @@ export const createNativeMenu = (
|
|
|
414
473
|
|
|
415
474
|
if (componentType) {
|
|
416
475
|
const { children: childChildren, ...restProps } = props
|
|
417
|
-
const
|
|
476
|
+
const AdapterComponent: FC<any> = map[componentType]
|
|
477
|
+
const isContainer = CONTAINER_TYPES.includes(componentType)
|
|
418
478
|
const shouldReverse =
|
|
419
479
|
componentType === 'Content' || componentType === 'SubContent'
|
|
420
480
|
result.push(
|
|
421
481
|
React.createElement(
|
|
422
|
-
|
|
482
|
+
AdapterComponent,
|
|
423
483
|
{ ...restProps, key: child.key } as any,
|
|
424
484
|
isContainer
|
|
425
485
|
? transformChildren(
|
|
426
486
|
menu,
|
|
427
487
|
map,
|
|
428
|
-
childChildren
|
|
488
|
+
childChildren,
|
|
429
489
|
shouldReverse,
|
|
430
490
|
triggerBoundaryHandlers,
|
|
431
491
|
radioContext
|
|
@@ -436,14 +496,21 @@ export const createNativeMenu = (
|
|
|
436
496
|
return
|
|
437
497
|
}
|
|
438
498
|
|
|
439
|
-
// convert Item-like components to
|
|
499
|
+
// convert Item-like components to adapter Items
|
|
440
500
|
if (isItemLike(props, displayName)) {
|
|
441
501
|
const { children: itemChildren, ...itemProps } = props
|
|
442
502
|
result.push(
|
|
443
503
|
React.createElement(
|
|
444
504
|
menu.Item,
|
|
445
505
|
{ ...itemProps, key: child.key } as any,
|
|
446
|
-
|
|
506
|
+
transformChildren(
|
|
507
|
+
menu,
|
|
508
|
+
map,
|
|
509
|
+
itemChildren as React.ReactNode,
|
|
510
|
+
false,
|
|
511
|
+
triggerBoundaryHandlers,
|
|
512
|
+
radioContext
|
|
513
|
+
)
|
|
447
514
|
)
|
|
448
515
|
)
|
|
449
516
|
return
|
|
@@ -460,9 +527,9 @@ export const createNativeMenu = (
|
|
|
460
527
|
return result
|
|
461
528
|
}
|
|
462
529
|
|
|
463
|
-
//
|
|
464
|
-
function
|
|
465
|
-
name: keyof
|
|
530
|
+
// resolve each adapter component on its first render
|
|
531
|
+
function lazyAdapter<P extends Record<string, any>>(
|
|
532
|
+
name: keyof NativeMenuModule,
|
|
466
533
|
displayName?: string
|
|
467
534
|
): FC<P> {
|
|
468
535
|
const Comp: FC<P> = (props) => {
|
|
@@ -474,20 +541,20 @@ export const createNativeMenu = (
|
|
|
474
541
|
return Comp
|
|
475
542
|
}
|
|
476
543
|
|
|
477
|
-
const Trigger =
|
|
478
|
-
const Content =
|
|
479
|
-
const Item =
|
|
480
|
-
const ItemTitle =
|
|
481
|
-
const ItemSubtitle =
|
|
482
|
-
const ItemIcon =
|
|
483
|
-
const ItemImage =
|
|
484
|
-
const ItemIndicator =
|
|
485
|
-
const Group =
|
|
486
|
-
const Label =
|
|
487
|
-
const Separator =
|
|
488
|
-
const Sub =
|
|
489
|
-
const SubTrigger =
|
|
490
|
-
const SubContent =
|
|
544
|
+
const Trigger = lazyAdapter<MenuTriggerProps>('Trigger')
|
|
545
|
+
const Content = lazyAdapter<NativeMenuContentProps>('Content')
|
|
546
|
+
const Item = lazyAdapter<NativeMenuItemProps>('Item')
|
|
547
|
+
const ItemTitle = lazyAdapter<NativeMenuItemTitleProps>('ItemTitle')
|
|
548
|
+
const ItemSubtitle = lazyAdapter<NativeMenuItemSubtitleProps>('ItemSubtitle')
|
|
549
|
+
const ItemIcon = lazyAdapter<NativeMenuItemIconProps>('ItemIcon')
|
|
550
|
+
const ItemImage = lazyAdapter<NativeMenuItemImageProps>('ItemImage')
|
|
551
|
+
const ItemIndicator = lazyAdapter<NativeMenuItemIndicatorProps>('ItemIndicator')
|
|
552
|
+
const Group = lazyAdapter<NativeMenuGroupProps>('Group')
|
|
553
|
+
const Label = lazyAdapter<NativeMenuLabelProps>('Label')
|
|
554
|
+
const Separator = lazyAdapter<NativeMenuSeparatorProps>('Separator')
|
|
555
|
+
const Sub = lazyAdapter<NativeMenuSubProps>('Sub')
|
|
556
|
+
const SubTrigger = lazyAdapter<NativeMenuSubTriggerProps>('SubTrigger')
|
|
557
|
+
const SubContent = lazyAdapter<NativeMenuSubContentProps>('SubContent')
|
|
491
558
|
|
|
492
559
|
const Portal: FC<{ children: React.ReactNode }> = ({ children }) => <>{children}</>
|
|
493
560
|
Portal.displayName = 'Portal'
|
|
@@ -505,12 +572,12 @@ export const createNativeMenu = (
|
|
|
505
572
|
CheckboxItem.displayName = 'CheckboxItem'
|
|
506
573
|
|
|
507
574
|
const Preview: FC<ContextMenuPreviewProps> = isContextMenu
|
|
508
|
-
?
|
|
575
|
+
? lazyAdapter<ContextMenuPreviewProps>('Preview', `${MenuType}Preview`)
|
|
509
576
|
: () => null
|
|
510
577
|
Preview.displayName = `${MenuType}Preview`
|
|
511
578
|
|
|
512
579
|
const Auxiliary: FC<NativeContextMenuAuxiliaryProps> = isContextMenu
|
|
513
|
-
?
|
|
580
|
+
? lazyAdapter<NativeContextMenuAuxiliaryProps>('Auxiliary', `${MenuType}Auxiliary`)
|
|
514
581
|
: () => null
|
|
515
582
|
Auxiliary.displayName = `${MenuType}Auxiliary`
|
|
516
583
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* createNativeMenu - native menu implementation for React Native
|
|
3
3
|
*
|
|
4
4
|
* Web: returns empty stub components (withNativeMenu uses the web components instead)
|
|
5
|
-
* Native: lazily resolves
|
|
5
|
+
* Native: lazily resolves the registered adapter at render time.
|
|
6
6
|
*/
|
|
7
7
|
import type { FC } from 'react';
|
|
8
8
|
import React from 'react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNativeMenu.d.ts","sourceRoot":"","sources":["../../src/createNativeMenu/createNativeMenu.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"createNativeMenu.d.ts","sourceRoot":"","sources":["../../src/createNativeMenu/createNativeMenu.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,yBAAyB,CAAA;AA+EhC,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG;QAC1B,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAA;QAC7B,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAA;QACnC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAA;QAC7B,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAA;QACvC,YAAY,EAAE,EAAE,CAAC,2BAA2B,CAAC,CAAA;QAC7C,UAAU,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAA;QACzC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAA;QAC/B,QAAQ,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAA;QACrC,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAA;QACvC,YAAY,EAAE,EAAE,CAAC,2BAA2B,CAAC,CAAA;QAC7C,aAAa,EAAE,EAAE,CAAC,4BAA4B,CAAC,CAAA;QAC/C,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAA;QACvC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAA;QAC/B,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAA;QAC/B,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAA;QAC3B,UAAU,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAA;QACzC,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAA;QACpC,MAAM,EAAE,EAAE,CAAC;YAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;SAAE,CAAC,CAAA;QACzC,UAAU,EAAE,EAAE,CAAC;YAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;SAAE,CAAC,CAAA;QAC7C,SAAS,EAAE,EAAE,CAAC;YAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;SAAE,CAAC,CAAA;QAC5C,SAAS,EAAE,EAAE,CAAC,+BAA+B,CAAC,CAAA;KAC/C,CAAA;CACF,CAAA;AAuFD,eAAO,MAAM,gBAAgB,GAC3B,UAAU,aAAa,GAAG,MAAM,KAC/B,oBA8bF,CAAA"}
|