zudoku 0.26.0 → 0.26.1

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 (169) hide show
  1. package/dist/config/config.d.ts +1 -0
  2. package/dist/config/loader.js +1 -1
  3. package/dist/config/loader.js.map +1 -1
  4. package/dist/config/validators/common.d.ts +11 -0
  5. package/dist/config/validators/common.js +1 -0
  6. package/dist/config/validators/common.js.map +1 -1
  7. package/dist/config/validators/validate.d.ts +5 -0
  8. package/dist/lib/authentication/providers/auth0.js +1 -1
  9. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  10. package/dist/lib/authentication/providers/openid.d.ts +1 -1
  11. package/dist/lib/authentication/providers/openid.js +10 -6
  12. package/dist/lib/authentication/providers/openid.js.map +1 -1
  13. package/dist/lib/components/Autocomplete.d.ts +12 -0
  14. package/dist/lib/components/Autocomplete.js +47 -0
  15. package/dist/lib/components/Autocomplete.js.map +1 -0
  16. package/dist/lib/components/Header.js +3 -3
  17. package/dist/lib/components/Header.js.map +1 -1
  18. package/dist/lib/components/index.js +2 -2
  19. package/dist/lib/components/index.js.map +1 -1
  20. package/dist/lib/plugins/markdown/MdxPage.js +8 -2
  21. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  22. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.d.ts +3 -1
  23. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +3 -2
  24. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  25. package/dist/lib/plugins/openapi/Sidecar.js +1 -1
  26. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  27. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.d.ts +6 -0
  28. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +12 -0
  29. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -0
  30. package/dist/lib/plugins/openapi/playground/Headers.js +66 -4
  31. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  32. package/dist/lib/plugins/openapi/playground/Playground.d.ts +5 -1
  33. package/dist/lib/plugins/openapi/playground/Playground.js +36 -11
  34. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  35. package/dist/lib/plugins/openapi/playground/QueryParams.js +20 -30
  36. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  37. package/dist/lib/plugins/openapi/post-processors/removeExtensions.d.ts +2 -1
  38. package/dist/lib/plugins/openapi/post-processors/removeExtensions.js +5 -3
  39. package/dist/lib/plugins/openapi/post-processors/removeExtensions.js.map +1 -1
  40. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js +49 -0
  41. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js.map +1 -1
  42. package/dist/lib/plugins/openapi/post-processors/removeParameters.d.ts +10 -0
  43. package/dist/lib/plugins/openapi/post-processors/removeParameters.js +66 -0
  44. package/dist/lib/plugins/openapi/post-processors/removeParameters.js.map +1 -0
  45. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.d.ts +1 -0
  46. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.js +131 -0
  47. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.js.map +1 -0
  48. package/dist/lib/ui/Command.d.ts +9 -1
  49. package/dist/lib/ui/Command.js +5 -1
  50. package/dist/lib/ui/Command.js.map +1 -1
  51. package/dist/lib/util/joinUrl.d.ts +1 -0
  52. package/dist/lib/util/joinUrl.js +40 -0
  53. package/dist/lib/util/joinUrl.js.map +1 -0
  54. package/dist/vite/build.js +10 -10
  55. package/dist/vite/build.js.map +1 -1
  56. package/dist/vite/config.js +4 -1
  57. package/dist/vite/config.js.map +1 -1
  58. package/dist/vite/dev-server.js +4 -1
  59. package/dist/vite/dev-server.js.map +1 -1
  60. package/dist/vite/plugin-api.d.ts +1 -1
  61. package/dist/vite/plugin-api.js +23 -5
  62. package/dist/vite/plugin-api.js.map +1 -1
  63. package/dist/vite/plugin-auth.js +4 -1
  64. package/dist/vite/plugin-auth.js.map +1 -1
  65. package/dist/vite/plugin-mdx.js +9 -4
  66. package/dist/vite/plugin-mdx.js.map +1 -1
  67. package/dist/vite/prerender.d.ts +2 -2
  68. package/dist/vite/prerender.js +4 -4
  69. package/dist/vite/prerender.js.map +1 -1
  70. package/dist/zuplo/enrich-with-zuplo.d.ts +5 -0
  71. package/dist/zuplo/enrich-with-zuplo.js +184 -0
  72. package/dist/zuplo/enrich-with-zuplo.js.map +1 -0
  73. package/dist/zuplo/env.d.ts +1 -0
  74. package/dist/zuplo/env.js +3 -0
  75. package/dist/zuplo/env.js.map +1 -1
  76. package/dist/zuplo/policy-types.d.ts +33 -0
  77. package/dist/zuplo/policy-types.js +8 -0
  78. package/dist/zuplo/policy-types.js.map +1 -0
  79. package/dist/zuplo/with-zuplo-processors.d.ts +3 -0
  80. package/dist/zuplo/with-zuplo-processors.js +26 -0
  81. package/dist/zuplo/with-zuplo-processors.js.map +1 -0
  82. package/dist/zuplo/with-zuplo.d.ts +1 -2
  83. package/dist/zuplo/with-zuplo.js +6 -27
  84. package/dist/zuplo/with-zuplo.js.map +1 -1
  85. package/lib/{AnchorLink-_Vu02ceN.js → AnchorLink-bObQitZv.js} +2 -2
  86. package/lib/{AnchorLink-_Vu02ceN.js.map → AnchorLink-bObQitZv.js.map} +1 -1
  87. package/lib/{AuthenticationPlugin-DNXBcsVN.js → AuthenticationPlugin-C9SwOxkc.js} +3 -3
  88. package/lib/{AuthenticationPlugin-DNXBcsVN.js.map → AuthenticationPlugin-C9SwOxkc.js.map} +1 -1
  89. package/lib/{Markdown-BrfrjEk_.js → Markdown-DFN6p0J-.js} +2 -2
  90. package/lib/{Markdown-BrfrjEk_.js.map → Markdown-DFN6p0J-.js.map} +1 -1
  91. package/lib/{MdxPage-LNZLj_A5.js → MdxPage-D9c4z09Q.js} +63 -58
  92. package/lib/MdxPage-D9c4z09Q.js.map +1 -0
  93. package/lib/{OperationList-PCwzTp1r.js → OperationList-DGJWDx1G.js} +875 -871
  94. package/lib/{OperationList-PCwzTp1r.js.map → OperationList-DGJWDx1G.js.map} +1 -1
  95. package/lib/{Route-Pzk6qwIk.js → Route-VdmEyOD0.js} +3 -3
  96. package/lib/{Route-Pzk6qwIk.js.map → Route-VdmEyOD0.js.map} +1 -1
  97. package/lib/{Select-DkOpAG0c.js → Select-D3O7wISy.js} +3 -3
  98. package/lib/{Select-DkOpAG0c.js.map → Select-D3O7wISy.js.map} +1 -1
  99. package/lib/{SlotletProvider-DPbx9KdU.js → SlotletProvider-_3zzX_g_.js} +4 -4
  100. package/lib/{SlotletProvider-DPbx9KdU.js.map → SlotletProvider-_3zzX_g_.js.map} +1 -1
  101. package/lib/{Button-oroWHXAy.js → Spinner-BlzrEEk1.js} +15 -12
  102. package/lib/Spinner-BlzrEEk1.js.map +1 -0
  103. package/lib/{ZudokuContext-D3ayHjP-.js → ZudokuContext-DeQZEp-x.js} +2 -2
  104. package/lib/{ZudokuContext-D3ayHjP-.js.map → ZudokuContext-DeQZEp-x.js.map} +1 -1
  105. package/lib/{chunk-SYFQ2XB5-KWlHsT7t.js → chunk-SYFQ2XB5-BF5IDYrB.js} +6 -5
  106. package/lib/{chunk-SYFQ2XB5-KWlHsT7t.js.map → chunk-SYFQ2XB5-BF5IDYrB.js.map} +1 -1
  107. package/lib/{hook-DUyACbIK.js → hook-BRQEDRbn.js} +2 -2
  108. package/lib/{hook-DUyACbIK.js.map → hook-BRQEDRbn.js.map} +1 -1
  109. package/lib/index-B7mqiOei.js +509 -0
  110. package/lib/index-B7mqiOei.js.map +1 -0
  111. package/lib/index-CXRrqOIl.js +1750 -0
  112. package/lib/index-CXRrqOIl.js.map +1 -0
  113. package/lib/joinUrl-BTy9bvoK.js +20 -0
  114. package/lib/joinUrl-BTy9bvoK.js.map +1 -0
  115. package/lib/post-processors/removeExtensions.js +7 -7
  116. package/lib/post-processors/removeExtensions.js.map +1 -1
  117. package/lib/post-processors/removeParameters.js +48 -0
  118. package/lib/post-processors/removeParameters.js.map +1 -0
  119. package/lib/ui/ActionButton.js +10 -11
  120. package/lib/ui/ActionButton.js.map +1 -1
  121. package/lib/ui/Command.js +125 -13
  122. package/lib/ui/Command.js.map +1 -1
  123. package/lib/{useExposedProps-BBHR7aLM.js → useExposedProps-CetwhZpP.js} +2 -2
  124. package/lib/{useExposedProps-BBHR7aLM.js.map → useExposedProps-CetwhZpP.js.map} +1 -1
  125. package/lib/zudoku.auth-auth0.js +7 -9
  126. package/lib/zudoku.auth-auth0.js.map +1 -1
  127. package/lib/zudoku.auth-clerk.js +1 -1
  128. package/lib/zudoku.auth-openid.js +223 -219
  129. package/lib/zudoku.auth-openid.js.map +1 -1
  130. package/lib/zudoku.components.js +219 -219
  131. package/lib/zudoku.components.js.map +1 -1
  132. package/lib/zudoku.plugin-api-catalog.js +3 -3
  133. package/lib/zudoku.plugin-api-keys.js +5 -5
  134. package/lib/zudoku.plugin-custom-pages.js +2 -2
  135. package/lib/zudoku.plugin-markdown.js +1 -1
  136. package/lib/zudoku.plugin-openapi.js +4 -4
  137. package/lib/zudoku.plugin-redirect.js +1 -1
  138. package/package.json +1 -1
  139. package/src/app/main.css +50 -50
  140. package/src/lib/authentication/providers/auth0.tsx +1 -4
  141. package/src/lib/authentication/providers/openid.tsx +12 -5
  142. package/src/lib/components/Autocomplete.tsx +111 -0
  143. package/src/lib/components/Header.tsx +3 -3
  144. package/src/lib/components/index.ts +2 -2
  145. package/src/lib/plugins/markdown/MdxPage.tsx +9 -1
  146. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +5 -0
  147. package/src/lib/plugins/openapi/Sidecar.tsx +1 -0
  148. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +51 -0
  149. package/src/lib/plugins/openapi/playground/Headers.tsx +138 -41
  150. package/src/lib/plugins/openapi/playground/Playground.tsx +156 -62
  151. package/src/lib/plugins/openapi/playground/QueryParams.tsx +89 -122
  152. package/src/lib/plugins/openapi/post-processors/removeExtensions.test.ts +58 -0
  153. package/src/lib/plugins/openapi/post-processors/removeExtensions.ts +7 -4
  154. package/src/lib/plugins/openapi/post-processors/removeParameters.test.ts +148 -0
  155. package/src/lib/plugins/openapi/post-processors/removeParameters.ts +101 -0
  156. package/src/lib/ui/Command.tsx +20 -0
  157. package/src/lib/util/joinUrl.ts +57 -0
  158. package/dist/lib/plugins/openapi/playground/EnumSelector.d.ts +0 -8
  159. package/dist/lib/plugins/openapi/playground/EnumSelector.js +0 -21
  160. package/dist/lib/plugins/openapi/playground/EnumSelector.js.map +0 -1
  161. package/lib/Button-oroWHXAy.js.map +0 -1
  162. package/lib/Command-D5DE0DD7.js +0 -611
  163. package/lib/Command-D5DE0DD7.js.map +0 -1
  164. package/lib/MdxPage-LNZLj_A5.js.map +0 -1
  165. package/lib/Spinner-C5gHXrVz.js +0 -7
  166. package/lib/Spinner-C5gHXrVz.js.map +0 -1
  167. package/lib/index-CaILD1AV.js +0 -1292
  168. package/lib/index-CaILD1AV.js.map +0 -1
  169. package/src/lib/plugins/openapi/playground/EnumSelector.tsx +0 -86
@@ -0,0 +1,57 @@
1
+ // Mostly adapted from https://github.com/moxystudio/js-proper-url-join
2
+ const defaultUrlRegExp = /^(\w+:\/\/[^/?]+)?(.*?)(\?.+)?$/;
3
+
4
+ const normalizeParts = (
5
+ parts: (string | number | null | undefined | false)[],
6
+ ): string[] =>
7
+ parts
8
+ .filter(
9
+ (part): part is string | number =>
10
+ part !== null &&
11
+ part !== undefined &&
12
+ part !== false &&
13
+ (typeof part === "string" || typeof part === "number"),
14
+ )
15
+ .map((part) => `${part}`)
16
+ .filter((part) => part);
17
+
18
+ interface ParsedParts {
19
+ prefix: string;
20
+ pathname: string[];
21
+ }
22
+
23
+ const parseParts = (parts: string[]): ParsedParts => {
24
+ const partsStr = parts.join("/");
25
+ const [, prefix = "", pathname = ""] = partsStr.match(defaultUrlRegExp) ?? [];
26
+
27
+ return {
28
+ prefix,
29
+ pathname: pathname.split("/").filter((part) => part !== ""),
30
+ };
31
+ };
32
+
33
+ const buildUrl = (parsedParts: ParsedParts): string => {
34
+ const { prefix, pathname } = parsedParts;
35
+ let url = prefix;
36
+
37
+ if (pathname.length > 0) {
38
+ if (url) {
39
+ url += "/";
40
+ } else {
41
+ url = "/";
42
+ }
43
+ url += pathname.join("/");
44
+ } else if (!url) {
45
+ url = "/";
46
+ }
47
+
48
+ return url;
49
+ };
50
+
51
+ export const joinUrl = (
52
+ ...parts: Array<string | number | null | undefined | false>
53
+ ): string => {
54
+ const normalizedParts = normalizeParts(parts);
55
+ const parsedParts = parseParts(normalizedParts);
56
+ return buildUrl(parsedParts);
57
+ };
@@ -1,8 +0,0 @@
1
- interface EnumSelectorProps {
2
- value: string;
3
- enumValues: string[];
4
- onChange: (value: string) => void;
5
- onValueSelected: () => void;
6
- }
7
- export declare const EnumSelector: ({ value, enumValues, onChange, onValueSelected, }: EnumSelectorProps) => import("react/jsx-runtime").JSX.Element;
8
- export {};
@@ -1,21 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from "react";
3
- import { Command, CommandEmpty, CommandInput, CommandItem, CommandList, } from "../../../ui/Command.js";
4
- import { Popover, PopoverContent, PopoverTrigger, } from "../../../ui/Popover.js";
5
- import { cn } from "../../../util/cn.js";
6
- export const EnumSelector = ({ value, enumValues, onChange, onValueSelected, }) => {
7
- const [searchValue, setSearchValue] = useState("");
8
- const [open, setOpen] = useState(false);
9
- return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", role: "combobox", className: cn("px-3 py-2 w-full border-0 shadow-none text-xs font-mono text-start hover:bg-accent/40 rounded border-transparent hover:bg-accent", !value && "text-muted-foreground"), children: value || "Select value" }) }), _jsx(PopoverContent, { className: "p-0 w-[--radix-popover-trigger-width] ", align: "start", sideOffset: 3, alignOffset: -3, side: "bottom", children: _jsxs(Command, { className: "max-h-[180px]", children: [_jsx(CommandInput, { placeholder: "Enter value", className: "h-9 bg-transparent ", onValueChange: setSearchValue, onKeyDown: (e) => {
10
- if (e.key === "Enter") {
11
- onChange(searchValue);
12
- onValueSelected();
13
- setOpen(false);
14
- }
15
- } }), _jsxs(CommandList, { children: [_jsxs(CommandEmpty, { children: ["Use \"", searchValue, "\""] }), enumValues.map((enumValue) => (_jsx(CommandItem, { value: enumValue, onSelect: (selected) => {
16
- onChange(selected);
17
- onValueSelected();
18
- setOpen(false);
19
- }, children: enumValue }, enumValue)))] })] }) })] }));
20
- };
21
- //# sourceMappingURL=EnumSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnumSelector.js","sourceRoot":"","sources":["../../../../../src/lib/plugins/openapi/playground/EnumSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AASzC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,KAAK,EACL,UAAU,EACV,QAAQ,EACR,eAAe,GACG,EAAE,EAAE;IACtB,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,UAAU,EACf,SAAS,EAAE,EAAE,CACX,kIAAkI,EAClI,CAAC,KAAK,IAAI,uBAAuB,CAClC,YAEA,KAAK,IAAI,cAAc,GACjB,GACM,EACjB,KAAC,cAAc,IACb,SAAS,EAAC,wCAAwC,EAClD,KAAK,EAAC,OAAO,EACb,UAAU,EAAE,CAAC,EACb,WAAW,EAAE,CAAC,CAAC,EACf,IAAI,EAAC,QAAQ,YAEb,MAAC,OAAO,IAAC,SAAS,EAAC,eAAe,aAChC,KAAC,YAAY,IACX,WAAW,EAAC,aAAa,EACzB,SAAS,EAAC,qBAAqB,EAC/B,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gCACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;oCACtB,QAAQ,CAAC,WAAW,CAAC,CAAC;oCACtB,eAAe,EAAE,CAAC;oCAClB,OAAO,CAAC,KAAK,CAAC,CAAC;gCACjB,CAAC;4BACH,CAAC,GACD,EACF,MAAC,WAAW,eACV,MAAC,YAAY,yBAAO,WAAW,UAAiB,EAC/C,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAC7B,KAAC,WAAW,IAEV,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;wCACrB,QAAQ,CAAC,QAAQ,CAAC,CAAC;wCACnB,eAAe,EAAE,CAAC;wCAClB,OAAO,CAAC,KAAK,CAAC,CAAC;oCACjB,CAAC,YAEA,SAAS,IARL,SAAS,CASF,CACf,CAAC,IACU,IACN,GACK,IACT,CACX,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Button-oroWHXAy.js","sources":["../src/lib/ui/Button.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nexport const buttonVariants = cva(\n \"not-prose inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n xl: \"h-14 rounded-lg px-10 text-lg\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n"],"names":["buttonVariants","cva","Button","React","className","variant","size","asChild","props","ref","Comp","Slot","jsx","cn"],"mappings":";;;;;AAKO,MAAMA,IAAiBC;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IAEV;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAQaC,IAASC,EAAM;AAAA,EAC1B,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,MAAAC,GAAM,SAAAC,IAAU,IAAO,GAAGC,EAAM,GAAGC,MAAQ;AAC1D,UAAAC,IAAOH,IAAUI,IAAO;AAE5B,WAAAC,gBAAAA,EAAA;AAAA,MAACF;AAAA,MAAA;AAAA,QACC,WAAWG,EAAGb,EAAe,EAAE,SAAAK,GAAS,MAAAC,GAAM,WAAAF,EAAA,CAAW,CAAC;AAAA,QAC1D,KAAAK;AAAA,QACC,GAAGD;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAGN;AACAN,EAAO,cAAc;"}