@cypress-design/react-docmenu 0.3.0 → 0.4.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.
@@ -2,5 +2,5 @@ $ yarn build:module && yarn build:types
2
2
  $ rollup -c ./rollup.config.mjs
3
3
  
4
4
  ./index.ts → ./dist/index.umd.js, ./dist/index.es.mjs...
5
- created ./dist/index.umd.js, ./dist/index.es.mjs in 22.3s
5
+ created ./dist/index.umd.js, ./dist/index.es.mjs in 11.9s
6
6
  $ tsc --project ./tsconfig.build.json
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @cypress-design/react-docmenu
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#350](https://github.com/cypress-io/cypress-design/pull/350) [`abc414d`](https://github.com/cypress-io/cypress-design/commit/abc414da149eb6fe0cfa61497a0aa8630d8d8d6e) Thanks [@elevatebart](https://github.com/elevatebart)! - feat: allow usage of a custom link component
8
+
9
+ ### Patch Changes
10
+
11
+ - [#347](https://github.com/cypress-io/cypress-design/pull/347) [`de67952`](https://github.com/cypress-io/cypress-design/commit/de679522ea2269854ec8ac8de925fcf930ce96e4) Thanks [@elevatebart](https://github.com/elevatebart)! - fix: docmenu docusaurus style items structure
12
+
13
+ - Updated dependencies [[`de67952`](https://github.com/cypress-io/cypress-design/commit/de679522ea2269854ec8ac8de925fcf930ce96e4)]:
14
+ - @cypress-design/constants-docmenu@0.1.1
15
+
16
+ ## 0.3.1
17
+
18
+ ### Patch Changes
19
+
20
+ - [#310](https://github.com/cypress-io/cypress-design/pull/310) [`a3a323f`](https://github.com/cypress-io/cypress-design/commit/a3a323fde7acf5e5407b298b4faa0c90314c6139) Thanks [@elevatebart](https://github.com/elevatebart)! - Add-eslint-react-hooks
21
+
22
+ - Updated dependencies [[`630ad4a`](https://github.com/cypress-io/cypress-design/commit/630ad4ae2e6ba65350951949767a4ebdc4c7eb0a), [`a3a323f`](https://github.com/cypress-io/cypress-design/commit/a3a323fde7acf5e5407b298b4faa0c90314c6139)]:
23
+ - @cypress-design/react-icon@0.24.0
24
+
3
25
  ## 0.3.0
4
26
 
5
27
  ### Minor Changes
package/DocMenu.tsx CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react'
2
2
  import { NavGroup, NavItemLink } from '@cypress-design/constants-docmenu'
3
- import { DocLink } from './_DocLink'
3
+ import { DocLink, LinkComponentType } from './_DocLink'
4
4
  import { DocGroup } from './_DocGroup'
5
5
  import clsx from 'clsx'
6
6
 
@@ -9,11 +9,13 @@ export type NavItem = NavGroup | NavItemLink
9
9
  export interface DocMenuProps extends React.HTMLAttributes<HTMLUListElement> {
10
10
  items: NavItem[]
11
11
  collapsible?: boolean
12
+ LinkComponent?: LinkComponentType
12
13
  }
13
14
 
14
15
  export const DocMenu: React.FC<DocMenuProps> = ({
15
16
  items,
16
17
  collapsible = true,
18
+ LinkComponent = 'a',
17
19
  ...rest
18
20
  }) => {
19
21
  return (
@@ -21,11 +23,21 @@ export const DocMenu: React.FC<DocMenuProps> = ({
21
23
  {items.map((item, index) =>
22
24
  'items' in item ? (
23
25
  <li key={index} className="relative list-none p-0">
24
- <DocGroup group={item} collapsible={collapsible} />
26
+ <DocGroup
27
+ index={index}
28
+ group={item}
29
+ collapsible={collapsible}
30
+ LinkComponent={LinkComponent}
31
+ />
25
32
  </li>
26
33
  ) : (
27
- <DocLink key={index} item={item} collapsible={collapsible} />
28
- )
34
+ <DocLink
35
+ key={index}
36
+ item={item}
37
+ collapsible={collapsible}
38
+ LinkComponent={LinkComponent}
39
+ />
40
+ ),
29
41
  )}
30
42
  </ul>
31
43
  )
@@ -2,13 +2,58 @@
2
2
 
3
3
  import * as React from 'react'
4
4
  import { mount } from 'cypress/react18'
5
- import DocMenuStory from './DocMenu.rootstory'
5
+ import DocMenu from './index'
6
6
  import assertions from '../assertions'
7
7
  import { NavGroup, NavItemLink } from '../constants'
8
8
 
9
9
  describe('<DocMenu/>', () => {
10
+ it('works with 1 level of items', () => {
11
+ mount(<DocMenu items={[{ href: '/foo', label: 'Foo' }]} />)
12
+ })
13
+
14
+ it('works with 2 level of items', () => {
15
+ mount(
16
+ <DocMenu
17
+ items={[{ label: 'Bar', items: [{ href: '/foo', label: 'Foo' }] }]}
18
+ />,
19
+ )
20
+ })
21
+
22
+ it('works with 3 level of items', () => {
23
+ mount(
24
+ <DocMenu
25
+ items={[
26
+ {
27
+ label: 'Baaaaaaz',
28
+ items: [{ label: 'Bar', items: [{ href: '/foo', label: 'Foo' }] }],
29
+ },
30
+ ]}
31
+ />,
32
+ )
33
+ })
34
+
35
+ it('renders the custom link components', () => {
36
+ mount(
37
+ <DocMenu
38
+ items={[
39
+ {
40
+ label: 'Baaaaaaz',
41
+ items: [{ label: 'Bar', items: [{ href: '/foo', label: 'Foo' }] }],
42
+ },
43
+ ]}
44
+ LinkComponent={({ href, className, children }) => (
45
+ <div className={className}>
46
+ {children} + href: {href}
47
+ </div>
48
+ )}
49
+ />,
50
+ )
51
+ cy.findByText('Bar').click()
52
+ cy.findByText('Foo + href: /foo', { selector: 'div' }).should('be.visible')
53
+ })
54
+
10
55
  function mountStory(items: (NavItemLink | NavGroup)[] = []) {
11
- mount(<DocMenuStory items={items} />)
56
+ mount(<DocMenu items={items} />)
12
57
  }
13
58
  assertions(mountStory)
14
59
  })
package/ReadMe.md CHANGED
@@ -18,62 +18,96 @@ yarn add @cypress-design/react-docmenu
18
18
  import DocMenu from '@cypress-design/react-docmenu'
19
19
  ```
20
20
 
21
+ ### Default usage
22
+
23
+ ```tsx live
24
+ export default () => (
25
+ <DocMenu
26
+ items={[
27
+ {
28
+ label: 'Get Started',
29
+ href: '#',
30
+ },
31
+ {
32
+ label: 'Overview',
33
+ items: [
34
+ {
35
+ label: 'Overview Item 1',
36
+ href: '#',
37
+ },
38
+ {
39
+ label: 'Overview Item 2',
40
+ href: '#',
41
+ active: true,
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ label: 'Getting Started',
47
+ items: [
48
+ {
49
+ label: 'Item 1',
50
+ href: '#',
51
+ },
52
+ {
53
+ label: 'Group',
54
+ items: [
55
+ {
56
+ label: 'Item 1',
57
+ href: '#',
58
+ },
59
+ {
60
+ label: 'Item 2',
61
+ href: '#',
62
+ },
63
+ {
64
+ label: 'Item 3',
65
+ href: '#',
66
+ },
67
+ {
68
+ label: 'Item 4',
69
+ href: '#',
70
+ },
71
+ ],
72
+ },
73
+ {
74
+ label: 'Item 5',
75
+ href: '#',
76
+ active: true,
77
+ },
78
+ ],
79
+ },
80
+ ]}
81
+ />
82
+ )
83
+ ```
84
+
85
+ ### With a custom link
86
+
21
87
  ```tsx live
22
- <DocMenu
23
- items={[
24
- {
25
- text: 'Get Started',
26
- href: '#',
27
- },
28
- {
29
- text: 'Overview',
30
- items: [
31
- {
32
- text: 'Overview Item 1',
33
- href: '#',
34
- },
35
- {
36
- text: 'Overview Item 2',
37
- href: '#',
38
- active: true,
39
- },
40
- ],
41
- },
42
- {
43
- text: 'Getting Started',
44
- items: [
45
- {
46
- text: 'Item 1',
47
- href: '#',
48
- },
49
- {
50
- text: 'Group',
51
- items: [
52
- {
53
- text: 'Item 1',
54
- href: '#',
55
- },
56
- {
57
- text: 'Item 2',
58
- href: '#',
59
- },
60
- {
61
- text: 'Item 3',
62
- href: '#',
63
- },
64
- {
65
- text: 'Item 4',
66
- href: '#',
67
- },
68
- ],
69
- },
70
- {
71
- text: 'Item 5',
72
- href: '#',
73
- active: true,
74
- },
75
- ],
76
- },
77
- ]}
78
- />
88
+ const CustomLink = ({ href, children, className }) => {
89
+ return (
90
+ <a
91
+ href={href}
92
+ className={className}
93
+ onClick={(evt) => {
94
+ console.log('The link was clicked.', { target: evt.target })
95
+ }}
96
+ >
97
+ {children} 🔗
98
+ </a>
99
+ )
100
+ }
101
+
102
+ export default () => (
103
+ <DocMenu
104
+ LinkComponent={CustomLink}
105
+ items={[
106
+ {
107
+ label: 'Install',
108
+ href: '#with-a-custom-link',
109
+ },
110
+ ]}
111
+ />
112
+ )
79
113
  ```
package/_DocGroup.tsx CHANGED
@@ -2,13 +2,15 @@ import * as React from 'react'
2
2
  import { IconChevronDownSmall } from '@cypress-design/react-icon'
3
3
  import clsx from 'clsx'
4
4
  import { NavGroup, classes } from '@cypress-design/constants-docmenu'
5
- import { DocLink } from './_DocLink'
5
+ import { DocLink, LinkComponentType } from './_DocLink'
6
6
 
7
7
  export interface DocGroupProps {
8
+ index: number
8
9
  group: NavGroup
9
10
  collapsible: boolean
10
11
  depth?: number
11
12
  setHeight?: (height: number) => void
13
+ LinkComponent?: LinkComponentType
12
14
  }
13
15
 
14
16
  export const DocGroup: React.FC<DocGroupProps> = ({
@@ -16,41 +18,54 @@ export const DocGroup: React.FC<DocGroupProps> = ({
16
18
  collapsible,
17
19
  depth = 0,
18
20
  setHeight,
21
+ index,
22
+ LinkComponent = 'a',
19
23
  }) => {
20
24
  const [open, setOpen] = React.useState(depth === 0)
21
25
  const [itemsHeights, setItemsHeights] = React.useState<number[]>(
22
- Array(group.items.length).fill(1)
26
+ Array(group.items.length).fill(1),
23
27
  )
24
28
 
25
29
  React.useEffect(() => {
26
- setHeight?.(open ? itemsHeights.reduce((a, b) => a + b, 1) : 1)
27
- }, [itemsHeights, open])
30
+ // if this group contains other groups, ignore this effect
31
+ // it will be triggered by a leaf and trickle up
32
+ if (group.items.some((item) => 'items' in item)) {
33
+ return
34
+ }
35
+
36
+ const newHeight = open ? itemsHeights.reduce((a, b) => a + b, 1) : 1
37
+
38
+ setHeight?.(newHeight)
39
+ }, [itemsHeights, open, setHeight, group.items, group.label])
28
40
 
29
41
  const [activeTop, setActiveTop] = React.useState(0)
30
42
 
31
43
  React.useEffect(() => {
32
44
  const activeItem = group.items.findIndex(
33
- (item) => 'href' in item && item.active
45
+ (item) => 'href' in item && item.active,
34
46
  )
35
47
  if (activeItem >= 0) {
36
48
  setActiveTop(
37
- itemsHeights.slice(0, activeItem).reduce((a, b) => a + b, 1) * 44
49
+ itemsHeights.slice(0, activeItem).reduce((a, b) => a + b, 1) * 44,
38
50
  )
39
51
  }
40
- }, [itemsHeights])
52
+ }, [itemsHeights, group.items])
41
53
 
42
54
  function toggleMenu(open: boolean) {
43
55
  if (!collapsible) return
44
56
  setOpen(open)
45
57
  }
46
58
 
47
- function onSetHeight(index: number, height: number) {
48
- setItemsHeights((prev) => {
49
- const newHeights = [...prev]
50
- newHeights[index] = height
51
- return newHeights
52
- })
53
- }
59
+ const onSetHeightCallback = React.useCallback(
60
+ (height: number) => {
61
+ setItemsHeights((prev) => {
62
+ const newHeights = [...prev]
63
+ newHeights[index] = height
64
+ return newHeights
65
+ })
66
+ },
67
+ [setItemsHeights, index],
68
+ )
54
69
 
55
70
  const Head = collapsible ? 'button' : group.href ? 'a' : 'div'
56
71
 
@@ -76,7 +91,7 @@ export const DocGroup: React.FC<DocGroupProps> = ({
76
91
  })}
77
92
  />
78
93
  ) : null}
79
- {group.text}
94
+ {group.label}
80
95
  </Head>
81
96
  {collapsible &&
82
97
  depth >= 0 &&
@@ -102,8 +117,10 @@ export const DocGroup: React.FC<DocGroupProps> = ({
102
117
  <DocGroup
103
118
  group={item}
104
119
  depth={depth + 1}
105
- setHeight={(height) => onSetHeight(index, height)}
120
+ setHeight={onSetHeightCallback}
121
+ index={index}
106
122
  collapsible={collapsible}
123
+ LinkComponent={LinkComponent}
107
124
  />
108
125
  </li>
109
126
  ) : (
@@ -113,8 +130,9 @@ export const DocGroup: React.FC<DocGroupProps> = ({
113
130
  collapsible={collapsible}
114
131
  depth={depth}
115
132
  onActive={(top) => setActiveTop(top)}
133
+ LinkComponent={LinkComponent}
116
134
  />
117
- )
135
+ ),
118
136
  )}
119
137
  </ul>
120
138
  </>
package/_DocLink.tsx CHANGED
@@ -2,11 +2,18 @@ import * as React from 'react'
2
2
  import clsx from 'clsx'
3
3
  import { NavItemLink } from '@cypress-design/constants-docmenu'
4
4
 
5
+ export type LinkComponentType = React.ElementType<{
6
+ href: string
7
+ className?: string
8
+ children?: React.ReactNode
9
+ }>
10
+
5
11
  export interface DocLinkProps {
6
12
  item: NavItemLink
7
13
  collapsible: boolean
8
14
  depth?: number
9
15
  onActive?: (top: number) => void
16
+ LinkComponent?: LinkComponentType
10
17
  }
11
18
 
12
19
  export const DocLink: React.FC<DocLinkProps> = ({
@@ -14,6 +21,7 @@ export const DocLink: React.FC<DocLinkProps> = ({
14
21
  collapsible,
15
22
  depth = -1,
16
23
  onActive,
24
+ LinkComponent = 'a',
17
25
  }) => {
18
26
  const activeLIRef = React.useRef<HTMLLIElement>(null)
19
27
 
@@ -23,7 +31,7 @@ export const DocLink: React.FC<DocLinkProps> = ({
23
31
  if (item.active) {
24
32
  onActive?.(activeLIRef?.current?.offsetTop || 0)
25
33
  }
26
- }, [])
34
+ }, [onActive, item.active])
27
35
 
28
36
  return (
29
37
  <li
@@ -32,7 +40,7 @@ export const DocLink: React.FC<DocLinkProps> = ({
32
40
  'pl-[16px]': depth >= 0,
33
41
  })}
34
42
  >
35
- <a
43
+ <LinkComponent
36
44
  className={clsx('group relative inline-block pl-[24px]', {
37
45
  'text-indigo-500': item.active,
38
46
  'py-[8px] text-[16px] leading-[24px]': depth < 0,
@@ -46,15 +54,15 @@ export const DocLink: React.FC<DocLinkProps> = ({
46
54
  'absolute w-[4px] z-10 top-[10%] h-[80%] rounded-full hidden',
47
55
  {
48
56
  'group-hover:block bg-gray-300': !item.active && collapsible,
49
- }
57
+ },
50
58
  )}
51
59
  style={{
52
60
  left: `-${18.5 + depth * 8}px`,
53
61
  }}
54
62
  />
55
63
  ) : null}
56
- {item.text}
57
- </a>
64
+ {item.label}
65
+ </LinkComponent>
58
66
  </li>
59
67
  )
60
68
  }
package/dist/DocMenu.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { NavGroup, NavItemLink } from '@cypress-design/constants-docmenu';
3
+ import { LinkComponentType } from './_DocLink';
3
4
  export type NavItem = NavGroup | NavItemLink;
4
5
  export interface DocMenuProps extends React.HTMLAttributes<HTMLUListElement> {
5
6
  items: NavItem[];
6
7
  collapsible?: boolean;
8
+ LinkComponent?: LinkComponentType;
7
9
  }
8
10
  export declare const DocMenu: React.FC<DocMenuProps>;
9
11
  export default DocMenu;
@@ -1 +1 @@
1
- {"version":3,"file":"DocMenu.d.ts","sourceRoot":"./","sources":["DocMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAKzE,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE5C,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC1E,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAkB1C,CAAA;AAED,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"DocMenu.d.ts","sourceRoot":"./","sources":["DocMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAW,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAIvD,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE5C,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC1E,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA6B1C,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -1,10 +1,13 @@
1
1
  import * as React from 'react';
2
2
  import { NavGroup } from '@cypress-design/constants-docmenu';
3
+ import { LinkComponentType } from './_DocLink';
3
4
  export interface DocGroupProps {
5
+ index: number;
4
6
  group: NavGroup;
5
7
  collapsible: boolean;
6
8
  depth?: number;
7
9
  setHeight?: (height: number) => void;
10
+ LinkComponent?: LinkComponentType;
8
11
  }
9
12
  export declare const DocGroup: React.FC<DocGroupProps>;
10
13
  //# sourceMappingURL=_DocGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_DocGroup.d.ts","sourceRoot":"./","sources":["_DocGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,QAAQ,EAAW,MAAM,mCAAmC,CAAA;AAGrE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACrC;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA4G5C,CAAA"}
1
+ {"version":3,"file":"_DocGroup.d.ts","sourceRoot":"./","sources":["_DocGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,QAAQ,EAAW,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAW,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEvD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,QAAQ,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA4H5C,CAAA"}
@@ -1,10 +1,16 @@
1
1
  import * as React from 'react';
2
2
  import { NavItemLink } from '@cypress-design/constants-docmenu';
3
+ export type LinkComponentType = React.ElementType<{
4
+ href: string;
5
+ className?: string;
6
+ children?: React.ReactNode;
7
+ }>;
3
8
  export interface DocLinkProps {
4
9
  item: NavItemLink;
5
10
  collapsible: boolean;
6
11
  depth?: number;
7
12
  onActive?: (top: number) => void;
13
+ LinkComponent?: LinkComponentType;
8
14
  }
9
15
  export declare const DocLink: React.FC<DocLinkProps>;
10
16
  //# sourceMappingURL=_DocLink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_DocLink.d.ts","sourceRoot":"./","sources":["_DocLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAgD1C,CAAA"}
1
+ {"version":3,"file":"_DocLink.d.ts","sourceRoot":"./","sources":["_DocLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,CAAC,CAAA;AAEF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAiD1C,CAAA"}