@docmentis/udoc-viewer 0.6.11 → 0.6.13

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.
Files changed (45) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/UDocClient.d.ts +7 -0
  3. package/dist/src/UDocClient.d.ts.map +1 -1
  4. package/dist/src/UDocClient.js +1 -1
  5. package/dist/src/UDocClient.js.map +1 -1
  6. package/dist/src/UDocViewer.d.ts.map +1 -1
  7. package/dist/src/UDocViewer.js +3 -1
  8. package/dist/src/UDocViewer.js.map +1 -1
  9. package/dist/src/ui/viewer/components/Spread.d.ts.map +1 -1
  10. package/dist/src/ui/viewer/components/Spread.js +15 -1
  11. package/dist/src/ui/viewer/components/Spread.js.map +1 -1
  12. package/dist/src/ui/viewer/components/Viewport.d.ts.map +1 -1
  13. package/dist/src/ui/viewer/components/Viewport.js +153 -22
  14. package/dist/src/ui/viewer/components/Viewport.js.map +1 -1
  15. package/dist/src/ui/viewer/effects.d.ts.map +1 -1
  16. package/dist/src/ui/viewer/effects.js +54 -82
  17. package/dist/src/ui/viewer/effects.js.map +1 -1
  18. package/dist/src/ui/viewer/state.d.ts +2 -0
  19. package/dist/src/ui/viewer/state.d.ts.map +1 -1
  20. package/dist/src/ui/viewer/state.js +1 -0
  21. package/dist/src/ui/viewer/state.js.map +1 -1
  22. package/dist/src/ui/viewer/styles-inline.d.ts +1 -1
  23. package/dist/src/ui/viewer/styles-inline.d.ts.map +1 -1
  24. package/dist/src/ui/viewer/styles-inline.js +37 -47
  25. package/dist/src/ui/viewer/styles-inline.js.map +1 -1
  26. package/dist/src/ui/viewer/transition.d.ts +26 -0
  27. package/dist/src/ui/viewer/transition.d.ts.map +1 -0
  28. package/dist/src/ui/viewer/transition.js +898 -0
  29. package/dist/src/ui/viewer/transition.js.map +1 -0
  30. package/dist/src/wasm/udoc.d.ts +83 -6
  31. package/dist/src/wasm/udoc.js +9 -9
  32. package/dist/src/wasm/udoc_bg.wasm +0 -0
  33. package/dist/src/wasm/udoc_bg.wasm.d.ts +3 -3
  34. package/dist/src/worker/WorkerClient.d.ts +24 -5
  35. package/dist/src/worker/WorkerClient.d.ts.map +1 -1
  36. package/dist/src/worker/WorkerClient.js +243 -98
  37. package/dist/src/worker/WorkerClient.js.map +1 -1
  38. package/dist/src/worker/index.d.ts +1 -1
  39. package/dist/src/worker/index.d.ts.map +1 -1
  40. package/dist/src/worker/worker-inline.js +1 -1
  41. package/dist/src/worker/worker.d.ts +2 -0
  42. package/dist/src/worker/worker.d.ts.map +1 -1
  43. package/dist/src/worker/worker.js +11 -10
  44. package/dist/src/worker/worker.js.map +1 -1
  45. package/package.json +1 -1
@@ -181,6 +181,8 @@ export const inlineStyles = `.udoc-viewer-root {
181
181
 
182
182
  .udoc-viewer-root .udoc-toolbar-slot {
183
183
  flex: 0 0 auto;
184
+ position: relative;
185
+ z-index: 10;
184
186
  }
185
187
 
186
188
  .udoc-viewer-root .udoc-body-slot {
@@ -210,6 +212,12 @@ export const inlineStyles = `.udoc-viewer-root {
210
212
  background: var(--udoc-bg-viewport);
211
213
  }
212
214
 
215
+ .udoc-viewer-root .udoc-viewport__content {
216
+ position: relative;
217
+ width: 100%;
218
+ height: 100%;
219
+ }
220
+
213
221
  .udoc-viewer-root .udoc-viewport__scroll {
214
222
  width: 100%;
215
223
  height: 100%;
@@ -281,7 +289,8 @@ export const inlineStyles = `.udoc-viewer-root {
281
289
  display: flex;
282
290
  align-items: center;
283
291
  gap: 4px;
284
- padding: 6px 10px;
292
+ height: 40px;
293
+ padding: 0 10px;
285
294
  background: var(--udoc-bg-surface);
286
295
  border-radius: 8px;
287
296
  box-shadow: var(--udoc-shadow-toolbar);
@@ -418,6 +427,8 @@ export const inlineStyles = `.udoc-viewer-root {
418
427
  display: flex;
419
428
  align-items: center;
420
429
  justify-content: center;
430
+ width: 24px;
431
+ height: 100%;
421
432
  padding: 2px 2px;
422
433
  border: none;
423
434
  border-left: 1px solid var(--udoc-subtle-hover);
@@ -427,6 +438,11 @@ export const inlineStyles = `.udoc-viewer-root {
427
438
  cursor: pointer;
428
439
  }
429
440
 
441
+ .udoc-viewer-root .udoc-zoom-dropdown__chevron svg {
442
+ width: 14px;
443
+ height: 14px;
444
+ }
445
+
430
446
  .udoc-viewer-root .udoc-zoom-dropdown__chevron:hover {
431
447
  background: var(--udoc-hover-overlay);
432
448
  color: var(--udoc-text-secondary);
@@ -954,7 +970,7 @@ export const inlineStyles = `.udoc-viewer-root {
954
970
  align-items: center;
955
971
  gap: 4px;
956
972
  flex: 1;
957
- justify-content: center;
973
+ justify-content: flex-start;
958
974
  }
959
975
 
960
976
  .udoc-viewer-root .udoc-toolbar__group {
@@ -1653,12 +1669,23 @@ export const inlineStyles = `.udoc-viewer-root {
1653
1669
  display: block;
1654
1670
  }
1655
1671
 
1656
- /* Convert floating bar to full-width bottom toolbar */
1672
+ /* Viewport becomes flex column so floating toolbar is a footer */
1673
+ .udoc-viewer-root .udoc-viewport {
1674
+ display: flex;
1675
+ flex-direction: column;
1676
+ }
1677
+
1678
+ .udoc-viewer-root .udoc-viewport__content {
1679
+ flex: 1 1 auto;
1680
+ overflow: hidden;
1681
+ }
1682
+
1683
+ /* Convert floating bar to full-width footer toolbar */
1657
1684
  .udoc-viewer-root .udoc-floating-toolbar {
1658
- position: absolute;
1659
- bottom: 0;
1660
- left: 0;
1661
- right: 0;
1685
+ position: relative;
1686
+ bottom: auto;
1687
+ left: auto;
1688
+ flex: 0 0 auto;
1662
1689
  transform: none;
1663
1690
  border-radius: 0;
1664
1691
  box-sizing: border-box;
@@ -1667,12 +1694,6 @@ export const inlineStyles = `.udoc-viewer-root {
1667
1694
  gap: 8px;
1668
1695
  max-width: none;
1669
1696
  justify-content: center;
1670
- box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
1671
- }
1672
-
1673
- /* Viewport scroll area needs padding for bottom toolbar */
1674
- .udoc-viewer-root .udoc-viewport__scroll {
1675
- padding-bottom: 40px;
1676
1697
  }
1677
1698
 
1678
1699
  /* Hide fullscreen button on mobile */
@@ -1680,18 +1701,6 @@ export const inlineStyles = `.udoc-viewer-root {
1680
1701
  display: none;
1681
1702
  }
1682
1703
 
1683
- /* Touch targets for mobile */
1684
- .udoc-viewer-root .udoc-floating-toolbar__btn {
1685
- padding: 6px;
1686
- min-width: 28px;
1687
- min-height: 28px;
1688
- }
1689
-
1690
- .udoc-viewer-root .udoc-floating-toolbar__btn svg {
1691
- width: 18px;
1692
- height: 18px;
1693
- }
1694
-
1695
1704
  /* Larger panel tab buttons for touch */
1696
1705
  .udoc-viewer-root .udoc-left-panel__tabs {
1697
1706
  width: 44px;
@@ -1715,7 +1724,8 @@ export const inlineStyles = `.udoc-viewer-root {
1715
1724
  }
1716
1725
 
1717
1726
  .udoc-viewer-root .udoc-toolbar__btn {
1718
- padding: 8px;
1727
+ box-sizing: border-box;
1728
+ padding: 6px;
1719
1729
  }
1720
1730
 
1721
1731
  /* View mode menu - right align */
@@ -2472,23 +2482,8 @@ export const inlineStyles = `.udoc-viewer-root {
2472
2482
  outline-offset: -2px;
2473
2483
  }
2474
2484
 
2475
- /* Touch target sizes for coarse pointers */
2485
+ /* Touch target sizes for coarse pointers (panels and side UI only — toolbars handle their own sizing) */
2476
2486
  @media (pointer: coarse) {
2477
- .udoc-viewer-root .udoc-toolbar__btn {
2478
- min-width: 44px;
2479
- min-height: 44px;
2480
- }
2481
-
2482
- .udoc-viewer-root .udoc-toolbar__btn--nav {
2483
- min-width: 44px;
2484
- min-height: 44px;
2485
- }
2486
-
2487
- .udoc-viewer-root .udoc-floating-toolbar__btn {
2488
- min-width: 44px;
2489
- min-height: 44px;
2490
- }
2491
-
2492
2487
  .udoc-viewer-root .udoc-left-panel__tab {
2493
2488
  width: 44px;
2494
2489
  height: 44px;
@@ -2498,11 +2493,6 @@ export const inlineStyles = `.udoc-viewer-root {
2498
2493
  width: 44px;
2499
2494
  }
2500
2495
 
2501
- .udoc-viewer-root .udoc-zoom-dropdown__chevron {
2502
- min-width: 44px;
2503
- min-height: 44px;
2504
- }
2505
-
2506
2496
  .udoc-viewer-root .udoc-outline-item__toggle {
2507
2497
  min-width: 44px;
2508
2498
  min-height: 44px;
@@ -1 +1 @@
1
- {"version":3,"file":"styles-inline.js","sourceRoot":"","sources":["../../../../src/ui/viewer/styles-inline.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA68E3B,CAAC"}
1
+ {"version":3,"file":"styles-inline.js","sourceRoot":"","sources":["../../../../src/ui/viewer/styles-inline.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAm8E3B,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Slide transition animations for PPTX spread-mode navigation.
3
+ *
4
+ * IMPORTANT: Effects must NEVER set `transform` on the incoming element.
5
+ * The incoming element is the real spread — transforms on it would change
6
+ * its layout position, causing scrollbar flicker, resize-observer loops,
7
+ * and page-jump bugs. Only use `opacity` and `clip-path` on incoming.
8
+ * The outgoing element is a disposable snapshot overlay, so `transform`
9
+ * and `opacity` are safe on it.
10
+ */
11
+ import type { PageTransition } from "../../worker/index.js";
12
+ export interface TransitionHandle {
13
+ /** Cancel the in-flight transition, jumping to the final state. */
14
+ cancel(): void;
15
+ }
16
+ /**
17
+ * Run a slide transition animation between two spread elements.
18
+ *
19
+ * @param outgoing The snapshot overlay (will be removed on complete)
20
+ * @param incoming The real spread element (already mounted and positioned)
21
+ * @param transition Transition descriptor from PageInfo
22
+ * @param forward Navigation direction (true = forward, false = backward)
23
+ * @param onComplete Called when the transition finishes (or is cancelled)
24
+ */
25
+ export declare function runTransition(outgoing: HTMLElement, incoming: HTMLElement, transition: PageTransition, forward: boolean, onComplete: () => void): TransitionHandle;
26
+ //# sourceMappingURL=transition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../../../src/ui/viewer/transition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACR,cAAc,EAKjB,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,gBAAgB;IAC7B,mEAAmE;IACnE,MAAM,IAAI,IAAI,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CACzB,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,IAAI,GACvB,gBAAgB,CA0DlB"}