@univers42/ui-collection 1.0.1 → 2.0.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/README.md +130 -8
- package/dist/library/components/react/asset-picker/AssetPickerBoard.d.ts +16 -4
- package/dist/library/components/react/asset-picker/AssetPickerBoard.d.ts.map +1 -1
- package/dist/library/components/react/asset-picker/AssetPickerBoard.js +285 -68
- package/dist/library/components/react/asset-picker/AssetPickerBoard.js.map +1 -1
- package/dist/library/components/react/asset-picker/AssetRenderer.d.ts +13 -0
- package/dist/library/components/react/asset-picker/AssetRenderer.d.ts.map +1 -0
- package/dist/library/components/react/asset-picker/AssetRenderer.js +68 -0
- package/dist/library/components/react/asset-picker/AssetRenderer.js.map +1 -0
- package/dist/library/components/react/asset-picker/assetValues.d.ts +36 -0
- package/dist/library/components/react/asset-picker/assetValues.d.ts.map +1 -0
- package/dist/library/components/react/asset-picker/assetValues.js +192 -0
- package/dist/library/components/react/asset-picker/assetValues.js.map +1 -0
- package/dist/library/components/react/asset-picker/defaultTabs.d.ts +11 -1
- package/dist/library/components/react/asset-picker/defaultTabs.d.ts.map +1 -1
- package/dist/library/components/react/asset-picker/defaultTabs.js +35 -8
- package/dist/library/components/react/asset-picker/defaultTabs.js.map +1 -1
- package/dist/library/components/react/asset-picker/index.d.ts +2 -0
- package/dist/library/components/react/asset-picker/index.d.ts.map +1 -1
- package/dist/library/components/react/asset-picker/index.js +2 -0
- package/dist/library/components/react/asset-picker/index.js.map +1 -1
- package/dist/library/components/react/asset-picker/types.d.ts +35 -1
- package/dist/library/components/react/asset-picker/types.d.ts.map +1 -1
- package/dist/library/components/react/asset-picker/types.js +21 -1
- package/dist/library/components/react/asset-picker/types.js.map +1 -1
- package/dist/library/components/react/emoji-picker/EmojiPickerBoard.d.ts +6 -1
- package/dist/library/components/react/emoji-picker/EmojiPickerBoard.d.ts.map +1 -1
- package/dist/library/components/react/emoji-picker/EmojiPickerBoard.js +87 -19
- package/dist/library/components/react/emoji-picker/EmojiPickerBoard.js.map +1 -1
- package/dist/library/components/react/emoji-picker/emojiPickerData.d.ts +6 -1
- package/dist/library/components/react/emoji-picker/emojiPickerData.d.ts.map +1 -1
- package/dist/library/components/react/emoji-picker/emojiPickerData.js +110 -24
- package/dist/library/components/react/emoji-picker/emojiPickerData.js.map +1 -1
- package/dist/library/components/react/icon-picker/IconPickerBoard.d.ts +4 -1
- package/dist/library/components/react/icon-picker/IconPickerBoard.d.ts.map +1 -1
- package/dist/library/components/react/icon-picker/IconPickerBoard.js +10 -18
- package/dist/library/components/react/icon-picker/IconPickerBoard.js.map +1 -1
- package/dist/library/index.d.ts +1 -4
- package/dist/library/index.d.ts.map +1 -1
- package/dist/library/index.js +1 -2
- package/dist/library/index.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@ npm install @univers42/ui-collection react
|
|
|
19
19
|
```bash
|
|
20
20
|
npm install
|
|
21
21
|
npm run build
|
|
22
|
+
npm run release:check
|
|
22
23
|
```
|
|
23
24
|
|
|
24
25
|
## Releases and Upgrades
|
|
@@ -38,6 +39,7 @@ The repository now includes:
|
|
|
38
39
|
|
|
39
40
|
- `prepack` packaging hooks in [package.json](/home/settes/cursus/trascendence/UI-Collection/package.json)
|
|
40
41
|
- a publish workflow in [.github/workflows/publish-package.yml](/home/settes/cursus/trascendence/UI-Collection/.github/workflows/publish-package.yml)
|
|
42
|
+
- a tarball smoke test in [scripts/smoke-package.mjs](/home/settes/cursus/trascendence/UI-Collection/scripts/smoke-package.mjs)
|
|
41
43
|
- a release guide in [RELEASING.md](/home/settes/cursus/trascendence/UI-Collection/RELEASING.md)
|
|
42
44
|
|
|
43
45
|
### Using This Package in Another Repository
|
|
@@ -135,9 +137,18 @@ Legacy re-exports are still available:
|
|
|
135
137
|
```tsx
|
|
136
138
|
import {
|
|
137
139
|
AssetPickerBoard,
|
|
140
|
+
AssetRenderer,
|
|
138
141
|
ColorPickerBoard,
|
|
139
142
|
IconPickerBoard,
|
|
140
143
|
EmojiPickerBoard,
|
|
144
|
+
assetValueToBoardValue,
|
|
145
|
+
createDefaultAssetPickerTabs,
|
|
146
|
+
createEmojiPickerTab,
|
|
147
|
+
createIconPickerTab,
|
|
148
|
+
createMediaCollectionPickerTab,
|
|
149
|
+
parseAssetValue,
|
|
150
|
+
resolveAssetValue,
|
|
151
|
+
serializeAssetSelection,
|
|
141
152
|
SLASH_ITEMS,
|
|
142
153
|
SECTION_LABELS,
|
|
143
154
|
getMediaItem,
|
|
@@ -149,6 +160,7 @@ import {
|
|
|
149
160
|
DEFAULT_ASSET_PICKER_TABS,
|
|
150
161
|
DEFAULT_COLOR_PRESETS,
|
|
151
162
|
DEFAULT_ICON_PICKER_ITEMS,
|
|
163
|
+
EMOJI_PICKER_GROUPS,
|
|
152
164
|
DEFAULT_EMOJI_PICKER_ITEMS,
|
|
153
165
|
} from '@univers42/ui-collection';
|
|
154
166
|
```
|
|
@@ -161,7 +173,12 @@ import { SLASH_ITEMS } from '@univers42/ui-collection/library/catalogs';
|
|
|
161
173
|
import { IconText, IconBoard } from '@univers42/ui-collection/library/icons/react/slash-menu';
|
|
162
174
|
import {
|
|
163
175
|
AssetPickerBoard,
|
|
176
|
+
AssetRenderer,
|
|
177
|
+
assetValueToBoardValue,
|
|
164
178
|
createMediaCollectionPickerTab,
|
|
179
|
+
parseAssetValue,
|
|
180
|
+
resolveAssetValue,
|
|
181
|
+
serializeAssetSelection,
|
|
165
182
|
} from '@univers42/ui-collection/library/components/react/asset-picker';
|
|
166
183
|
import { ColorPickerBoard } from '@univers42/ui-collection/library/components/react/color-picker';
|
|
167
184
|
import { IconPickerBoard } from '@univers42/ui-collection/library/components/react/icon-picker';
|
|
@@ -193,14 +210,25 @@ The root API is intentionally small and stable. More specialized modules live un
|
|
|
193
210
|
Root exports include:
|
|
194
211
|
|
|
195
212
|
- `AssetPickerBoard`
|
|
213
|
+
- `AssetRenderer`
|
|
196
214
|
- `ColorPickerBoard`
|
|
197
215
|
- `IconPickerBoard`
|
|
198
216
|
- `EmojiPickerBoard`
|
|
199
217
|
- `DEFAULT_ASSET_PICKER_TABS`
|
|
218
|
+
- `createDefaultAssetPickerTabs`
|
|
219
|
+
- `createEmojiPickerTab`
|
|
220
|
+
- `createIconPickerTab`
|
|
221
|
+
- `createMediaCollectionPickerTab`
|
|
222
|
+
- `parseAssetValue`
|
|
223
|
+
- `resolveAssetValue`
|
|
224
|
+
- `assetValueToBoardValue`
|
|
225
|
+
- `serializeAssetSelection`
|
|
200
226
|
- `DEFAULT_COLOR_PRESETS`
|
|
201
227
|
- `DEFAULT_ICON_PICKER_ITEMS`
|
|
228
|
+
- `EMOJI_PICKER_GROUPS`
|
|
202
229
|
- `DEFAULT_EMOJI_PICKER_ITEMS`
|
|
203
230
|
- `AssetPickerBoardProps`
|
|
231
|
+
- `AssetPickerBoardAppearance`
|
|
204
232
|
- `AssetPickerBoardTab`
|
|
205
233
|
- `AssetPickerBoardItem`
|
|
206
234
|
- `AssetPickerBoardValue`
|
|
@@ -209,6 +237,7 @@ Root exports include:
|
|
|
209
237
|
- `ColorPickerPreset`
|
|
210
238
|
- `IconPickerBoardProps`
|
|
211
239
|
- `IconPickerItem`
|
|
240
|
+
- `EmojiPickerGroup`
|
|
212
241
|
- `EmojiPickerBoardProps`
|
|
213
242
|
- `EmojiPickerItem`
|
|
214
243
|
|
|
@@ -251,7 +280,8 @@ Default datasets available from the root:
|
|
|
251
280
|
- `DEFAULT_ASSET_PICKER_TABS`: default tabs for emojis, SVGs, and icons
|
|
252
281
|
- `DEFAULT_COLOR_PRESETS`: 8 presets
|
|
253
282
|
- `DEFAULT_ICON_PICKER_ITEMS`: 30 icons
|
|
254
|
-
- `
|
|
283
|
+
- `EMOJI_PICKER_GROUPS`: 9 standard-style emoji categories
|
|
284
|
+
- `DEFAULT_EMOJI_PICKER_ITEMS`: 90 emojis across smileys, people, animals, food, travel, activities, objects, symbols, and flags
|
|
255
285
|
|
|
256
286
|
#### Unified Asset Picker
|
|
257
287
|
|
|
@@ -260,20 +290,50 @@ Default datasets available from the root:
|
|
|
260
290
|
```tsx
|
|
261
291
|
import {
|
|
262
292
|
AssetPickerBoard,
|
|
263
|
-
|
|
293
|
+
assetValueToBoardValue,
|
|
294
|
+
createDefaultAssetPickerTabs,
|
|
295
|
+
serializeAssetSelection,
|
|
264
296
|
} from '@univers42/ui-collection';
|
|
265
297
|
|
|
266
298
|
export function Demo() {
|
|
299
|
+
const tabs = createDefaultAssetPickerTabs();
|
|
300
|
+
|
|
267
301
|
return (
|
|
268
302
|
<AssetPickerBoard
|
|
269
303
|
label="Block asset picker"
|
|
270
|
-
tabs={
|
|
271
|
-
|
|
304
|
+
tabs={tabs}
|
|
305
|
+
value={assetValueToBoardValue('icon:text', tabs)}
|
|
306
|
+
onChange={(selection) => {
|
|
307
|
+
console.log(selection.tab.id);
|
|
308
|
+
console.log(selection.item.value);
|
|
309
|
+
console.log(serializeAssetSelection(selection));
|
|
310
|
+
}}
|
|
272
311
|
/>
|
|
273
312
|
);
|
|
274
313
|
}
|
|
275
314
|
```
|
|
276
315
|
|
|
316
|
+
#### Canonical Asset Values
|
|
317
|
+
|
|
318
|
+
The package now emits stable values directly from the library so the consumer does not need local prefixes or wrappers:
|
|
319
|
+
|
|
320
|
+
- icons serialize as `icon:<id>`, for example `icon:text`
|
|
321
|
+
- emojis serialize as the raw glyph, for example `😀`
|
|
322
|
+
- media keeps the existing media ref contract, for example `local:/media/svg/icons/arrow-left.svg`
|
|
323
|
+
|
|
324
|
+
```tsx
|
|
325
|
+
import {
|
|
326
|
+
parseAssetValue,
|
|
327
|
+
resolveAssetValue,
|
|
328
|
+
} from '@univers42/ui-collection';
|
|
329
|
+
|
|
330
|
+
const parsed = parseAssetValue('icon:text');
|
|
331
|
+
const resolved = resolveAssetValue('icon:text');
|
|
332
|
+
|
|
333
|
+
console.log(parsed.kind); // icon
|
|
334
|
+
console.log(resolved?.label); // Text
|
|
335
|
+
```
|
|
336
|
+
|
|
277
337
|
#### Which Picker Should You Import?
|
|
278
338
|
|
|
279
339
|
Use `AssetPickerBoard` when you want the general-purpose board with all default asset families in one place. You do not need to import `IconPickerBoard` or `EmojiPickerBoard` to use the unified board.
|
|
@@ -285,6 +345,10 @@ export function Demo() {
|
|
|
285
345
|
return (
|
|
286
346
|
<AssetPickerBoard
|
|
287
347
|
label="Block asset picker"
|
|
348
|
+
showSelectionPreview={false}
|
|
349
|
+
showStatusBar={false}
|
|
350
|
+
itemLabelVisibility="hidden"
|
|
351
|
+
appearance="unstyled"
|
|
288
352
|
onChange={({ tab, item }) => {
|
|
289
353
|
console.log(tab.id); // emojis | svg | icons
|
|
290
354
|
console.log(item.value); // selected value
|
|
@@ -332,13 +396,62 @@ export function Demo() {
|
|
|
332
396
|
return (
|
|
333
397
|
<>
|
|
334
398
|
<ColorPickerBoard label="Brand palette" onChange={(hex) => console.log(hex)} />
|
|
335
|
-
<IconPickerBoard label="Slash icons" onChange={(
|
|
399
|
+
<IconPickerBoard label="Slash icons" onChange={(iconValue) => console.log(iconValue)} />
|
|
336
400
|
<EmojiPickerBoard label="Reaction picker" onChange={(emoji) => console.log(emoji)} />
|
|
337
401
|
</>
|
|
338
402
|
);
|
|
339
403
|
}
|
|
340
404
|
```
|
|
341
405
|
|
|
406
|
+
`IconPickerBoard` emits canonical icon values by default, for example `icon:text`. `EmojiPickerBoard` emits the raw emoji glyph, and supports grouped sections plus persistent recents through `recentStorageKey`.
|
|
407
|
+
|
|
408
|
+
#### Host-Themed Asset Picker
|
|
409
|
+
|
|
410
|
+
This is the recommended integration when the host application owns the visual theme and wants emoji, icon and cover-heavy tabs without visible labels.
|
|
411
|
+
|
|
412
|
+
```tsx
|
|
413
|
+
import {
|
|
414
|
+
AssetPickerBoard,
|
|
415
|
+
AssetRenderer,
|
|
416
|
+
createDefaultAssetPickerTabs,
|
|
417
|
+
} from '@univers42/ui-collection';
|
|
418
|
+
|
|
419
|
+
const tabs = createDefaultAssetPickerTabs({
|
|
420
|
+
emojiTabOptions: {
|
|
421
|
+
itemLabelVisibility: 'hidden',
|
|
422
|
+
layout: 'emoji',
|
|
423
|
+
},
|
|
424
|
+
iconTabOptions: {
|
|
425
|
+
itemLabelVisibility: 'hidden',
|
|
426
|
+
layout: 'icon',
|
|
427
|
+
},
|
|
428
|
+
svgTabOptions: {
|
|
429
|
+
itemLabelVisibility: 'hidden',
|
|
430
|
+
layout: 'cover',
|
|
431
|
+
},
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
export function Demo() {
|
|
435
|
+
return (
|
|
436
|
+
<AssetPickerBoard
|
|
437
|
+
tabs={tabs}
|
|
438
|
+
appearance="unstyled"
|
|
439
|
+
showSelectionPreview={false}
|
|
440
|
+
showStatusBar={false}
|
|
441
|
+
classNames={{
|
|
442
|
+
root: 'asset-picker-root',
|
|
443
|
+
tabButton: 'asset-picker-tab',
|
|
444
|
+
itemButton: 'asset-picker-cell',
|
|
445
|
+
}}
|
|
446
|
+
/>
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
export function StoredAssetPreview({ value }: { value: string }) {
|
|
451
|
+
return <AssetRenderer value={value} size={28} />;
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
342
455
|
### 2. React Slash-Menu Icons
|
|
343
456
|
|
|
344
457
|
Available from:
|
|
@@ -605,47 +718,56 @@ Current sources:
|
|
|
605
718
|
Importing from `@univers42/ui-collection` gives you:
|
|
606
719
|
|
|
607
720
|
- the unified `AssetPickerBoard`
|
|
721
|
+
- the official `AssetRenderer`
|
|
608
722
|
- the color, icon, and emoji picker wrappers
|
|
609
723
|
- the React slash-menu icons
|
|
610
724
|
- `SLASH_ITEMS` and `SECTION_LABELS`
|
|
611
725
|
- the media registry and helpers
|
|
612
726
|
- the default color, icon, emoji, and asset-picker datasets
|
|
727
|
+
- the canonical asset value helpers for parse, resolve and serialize
|
|
613
728
|
|
|
614
729
|
## Full Example
|
|
615
730
|
|
|
616
731
|
```tsx
|
|
617
732
|
import {
|
|
618
733
|
AssetPickerBoard,
|
|
734
|
+
AssetRenderer,
|
|
619
735
|
ColorPickerBoard,
|
|
620
|
-
DEFAULT_ASSET_PICKER_TABS,
|
|
621
736
|
DEFAULT_ICON_PICKER_ITEMS,
|
|
622
737
|
EmojiPickerBoard,
|
|
623
738
|
IconPickerBoard,
|
|
624
739
|
SLASH_ITEMS,
|
|
740
|
+
createDefaultAssetPickerTabs,
|
|
625
741
|
getMediaCollection,
|
|
626
742
|
getMediaItem,
|
|
743
|
+
parseAssetValue,
|
|
627
744
|
resolveMediaUrl,
|
|
628
745
|
} from '@univers42/ui-collection';
|
|
629
746
|
|
|
630
747
|
const heroVideo = getMediaItem('video-mdn-flower');
|
|
631
748
|
const emojiAssets = getMediaCollection('emojis');
|
|
632
749
|
const src = heroVideo ? resolveMediaUrl(heroVideo.ref) : '';
|
|
750
|
+
const tabs = createDefaultAssetPickerTabs();
|
|
751
|
+
const parsed = parseAssetValue('icon:text');
|
|
633
752
|
|
|
634
753
|
console.log(DEFAULT_ICON_PICKER_ITEMS.length);
|
|
635
754
|
console.log(SLASH_ITEMS.length);
|
|
636
755
|
console.log(emojiAssets.length);
|
|
637
756
|
console.log(src);
|
|
757
|
+
console.log(parsed.kind);
|
|
638
758
|
|
|
639
759
|
export function Demo() {
|
|
640
760
|
return (
|
|
641
761
|
<>
|
|
642
762
|
<AssetPickerBoard
|
|
643
763
|
label="Unified asset picker"
|
|
644
|
-
tabs={
|
|
764
|
+
tabs={tabs}
|
|
765
|
+
showSelectionPreview={false}
|
|
645
766
|
/>
|
|
646
767
|
<ColorPickerBoard label="Brand palette" />
|
|
647
768
|
<IconPickerBoard label="Slash icon picker" />
|
|
648
|
-
<EmojiPickerBoard label="Emoji picker" />
|
|
769
|
+
<EmojiPickerBoard label="Emoji picker" recentStorageKey="demo:emoji-recents" />
|
|
770
|
+
<AssetRenderer value="icon:text" size={24} />
|
|
649
771
|
</>
|
|
650
772
|
);
|
|
651
773
|
}
|
|
@@ -1,20 +1,32 @@
|
|
|
1
1
|
import { type DefaultAssetPickerTabsOptions } from './defaultTabs.js';
|
|
2
|
-
import type { AssetPickerBoardSelection, AssetPickerBoardTab, AssetPickerBoardValue } from './types.js';
|
|
2
|
+
import type { AssetPickerBoardAppearance, AssetPickerBoardMessages, AssetPickerBoardSelection, AssetPickerBoardSlotClassNames, AssetPickerBoardSlotProps, AssetPickerBoardSlotStyles, AssetPickerBoardTab, AssetPickerBoardValue, AssetPickerItemLabelVisibility, AssetPickerTabLayout } from './types.js';
|
|
3
3
|
export interface AssetPickerBoardProps {
|
|
4
4
|
tabs?: AssetPickerBoardTab[];
|
|
5
|
-
value?: AssetPickerBoardValue;
|
|
6
|
-
defaultValue?: AssetPickerBoardValue;
|
|
5
|
+
value?: AssetPickerBoardValue | string;
|
|
6
|
+
defaultValue?: AssetPickerBoardValue | string;
|
|
7
7
|
defaultTabId?: string;
|
|
8
8
|
onChange?: (selection: AssetPickerBoardSelection) => void;
|
|
9
9
|
onChangeComplete?: (selection: AssetPickerBoardSelection) => void;
|
|
10
|
+
onSerializedValueChange?: (value: string) => void;
|
|
10
11
|
onTabChange?: (tab: AssetPickerBoardTab) => void;
|
|
11
12
|
label?: string;
|
|
12
13
|
showSearch?: boolean;
|
|
13
14
|
showTabs?: boolean;
|
|
15
|
+
showHeader?: boolean;
|
|
16
|
+
showSelectionPreview?: boolean;
|
|
17
|
+
showStatusBar?: boolean;
|
|
14
18
|
columns?: number;
|
|
15
19
|
width?: number | string;
|
|
16
20
|
className?: string;
|
|
21
|
+
appearance?: AssetPickerBoardAppearance;
|
|
22
|
+
classNames?: AssetPickerBoardSlotClassNames;
|
|
23
|
+
styles?: AssetPickerBoardSlotStyles;
|
|
24
|
+
slotProps?: AssetPickerBoardSlotProps;
|
|
25
|
+
messages?: AssetPickerBoardMessages;
|
|
26
|
+
locale?: string;
|
|
27
|
+
layout?: AssetPickerTabLayout;
|
|
28
|
+
itemLabelVisibility?: AssetPickerItemLabelVisibility;
|
|
17
29
|
}
|
|
18
30
|
export type { DefaultAssetPickerTabsOptions };
|
|
19
|
-
export declare function AssetPickerBoard({ tabs, value, defaultValue, defaultTabId, onChange, onChangeComplete, onTabChange, label, showSearch, showTabs, columns, width, className, }: Readonly<AssetPickerBoardProps>): import("react/jsx-runtime").JSX.Element | null;
|
|
31
|
+
export declare function AssetPickerBoard({ tabs, value, defaultValue, defaultTabId, onChange, onChangeComplete, onSerializedValueChange, onTabChange, label, showSearch, showTabs, showHeader, showSelectionPreview, showStatusBar, columns, width, className, appearance, classNames, styles, slotProps, messages, locale, layout, itemLabelVisibility, }: Readonly<AssetPickerBoardProps>): import("react/jsx-runtime").JSX.Element | null;
|
|
20
32
|
//# sourceMappingURL=AssetPickerBoard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPickerBoard.d.ts","sourceRoot":"","sources":["../../../../../library/components/react/asset-picker/AssetPickerBoard.tsx"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"AssetPickerBoard.d.ts","sourceRoot":"","sources":["../../../../../library/components/react/asset-picker/AssetPickerBoard.tsx"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EACV,0BAA0B,EAE1B,wBAAwB,EACxB,yBAAyB,EAEzB,8BAA8B,EAC9B,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,8BAA8B,EAG9B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC;IACvC,YAAY,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC1D,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAClE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,UAAU,CAAC,EAAE,8BAA8B,CAAC;IAC5C,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,mBAAmB,CAAC,EAAE,8BAA8B,CAAC;CACtD;AAED,YAAY,EAAE,6BAA6B,EAAE,CAAC;AA6N9C,wBAAgB,gBAAgB,CAAC,EAC/B,IAAgC,EAChC,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,KAAsB,EACtB,UAAiB,EACjB,QAAQ,EACR,UAAiB,EACjB,oBAA2B,EAC3B,aAAoB,EACpB,OAAO,EACP,KAAW,EACX,SAAS,EACT,UAAsB,EACtB,UAAU,EACV,MAAM,EACN,SAAS,EACT,QAAQ,EACR,MAAM,EACN,MAAM,EACN,mBAA+B,GAChC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,kDA0jBjC"}
|