zudoku 0.18.6 → 0.18.7

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 (63) hide show
  1. package/dist/lib/components/Layout.js +3 -2
  2. package/dist/lib/components/Layout.js.map +1 -1
  3. package/dist/lib/components/MobileTopNavigation.js +1 -1
  4. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  5. package/dist/lib/components/Search.d.ts +3 -1
  6. package/dist/lib/components/Search.js +3 -3
  7. package/dist/lib/components/Search.js.map +1 -1
  8. package/dist/lib/components/navigation/Sidebar.d.ts +3 -1
  9. package/dist/lib/components/navigation/Sidebar.js +2 -2
  10. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  11. package/dist/lib/components/navigation/SidebarCategory.d.ts +2 -1
  12. package/dist/lib/components/navigation/SidebarCategory.js +2 -2
  13. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  14. package/dist/lib/components/navigation/SidebarItem.d.ts +2 -2
  15. package/dist/lib/components/navigation/SidebarItem.js +5 -5
  16. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  17. package/dist/lib/oas/graphql/index.js +4 -0
  18. package/dist/lib/oas/graphql/index.js.map +1 -1
  19. package/dist/lib/plugins/openapi/OperationList.js +44 -1
  20. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  21. package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
  22. package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
  23. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  24. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +2 -0
  25. package/dist/lib/plugins/openapi/graphql/graphql.js +1 -0
  26. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  27. package/dist/vite/build.js +7 -1
  28. package/dist/vite/build.js.map +1 -1
  29. package/dist/vite/output.js +31 -16
  30. package/dist/vite/output.js.map +1 -1
  31. package/lib/AnchorLink-BR0MvI7n.js +35 -0
  32. package/lib/AnchorLink-BR0MvI7n.js.map +1 -0
  33. package/lib/{MdxPage-DOVlXMwT.js → MdxPage-HjFSZJQk.js} +37 -36
  34. package/lib/{MdxPage-DOVlXMwT.js.map → MdxPage-HjFSZJQk.js.map} +1 -1
  35. package/lib/{OperationList-BkNQEsNs.js → OperationList-DzE32oyS.js} +971 -961
  36. package/lib/{OperationList-BkNQEsNs.js.map → OperationList-DzE32oyS.js.map} +1 -1
  37. package/lib/assets/{worker-BHClFO3A.js → worker-CyxLedqF.js} +435 -431
  38. package/lib/assets/{worker-BHClFO3A.js.map → worker-CyxLedqF.js.map} +1 -1
  39. package/lib/{createServer-CpJlUPtn.js → createServer-DTiCfoql.js} +5 -1
  40. package/lib/{createServer-CpJlUPtn.js.map → createServer-DTiCfoql.js.map} +1 -1
  41. package/lib/{index-C7SaIME0.js → index-NNCc1BSK.js} +5 -4
  42. package/lib/{index-C7SaIME0.js.map → index-NNCc1BSK.js.map} +1 -1
  43. package/lib/{AnchorLink-CDlhr8gL.js → index.esm-Bm8pj-bc.js} +223 -254
  44. package/lib/index.esm-Bm8pj-bc.js.map +1 -0
  45. package/lib/ui/Drawer.js +79 -79
  46. package/lib/ui/Drawer.js.map +1 -1
  47. package/lib/zudoku.components.js +445 -414
  48. package/lib/zudoku.components.js.map +1 -1
  49. package/lib/zudoku.openapi-worker.js +1 -1
  50. package/lib/zudoku.plugin-markdown.js +1 -1
  51. package/lib/zudoku.plugin-openapi.js +1 -1
  52. package/package.json +3 -3
  53. package/src/lib/components/Layout.tsx +8 -3
  54. package/src/lib/components/MobileTopNavigation.tsx +18 -18
  55. package/src/lib/components/Search.tsx +3 -3
  56. package/src/lib/components/navigation/Sidebar.tsx +18 -8
  57. package/src/lib/components/navigation/SidebarCategory.tsx +3 -0
  58. package/src/lib/components/navigation/SidebarItem.tsx +12 -2
  59. package/src/lib/oas/graphql/index.ts +4 -0
  60. package/src/lib/plugins/openapi/OperationList.tsx +62 -2
  61. package/src/lib/plugins/openapi/graphql/gql.ts +2 -2
  62. package/src/lib/plugins/openapi/graphql/graphql.ts +3 -0
  63. package/lib/AnchorLink-CDlhr8gL.js.map +0 -1
@@ -2,7 +2,7 @@ const o = () => {
2
2
  const r = new SharedWorker(
3
3
  new URL(
4
4
  /* @vite-ignore */
5
- "./assets/worker-BHClFO3A.js",
5
+ "./assets/worker-CyxLedqF.js",
6
6
  import.meta.url
7
7
  ),
8
8
  { type: "module" }
@@ -74,7 +74,7 @@ const C = (n) => ({
74
74
  const h = {
75
75
  path: r,
76
76
  lazy: async () => {
77
- const { MdxPage: l } = await import("./MdxPage-DOVlXMwT.js"), { default: p, ...g } = await a();
77
+ const { MdxPage: l } = await import("./MdxPage-HjFSZJQk.js"), { default: p, ...g } = await a();
78
78
  return {
79
79
  element: /* @__PURE__ */ P.jsx(
80
80
  l,
@@ -1,5 +1,5 @@
1
1
  import "./jsx-runtime-B6kdoens.js";
2
- import { o as a } from "./index-C7SaIME0.js";
2
+ import { o as a } from "./index-NNCc1BSK.js";
3
3
  import "./utils-DcpDOncX.js";
4
4
  import "lucide-react";
5
5
  import "./hook-hEqe7fPB.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.18.6",
3
+ "version": "0.18.7",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -149,7 +149,7 @@
149
149
  "@types/react": "18.3.11",
150
150
  "@types/react-dom": "18.3.1",
151
151
  "@vitejs/plugin-react": "4.3.4",
152
- "@zudoku/config": "0.18.6",
152
+ "@zudoku/config": "0.18.7",
153
153
  "@zudoku/httpsnippet": "10.0.9",
154
154
  "@zudoku/react-helmet-async": "2.0.4",
155
155
  "autoprefixer": "10.4.20",
@@ -203,7 +203,7 @@
203
203
  "ulidx": "2.4.1",
204
204
  "unist-util-visit": "5.0.0",
205
205
  "urql": "4.1.0",
206
- "vaul": "1.1.0",
206
+ "vaul": "1.1.1",
207
207
  "vfile": "6.0.3",
208
208
  "vite": "5.4.9",
209
209
  "yaml": "2.6.0",
@@ -1,6 +1,6 @@
1
1
  import { Helmet } from "@zudoku/react-helmet-async";
2
2
  import { PanelLeftIcon } from "lucide-react";
3
- import { Suspense, useEffect, useRef, type ReactNode } from "react";
3
+ import { Suspense, useEffect, useRef, useState, type ReactNode } from "react";
4
4
  import { Outlet, useLocation, useNavigation } from "react-router-dom";
5
5
  import { useSpinDelay } from "spin-delay";
6
6
  import { Drawer, DrawerTrigger } from "../ui/Drawer.js";
@@ -49,6 +49,7 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
49
49
  delay: 300,
50
50
  minDuration: 500,
51
51
  });
52
+ const [isDrawerOpen, setDrawerOpen] = useState(false);
52
53
 
53
54
  return (
54
55
  <>
@@ -70,8 +71,12 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
70
71
  <LoadingFallback />
71
72
  ) : (
72
73
  <Suspense fallback={<LoadingFallback />}>
73
- <Drawer direction="left">
74
- <Sidebar />
74
+ <Drawer
75
+ direction="left"
76
+ open={isDrawerOpen}
77
+ onOpenChange={(open) => setDrawerOpen(open)}
78
+ >
79
+ <Sidebar onRequestClose={() => setDrawerOpen(false)} />
75
80
  <div
76
81
  className={cn(
77
82
  "lg:hidden -mx-10 px-10 py-2 sticky bg-background/80 backdrop-blur z-10 top-0 left-0 right-0 border-b",
@@ -30,27 +30,27 @@ export const MobileTopNavigation = () => {
30
30
  </DrawerTrigger>
31
31
  </div>
32
32
  <DrawerContent
33
- className="lg:hidden h-screen right-0 left-auto w-[320px] rounded-none overflow-auto"
33
+ className="lg:hidden h-[100dvh] right-0 left-auto w-[320px] rounded-none"
34
34
  aria-describedby={undefined}
35
35
  >
36
- <VisuallyHidden>
37
- <DrawerTitle>Navigation</DrawerTitle>
38
- </VisuallyHidden>
39
- <div className="flex p-4">
40
- <Search />
41
- </div>
42
- <ul className="flex flex-col items-center gap-4 p-4">
43
- <li>
44
- <ThemeSwitch />
45
- </li>
46
- {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (
47
- <li key={item.label}>
48
- <button onClick={() => setDrawerOpen(false)}>
49
- <TopNavItem {...item} />
50
- </button>
36
+ <div className="p-6 overflow-y-auto overscroll-none">
37
+ <VisuallyHidden>
38
+ <DrawerTitle>Navigation</DrawerTitle>
39
+ </VisuallyHidden>
40
+ <Search className="flex p-4" />
41
+ <ul className="flex flex-col items-center gap-4 p-4">
42
+ <li>
43
+ <ThemeSwitch />
51
44
  </li>
52
- ))}
53
- </ul>
45
+ {topNavigation.filter(isHiddenItem(isAuthenticated)).map((item) => (
46
+ <li key={item.label}>
47
+ <button onClick={() => setDrawerOpen(false)}>
48
+ <TopNavItem {...item} />
49
+ </button>
50
+ </li>
51
+ ))}
52
+ </ul>
53
+ </div>
54
54
  </DrawerContent>
55
55
  </Drawer>
56
56
  );
@@ -3,7 +3,7 @@ import { Suspense, useCallback, useEffect, useState } from "react";
3
3
  import { isSearchPlugin } from "../core/plugins.js";
4
4
  import { useZudoku } from "./context/ZudokuContext.js";
5
5
 
6
- export const Search = () => {
6
+ export const Search = ({ className }: { className?: string }) => {
7
7
  const ctx = useZudoku();
8
8
  const [isOpen, setIsOpen] = useState(false);
9
9
 
@@ -35,7 +35,7 @@ export const Search = () => {
35
35
  }
36
36
 
37
37
  return (
38
- <>
38
+ <div className={className}>
39
39
  <button
40
40
  type="button"
41
41
  onClick={() => setIsOpen(true)}
@@ -55,6 +55,6 @@ export const Search = () => {
55
55
  onClose,
56
56
  })}
57
57
  </Suspense>
58
- </>
58
+ </div>
59
59
  );
60
60
  };
@@ -7,7 +7,11 @@ import { Slotlet } from "../SlotletProvider.js";
7
7
  import { SidebarItem } from "./SidebarItem.js";
8
8
  import { SidebarWrapper } from "./SidebarWrapper.js";
9
9
 
10
- export const Sidebar = () => {
10
+ export const Sidebar = ({
11
+ onRequestClose,
12
+ }: {
13
+ onRequestClose?: () => void;
14
+ }) => {
11
15
  const navRef = useRef<HTMLDivElement | null>(null);
12
16
  const navigation = useCurrentNavigation();
13
17
 
@@ -24,15 +28,21 @@ export const Sidebar = () => {
24
28
  <Slotlet name="zudoku-after-navigation" />
25
29
  </SidebarWrapper>
26
30
  <DrawerContent
27
- className="lg:hidden h-screen left-0 p-6 w-[320px] rounded-none overflow-auto"
31
+ className="lg:hidden h-[100dvh] left-0 w-[320px] rounded-none"
28
32
  aria-describedby={undefined}
29
33
  >
30
- <VisuallyHidden>
31
- <DrawerTitle>Sidebar</DrawerTitle>
32
- </VisuallyHidden>
33
- {navigation.sidebar.map((item) => (
34
- <SidebarItem key={item.label} item={item} />
35
- ))}
34
+ <div className="p-6 overflow-y-auto overscroll-none">
35
+ <VisuallyHidden>
36
+ <DrawerTitle>Sidebar</DrawerTitle>
37
+ </VisuallyHidden>
38
+ {navigation.sidebar.map((item) => (
39
+ <SidebarItem
40
+ key={item.label}
41
+ item={item}
42
+ onRequestClose={onRequestClose}
43
+ />
44
+ ))}
45
+ </div>
36
46
  </DrawerContent>
37
47
  </>
38
48
  );
@@ -11,9 +11,11 @@ import { useIsCategoryOpen } from "./utils.js";
11
11
  export const SidebarCategory = ({
12
12
  category,
13
13
  level,
14
+ onRequestClose,
14
15
  }: {
15
16
  category: SidebarItemCategory;
16
17
  level: number;
18
+ onRequestClose?: () => void;
17
19
  }) => {
18
20
  const isCategoryOpen = useIsCategoryOpen(category);
19
21
  const [hasInteracted, setHasInteracted] = useState(false);
@@ -126,6 +128,7 @@ export const SidebarCategory = ({
126
128
  ("href" in item ? item.href : "") +
127
129
  item.label
128
130
  }
131
+ onRequestClose={onRequestClose}
129
132
  level={level + 1}
130
133
  item={item}
131
134
  />
@@ -37,17 +37,24 @@ export const DATA_ANCHOR_ATTR = "data-anchor";
37
37
  export const SidebarItem = ({
38
38
  item,
39
39
  level = 0,
40
+ onRequestClose,
40
41
  }: {
41
42
  item: SidebarItemType;
42
- basePath?: string;
43
43
  level?: number;
44
+ onRequestClose?: () => void;
44
45
  }) => {
45
46
  const { activeAnchor } = useViewportAnchor();
46
47
  const [searchParams] = useSearchParams();
47
48
 
48
49
  switch (item.type) {
49
50
  case "category":
50
- return <SidebarCategory category={item} level={level} />;
51
+ return (
52
+ <SidebarCategory
53
+ category={item}
54
+ level={level}
55
+ onRequestClose={onRequestClose}
56
+ />
57
+ );
51
58
  case "doc":
52
59
  return (
53
60
  <NavLink
@@ -55,6 +62,7 @@ export const SidebarItem = ({
55
62
  navigationListItem({ isActive, isTopLevel: level === 0 })
56
63
  }
57
64
  to={joinPath(item.id)}
65
+ onClick={onRequestClose}
58
66
  >
59
67
  {item.icon && <item.icon size={16} className="align-[-0.125em]" />}
60
68
  {item.badge ? (
@@ -79,6 +87,7 @@ export const SidebarItem = ({
79
87
  isTopLevel: level === 0,
80
88
  className: item.badge?.placement !== "start" && "justify-between",
81
89
  })}
90
+ onClick={onRequestClose}
82
91
  >
83
92
  {item.badge ? (
84
93
  <>
@@ -115,6 +124,7 @@ export const SidebarItem = ({
115
124
  href={item.href}
116
125
  target="_blank"
117
126
  rel="noopener noreferrer"
127
+ onClick={onRequestClose}
118
128
  >
119
129
  <span className="whitespace-normal">{item.label}</span>
120
130
  {/* This prevents that the icon would be positioned in its own line if the text fills a line entirely */}
@@ -390,6 +390,10 @@ const Schema = builder.objectRef<OpenAPIDocument>("Schema").implement({
390
390
  resolve: (root) => root.info.description,
391
391
  nullable: true,
392
392
  }),
393
+ summary: t.string({
394
+ resolve: (root) => root.info.summary,
395
+ nullable: true,
396
+ }),
393
397
  paths: t.field({
394
398
  type: [PathItem],
395
399
  resolve: (root) =>
@@ -1,5 +1,6 @@
1
1
  import { ResultOf } from "@graphql-typed-document-node/core";
2
2
  import { useSuspenseQuery } from "@tanstack/react-query";
3
+ import { Helmet } from "@zudoku/react-helmet-async";
3
4
  import { CategoryHeading } from "../../components/CategoryHeading.js";
4
5
  import { Heading } from "../../components/Heading.js";
5
6
  import { Markdown, ProseClasses } from "../../components/Markdown.js";
@@ -81,6 +82,7 @@ const AllOperationsQuery = graphql(/* GraphQL */ `
81
82
  query AllOperations($input: JSON!, $type: SchemaType!) {
82
83
  schema(input: $input, type: $type) {
83
84
  description
85
+ summary
84
86
  title
85
87
  url
86
88
  version
@@ -96,19 +98,77 @@ const AllOperationsQuery = graphql(/* GraphQL */ `
96
98
  }
97
99
  `);
98
100
 
101
+ /**
102
+ * @description Clean up a commonmark formatted description for use in the meta
103
+ * description.
104
+ */
105
+ function cleanDescription(
106
+ description: string,
107
+ maxLength: number = 160,
108
+ ): string {
109
+ if (!description) {
110
+ return "";
111
+ }
112
+
113
+ // Replace Markdown links [text](url) with just "text"
114
+ description = description.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1");
115
+
116
+ // Remove Markdown image syntax: ![alt](url)
117
+ description = description.replace(/!\[.*?\]\(.*?\)/g, "");
118
+
119
+ // Remove other Markdown syntax (e.g., **bold**, _italic_, `code`)
120
+ description = description.replace(/[_*`~]/g, "");
121
+
122
+ // Remove headings (# Heading), blockquotes (> Quote), and horizontal rules (--- or ***)
123
+ description = description.replace(/^(?:>|\s*#+|-{3,}|\*{3,})/gm, "");
124
+
125
+ // Remove any remaining formatting characters
126
+ description = description.replace(/[|>{}[\]]/g, "");
127
+
128
+ // Collapse multiple spaces and trim the text
129
+ description = description.replace(/\s+/g, " ").trim();
130
+
131
+ // Limit to the specified maximum length
132
+ description = description.substring(0, maxLength);
133
+
134
+ // Escape for HTML safety
135
+ return description
136
+ .replace(/&/g, "&amp;")
137
+ .replace(/</g, "&lt;")
138
+ .replace(/>/g, "&gt;")
139
+ .replace(/"/g, "&quot;")
140
+ .replace(/'/g, "&#039;");
141
+ }
142
+
99
143
  export const OperationList = () => {
100
144
  const { input, type } = useOasConfig();
101
145
  const query = useCreateQuery(AllOperationsQuery, { input, type });
102
146
  const result = useSuspenseQuery(query);
103
-
147
+ const title = result.data.schema.title;
148
+ const summary = result.data.schema.summary;
149
+ const description = result.data.schema.description;
150
+ // The summary property is preferable here as it is a short description of
151
+ // the API, whereas the description property is typically longer and supports
152
+ // commonmark formatting, making it ill-suited for use in the meta description
153
+ const metaDescription = summary
154
+ ? summary
155
+ : description
156
+ ? cleanDescription(description)
157
+ : undefined;
104
158
  return (
105
159
  <div className="pt-[--padding-content-top]">
160
+ <Helmet>
161
+ <title>{title}</title>
162
+ {metaDescription && (
163
+ <meta name="description" content={metaDescription} />
164
+ )}
165
+ </Helmet>
106
166
  <div
107
167
  className={cn(ProseClasses, "mb-16 max-w-full prose-img:max-w-prose")}
108
168
  >
109
169
  <CategoryHeading>Overview</CategoryHeading>
110
170
  <Heading level={1} id="description" registerSidebarAnchor>
111
- {result.data.schema.title}
171
+ {title}
112
172
  </Heading>
113
173
  <Markdown content={result.data.schema.description ?? ""} />
114
174
  </div>
@@ -17,7 +17,7 @@ const documents = {
17
17
  types.ServersQueryDocument,
18
18
  "\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n parameters {\n name\n in\n description\n required\n schema\n style\n examples {\n name\n description\n externalValue\n value\n summary\n }\n }\n requestBody {\n content {\n mediaType\n encoding {\n name\n }\n examples {\n name\n description\n externalValue\n value\n summary\n }\n schema\n }\n description\n required\n }\n responses {\n statusCode\n links\n description\n content {\n examples {\n name\n description\n externalValue\n value\n summary\n }\n mediaType\n encoding {\n name\n }\n schema\n }\n }\n }\n":
19
19
  types.OperationsFragmentFragmentDoc,
20
- "\n query AllOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n description\n title\n url\n version\n tags {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n }\n }\n }\n":
20
+ "\n query AllOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n description\n summary\n title\n url\n version\n tags {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n }\n }\n }\n":
21
21
  types.AllOperationsDocument,
22
22
  "\n query getServerQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n }\n":
23
23
  types.GetServerQueryDocument,
@@ -41,7 +41,7 @@ export function graphql(
41
41
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
42
42
  */
43
43
  export function graphql(
44
- source: "\n query AllOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n description\n title\n url\n version\n tags {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n }\n }\n }\n",
44
+ source: "\n query AllOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n description\n summary\n title\n url\n version\n tags {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n }\n }\n }\n",
45
45
  ): typeof import("./graphql.js").AllOperationsDocument;
46
46
  /**
47
47
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
@@ -136,6 +136,7 @@ export type Schema = {
136
136
  title: Scalars["String"]["output"];
137
137
  url: Scalars["String"]["output"];
138
138
  version: Scalars["String"]["output"];
139
+ summary?: Maybe<Scalars["String"]["output"]>;
139
140
  };
140
141
 
141
142
  export type SchemaOperationsArgs = {
@@ -261,6 +262,7 @@ export type AllOperationsQuery = {
261
262
  schema: {
262
263
  __typename?: "Schema";
263
264
  description?: string | null;
265
+ summary?: string | null;
264
266
  title: string;
265
267
  url: string;
266
268
  version: string;
@@ -419,6 +421,7 @@ export const AllOperationsDocument = new TypedDocumentString(`
419
421
  query AllOperations($input: JSON!, $type: SchemaType!) {
420
422
  schema(input: $input, type: $type) {
421
423
  description
424
+ summary
422
425
  title
423
426
  url
424
427
  version
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnchorLink-CDlhr8gL.js","sources":["../../../node_modules/.pnpm/@mdx-js+react@3.0.1_@types+react@18.3.11_react@18.3.1/node_modules/@mdx-js/react/lib/index.js","../../../node_modules/.pnpm/react-fast-compare@3.2.2/node_modules/react-fast-compare/index.js","../../../node_modules/.pnpm/invariant@2.2.4/node_modules/invariant/browser.js","../../../node_modules/.pnpm/shallowequal@1.1.0/node_modules/shallowequal/index.js","../../../node_modules/.pnpm/@zudoku+react-helmet-async@2.0.4_react@18.3.1/node_modules/@zudoku/react-helmet-async/lib/index.esm.js","../src/lib/components/AnchorLink.tsx"],"sourcesContent":["/**\n * @typedef {import('mdx/types.js').MDXComponents} MDXComponents\n * @typedef {import('react').Component<{}, {}, unknown>} Component\n * @typedef {import('react').ReactNode} ReactNode\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {JSX.Element}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (ret !== void 0) {\n return !!ret;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n // Test for A's keys different from B.\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (ret === false || (ret === void 0 && valueA !== valueB)) {\n return false;\n }\n }\n\n return true;\n};\n","// src/index.tsx\nimport React3, { Component as Component3 } from \"react\";\nimport fastCompare from \"react-fast-compare\";\nimport invariant from \"invariant\";\n\n// src/Provider.tsx\nimport React2, { Component } from \"react\";\n\n// src/server.ts\nimport React from \"react\";\n\n// src/constants.ts\nvar TAG_NAMES = /* @__PURE__ */ ((TAG_NAMES2) => {\n TAG_NAMES2[\"BASE\"] = \"base\";\n TAG_NAMES2[\"BODY\"] = \"body\";\n TAG_NAMES2[\"HEAD\"] = \"head\";\n TAG_NAMES2[\"HTML\"] = \"html\";\n TAG_NAMES2[\"LINK\"] = \"link\";\n TAG_NAMES2[\"META\"] = \"meta\";\n TAG_NAMES2[\"NOSCRIPT\"] = \"noscript\";\n TAG_NAMES2[\"SCRIPT\"] = \"script\";\n TAG_NAMES2[\"STYLE\"] = \"style\";\n TAG_NAMES2[\"TITLE\"] = \"title\";\n TAG_NAMES2[\"FRAGMENT\"] = \"Symbol(react.fragment)\";\n return TAG_NAMES2;\n})(TAG_NAMES || {});\nvar SEO_PRIORITY_TAGS = {\n link: { rel: [\"amphtml\", \"canonical\", \"alternate\"] },\n script: { type: [\"application/ld+json\"] },\n meta: {\n charset: \"\",\n name: [\"generator\", \"robots\", \"description\"],\n property: [\n \"og:type\",\n \"og:title\",\n \"og:url\",\n \"og:image\",\n \"og:image:alt\",\n \"og:description\",\n \"twitter:url\",\n \"twitter:title\",\n \"twitter:description\",\n \"twitter:image\",\n \"twitter:image:alt\",\n \"twitter:card\",\n \"twitter:site\"\n ]\n }\n};\nvar VALID_TAG_NAMES = Object.values(TAG_NAMES);\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\nvar HTML_TAG_MAP = Object.entries(REACT_TAG_MAP).reduce(\n (carry, [key, value]) => {\n carry[value] = key;\n return carry;\n },\n {}\n);\nvar HELMET_ATTRIBUTE = \"data-rh\";\n\n// src/utils.ts\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\",\n PRIORITIZE_SEO_TAGS: \"prioritizeSeoTags\"\n};\nvar getInnermostProperty = (propsList, property) => {\n for (let i = propsList.length - 1; i >= 0; i -= 1) {\n const props = propsList[i];\n if (Object.prototype.hasOwnProperty.call(props, property)) {\n return props[property];\n }\n }\n return null;\n};\nvar getTitleFromPropsList = (propsList) => {\n let innermostTitle = getInnermostProperty(propsList, \"title\" /* TITLE */);\n const innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n if (Array.isArray(innermostTitle)) {\n innermostTitle = innermostTitle.join(\"\");\n }\n if (innermostTemplate && innermostTitle) {\n return innermostTemplate.replace(/%s/g, () => innermostTitle);\n }\n const innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n return innermostTitle || innermostDefaultTitle || void 0;\n};\nvar getOnChangeClientState = (propsList) => getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || (() => {\n});\nvar getAttributesFromPropsList = (tagType, propsList) => propsList.filter((props) => typeof props[tagType] !== \"undefined\").map((props) => props[tagType]).reduce((tagAttrs, current) => ({ ...tagAttrs, ...current }), {});\nvar getBaseTagFromPropsList = (primaryAttributes, propsList) => propsList.filter((props) => typeof props[\"base\" /* BASE */] !== \"undefined\").map((props) => props[\"base\" /* BASE */]).reverse().reduce((innermostBaseTag, tag) => {\n if (!innermostBaseTag.length) {\n const keys = Object.keys(tag);\n for (let i = 0; i < keys.length; i += 1) {\n const attributeKey = keys[i];\n const lowerCaseAttributeKey = attributeKey.toLowerCase();\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n return innermostBaseTag;\n}, []);\nvar warn = (msg) => console && typeof console.warn === \"function\" && console.warn(msg);\nvar getTagsFromPropsList = (tagName, primaryAttributes, propsList) => {\n const approvedSeenTags = {};\n return propsList.filter((props) => {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n if (typeof props[tagName] !== \"undefined\") {\n warn(\n `Helmet: ${tagName} should be of type \"Array\". Instead found type \"${typeof props[tagName]}\"`\n );\n }\n return false;\n }).map((props) => props[tagName]).reverse().reduce((approvedTags, instanceTags) => {\n const instanceSeenTags = {};\n instanceTags.filter((tag) => {\n let primaryAttributeKey;\n const keys2 = Object.keys(tag);\n for (let i = 0; i < keys2.length; i += 1) {\n const attributeKey = keys2[i];\n const lowerCaseAttributeKey = attributeKey.toLowerCase();\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === \"rel\" /* REL */ && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === \"rel\" /* REL */ && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n }\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === \"innerHTML\" /* INNER_HTML */ || attributeKey === \"cssText\" /* CSS_TEXT */ || attributeKey === \"itemprop\" /* ITEM_PROP */)) {\n primaryAttributeKey = attributeKey;\n }\n }\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n const value = tag[primaryAttributeKey].toLowerCase();\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n return false;\n }).reverse().forEach((tag) => approvedTags.push(tag));\n const keys = Object.keys(instanceSeenTags);\n for (let i = 0; i < keys.length; i += 1) {\n const attributeKey = keys[i];\n const tagUnion = {\n ...approvedSeenTags[attributeKey],\n ...instanceSeenTags[attributeKey]\n };\n approvedSeenTags[attributeKey] = tagUnion;\n }\n return approvedTags;\n }, []).reverse();\n};\nvar getAnyTrueFromPropsList = (propsList, checkedTag) => {\n if (Array.isArray(propsList) && propsList.length) {\n for (let index = 0; index < propsList.length; index += 1) {\n const prop = propsList[index];\n if (prop[checkedTag]) {\n return true;\n }\n }\n }\n return false;\n};\nvar reducePropsToState = (propsList) => ({\n baseTag: getBaseTagFromPropsList([\"href\" /* HREF */], propsList),\n bodyAttributes: getAttributesFromPropsList(\"bodyAttributes\" /* BODY */, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(\"htmlAttributes\" /* HTML */, propsList),\n linkTags: getTagsFromPropsList(\n \"link\" /* LINK */,\n [\"rel\" /* REL */, \"href\" /* HREF */],\n propsList\n ),\n metaTags: getTagsFromPropsList(\n \"meta\" /* META */,\n [\n \"name\" /* NAME */,\n \"charset\" /* CHARSET */,\n \"http-equiv\" /* HTTPEQUIV */,\n \"property\" /* PROPERTY */,\n \"itemprop\" /* ITEM_PROP */\n ],\n propsList\n ),\n noscriptTags: getTagsFromPropsList(\"noscript\" /* NOSCRIPT */, [\"innerHTML\" /* INNER_HTML */], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(\n \"script\" /* SCRIPT */,\n [\"src\" /* SRC */, \"innerHTML\" /* INNER_HTML */],\n propsList\n ),\n styleTags: getTagsFromPropsList(\"style\" /* STYLE */, [\"cssText\" /* CSS_TEXT */], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(\"titleAttributes\" /* TITLE */, propsList),\n prioritizeSeoTags: getAnyTrueFromPropsList(propsList, HELMET_PROPS.PRIORITIZE_SEO_TAGS)\n});\nvar flattenArray = (possibleArray) => Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\nvar checkIfPropsMatch = (props, toMatch) => {\n const keys = Object.keys(props);\n for (let i = 0; i < keys.length; i += 1) {\n if (toMatch[keys[i]] && toMatch[keys[i]].includes(props[keys[i]])) {\n return true;\n }\n }\n return false;\n};\nvar prioritizer = (elementsList, propsToMatch) => {\n if (Array.isArray(elementsList)) {\n return elementsList.reduce(\n (acc, elementAttrs) => {\n if (checkIfPropsMatch(elementAttrs, propsToMatch)) {\n acc.priority.push(elementAttrs);\n } else {\n acc.default.push(elementAttrs);\n }\n return acc;\n },\n { priority: [], default: [] }\n );\n }\n return { default: elementsList, priority: [] };\n};\nvar without = (obj, key) => {\n return {\n ...obj,\n [key]: void 0\n };\n};\n\n// src/server.ts\nvar SELF_CLOSING_TAGS = [\"noscript\" /* NOSCRIPT */, \"script\" /* SCRIPT */, \"style\" /* STYLE */];\nvar encodeSpecialCharacters = (str, encode = true) => {\n if (encode === false) {\n return String(str);\n }\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#x27;\");\n};\nvar generateElementAttributesAsString = (attributes) => Object.keys(attributes).reduce((str, key) => {\n const attr = typeof attributes[key] !== \"undefined\" ? `${key}=\"${attributes[key]}\"` : `${key}`;\n return str ? `${str} ${attr}` : attr;\n}, \"\");\nvar generateTitleAsString = (type, title, attributes, encode) => {\n const attributeString = generateElementAttributesAsString(attributes);\n const flattenedTitle = flattenArray(title);\n return attributeString ? `<${type} ${HELMET_ATTRIBUTE}=\"true\" ${attributeString}>${encodeSpecialCharacters(\n flattenedTitle,\n encode\n )}</${type}>` : `<${type} ${HELMET_ATTRIBUTE}=\"true\">${encodeSpecialCharacters(\n flattenedTitle,\n encode\n )}</${type}>`;\n};\nvar generateTagsAsString = (type, tags, encode = true) => tags.reduce((str, t) => {\n const tag = t;\n const attributeHtml = Object.keys(tag).filter(\n (attribute) => !(attribute === \"innerHTML\" /* INNER_HTML */ || attribute === \"cssText\" /* CSS_TEXT */)\n ).reduce((string, attribute) => {\n const attr = typeof tag[attribute] === \"undefined\" ? attribute : `${attribute}=\"${encodeSpecialCharacters(tag[attribute], encode)}\"`;\n return string ? `${string} ${attr}` : attr;\n }, \"\");\n const tagContent = tag.innerHTML || tag.cssText || \"\";\n const isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n return `${str}<${type} ${HELMET_ATTRIBUTE}=\"true\" ${attributeHtml}${isSelfClosing ? `/>` : `>${tagContent}</${type}>`}`;\n}, \"\");\nvar convertElementAttributesToReactProps = (attributes, initProps = {}) => Object.keys(attributes).reduce((obj, key) => {\n const mapped = REACT_TAG_MAP[key];\n obj[mapped || key] = attributes[key];\n return obj;\n}, initProps);\nvar generateTitleAsReactComponent = (_type, title, attributes) => {\n const initProps = {\n key: title,\n [HELMET_ATTRIBUTE]: true\n };\n const props = convertElementAttributesToReactProps(attributes, initProps);\n return [React.createElement(\"title\" /* TITLE */, props, title)];\n};\nvar generateTagsAsReactComponent = (type, tags) => tags.map((tag, i) => {\n const mappedTag = {\n key: i,\n [HELMET_ATTRIBUTE]: true\n };\n Object.keys(tag).forEach((attribute) => {\n const mapped = REACT_TAG_MAP[attribute];\n const mappedAttribute = mapped || attribute;\n if (mappedAttribute === \"innerHTML\" /* INNER_HTML */ || mappedAttribute === \"cssText\" /* CSS_TEXT */) {\n const content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = { __html: content };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n return React.createElement(type, mappedTag);\n});\nvar getMethodsForTag = (type, tags, encode = true) => {\n switch (type) {\n case \"title\" /* TITLE */:\n return {\n toComponent: () => generateTitleAsReactComponent(type, tags.title, tags.titleAttributes),\n toString: () => generateTitleAsString(type, tags.title, tags.titleAttributes, encode)\n };\n case \"bodyAttributes\" /* BODY */:\n case \"htmlAttributes\" /* HTML */:\n return {\n toComponent: () => convertElementAttributesToReactProps(tags),\n toString: () => generateElementAttributesAsString(tags)\n };\n default:\n return {\n toComponent: () => generateTagsAsReactComponent(type, tags),\n toString: () => generateTagsAsString(type, tags, encode)\n };\n }\n};\nvar getPriorityMethods = ({ metaTags, linkTags, scriptTags, encode }) => {\n const meta = prioritizer(metaTags, SEO_PRIORITY_TAGS.meta);\n const link = prioritizer(linkTags, SEO_PRIORITY_TAGS.link);\n const script = prioritizer(scriptTags, SEO_PRIORITY_TAGS.script);\n const priorityMethods = {\n toComponent: () => [\n ...generateTagsAsReactComponent(\"meta\" /* META */, meta.priority),\n ...generateTagsAsReactComponent(\"link\" /* LINK */, link.priority),\n ...generateTagsAsReactComponent(\"script\" /* SCRIPT */, script.priority)\n ],\n toString: () => (\n // generate all the tags as strings and concatenate them\n `${getMethodsForTag(\"meta\" /* META */, meta.priority, encode)} ${getMethodsForTag(\n \"link\" /* LINK */,\n link.priority,\n encode\n )} ${getMethodsForTag(\"script\" /* SCRIPT */, script.priority, encode)}`\n )\n };\n return {\n priorityMethods,\n metaTags: meta.default,\n linkTags: link.default,\n scriptTags: script.default\n };\n};\nvar mapStateOnServer = (props) => {\n const {\n baseTag,\n bodyAttributes,\n encode = true,\n htmlAttributes,\n noscriptTags,\n styleTags,\n title = \"\",\n titleAttributes,\n prioritizeSeoTags\n } = props;\n let { linkTags, metaTags, scriptTags } = props;\n let priorityMethods = {\n toComponent: () => {\n },\n toString: () => \"\"\n };\n if (prioritizeSeoTags) {\n ({ priorityMethods, linkTags, metaTags, scriptTags } = getPriorityMethods(props));\n }\n return {\n priority: priorityMethods,\n base: getMethodsForTag(\"base\" /* BASE */, baseTag, encode),\n bodyAttributes: getMethodsForTag(\"bodyAttributes\" /* BODY */, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(\"htmlAttributes\" /* HTML */, htmlAttributes, encode),\n link: getMethodsForTag(\"link\" /* LINK */, linkTags, encode),\n meta: getMethodsForTag(\"meta\" /* META */, metaTags, encode),\n noscript: getMethodsForTag(\"noscript\" /* NOSCRIPT */, noscriptTags, encode),\n script: getMethodsForTag(\"script\" /* SCRIPT */, scriptTags, encode),\n style: getMethodsForTag(\"style\" /* STYLE */, styleTags, encode),\n title: getMethodsForTag(\"title\" /* TITLE */, { title, titleAttributes }, encode)\n };\n};\nvar server_default = mapStateOnServer;\n\n// src/HelmetData.ts\nvar instances = [];\nvar isDocument = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nvar HelmetData = class {\n instances = [];\n canUseDOM = isDocument;\n context;\n value = {\n setHelmet: (serverState) => {\n this.context.helmet = serverState;\n },\n helmetInstances: {\n get: () => this.canUseDOM ? instances : this.instances,\n add: (instance) => {\n (this.canUseDOM ? instances : this.instances).push(instance);\n },\n remove: (instance) => {\n const index = (this.canUseDOM ? instances : this.instances).indexOf(instance);\n (this.canUseDOM ? instances : this.instances).splice(index, 1);\n }\n }\n };\n constructor(context, canUseDOM) {\n this.context = context;\n this.canUseDOM = canUseDOM || false;\n if (!canUseDOM) {\n context.helmet = server_default({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n }\n};\n\n// src/Provider.tsx\nvar defaultValue = {};\nvar Context = React2.createContext(defaultValue);\nvar HelmetProvider = class _HelmetProvider extends Component {\n static canUseDOM = isDocument;\n helmetData;\n constructor(props) {\n super(props);\n this.helmetData = new HelmetData(this.props.context || {}, _HelmetProvider.canUseDOM);\n }\n render() {\n return /* @__PURE__ */ React2.createElement(Context.Provider, { value: this.helmetData.value }, this.props.children);\n }\n};\n\n// src/Dispatcher.tsx\nimport { Component as Component2 } from \"react\";\nimport shallowEqual from \"shallowequal\";\n\n// src/client.ts\nvar updateTags = (type, tags) => {\n const headElement = document.head || document.querySelector(\"head\" /* HEAD */);\n const tagNodes = headElement.querySelectorAll(`${type}[${HELMET_ATTRIBUTE}]`);\n const oldTags = [].slice.call(tagNodes);\n const newTags = [];\n let indexToDelete;\n if (tags && tags.length) {\n tags.forEach((tag) => {\n const newElement = document.createElement(type);\n for (const attribute in tag) {\n if (Object.prototype.hasOwnProperty.call(tag, attribute)) {\n if (attribute === \"innerHTML\" /* INNER_HTML */) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === \"cssText\" /* CSS_TEXT */) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n const attr = attribute;\n const value = typeof tag[attr] === \"undefined\" ? \"\" : tag[attr];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\");\n if (oldTags.some((existingTag, index) => {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n oldTags.forEach((tag) => tag.parentNode?.removeChild(tag));\n newTags.forEach((tag) => headElement.appendChild(tag));\n return {\n oldTags,\n newTags\n };\n};\nvar updateAttributes = (tagName, attributes) => {\n const elementTag = document.getElementsByTagName(tagName)[0];\n if (!elementTag) {\n return;\n }\n const helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n const helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n const attributesToRemove = [...helmetAttributes];\n const attributeKeys = Object.keys(attributes);\n for (const attribute of attributeKeys) {\n const value = attributes[attribute] || \"\";\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n const indexToSave = attributesToRemove.indexOf(attribute);\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n for (let i = attributesToRemove.length - 1; i >= 0; i -= 1) {\n elementTag.removeAttribute(attributesToRemove[i]);\n }\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\nvar updateTitle = (title, attributes) => {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n updateAttributes(\"title\" /* TITLE */, attributes);\n};\nvar commitTagChanges = (newState, cb) => {\n const {\n baseTag,\n bodyAttributes,\n htmlAttributes,\n linkTags,\n metaTags,\n noscriptTags,\n onChangeClientState,\n scriptTags,\n styleTags,\n title,\n titleAttributes\n } = newState;\n updateAttributes(\"body\" /* BODY */, bodyAttributes);\n updateAttributes(\"html\" /* HTML */, htmlAttributes);\n updateTitle(title, titleAttributes);\n const tagUpdates = {\n baseTag: updateTags(\"base\" /* BASE */, baseTag),\n linkTags: updateTags(\"link\" /* LINK */, linkTags),\n metaTags: updateTags(\"meta\" /* META */, metaTags),\n noscriptTags: updateTags(\"noscript\" /* NOSCRIPT */, noscriptTags),\n scriptTags: updateTags(\"script\" /* SCRIPT */, scriptTags),\n styleTags: updateTags(\"style\" /* STYLE */, styleTags)\n };\n const addedTags = {};\n const removedTags = {};\n Object.keys(tagUpdates).forEach((tagType) => {\n const { newTags, oldTags } = tagUpdates[tagType];\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n if (cb) {\n cb();\n }\n onChangeClientState(newState, addedTags, removedTags);\n};\nvar _helmetCallback = null;\nvar handleStateChangeOnClient = (newState) => {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(() => {\n commitTagChanges(newState, () => {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\nvar client_default = handleStateChangeOnClient;\n\n// src/Dispatcher.tsx\nvar HelmetDispatcher = class extends Component2 {\n rendered = false;\n shouldComponentUpdate(nextProps) {\n return !shallowEqual(nextProps, this.props);\n }\n componentDidUpdate() {\n this.emitChange();\n }\n componentWillUnmount() {\n const { helmetInstances } = this.props.context;\n helmetInstances.remove(this);\n this.emitChange();\n }\n emitChange() {\n const { helmetInstances, setHelmet } = this.props.context;\n let serverState = null;\n const state = reducePropsToState(\n helmetInstances.get().map((instance) => {\n const props = { ...instance.props };\n delete props.context;\n return props;\n })\n );\n if (HelmetProvider.canUseDOM) {\n client_default(state);\n } else if (server_default) {\n serverState = server_default(state);\n }\n setHelmet(serverState);\n }\n // componentWillMount will be deprecated\n // for SSR, initialize on first render\n // constructor is also unsafe in StrictMode\n init() {\n if (this.rendered) {\n return;\n }\n this.rendered = true;\n const { helmetInstances } = this.props.context;\n helmetInstances.add(this);\n this.emitChange();\n }\n render() {\n this.init();\n return null;\n }\n};\n\n// src/index.tsx\nvar Helmet = class extends Component3 {\n static defaultProps = {\n defer: true,\n encodeSpecialCharacters: true,\n prioritizeSeoTags: false\n };\n shouldComponentUpdate(nextProps) {\n return !fastCompare(without(this.props, \"helmetData\"), without(nextProps, \"helmetData\"));\n }\n mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n switch (child.type) {\n case \"script\" /* SCRIPT */:\n case \"noscript\" /* NOSCRIPT */:\n return {\n innerHTML: nestedChildren\n };\n case \"style\" /* STYLE */:\n return {\n cssText: nestedChildren\n };\n default:\n throw new Error(\n `<${child.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`\n );\n }\n }\n flattenArrayTypeChildren(child, arrayTypeChildren, newChildProps, nestedChildren) {\n return {\n ...arrayTypeChildren,\n [child.type]: [\n ...arrayTypeChildren[child.type] || [],\n {\n ...newChildProps,\n ...this.mapNestedChildrenToProps(child, nestedChildren)\n }\n ]\n };\n }\n mapObjectTypeChildren(child, newProps, newChildProps, nestedChildren) {\n switch (child.type) {\n case \"title\" /* TITLE */:\n return {\n ...newProps,\n [child.type]: nestedChildren,\n titleAttributes: { ...newChildProps }\n };\n case \"body\" /* BODY */:\n return {\n ...newProps,\n bodyAttributes: { ...newChildProps }\n };\n case \"html\" /* HTML */:\n return {\n ...newProps,\n htmlAttributes: { ...newChildProps }\n };\n default:\n return {\n ...newProps,\n [child.type]: { ...newChildProps }\n };\n }\n }\n mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n let newFlattenedProps = { ...newProps };\n Object.keys(arrayTypeChildren).forEach((arrayChildName) => {\n newFlattenedProps = {\n ...newFlattenedProps,\n [arrayChildName]: arrayTypeChildren[arrayChildName]\n };\n });\n return newFlattenedProps;\n }\n warnOnInvalidChildren(child, nestedChildren) {\n invariant(\n VALID_TAG_NAMES.some((name) => child.type === name),\n typeof child.type === \"function\" ? `You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.` : `Only elements types ${VALID_TAG_NAMES.join(\n \", \"\n )} are allowed. Helmet does not support rendering <${child.type}> elements. Refer to our API for more information.`\n );\n invariant(\n !nestedChildren || typeof nestedChildren === \"string\" || Array.isArray(nestedChildren) && !nestedChildren.some((nestedChild) => typeof nestedChild !== \"string\"),\n `Helmet expects a string as a child of <${child.type}>. Did you forget to wrap your children in braces? ( <${child.type}>{\\`\\`}</${child.type}> ) Refer to our API for more information.`\n );\n return true;\n }\n mapChildrenToProps(children, newProps) {\n let arrayTypeChildren = {};\n React3.Children.forEach(children, (child) => {\n if (!child || !child.props) {\n return;\n }\n const { children: nestedChildren, ...childProps } = child.props;\n const newChildProps = Object.keys(childProps).reduce((obj, key) => {\n obj[HTML_TAG_MAP[key] || key] = childProps[key];\n return obj;\n }, {});\n let { type } = child;\n if (typeof type === \"symbol\") {\n type = type.toString();\n } else {\n this.warnOnInvalidChildren(child, nestedChildren);\n }\n switch (type) {\n case \"Symbol(react.fragment)\" /* FRAGMENT */:\n newProps = this.mapChildrenToProps(nestedChildren, newProps);\n break;\n case \"link\" /* LINK */:\n case \"meta\" /* META */:\n case \"noscript\" /* NOSCRIPT */:\n case \"script\" /* SCRIPT */:\n case \"style\" /* STYLE */:\n arrayTypeChildren = this.flattenArrayTypeChildren(\n child,\n arrayTypeChildren,\n newChildProps,\n nestedChildren\n );\n break;\n default:\n newProps = this.mapObjectTypeChildren(child, newProps, newChildProps, nestedChildren);\n break;\n }\n });\n return this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n }\n render() {\n const { children, ...props } = this.props;\n let newProps = { ...props };\n let { helmetData } = props;\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n if (helmetData && !(helmetData instanceof HelmetData)) {\n const data = helmetData;\n helmetData = new HelmetData(data.context, true);\n delete newProps.helmetData;\n }\n return helmetData ? /* @__PURE__ */ React3.createElement(HelmetDispatcher, { ...newProps, context: helmetData.value }) : /* @__PURE__ */ React3.createElement(Context.Consumer, null, (context) => /* @__PURE__ */ React3.createElement(HelmetDispatcher, { ...newProps, context }));\n }\n};\nexport {\n Helmet,\n HelmetData,\n HelmetProvider\n};\n","import React from \"react\";\nimport { Link, type LinkProps, useLocation } from \"react-router-dom\";\n\n/**\n * Link that scrolls to anchor even if the hash is already set in the URL.\n */\nexport const AnchorLink = (props: LinkProps) => {\n const location = useLocation();\n const hash = typeof props.to === \"string\" ? props.to : props.to.hash;\n\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (!hash?.startsWith(\"#\") || hash !== location.hash) return;\n\n event.preventDefault();\n document.getElementById(hash.slice(1))?.scrollIntoView();\n };\n\n return <Link onClick={handleClick} {...props} />;\n};\n"],"names":["emptyComponents","MDXContext","React","useMDXComponents","components","contextComponents","MDXProvider","properties","allComponents","hasElementType","hasMap","hasSet","hasArrayBuffer","equal","a","b","length","i","keys","it","reactFastCompare","error","invariant","condition","format","c","d","e","f","args","argIndex","browser","shallowequal","objA","objB","compare","compareContext","ret","keysA","keysB","bHasOwnProperty","idx","key","valueA","valueB","TAG_NAMES","TAG_NAMES2","SEO_PRIORITY_TAGS","VALID_TAG_NAMES","REACT_TAG_MAP","HTML_TAG_MAP","carry","value","HELMET_ATTRIBUTE","HELMET_PROPS","getInnermostProperty","propsList","property","props","getTitleFromPropsList","innermostTitle","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","current","getBaseTagFromPropsList","primaryAttributes","innermostBaseTag","tag","lowerCaseAttributeKey","warn","msg","getTagsFromPropsList","tagName","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","keys2","attributeKey","tagUnion","getAnyTrueFromPropsList","checkedTag","index","reducePropsToState","flattenArray","possibleArray","checkIfPropsMatch","toMatch","prioritizer","elementsList","propsToMatch","acc","elementAttrs","without","obj","SELF_CLOSING_TAGS","encodeSpecialCharacters","str","encode","generateElementAttributesAsString","attributes","attr","generateTitleAsString","type","title","attributeString","flattenedTitle","generateTagsAsString","tags","t","attributeHtml","attribute","string","tagContent","isSelfClosing","convertElementAttributesToReactProps","initProps","mapped","generateTitleAsReactComponent","_type","generateTagsAsReactComponent","mappedTag","mappedAttribute","content","getMethodsForTag","getPriorityMethods","metaTags","linkTags","scriptTags","meta","link","script","mapStateOnServer","baseTag","bodyAttributes","htmlAttributes","noscriptTags","styleTags","titleAttributes","prioritizeSeoTags","priorityMethods","server_default","instances","isDocument","HelmetData","context","canUseDOM","__publicField","serverState","instance","defaultValue","Context","React2","HelmetProvider","_a","Component","updateTags","headElement","tagNodes","oldTags","newTags","indexToDelete","newElement","existingTag","updateAttributes","elementTag","helmetAttributeString","helmetAttributes","attributesToRemove","attributeKeys","indexToSave","updateTitle","commitTagChanges","newState","cb","onChangeClientState","tagUpdates","addedTags","removedTags","_helmetCallback","handleStateChangeOnClient","client_default","HelmetDispatcher","Component2","nextProps","shallowEqual","helmetInstances","setHelmet","state","Helmet","Component3","fastCompare","child","nestedChildren","arrayTypeChildren","newChildProps","newProps","newFlattenedProps","arrayChildName","name","nestedChild","children","React3","childProps","helmetData","data","AnchorLink","location","useLocation","hash","handleClick","event","jsx","Link"],"mappings":";;;;;;;;AA2BA,MAAMA,IAAkB,CAAE,GAEpBC,IAAaC,EAAM,cAAcF,CAAe;AAU/C,SAASG,GAAiBC,GAAY;AAC3C,QAAMC,IAAoBH,EAAM,WAAWD,CAAU;AAGrD,SAAOC,EAAM;AAAA,IACX,WAAY;AAEV,aAAI,OAAOE,KAAe,aACjBA,EAAWC,CAAiB,IAG9B,EAAC,GAAGA,GAAmB,GAAGD,EAAU;AAAA,IAC5C;AAAA,IACD,CAACC,GAAmBD,CAAU;AAAA,EAC/B;AACH;AAWO,SAASE,GAAYC,GAAY;AAEtC,MAAIC;AAEJ,SAAID,EAAW,uBACbC,IACE,OAAOD,EAAW,cAAe,aAC7BA,EAAW,WAAWP,CAAe,IACrCO,EAAW,cAAcP,IAE/BQ,IAAgBL,GAAiBI,EAAW,UAAU,GAGjDL,EAAM;AAAA,IACXD,EAAW;AAAA,IACX,EAAC,OAAOO,EAAa;AAAA,IACrBD,EAAW;AAAA,EACZ;AACH;ACjFA,IAAIE,KAAiB,OAAO,UAAY,KACpCC,KAAS,OAAO,OAAQ,YACxBC,KAAS,OAAO,OAAQ,YACxBC,KAAiB,OAAO,eAAgB,cAAc,CAAC,CAAC,YAAY;AAIxE,SAASC,EAAMC,GAAGC,GAAG;AAEnB,MAAID,MAAMC,EAAG,QAAO;AAEpB,MAAID,KAAKC,KAAK,OAAOD,KAAK,YAAY,OAAOC,KAAK,UAAU;AAC1D,QAAID,EAAE,gBAAgBC,EAAE,YAAa,QAAO;AAE5C,QAAIC,GAAQC,GAAGC;AACf,QAAI,MAAM,QAAQJ,CAAC,GAAG;AAEpB,UADAE,IAASF,EAAE,QACPE,KAAUD,EAAE,OAAQ,QAAO;AAC/B,WAAKE,IAAID,GAAQC,QAAQ;AACvB,YAAI,CAACJ,EAAMC,EAAEG,CAAC,GAAGF,EAAEE,CAAC,CAAC,EAAG,QAAO;AACjC,aAAO;AAAA,IACR;AAsBD,QAAIE;AACJ,QAAIT,MAAWI,aAAa,OAASC,aAAa,KAAM;AACtD,UAAID,EAAE,SAASC,EAAE,KAAM,QAAO;AAE9B,WADAI,IAAKL,EAAE,WACA,EAAEG,IAAIE,EAAG,KAAM,GAAE;AACtB,YAAI,CAACJ,EAAE,IAAIE,EAAE,MAAM,CAAC,CAAC,EAAG,QAAO;AAEjC,WADAE,IAAKL,EAAE,WACA,EAAEG,IAAIE,EAAG,KAAM,GAAE;AACtB,YAAI,CAACN,EAAMI,EAAE,MAAM,CAAC,GAAGF,EAAE,IAAIE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAG,QAAO;AACpD,aAAO;AAAA,IACR;AAED,QAAIN,MAAWG,aAAa,OAASC,aAAa,KAAM;AACtD,UAAID,EAAE,SAASC,EAAE,KAAM,QAAO;AAE9B,WADAI,IAAKL,EAAE,WACA,EAAEG,IAAIE,EAAG,KAAM,GAAE;AACtB,YAAI,CAACJ,EAAE,IAAIE,EAAE,MAAM,CAAC,CAAC,EAAG,QAAO;AACjC,aAAO;AAAA,IACR;AAGD,QAAIL,MAAkB,YAAY,OAAOE,CAAC,KAAK,YAAY,OAAOC,CAAC,GAAG;AAEpE,UADAC,IAASF,EAAE,QACPE,KAAUD,EAAE,OAAQ,QAAO;AAC/B,WAAKE,IAAID,GAAQC,QAAQ;AACvB,YAAIH,EAAEG,CAAC,MAAMF,EAAEE,CAAC,EAAG,QAAO;AAC5B,aAAO;AAAA,IACR;AAED,QAAIH,EAAE,gBAAgB,OAAQ,QAAOA,EAAE,WAAWC,EAAE,UAAUD,EAAE,UAAUC,EAAE;AAK5E,QAAID,EAAE,YAAY,OAAO,UAAU,WAAW,OAAOA,EAAE,WAAY,cAAc,OAAOC,EAAE,WAAY,WAAY,QAAOD,EAAE,cAAcC,EAAE;AAC3I,QAAID,EAAE,aAAa,OAAO,UAAU,YAAY,OAAOA,EAAE,YAAa,cAAc,OAAOC,EAAE,YAAa,WAAY,QAAOD,EAAE,eAAeC,EAAE;AAKhJ,QAFAG,IAAO,OAAO,KAAKJ,CAAC,GACpBE,IAASE,EAAK,QACVF,MAAW,OAAO,KAAKD,CAAC,EAAE,OAAQ,QAAO;AAE7C,SAAKE,IAAID,GAAQC,QAAQ;AACvB,UAAI,CAAC,OAAO,UAAU,eAAe,KAAKF,GAAGG,EAAKD,CAAC,CAAC,EAAG,QAAO;AAKhE,QAAIR,MAAkBK,aAAa,QAAS,QAAO;AAGnD,SAAKG,IAAID,GAAQC,QAAQ;AACvB,UAAK,GAAAC,EAAKD,CAAC,MAAM,YAAYC,EAAKD,CAAC,MAAM,SAASC,EAAKD,CAAC,MAAM,UAAUH,EAAE,aAatE,CAACD,EAAMC,EAAEI,EAAKD,CAAC,CAAC,GAAGF,EAAEG,EAAKD,CAAC,CAAC,CAAC;AAAG,eAAO;AAK7C,WAAO;AAAA,EACR;AAED,SAAOH,MAAMA,KAAKC,MAAMA;AAC1B;AAGA,IAAAK,KAAiB,SAAiBN,GAAGC,GAAG;AACtC,MAAI;AACF,WAAOF,EAAMC,GAAGC,CAAC;AAAA,EAClB,SAAQM,GAAO;AACd,SAAMA,EAAM,WAAW,IAAI,MAAM,kBAAkB;AAMjD,qBAAQ,KAAK,gDAAgD,GACtD;AAGT,UAAMA;AAAA,EACP;AACH;;ACtHA,IAAIC,KAAY,SAASC,GAAWC,GAAQV,GAAGC,GAAGU,GAAGC,GAAGC,GAAGC,GAAG;AAC5D,MAAI,QAAQ,IAAI,aAAa,gBACvBJ,MAAW;AACb,UAAM,IAAI,MAAM,8CAA8C;AAIlE,MAAI,CAACD,GAAW;AACd,QAAIF;AACJ,QAAIG,MAAW;AACb,MAAAH,IAAQ,IAAI;AAAA,QACV;AAAA,MAER;AAAA,SACW;AACL,UAAIQ,IAAO,CAACf,GAAGC,GAAGU,GAAGC,GAAGC,GAAGC,CAAC,GACxBE,IAAW;AACf,MAAAT,IAAQ,IAAI;AAAA,QACVG,EAAO,QAAQ,OAAO,WAAW;AAAE,iBAAOK,EAAKC,GAAU;AAAA,SAAI;AAAA,MACrE,GACMT,EAAM,OAAO;AAAA,IACd;AAED,UAAAA,EAAM,cAAc,GACdA;AAAA,EACP;AACH,GAEAU,KAAiBT;;IC9CjBU,KAAiB,SAAsBC,GAAMC,GAAMC,GAASC,GAAgB;AAC1E,MAAIC,IAAMF,IAAUA,EAAQ,KAAKC,GAAgBH,GAAMC,CAAI,IAAI;AAE/D,MAAIG,MAAQ;AACV,WAAO,CAAC,CAACA;AAGX,MAAIJ,MAASC;AACX,WAAO;AAGT,MAAI,OAAOD,KAAS,YAAY,CAACA,KAAQ,OAAOC,KAAS,YAAY,CAACA;AACpE,WAAO;AAGT,MAAII,IAAQ,OAAO,KAAKL,CAAI,GACxBM,IAAQ,OAAO,KAAKL,CAAI;AAE5B,MAAII,EAAM,WAAWC,EAAM;AACzB,WAAO;AAMT,WAHIC,IAAkB,OAAO,UAAU,eAAe,KAAKN,CAAI,GAGtDO,IAAM,GAAGA,IAAMH,EAAM,QAAQG,KAAO;AAC3C,QAAIC,IAAMJ,EAAMG,CAAG;AAEnB,QAAI,CAACD,EAAgBE,CAAG;AACtB,aAAO;AAGT,QAAIC,IAASV,EAAKS,CAAG,GACjBE,IAASV,EAAKQ,CAAG;AAIrB,QAFAL,IAAMF,IAAUA,EAAQ,KAAKC,GAAgBO,GAAQC,GAAQF,CAAG,IAAI,QAEhEL,MAAQ,MAAUA,MAAQ,UAAUM,MAAWC;AACjD,aAAO;AAAA,EAEV;AAED,SAAO;AACT;;ACjCA,IAAIC,IAA6B,kBAACC,OAChCA,EAAW,OAAU,QACrBA,EAAW,OAAU,QACrBA,EAAW,OAAU,QACrBA,EAAW,OAAU,QACrBA,EAAW,OAAU,QACrBA,EAAW,OAAU,QACrBA,EAAW,WAAc,YACzBA,EAAW,SAAY,UACvBA,EAAW,QAAW,SACtBA,EAAW,QAAW,SACtBA,EAAW,WAAc,0BAClBA,IACND,KAAa,CAAA,CAAE,GACdE,IAAoB;AAAA,EACtB,MAAM,EAAE,KAAK,CAAC,WAAW,aAAa,WAAW,EAAG;AAAA,EACpD,QAAQ,EAAE,MAAM,CAAC,qBAAqB,EAAG;AAAA,EACzC,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,MAAM,CAAC,aAAa,UAAU,aAAa;AAAA,IAC3C,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACF;AACH,GACIC,IAAkB,OAAO,OAAOH,CAAS,GACzCI,IAAgB;AAAA,EAClB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AACZ,GACIC,KAAe,OAAO,QAAQD,CAAa,EAAE;AAAA,EAC/C,CAACE,GAAO,CAACT,GAAKU,CAAK,OACjBD,EAAMC,CAAK,IAAIV,GACRS;AAAA,EAET,CAAE;AACJ,GACIE,IAAmB,WAGnBC,IAAe;AAAA,EACjB,eAAe;AAAA,EACf,OAAO;AAAA,EACP,2BAA2B;AAAA,EAC3B,wBAAwB;AAAA,EACxB,gBAAgB;AAAA,EAChB,qBAAqB;AACvB,GACIC,IAAuB,CAACC,GAAWC,MAAa;AAClD,WAASxC,IAAIuC,EAAU,SAAS,GAAGvC,KAAK,GAAGA,KAAK,GAAG;AACjD,UAAMyC,IAAQF,EAAUvC,CAAC;AACzB,QAAI,OAAO,UAAU,eAAe,KAAKyC,GAAOD,CAAQ;AACtD,aAAOC,EAAMD,CAAQ;AAAA,EAExB;AACD,SAAO;AACT,GACIE,KAAwB,CAACH,MAAc;AACzC,MAAII,IAAiBL;AAAA,IAAqBC;AAAA,IAAW;AAAA;AAAA,EAAO;AAC5D,QAAMK,IAAoBN,EAAqBC,GAAWF,EAAa,cAAc;AAIrF,MAHI,MAAM,QAAQM,CAAc,MAC9BA,IAAiBA,EAAe,KAAK,EAAE,IAErCC,KAAqBD;AACvB,WAAOC,EAAkB,QAAQ,OAAO,MAAMD,CAAc;AAE9D,QAAME,IAAwBP,EAAqBC,GAAWF,EAAa,aAAa;AACxF,SAAOM,KAAkBE,KAAyB;AACpD,GACIC,KAAyB,CAACP,MAAcD,EAAqBC,GAAWF,EAAa,sBAAsB,MAAM,MAAM;AAC3H,IACIU,IAA6B,CAACC,GAAST,MAAcA,EAAU,OAAO,CAACE,MAAU,OAAOA,EAAMO,CAAO,IAAM,GAAW,EAAE,IAAI,CAACP,MAAUA,EAAMO,CAAO,CAAC,EAAE,OAAO,CAACC,GAAUC,OAAa,EAAE,GAAGD,GAAU,GAAGC,MAAY,CAAE,CAAA,GACtNC,KAA0B,CAACC,GAAmBb,MAAcA,EAAU,OAAO,CAACE,MAAU,OAAOA,EAAM,OAAuB,GAAW,EAAE,IAAI,CAACA,MAAUA,EAAM,IAAkB,EAAE,QAAO,EAAG,OAAO,CAACY,GAAkBC,MAAQ;AAChO,MAAI,CAACD,EAAiB,QAAQ;AAC5B,UAAMpD,IAAO,OAAO,KAAKqD,CAAG;AAC5B,aAAStD,IAAI,GAAGA,IAAIC,EAAK,QAAQD,KAAK,GAAG;AAEvC,YAAMuD,IADetD,EAAKD,CAAC,EACgB;AAC3C,UAAIoD,EAAkB,QAAQG,CAAqB,MAAM,MAAMD,EAAIC,CAAqB;AACtF,eAAOF,EAAiB,OAAOC,CAAG;AAAA,IAErC;AAAA,EACF;AACD,SAAOD;AACT,GAAG,CAAE,CAAA,GACDG,KAAO,CAACC,MAAQ,WAAW,OAAO,QAAQ,QAAS,cAAc,QAAQ,KAAKA,CAAG,GACjFC,IAAuB,CAACC,GAASP,GAAmBb,MAAc;AACpE,QAAMqB,IAAmB,CAAA;AACzB,SAAOrB,EAAU,OAAO,CAACE,MACnB,MAAM,QAAQA,EAAMkB,CAAO,CAAC,IACvB,MAEL,OAAOlB,EAAMkB,CAAO,IAAM,OAC5BH;AAAA,IACE,WAAWG,CAAO,mDAAmD,OAAOlB,EAAMkB,CAAO,CAAC;AAAA,EAClG,GAEW,GACR,EAAE,IAAI,CAAClB,MAAUA,EAAMkB,CAAO,CAAC,EAAE,UAAU,OAAO,CAACE,GAAcC,MAAiB;AACjF,UAAMC,IAAmB,CAAA;AACzB,IAAAD,EAAa,OAAO,CAACR,MAAQ;AAC3B,UAAIU;AACJ,YAAMC,IAAQ,OAAO,KAAKX,CAAG;AAC7B,eAAStD,IAAI,GAAGA,IAAIiE,EAAM,QAAQjE,KAAK,GAAG;AACxC,cAAMkE,IAAeD,EAAMjE,CAAC,GACtBuD,IAAwBW,EAAa;AAC3C,QAAId,EAAkB,QAAQG,CAAqB,MAAM,MAAM,EAAES,MAAwB,SAAmBV,EAAIU,CAAmB,EAAE,YAAW,MAAO,gBAAgB,EAAET,MAA0B,SAAmBD,EAAIC,CAAqB,EAAE,kBAAkB,kBACjQS,IAAsBT,IAEpBH,EAAkB,QAAQc,CAAY,MAAM,OAAOA,MAAiB,eAAgCA,MAAiB,aAA4BA,MAAiB,gBACpKF,IAAsBE;AAAA,MAEzB;AACD,UAAI,CAACF,KAAuB,CAACV,EAAIU,CAAmB;AAClD,eAAO;AAET,YAAM7B,IAAQmB,EAAIU,CAAmB,EAAE,YAAW;AAOlD,aANKJ,EAAiBI,CAAmB,MACvCJ,EAAiBI,CAAmB,IAAI,KAErCD,EAAiBC,CAAmB,MACvCD,EAAiBC,CAAmB,IAAI,KAErCJ,EAAiBI,CAAmB,EAAE7B,CAAK,IAIzC,MAHL4B,EAAiBC,CAAmB,EAAE7B,CAAK,IAAI,IACxC;AAAA,IAGf,CAAK,EAAE,QAAS,EAAC,QAAQ,CAACmB,MAAQO,EAAa,KAAKP,CAAG,CAAC;AACpD,UAAMrD,IAAO,OAAO,KAAK8D,CAAgB;AACzC,aAAS/D,IAAI,GAAGA,IAAIC,EAAK,QAAQD,KAAK,GAAG;AACvC,YAAMkE,IAAejE,EAAKD,CAAC,GACrBmE,IAAW;AAAA,QACf,GAAGP,EAAiBM,CAAY;AAAA,QAChC,GAAGH,EAAiBG,CAAY;AAAA,MACxC;AACM,MAAAN,EAAiBM,CAAY,IAAIC;AAAA,IAClC;AACD,WAAON;AAAA,EACX,GAAK,CAAE,CAAA,EAAE;AACT,GACIO,KAA0B,CAAC7B,GAAW8B,MAAe;AACvD,MAAI,MAAM,QAAQ9B,CAAS,KAAKA,EAAU;AACxC,aAAS+B,IAAQ,GAAGA,IAAQ/B,EAAU,QAAQ+B,KAAS;AAErD,UADa/B,EAAU+B,CAAK,EACnBD,CAAU;AACjB,eAAO;AAAA;AAIb,SAAO;AACT,GACIE,KAAqB,CAAChC,OAAe;AAAA,EACvC,SAASY,GAAwB;AAAA,IAAC;AAAA;AAAA,EAAM,GAAcZ,CAAS;AAAA,EAC/D,gBAAgBQ,EAA2B,kBAA6BR,CAAS;AAAA,EACjF,OAAOD,EAAqBC,GAAWF,EAAa,KAAK;AAAA,EACzD,QAAQC,EAAqBC,GAAWF,EAAa,yBAAyB;AAAA,EAC9E,gBAAgBU,EAA2B,kBAA6BR,CAAS;AAAA,EACjF,UAAUmB;AAAA,IACR;AAAA,IACA;AAAA,MAAC;AAAA,MAAiB;AAAA;AAAA,IAAkB;AAAA,IACpCnB;AAAA,EACD;AAAA,EACD,UAAUmB;AAAA,IACR;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IACD;AAAA,IACDnB;AAAA,EACD;AAAA,EACD,cAAcmB,EAAqB,YAA2B;AAAA,IAAC;AAAA;AAAA,EAAW,GAAoBnB,CAAS;AAAA,EACvG,qBAAqBO,GAAuBP,CAAS;AAAA,EACrD,YAAYmB;AAAA,IACV;AAAA,IACA;AAAA,MAAC;AAAA,MAAiB;AAAA;AAAA,IAA6B;AAAA,IAC/CnB;AAAA,EACD;AAAA,EACD,WAAWmB,EAAqB,SAAqB;AAAA,IAAC;AAAA;AAAA,EAAS,GAAkBnB,CAAS;AAAA,EAC1F,OAAOG,GAAsBH,CAAS;AAAA,EACtC,iBAAiBQ,EAA2B,mBAA+BR,CAAS;AAAA,EACpF,mBAAmB6B,GAAwB7B,GAAWF,EAAa,mBAAmB;AACxF,IACImC,IAAe,CAACC,MAAkB,MAAM,QAAQA,CAAa,IAAIA,EAAc,KAAK,EAAE,IAAIA,GAC1FC,KAAoB,CAACjC,GAAOkC,MAAY;AAC1C,QAAM1E,IAAO,OAAO,KAAKwC,CAAK;AAC9B,WAASzC,IAAI,GAAGA,IAAIC,EAAK,QAAQD,KAAK;AACpC,QAAI2E,EAAQ1E,EAAKD,CAAC,CAAC,KAAK2E,EAAQ1E,EAAKD,CAAC,CAAC,EAAE,SAASyC,EAAMxC,EAAKD,CAAC,CAAC,CAAC;AAC9D,aAAO;AAGX,SAAO;AACT,GACI4E,IAAc,CAACC,GAAcC,MAC3B,MAAM,QAAQD,CAAY,IACrBA,EAAa;AAAA,EAClB,CAACE,GAAKC,OACAN,GAAkBM,GAAcF,CAAY,IAC9CC,EAAI,SAAS,KAAKC,CAAY,IAE9BD,EAAI,QAAQ,KAAKC,CAAY,GAExBD;AAAA,EAET,EAAE,UAAU,CAAA,GAAI,SAAS,GAAI;AACnC,IAES,EAAE,SAASF,GAAc,UAAU,CAAE,EAAA,GAE1CI,IAAU,CAACC,GAAKzD,OACX;AAAA,EACL,GAAGyD;AAAA,EACH,CAACzD,CAAG,GAAG;AACX,IAII0D,KAAoB;AAAA,EAAC;AAAA,EAA2B;AAAA,EAAuB;AAAA;AAAO,GAC9EC,IAA0B,CAACC,GAAKC,IAAS,OACvCA,MAAW,KACN,OAAOD,CAAG,IAEZ,OAAOA,CAAG,EAAE,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,QAAQ,EAAE,QAAQ,MAAM,QAAQ,GAElIE,IAAoC,CAACC,MAAe,OAAO,KAAKA,CAAU,EAAE,OAAO,CAACH,GAAK5D,MAAQ;AACnG,QAAMgE,IAAO,OAAOD,EAAW/D,CAAG,IAAM,MAAc,GAAGA,CAAG,KAAK+D,EAAW/D,CAAG,CAAC,MAAM,GAAGA,CAAG;AAC5F,SAAO4D,IAAM,GAAGA,CAAG,IAAII,CAAI,KAAKA;AAClC,GAAG,EAAE,GACDC,KAAwB,CAACC,GAAMC,GAAOJ,GAAYF,MAAW;AAC/D,QAAMO,IAAkBN,EAAkCC,CAAU,GAC9DM,IAAiBtB,EAAaoB,CAAK;AACzC,SAAOC,IAAkB,IAAIF,CAAI,IAAIvD,CAAgB,WAAWyD,CAAe,IAAIT;AAAA,IACjFU;AAAA,IACAR;AAAA,EACJ,CAAG,KAAKK,CAAI,MAAM,IAAIA,CAAI,IAAIvD,CAAgB,WAAWgD;AAAA,IACrDU;AAAA,IACAR;AAAA,EACJ,CAAG,KAAKK,CAAI;AACZ,GACII,KAAuB,CAACJ,GAAMK,GAAMV,IAAS,OAASU,EAAK,OAAO,CAACX,GAAKY,MAAM;AAChF,QAAM3C,IAAM2C,GACNC,IAAgB,OAAO,KAAK5C,CAAG,EAAE;AAAA,IACrC,CAAC6C,MAAc,EAAEA,MAAc,eAAgCA,MAAc;AAAA,EACjF,EAAI,OAAO,CAACC,GAAQD,MAAc;AAC9B,UAAMV,IAAO,OAAOnC,EAAI6C,CAAS,IAAM,MAAcA,IAAY,GAAGA,CAAS,KAAKf,EAAwB9B,EAAI6C,CAAS,GAAGb,CAAM,CAAC;AACjI,WAAOc,IAAS,GAAGA,CAAM,IAAIX,CAAI,KAAKA;AAAA,EACvC,GAAE,EAAE,GACCY,IAAa/C,EAAI,aAAaA,EAAI,WAAW,IAC7CgD,IAAgBnB,GAAkB,QAAQQ,CAAI,MAAM;AAC1D,SAAO,GAAGN,CAAG,IAAIM,CAAI,IAAIvD,CAAgB,WAAW8D,CAAa,GAAGI,IAAgB,OAAO,IAAID,CAAU,KAAKV,CAAI,GAAG;AACvH,GAAG,EAAE,GACDY,IAAuC,CAACf,GAAYgB,IAAY,CAAE,MAAK,OAAO,KAAKhB,CAAU,EAAE,OAAO,CAACN,GAAKzD,MAAQ;AACtH,QAAMgF,IAASzE,EAAcP,CAAG;AAChC,SAAAyD,EAAIuB,KAAUhF,CAAG,IAAI+D,EAAW/D,CAAG,GAC5ByD;AACT,GAAGsB,CAAS,GACRE,KAAgC,CAACC,GAAOf,GAAOJ,MAAe;AAChE,QAAMgB,IAAY;AAAA,IAChB,KAAKZ;AAAA,IACL,CAACxD,CAAgB,GAAG;AAAA,EACxB,GACQK,IAAQ8D,EAAqCf,GAAYgB,CAAS;AACxE,SAAO,CAACvH,EAAM,cAAc,SAAqBwD,GAAOmD,CAAK,CAAC;AAChE,GACIgB,IAA+B,CAACjB,GAAMK,MAASA,EAAK,IAAI,CAAC1C,GAAKtD,MAAM;AACtE,QAAM6G,IAAY;AAAA,IAChB,KAAK7G;AAAA,IACL,CAACoC,CAAgB,GAAG;AAAA,EACxB;AACE,gBAAO,KAAKkB,CAAG,EAAE,QAAQ,CAAC6C,MAAc;AAEtC,UAAMW,IADS9E,EAAcmE,CAAS,KACJA;AAClC,QAAIW,MAAoB,eAAgCA,MAAoB,WAA0B;AACpG,YAAMC,IAAUzD,EAAI,aAAaA,EAAI;AACrC,MAAAuD,EAAU,0BAA0B,EAAE,QAAQE,EAAO;AAAA,IAC3D;AACM,MAAAF,EAAUC,CAAe,IAAIxD,EAAI6C,CAAS;AAAA,EAEhD,CAAG,GACMlH,EAAM,cAAc0G,GAAMkB,CAAS;AAC5C,CAAC,GACGG,IAAmB,CAACrB,GAAMK,GAAMV,IAAS,OAAS;AACpD,UAAQK,GAAI;AAAA,IACV,KAAK;AACH,aAAO;AAAA,QACL,aAAa,MAAMe,GAA8Bf,GAAMK,EAAK,OAAOA,EAAK,eAAe;AAAA,QACvF,UAAU,MAAMN,GAAsBC,GAAMK,EAAK,OAAOA,EAAK,iBAAiBV,CAAM;AAAA,MAC5F;AAAA,IACI,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,QACL,aAAa,MAAMiB,EAAqCP,CAAI;AAAA,QAC5D,UAAU,MAAMT,EAAkCS,CAAI;AAAA,MAC9D;AAAA,IACI;AACE,aAAO;AAAA,QACL,aAAa,MAAMY,EAA6BjB,GAAMK,CAAI;AAAA,QAC1D,UAAU,MAAMD,GAAqBJ,GAAMK,GAAMV,CAAM;AAAA,MAC/D;AAAA,EACG;AACH,GACI2B,KAAqB,CAAC,EAAE,UAAAC,GAAU,UAAAC,GAAU,YAAAC,GAAY,QAAA9B,EAAM,MAAO;AACvE,QAAM+B,IAAOzC,EAAYsC,GAAUpF,EAAkB,IAAI,GACnDwF,IAAO1C,EAAYuC,GAAUrF,EAAkB,IAAI,GACnDyF,IAAS3C,EAAYwC,GAAYtF,EAAkB,MAAM;AAgB/D,SAAO;AAAA,IACL,iBAhBsB;AAAA,MACtB,aAAa,MAAM;AAAA,QACjB,GAAG8E,EAA6B,QAAmBS,EAAK,QAAQ;AAAA,QAChE,GAAGT,EAA6B,QAAmBU,EAAK,QAAQ;AAAA,QAChE,GAAGV,EAA6B,UAAuBW,EAAO,QAAQ;AAAA,MACvE;AAAA,MACD,UAAU;AAAA;AAAA,QAER,GAAGP,EAAiB,QAAmBK,EAAK,UAAU/B,CAAM,CAAC,IAAI0B;AAAA,UAC/D;AAAA,UACAM,EAAK;AAAA,UACLhC;AAAA,QACR,CAAO,IAAI0B,EAAiB,UAAuBO,EAAO,UAAUjC,CAAM,CAAC;AAAA;AAAA,IAE3E;AAAA,IAGI,UAAU+B,EAAK;AAAA,IACf,UAAUC,EAAK;AAAA,IACf,YAAYC,EAAO;AAAA,EACvB;AACA,GACIC,KAAmB,CAAC/E,MAAU;AAChC,QAAM;AAAA,IACJ,SAAAgF;AAAA,IACA,gBAAAC;AAAA,IACA,QAAApC,IAAS;AAAA,IACT,gBAAAqC;AAAA,IACA,cAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAAjC,IAAQ;AAAA,IACR,iBAAAkC;AAAA,IACA,mBAAAC;AAAA,EACD,IAAGtF;AACJ,MAAI,EAAE,UAAA0E,GAAU,UAAAD,GAAU,YAAAE,EAAU,IAAK3E,GACrCuF,IAAkB;AAAA,IACpB,aAAa,MAAM;AAAA,IAClB;AAAA,IACD,UAAU,MAAM;AAAA,EACpB;AACE,SAAID,MACD,EAAE,iBAAAC,GAAiB,UAAAb,GAAU,UAAAD,GAAU,YAAAE,MAAeH,GAAmBxE,CAAK,IAE1E;AAAA,IACL,UAAUuF;AAAA,IACV,MAAMhB,EAAiB,QAAmBS,GAASnC,CAAM;AAAA,IACzD,gBAAgB0B,EAAiB,kBAA6BU,GAAgBpC,CAAM;AAAA,IACpF,gBAAgB0B,EAAiB,kBAA6BW,GAAgBrC,CAAM;AAAA,IACpF,MAAM0B,EAAiB,QAAmBG,GAAU7B,CAAM;AAAA,IAC1D,MAAM0B,EAAiB,QAAmBE,GAAU5B,CAAM;AAAA,IAC1D,UAAU0B,EAAiB,YAA2BY,GAActC,CAAM;AAAA,IAC1E,QAAQ0B,EAAiB,UAAuBI,GAAY9B,CAAM;AAAA,IAClE,OAAO0B,EAAiB,SAAqBa,GAAWvC,CAAM;AAAA,IAC9D,OAAO0B,EAAiB,SAAqB,EAAE,OAAApB,GAAO,iBAAAkC,EAAiB,GAAExC,CAAM;AAAA,EACnF;AACA,GACI2C,IAAiBT,IAGjBU,IAAY,CAAA,GACZC,IAAa,CAAC,EAAE,OAAO,SAAW,OAAe,OAAO,YAAY,OAAO,SAAS,gBACpFC,IAAa,MAAM;AAAA,EAmBrB,YAAYC,GAASC,GAAW;AAlBhC,IAAAC,EAAA,mBAAY,CAAA;AACZ,IAAAA,EAAA,mBAAYJ;AACZ,IAAAI,EAAA;AACA,IAAAA,EAAA,eAAQ;AAAA,MACN,WAAW,CAACC,MAAgB;AAC1B,aAAK,QAAQ,SAASA;AAAA,MACvB;AAAA,MACD,iBAAiB;AAAA,QACf,KAAK,MAAM,KAAK,YAAYN,IAAY,KAAK;AAAA,QAC7C,KAAK,CAACO,MAAa;AACjB,WAAC,KAAK,YAAYP,IAAY,KAAK,WAAW,KAAKO,CAAQ;AAAA,QAC5D;AAAA,QACD,QAAQ,CAACA,MAAa;AACpB,gBAAMnE,KAAS,KAAK,YAAY4D,IAAY,KAAK,WAAW,QAAQO,CAAQ;AAC5E,WAAC,KAAK,YAAYP,IAAY,KAAK,WAAW,OAAO5D,GAAO,CAAC;AAAA,QAC9D;AAAA,MACF;AAAA,IACL;AAEI,SAAK,UAAU+D,GACf,KAAK,YAAYC,KAAa,IACzBA,MACHD,EAAQ,SAASJ,EAAe;AAAA,MAC9B,SAAS,CAAE;AAAA,MACX,gBAAgB,CAAE;AAAA,MAClB,yBAAyB;AAAA,MACzB,gBAAgB,CAAE;AAAA,MAClB,UAAU,CAAE;AAAA,MACZ,UAAU,CAAE;AAAA,MACZ,cAAc,CAAE;AAAA,MAChB,YAAY,CAAE;AAAA,MACd,WAAW,CAAE;AAAA,MACb,OAAO;AAAA,MACP,iBAAiB,CAAE;AAAA,IAC3B,CAAO;AAAA,EAEJ;AACH,GAGIS,KAAe,CAAA,GACfC,KAAUC,EAAO,cAAcF,EAAY,MAC3CG,MAAiBC,IAAA,cAA8BC,EAAU;AAAA,EAG3D,YAAYtG,GAAO;AACjB,UAAMA,CAAK;AAFb,IAAA8F,EAAA;AAGE,SAAK,aAAa,IAAIH,EAAW,KAAK,MAAM,WAAW,CAAE,GAAEU,EAAgB,SAAS;AAAA,EACrF;AAAA,EACD,SAAS;AACP,WAAuBF,gBAAAA,EAAO,cAAcD,GAAQ,UAAU,EAAE,OAAO,KAAK,WAAW,MAAO,GAAE,KAAK,MAAM,QAAQ;AAAA,EACpH;AACH,GATEJ,EADmBO,GACZ,aAAYX,IADAW,IAiBjBE,IAAa,CAACrD,GAAMK,MAAS;AAC/B,QAAMiD,IAAc,SAAS,QAAQ,SAAS;AAAA,IAAc;AAAA;AAAA,KACtDC,IAAWD,EAAY,iBAAiB,GAAGtD,CAAI,IAAIvD,CAAgB,GAAG,GACtE+G,IAAU,CAAE,EAAC,MAAM,KAAKD,CAAQ,GAChCE,IAAU,CAAA;AAChB,MAAIC;AACJ,SAAIrD,KAAQA,EAAK,UACfA,EAAK,QAAQ,CAAC1C,MAAQ;AACpB,UAAMgG,IAAa,SAAS,cAAc3D,CAAI;AAC9C,eAAWQ,KAAa7C;AACtB,UAAI,OAAO,UAAU,eAAe,KAAKA,GAAK6C,CAAS;AACrD,YAAIA,MAAc;AAChB,UAAAmD,EAAW,YAAYhG,EAAI;AAAA,iBAClB6C,MAAc;AACvB,UAAImD,EAAW,aACbA,EAAW,WAAW,UAAUhG,EAAI,UAEpCgG,EAAW,YAAY,SAAS,eAAehG,EAAI,OAAO,CAAC;AAAA,aAExD;AACL,gBAAMmC,IAAOU,GACPhE,IAAQ,OAAOmB,EAAImC,CAAI,IAAM,MAAc,KAAKnC,EAAImC,CAAI;AAC9D,UAAA6D,EAAW,aAAanD,GAAWhE,CAAK;AAAA,QACzC;AAGL,IAAAmH,EAAW,aAAalH,GAAkB,MAAM,GAC5C+G,EAAQ,KAAK,CAACI,GAAajF,OAC7B+E,IAAgB/E,GACTgF,EAAW,YAAYC,CAAW,EAC1C,IACCJ,EAAQ,OAAOE,GAAe,CAAC,IAE/BD,EAAQ,KAAKE,CAAU;AAAA,EAE/B,CAAK,GAEHH,EAAQ,QAAQ,CAAC7F,MAAQ;;AAAA,YAAAwF,IAAAxF,EAAI,eAAJ,gBAAAwF,EAAgB,YAAYxF;AAAA,GAAI,GACzD8F,EAAQ,QAAQ,CAAC9F,MAAQ2F,EAAY,YAAY3F,CAAG,CAAC,GAC9C;AAAA,IACL,SAAA6F;AAAA,IACA,SAAAC;AAAA,EACJ;AACA,GACII,IAAmB,CAAC7F,GAAS6B,MAAe;AAC9C,QAAMiE,IAAa,SAAS,qBAAqB9F,CAAO,EAAE,CAAC;AAC3D,MAAI,CAAC8F;AACH;AAEF,QAAMC,IAAwBD,EAAW,aAAarH,CAAgB,GAChEuH,IAAmBD,IAAwBA,EAAsB,MAAM,GAAG,IAAI,IAC9EE,IAAqB,CAAC,GAAGD,CAAgB,GACzCE,IAAgB,OAAO,KAAKrE,CAAU;AAC5C,aAAWW,KAAa0D,GAAe;AACrC,UAAM1H,IAAQqD,EAAWW,CAAS,KAAK;AACvC,IAAIsD,EAAW,aAAatD,CAAS,MAAMhE,KACzCsH,EAAW,aAAatD,GAAWhE,CAAK,GAEtCwH,EAAiB,QAAQxD,CAAS,MAAM,MAC1CwD,EAAiB,KAAKxD,CAAS;AAEjC,UAAM2D,IAAcF,EAAmB,QAAQzD,CAAS;AACxD,IAAI2D,MAAgB,MAClBF,EAAmB,OAAOE,GAAa,CAAC;AAAA,EAE3C;AACD,WAAS,IAAIF,EAAmB,SAAS,GAAG,KAAK,GAAG,KAAK;AACvD,IAAAH,EAAW,gBAAgBG,EAAmB,CAAC,CAAC;AAElD,EAAID,EAAiB,WAAWC,EAAmB,SACjDH,EAAW,gBAAgBrH,CAAgB,IAClCqH,EAAW,aAAarH,CAAgB,MAAMyH,EAAc,KAAK,GAAG,KAC7EJ,EAAW,aAAarH,GAAkByH,EAAc,KAAK,GAAG,CAAC;AAErE,GACIE,KAAc,CAACnE,GAAOJ,MAAe;AACvC,EAAI,OAAOI,IAAU,OAAe,SAAS,UAAUA,MACrD,SAAS,QAAQpB,EAAaoB,CAAK,IAErC4D,EAAiB,SAAqBhE,CAAU;AAClD,GACIwE,IAAmB,CAACC,GAAUC,MAAO;AACvC,QAAM;AAAA,IACJ,SAAAzC;AAAA,IACA,gBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAR;AAAA,IACA,UAAAD;AAAA,IACA,cAAAU;AAAA,IACA,qBAAAuC;AAAA,IACA,YAAA/C;AAAA,IACA,WAAAS;AAAA,IACA,OAAAjC;AAAA,IACA,iBAAAkC;AAAA,EACD,IAAGmC;AACJ,EAAAT,EAAiB,QAAmB9B,CAAc,GAClD8B,EAAiB,QAAmB7B,CAAc,GAClDoC,GAAYnE,GAAOkC,CAAe;AAClC,QAAMsC,IAAa;AAAA,IACjB,SAASpB,EAAW,QAAmBvB,CAAO;AAAA,IAC9C,UAAUuB,EAAW,QAAmB7B,CAAQ;AAAA,IAChD,UAAU6B,EAAW,QAAmB9B,CAAQ;AAAA,IAChD,cAAc8B,EAAW,YAA2BpB,CAAY;AAAA,IAChE,YAAYoB,EAAW,UAAuB5B,CAAU;AAAA,IACxD,WAAW4B,EAAW,SAAqBnB,CAAS;AAAA,EACxD,GACQwC,IAAY,CAAA,GACZC,IAAc,CAAA;AACpB,SAAO,KAAKF,CAAU,EAAE,QAAQ,CAACpH,MAAY;AAC3C,UAAM,EAAE,SAAAoG,GAAS,SAAAD,GAAS,IAAGiB,EAAWpH,CAAO;AAC/C,IAAIoG,EAAQ,WACViB,EAAUrH,CAAO,IAAIoG,IAEnBD,GAAQ,WACVmB,EAAYtH,CAAO,IAAIoH,EAAWpH,CAAO,EAAE;AAAA,EAEjD,CAAG,GACGkH,KACFA,KAEFC,EAAoBF,GAAUI,GAAWC,CAAW;AACtD,GACIC,IAAkB,MAClBC,KAA4B,CAACP,MAAa;AAC5C,EAAIM,KACF,qBAAqBA,CAAe,GAElCN,EAAS,QACXM,IAAkB,sBAAsB,MAAM;AAC5C,IAAAP,EAAiBC,GAAU,MAAM;AAC/B,MAAAM,IAAkB;AAAA,IAC1B,CAAO;AAAA,EACP,CAAK,KAEDP,EAAiBC,CAAQ,GACzBM,IAAkB;AAEtB,GACIE,KAAiBD,IAGjBE,IAAmB,cAAcC,EAAW;AAAA,EAAzB;AAAA;AACrB,IAAApC,EAAA,kBAAW;AAAA;AAAA,EACX,sBAAsBqC,GAAW;AAC/B,WAAO,CAACC,GAAaD,GAAW,KAAK,KAAK;AAAA,EAC3C;AAAA,EACD,qBAAqB;AACnB,SAAK,WAAU;AAAA,EAChB;AAAA,EACD,uBAAuB;AACrB,UAAM,EAAE,iBAAAE,EAAiB,IAAG,KAAK,MAAM;AACvC,IAAAA,EAAgB,OAAO,IAAI,GAC3B,KAAK,WAAU;AAAA,EAChB;AAAA,EACD,aAAa;AACX,UAAM,EAAE,iBAAAA,GAAiB,WAAAC,EAAS,IAAK,KAAK,MAAM;AAClD,QAAIvC,IAAc;AAClB,UAAMwC,IAAQzG;AAAA,MACZuG,EAAgB,IAAG,EAAG,IAAI,CAACrC,MAAa;AACtC,cAAMhG,IAAQ,EAAE,GAAGgG,EAAS,MAAK;AACjC,sBAAOhG,EAAM,SACNA;AAAA,MACf,CAAO;AAAA,IACP;AACI,IAAIoG,GAAe,YACjB4B,GAAeO,CAAK,IACX/C,MACTO,IAAcP,EAAe+C,CAAK,IAEpCD,EAAUvC,CAAW;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO;AACL,QAAI,KAAK;AACP;AAEF,SAAK,WAAW;AAChB,UAAM,EAAE,iBAAAsC,EAAiB,IAAG,KAAK,MAAM;AACvC,IAAAA,EAAgB,IAAI,IAAI,GACxB,KAAK,WAAU;AAAA,EAChB;AAAA,EACD,SAAS;AACP,gBAAK,KAAI,GACF;AAAA,EACR;AACH,MAGIG,MAASnC,IAAA,cAAcoC,EAAW;AAAA,EAMpC,sBAAsBN,GAAW;AAC/B,WAAO,CAACO,GAAYlG,EAAQ,KAAK,OAAO,YAAY,GAAGA,EAAQ2F,GAAW,YAAY,CAAC;AAAA,EACxF;AAAA,EACD,yBAAyBQ,GAAOC,GAAgB;AAC9C,QAAI,CAACA;AACH,aAAO;AAET,YAAQD,EAAM,MAAI;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,UACL,WAAWC;AAAA,QACrB;AAAA,MACM,KAAK;AACH,eAAO;AAAA,UACL,SAASA;AAAA,QACnB;AAAA,MACM;AACE,cAAM,IAAI;AAAA,UACR,IAAID,EAAM,IAAI;AAAA,QACxB;AAAA,IACK;AAAA,EACF;AAAA,EACD,yBAAyBA,GAAOE,GAAmBC,GAAeF,GAAgB;AAChF,WAAO;AAAA,MACL,GAAGC;AAAA,MACH,CAACF,EAAM,IAAI,GAAG;AAAA,QACZ,GAAGE,EAAkBF,EAAM,IAAI,KAAK,CAAE;AAAA,QACtC;AAAA,UACE,GAAGG;AAAA,UACH,GAAG,KAAK,yBAAyBH,GAAOC,CAAc;AAAA,QACvD;AAAA,MACF;AAAA,IACP;AAAA,EACG;AAAA,EACD,sBAAsBD,GAAOI,GAAUD,GAAeF,GAAgB;AACpE,YAAQD,EAAM,MAAI;AAAA,MAChB,KAAK;AACH,eAAO;AAAA,UACL,GAAGI;AAAA,UACH,CAACJ,EAAM,IAAI,GAAGC;AAAA,UACd,iBAAiB,EAAE,GAAGE,EAAe;AAAA,QAC/C;AAAA,MACM,KAAK;AACH,eAAO;AAAA,UACL,GAAGC;AAAA,UACH,gBAAgB,EAAE,GAAGD,EAAe;AAAA,QAC9C;AAAA,MACM,KAAK;AACH,eAAO;AAAA,UACL,GAAGC;AAAA,UACH,gBAAgB,EAAE,GAAGD,EAAe;AAAA,QAC9C;AAAA,MACM;AACE,eAAO;AAAA,UACL,GAAGC;AAAA,UACH,CAACJ,EAAM,IAAI,GAAG,EAAE,GAAGG,EAAe;AAAA,QAC5C;AAAA,IACK;AAAA,EACF;AAAA,EACD,4BAA4BD,GAAmBE,GAAU;AACvD,QAAIC,IAAoB,EAAE,GAAGD;AAC7B,kBAAO,KAAKF,CAAiB,EAAE,QAAQ,CAACI,MAAmB;AACzD,MAAAD,IAAoB;AAAA,QAClB,GAAGA;AAAA,QACH,CAACC,CAAc,GAAGJ,EAAkBI,CAAc;AAAA,MAC1D;AAAA,IACA,CAAK,GACMD;AAAA,EACR;AAAA,EACD,sBAAsBL,GAAOC,GAAgB;AAC3ChL,WAAAA;AAAAA,MACE0B,EAAgB,KAAK,CAAC4J,MAASP,EAAM,SAASO,CAAI;AAAA,MAClD,OAAOP,EAAM,QAAS,aAAa,sIAAsI,uBAAuBrJ,EAAgB;AAAA,QAC9M;AAAA,MACD,CAAA,oDAAoDqJ,EAAM,IAAI;AAAA,IACrE,GACI/K;AAAAA,MACE,CAACgL,KAAkB,OAAOA,KAAmB,YAAY,MAAM,QAAQA,CAAc,KAAK,CAACA,EAAe,KAAK,CAACO,MAAgB,OAAOA,KAAgB,QAAQ;AAAA,MAC/J,0CAA0CR,EAAM,IAAI,yDAAyDA,EAAM,IAAI,YAAYA,EAAM,IAAI;AAAA,IACnJ,GACW;AAAA,EACR;AAAA,EACD,mBAAmBS,GAAUL,GAAU;AACrC,QAAIF,IAAoB,CAAA;AACxBQ,WAAAA,EAAO,SAAS,QAAQD,GAAU,CAACT,MAAU;AAC3C,UAAI,CAACA,KAAS,CAACA,EAAM;AACnB;AAEF,YAAM,EAAE,UAAUC,GAAgB,GAAGU,EAAY,IAAGX,EAAM,OACpDG,IAAgB,OAAO,KAAKQ,CAAU,EAAE,OAAO,CAAC7G,GAAKzD,OACzDyD,EAAIjD,GAAaR,CAAG,KAAKA,CAAG,IAAIsK,EAAWtK,CAAG,GACvCyD,IACN,CAAE,CAAA;AACL,UAAI,EAAE,MAAAS,EAAM,IAAGyF;AAMf,cALI,OAAOzF,KAAS,WAClBA,IAAOA,EAAK,aAEZ,KAAK,sBAAsByF,GAAOC,CAAc,GAE1C1F,GAAI;AAAA,QACV,KAAK;AACH,UAAA6F,IAAW,KAAK,mBAAmBH,GAAgBG,CAAQ;AAC3D;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,UAAAF,IAAoB,KAAK;AAAA,YACvBF;AAAA,YACAE;AAAA,YACAC;AAAA,YACAF;AAAA,UACZ;AACU;AAAA,QACF;AACE,UAAAG,IAAW,KAAK,sBAAsBJ,GAAOI,GAAUD,GAAeF,CAAc;AACpF;AAAA,MACH;AAAA,IACP,CAAK,GACM,KAAK,4BAA4BC,GAAmBE,CAAQ;AAAA,EACpE;AAAA,EACD,SAAS;AACP,UAAM,EAAE,UAAAK,GAAU,GAAGpJ,EAAK,IAAK,KAAK;AACpC,QAAI+I,IAAW,EAAE,GAAG/I,KAChB,EAAE,YAAAuJ,EAAY,IAAGvJ;AAIrB,QAHIoJ,MACFL,IAAW,KAAK,mBAAmBK,GAAUL,CAAQ,IAEnDQ,KAAc,EAAEA,aAAsB5D,IAAa;AACrD,YAAM6D,IAAOD;AACb,MAAAA,IAAa,IAAI5D,EAAW6D,EAAK,SAAS,EAAI,GAC9C,OAAOT,EAAS;AAAA,IACjB;AACD,WAAOQ,IAA6BF,gBAAAA,EAAO,cAAcpB,GAAkB,EAAE,GAAGc,GAAU,SAASQ,EAAW,MAAO,CAAA,IAAoBF,gBAAAA,EAAO,cAAcnD,GAAQ,UAAU,MAAM,CAACN,MAA4ByD,gBAAAA,EAAO,cAAcpB,GAAkB,EAAE,GAAGc,GAAU,SAAAnD,EAAO,CAAE,CAAC;AAAA,EACpR;AACH,GA9IEE,EADWO,GACJ,gBAAe;AAAA,EACpB,OAAO;AAAA,EACP,yBAAyB;AAAA,EACzB,mBAAmB;AACvB,IALaA;ACnoBA,MAAAoD,KAAa,CAACzJ,MAAqB;AAC9C,QAAM0J,IAAWC,MACXC,IAAO,OAAO5J,EAAM,MAAO,WAAWA,EAAM,KAAKA,EAAM,GAAG,MAE1D6J,IAAc,CAACC,MAA+C;;AAClE,IAAI,EAACF,KAAA,QAAAA,EAAM,WAAW,SAAQA,MAASF,EAAS,SAEhDI,EAAM,eAAe,IACrBzD,IAAA,SAAS,eAAeuD,EAAK,MAAM,CAAC,CAAC,MAArC,QAAAvD,EAAwC;AAAA,EAAe;AAGzD,SAAQ0D,gBAAAA,GAAAA,IAAAC,IAAA,EAAK,SAASH,GAAc,GAAG7J,EAAO,CAAA;AAChD;","x_google_ignoreList":[0,1,2,3,4]}