@hanzo/docs-radix-ui 16.4.3

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 (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/css/black.css +1 -0
  4. package/css/catppuccin.css +1 -0
  5. package/css/dusk.css +1 -0
  6. package/css/layouts/docs.css +1 -0
  7. package/css/layouts/home.css +1 -0
  8. package/css/layouts/notebook.css +1 -0
  9. package/css/neutral.css +1 -0
  10. package/css/ocean.css +1 -0
  11. package/css/preset.css +89 -0
  12. package/css/purple.css +1 -0
  13. package/css/shadcn.css +1 -0
  14. package/css/solar.css +1 -0
  15. package/css/style.css +9 -0
  16. package/css/vitepress.css +1 -0
  17. package/dist/_virtual/rolldown_runtime.js +36 -0
  18. package/dist/components/accordion.d.ts +25 -0
  19. package/dist/components/accordion.d.ts.map +1 -0
  20. package/dist/components/accordion.js +70 -0
  21. package/dist/components/accordion.js.map +1 -0
  22. package/dist/components/banner.d.ts +35 -0
  23. package/dist/components/banner.d.ts.map +1 -0
  24. package/dist/components/banner.js +70 -0
  25. package/dist/components/banner.js.map +1 -0
  26. package/dist/components/callout.d.ts +43 -0
  27. package/dist/components/callout.d.ts.map +1 -0
  28. package/dist/components/callout.js +63 -0
  29. package/dist/components/callout.js.map +1 -0
  30. package/dist/components/card.d.ts +21 -0
  31. package/dist/components/card.d.ts.map +1 -0
  32. package/dist/components/card.js +41 -0
  33. package/dist/components/card.js.map +1 -0
  34. package/dist/components/codeblock.d.ts +63 -0
  35. package/dist/components/codeblock.d.ts.map +1 -0
  36. package/dist/components/codeblock.js +126 -0
  37. package/dist/components/codeblock.js.map +1 -0
  38. package/dist/components/dialog/search-algolia.d.ts +39 -0
  39. package/dist/components/dialog/search-algolia.d.ts.map +1 -0
  40. package/dist/components/dialog/search-algolia.js +68 -0
  41. package/dist/components/dialog/search-algolia.js.map +1 -0
  42. package/dist/components/dialog/search-default.d.ts +44 -0
  43. package/dist/components/dialog/search-default.d.ts.map +1 -0
  44. package/dist/components/dialog/search-default.js +66 -0
  45. package/dist/components/dialog/search-default.js.map +1 -0
  46. package/dist/components/dialog/search-orama.d.ts +46 -0
  47. package/dist/components/dialog/search-orama.d.ts.map +1 -0
  48. package/dist/components/dialog/search-orama.js +73 -0
  49. package/dist/components/dialog/search-orama.js.map +1 -0
  50. package/dist/components/dialog/search.d.ts +113 -0
  51. package/dist/components/dialog/search.d.ts.map +1 -0
  52. package/dist/components/dialog/search.js +271 -0
  53. package/dist/components/dialog/search.js.map +1 -0
  54. package/dist/components/dynamic-codeblock.d.ts +32 -0
  55. package/dist/components/dynamic-codeblock.d.ts.map +1 -0
  56. package/dist/components/dynamic-codeblock.js +66 -0
  57. package/dist/components/dynamic-codeblock.js.map +1 -0
  58. package/dist/components/files.d.ts +35 -0
  59. package/dist/components/files.d.ts.map +1 -0
  60. package/dist/components/files.js +44 -0
  61. package/dist/components/files.js.map +1 -0
  62. package/dist/components/github-info.d.ts +19 -0
  63. package/dist/components/github-info.d.ts.map +1 -0
  64. package/dist/components/github-info.js +68 -0
  65. package/dist/components/github-info.js.map +1 -0
  66. package/dist/components/heading.d.ts +15 -0
  67. package/dist/components/heading.d.ts.map +1 -0
  68. package/dist/components/heading.js +29 -0
  69. package/dist/components/heading.js.map +1 -0
  70. package/dist/components/image-zoom-CtfZieBH.css +80 -0
  71. package/dist/components/image-zoom-CtfZieBH.css.map +1 -0
  72. package/dist/components/image-zoom.css +77 -0
  73. package/dist/components/image-zoom.d.ts +25 -0
  74. package/dist/components/image-zoom.d.ts.map +1 -0
  75. package/dist/components/image-zoom.js +36 -0
  76. package/dist/components/image-zoom.js.map +1 -0
  77. package/dist/components/image-zoom2.js +1 -0
  78. package/dist/components/inline-toc.d.ts +16 -0
  79. package/dist/components/inline-toc.d.ts.map +1 -0
  80. package/dist/components/inline-toc.js +30 -0
  81. package/dist/components/inline-toc.js.map +1 -0
  82. package/dist/components/sidebar/base.d.ts +109 -0
  83. package/dist/components/sidebar/base.d.ts.map +1 -0
  84. package/dist/components/sidebar/base.js +262 -0
  85. package/dist/components/sidebar/base.js.map +1 -0
  86. package/dist/components/sidebar/link-item.d.ts +24 -0
  87. package/dist/components/sidebar/link-item.d.ts.map +1 -0
  88. package/dist/components/sidebar/link-item.js +33 -0
  89. package/dist/components/sidebar/link-item.js.map +1 -0
  90. package/dist/components/sidebar/page-tree.d.ts +30 -0
  91. package/dist/components/sidebar/page-tree.d.ts.map +1 -0
  92. package/dist/components/sidebar/page-tree.js +58 -0
  93. package/dist/components/sidebar/page-tree.js.map +1 -0
  94. package/dist/components/sidebar/tabs/dropdown.d.ts +20 -0
  95. package/dist/components/sidebar/tabs/dropdown.d.ts.map +1 -0
  96. package/dist/components/sidebar/tabs/dropdown.js +78 -0
  97. package/dist/components/sidebar/tabs/dropdown.js.map +1 -0
  98. package/dist/components/sidebar/tabs/index.d.ts +27 -0
  99. package/dist/components/sidebar/tabs/index.d.ts.map +1 -0
  100. package/dist/components/sidebar/tabs/index.js +49 -0
  101. package/dist/components/sidebar/tabs/index.js.map +1 -0
  102. package/dist/components/steps.d.ts +17 -0
  103. package/dist/components/steps.d.ts.map +1 -0
  104. package/dist/components/steps.js +19 -0
  105. package/dist/components/steps.js.map +1 -0
  106. package/dist/components/tabs.d.ts +52 -0
  107. package/dist/components/tabs.d.ts.map +1 -0
  108. package/dist/components/tabs.js +101 -0
  109. package/dist/components/tabs.js.map +1 -0
  110. package/dist/components/toc/clerk.d.ts +1 -0
  111. package/dist/components/toc/clerk.js +12 -0
  112. package/dist/components/toc/clerk.js.map +1 -0
  113. package/dist/components/toc/default.d.ts +1 -0
  114. package/dist/components/toc/default.js +12 -0
  115. package/dist/components/toc/default.js.map +1 -0
  116. package/dist/components/toc/index.d.ts +1 -0
  117. package/dist/components/toc/index.js +12 -0
  118. package/dist/components/toc/index.js.map +1 -0
  119. package/dist/components/type-table.d.ts +39 -0
  120. package/dist/components/type-table.d.ts.map +1 -0
  121. package/dist/components/type-table.js +109 -0
  122. package/dist/components/type-table.js.map +1 -0
  123. package/dist/components/ui/accordion.d.ts +32 -0
  124. package/dist/components/ui/accordion.d.ts.map +1 -0
  125. package/dist/components/ui/accordion.js +46 -0
  126. package/dist/components/ui/accordion.js.map +1 -0
  127. package/dist/components/ui/button.d.ts +13 -0
  128. package/dist/components/ui/button.d.ts.map +1 -0
  129. package/dist/components/ui/button.js +23 -0
  130. package/dist/components/ui/button.js.map +1 -0
  131. package/dist/components/ui/collapsible.d.ts +13 -0
  132. package/dist/components/ui/collapsible.d.ts.map +1 -0
  133. package/dist/components/ui/collapsible.js +27 -0
  134. package/dist/components/ui/collapsible.js.map +1 -0
  135. package/dist/components/ui/navigation-menu.d.ts +16 -0
  136. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  137. package/dist/components/ui/navigation-menu.js +44 -0
  138. package/dist/components/ui/navigation-menu.js.map +1 -0
  139. package/dist/components/ui/popover.d.ts +11 -0
  140. package/dist/components/ui/popover.d.ts.map +1 -0
  141. package/dist/components/ui/popover.js +24 -0
  142. package/dist/components/ui/popover.js.map +1 -0
  143. package/dist/components/ui/scroll-area.d.ts +11 -0
  144. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  145. package/dist/components/ui/scroll-area.js +37 -0
  146. package/dist/components/ui/scroll-area.js.map +1 -0
  147. package/dist/components/ui/tabs.d.ts +39 -0
  148. package/dist/components/ui/tabs.d.ts.map +1 -0
  149. package/dist/components/ui/tabs.js +81 -0
  150. package/dist/components/ui/tabs.js.map +1 -0
  151. package/dist/contexts/i18n.d.ts +1 -0
  152. package/dist/contexts/i18n.js +12 -0
  153. package/dist/contexts/i18n.js.map +1 -0
  154. package/dist/contexts/search.d.ts +8 -0
  155. package/dist/contexts/search.d.ts.map +1 -0
  156. package/dist/contexts/search.js +12 -0
  157. package/dist/contexts/search.js.map +1 -0
  158. package/dist/contexts/tree.d.ts +1 -0
  159. package/dist/contexts/tree.js +12 -0
  160. package/dist/contexts/tree.js.map +1 -0
  161. package/dist/i18n.d.ts +1 -0
  162. package/dist/i18n.js +3 -0
  163. package/dist/layouts/docs/client.d.ts +32 -0
  164. package/dist/layouts/docs/client.d.ts.map +1 -0
  165. package/dist/layouts/docs/client.js +68 -0
  166. package/dist/layouts/docs/client.js.map +1 -0
  167. package/dist/layouts/docs/index.d.ts +60 -0
  168. package/dist/layouts/docs/index.d.ts.map +1 -0
  169. package/dist/layouts/docs/index.js +179 -0
  170. package/dist/layouts/docs/index.js.map +1 -0
  171. package/dist/layouts/docs/page/client.d.ts +46 -0
  172. package/dist/layouts/docs/page/client.d.ts.map +1 -0
  173. package/dist/layouts/docs/page/client.js +227 -0
  174. package/dist/layouts/docs/page/client.js.map +1 -0
  175. package/dist/layouts/docs/page/index.d.ts +94 -0
  176. package/dist/layouts/docs/page/index.d.ts.map +1 -0
  177. package/dist/layouts/docs/page/index.js +104 -0
  178. package/dist/layouts/docs/page/index.js.map +1 -0
  179. package/dist/layouts/docs/sidebar.d.ts +58 -0
  180. package/dist/layouts/docs/sidebar.d.ts.map +1 -0
  181. package/dist/layouts/docs/sidebar.js +147 -0
  182. package/dist/layouts/docs/sidebar.js.map +1 -0
  183. package/dist/layouts/home/client.d.ts +19 -0
  184. package/dist/layouts/home/client.d.ts.map +1 -0
  185. package/dist/layouts/home/client.js +262 -0
  186. package/dist/layouts/home/client.js.map +1 -0
  187. package/dist/layouts/home/index.d.ts +17 -0
  188. package/dist/layouts/home/index.d.ts.map +1 -0
  189. package/dist/layouts/home/index.js +25 -0
  190. package/dist/layouts/home/index.js.map +1 -0
  191. package/dist/layouts/home/navbar.d.ts +14 -0
  192. package/dist/layouts/home/navbar.d.ts.map +1 -0
  193. package/dist/layouts/home/navbar.js +38 -0
  194. package/dist/layouts/home/navbar.js.map +1 -0
  195. package/dist/layouts/notebook/client.d.ts +47 -0
  196. package/dist/layouts/notebook/client.d.ts.map +1 -0
  197. package/dist/layouts/notebook/client.js +159 -0
  198. package/dist/layouts/notebook/client.js.map +1 -0
  199. package/dist/layouts/notebook/index.d.ts +38 -0
  200. package/dist/layouts/notebook/index.d.ts.map +1 -0
  201. package/dist/layouts/notebook/index.js +219 -0
  202. package/dist/layouts/notebook/index.js.map +1 -0
  203. package/dist/layouts/notebook/page/client.d.ts +46 -0
  204. package/dist/layouts/notebook/page/client.d.ts.map +1 -0
  205. package/dist/layouts/notebook/page/client.js +227 -0
  206. package/dist/layouts/notebook/page/client.js.map +1 -0
  207. package/dist/layouts/notebook/page/index.d.ts +94 -0
  208. package/dist/layouts/notebook/page/index.d.ts.map +1 -0
  209. package/dist/layouts/notebook/page/index.js +104 -0
  210. package/dist/layouts/notebook/page/index.js.map +1 -0
  211. package/dist/layouts/notebook/sidebar.d.ts +63 -0
  212. package/dist/layouts/notebook/sidebar.d.ts.map +1 -0
  213. package/dist/layouts/notebook/sidebar.js +147 -0
  214. package/dist/layouts/notebook/sidebar.js.map +1 -0
  215. package/dist/layouts/shared/index.d.ts +69 -0
  216. package/dist/layouts/shared/index.d.ts.map +1 -0
  217. package/dist/layouts/shared/index.js +39 -0
  218. package/dist/layouts/shared/index.js.map +1 -0
  219. package/dist/layouts/shared/language-toggle.d.ts +10 -0
  220. package/dist/layouts/shared/language-toggle.d.ts.map +1 -0
  221. package/dist/layouts/shared/language-toggle.js +47 -0
  222. package/dist/layouts/shared/language-toggle.js.map +1 -0
  223. package/dist/layouts/shared/search-toggle.d.ts +23 -0
  224. package/dist/layouts/shared/search-toggle.d.ts.map +1 -0
  225. package/dist/layouts/shared/search-toggle.js +56 -0
  226. package/dist/layouts/shared/search-toggle.js.map +1 -0
  227. package/dist/layouts/shared/theme-toggle.d.ts +14 -0
  228. package/dist/layouts/shared/theme-toggle.d.ts.map +1 -0
  229. package/dist/layouts/shared/theme-toggle.js +62 -0
  230. package/dist/layouts/shared/theme-toggle.js.map +1 -0
  231. package/dist/mdx.d.ts +38 -0
  232. package/dist/mdx.d.ts.map +1 -0
  233. package/dist/mdx.js +74 -0
  234. package/dist/mdx.js.map +1 -0
  235. package/dist/mdx.server.d.ts +17 -0
  236. package/dist/mdx.server.d.ts.map +1 -0
  237. package/dist/mdx.server.js +23 -0
  238. package/dist/mdx.server.js.map +1 -0
  239. package/dist/og.d.ts +1 -0
  240. package/dist/og.js +3 -0
  241. package/dist/page.d.ts +37 -0
  242. package/dist/page.d.ts.map +1 -0
  243. package/dist/page.js +38 -0
  244. package/dist/page.js.map +1 -0
  245. package/dist/provider/base.d.ts +50 -0
  246. package/dist/provider/base.d.ts.map +1 -0
  247. package/dist/provider/base.js +39 -0
  248. package/dist/provider/base.js.map +1 -0
  249. package/dist/provider/next.d.ts +22 -0
  250. package/dist/provider/next.d.ts.map +1 -0
  251. package/dist/provider/next.js +21 -0
  252. package/dist/provider/next.js.map +1 -0
  253. package/dist/provider/react-router.d.ts +22 -0
  254. package/dist/provider/react-router.d.ts.map +1 -0
  255. package/dist/provider/react-router.js +21 -0
  256. package/dist/provider/react-router.js.map +1 -0
  257. package/dist/provider/tanstack.d.ts +22 -0
  258. package/dist/provider/tanstack.d.ts.map +1 -0
  259. package/dist/provider/tanstack.js +21 -0
  260. package/dist/provider/tanstack.js.map +1 -0
  261. package/dist/provider/waku.d.ts +22 -0
  262. package/dist/provider/waku.d.ts.map +1 -0
  263. package/dist/provider/waku.js +21 -0
  264. package/dist/provider/waku.js.map +1 -0
  265. package/dist/style.css +3255 -0
  266. package/dist/utils/use-copy-button.d.ts +1 -0
  267. package/dist/utils/use-copy-button.js +3 -0
  268. package/dist/utils/use-footer-items.d.ts +1 -0
  269. package/dist/utils/use-footer-items.js +3 -0
  270. package/dist/utils/use-is-scroll-top.d.ts +1 -0
  271. package/dist/utils/use-is-scroll-top.js +3 -0
  272. package/package.json +149 -0
@@ -0,0 +1,63 @@
1
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs.js";
2
+ import * as react_jsx_runtime5 from "react/jsx-runtime";
3
+ import { ComponentProps, HTMLAttributes, ReactNode } from "react";
4
+
5
+ //#region src/components/codeblock.d.ts
6
+ interface CodeBlockProps extends ComponentProps<'figure'> {
7
+ /**
8
+ * Icon of code block
9
+ *
10
+ * When passed as a string, it assumes the value is the HTML of icon
11
+ */
12
+ icon?: ReactNode;
13
+ /**
14
+ * Allow to copy code with copy button
15
+ *
16
+ * @defaultValue true
17
+ */
18
+ allowCopy?: boolean;
19
+ /**
20
+ * Keep original background color generated by Shiki or Rehype Code
21
+ *
22
+ * @defaultValue false
23
+ */
24
+ keepBackground?: boolean;
25
+ viewportProps?: HTMLAttributes<HTMLElement>;
26
+ /**
27
+ * show line numbers
28
+ */
29
+ 'data-line-numbers'?: boolean;
30
+ /**
31
+ * @defaultValue 1
32
+ */
33
+ 'data-line-numbers-start'?: number;
34
+ Actions?: (props: {
35
+ className?: string;
36
+ children?: ReactNode;
37
+ }) => ReactNode;
38
+ }
39
+ declare function Pre(props: ComponentProps<'pre'>): react_jsx_runtime5.JSX.Element;
40
+ declare function CodeBlock({
41
+ ref,
42
+ title,
43
+ allowCopy,
44
+ keepBackground,
45
+ icon,
46
+ viewportProps,
47
+ children,
48
+ Actions,
49
+ ...props
50
+ }: CodeBlockProps): react_jsx_runtime5.JSX.Element;
51
+ declare function CodeBlockTabs({
52
+ ref,
53
+ ...props
54
+ }: ComponentProps<typeof Tabs>): react_jsx_runtime5.JSX.Element;
55
+ declare function CodeBlockTabsList(props: ComponentProps<typeof TabsList>): react_jsx_runtime5.JSX.Element;
56
+ declare function CodeBlockTabsTrigger({
57
+ children,
58
+ ...props
59
+ }: ComponentProps<typeof TabsTrigger>): react_jsx_runtime5.JSX.Element;
60
+ declare function CodeBlockTab(props: ComponentProps<typeof TabsContent>): react_jsx_runtime5.JSX.Element;
61
+ //#endregion
62
+ export { CodeBlock, CodeBlockProps, CodeBlockTab, CodeBlockTabs, CodeBlockTabsList, CodeBlockTabsTrigger, Pre };
63
+ //# sourceMappingURL=codeblock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeblock.d.ts","names":[],"sources":["../../src/components/codeblock.tsx"],"sourcesContent":[],"mappings":";;;;;UAkBiB,cAAA,SAAuB;;;AAAxC;;;EAsBkB,IAAA,CAAA,EAhBT,SAgBS;EAYmC;;;;AAQrD;EAQgB,SAAA,CAAA,EAAS,OAAA;EACvB;;;;;EAKA,cAAA,CAAA,EAAA,OAAA;EACA,aAAA,CAAA,EAnCgB,cAmChB,CAnC+B,WAmC/B,CAAA;EACA;;;EAEe,mBAAA,CAAA,EAAA,OAAA;EA4GD;;;EAAiC,yBAAA,CAAA,EAAA,MAAA;EAA2B,OAAA,CAAA,EAAA,CAAA,KAAA,EAAA;IAAA,SAAA,CAAA,EAAA,MAAA;IAyB5D,QAAA,CAAA,EA/JqC,SA+JpB;EAA8B,CAAA,EAAA,GA/JM,SA+JN;;AAAS,iBAvJxD,GAAA,CAuJwD,KAAA,EAvJ7C,cAuJ6C,CAAA,KAAA,CAAA,CAAA,EAvJxB,kBAAA,CAAA,GAAA,CAAA,OAuJwB;AAAA,iBA/IxD,SAAA,CA+IwD;EAAA,GAAA;EAAA,KAAA;EAAA,SAAA;EAAA,cAAA;EAAA,IAAA;EAAA,aAAA;EAAA,QAAA;EAAA,OAAA;EAAA,GAAA;AAAA,CAAA,EArIrE,cAqIqE,CAAA,EArIvD,kBAAA,CAAA,GAAA,CAAA,OAqIuD;AAWxD,iBApCA,aAAA,CAoCoB;EAAA,GAAA;EAAA,GAAA;AAAA,CAAA,EApCa,cAoCb,CAAA,OApCmC,IAoCnC,CAAA,CAAA,EApCwC,kBAAA,CAAA,GAAA,CAAA,OAoCxC;AAAG,iBAXvB,iBAAA,CAWuB,KAAA,EAXE,cAWF,CAAA,OAXwB,QAWxB,CAAA,CAAA,EAXiC,kBAAA,CAAA,GAAA,CAAA,OAWjC;AAA4C,iBAAnE,oBAAA,CAAmE;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAAtB,cAAsB,CAAA,OAAA,WAAA,CAAA,CAAA,EAAY,kBAAA,CAAA,GAAA,CAAA,OAAZ;AAAtB,iBAe7C,YAAA,CAf6C,KAAA,EAezB,cAfyB,CAAA,OAeH,WAfG,CAAA,CAAA,EAeS,kBAAA,CAAA,GAAA,CAAA,OAfT"}
@@ -0,0 +1,126 @@
1
+ 'use client';
2
+
3
+ import { buttonVariants } from "./ui/button.js";
4
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs.js";
5
+ import { cn } from "@hanzo/docs-ui/cn";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Check, Clipboard } from "lucide-react";
8
+ import { createContext, use, useMemo, useRef } from "react";
9
+ import { useCopyButton } from "@hanzo/docs-ui/hooks/use-copy-button";
10
+ import { mergeRefs } from "@hanzo/docs-ui/merge-refs";
11
+
12
+ //#region src/components/codeblock.tsx
13
+ const TabsContext = createContext(null);
14
+ function Pre(props) {
15
+ return /* @__PURE__ */ jsx("pre", {
16
+ ...props,
17
+ className: cn("min-w-full w-max *:flex *:flex-col", props.className),
18
+ children: props.children
19
+ });
20
+ }
21
+ function CodeBlock({ ref, title, allowCopy = true, keepBackground = false, icon, viewportProps = {}, children, Actions = (props$1) => /* @__PURE__ */ jsx("div", {
22
+ ...props$1,
23
+ className: cn("empty:hidden", props$1.className)
24
+ }), ...props }) {
25
+ const inTab = use(TabsContext) !== null;
26
+ const areaRef = useRef(null);
27
+ return /* @__PURE__ */ jsxs("figure", {
28
+ ref,
29
+ dir: "ltr",
30
+ ...props,
31
+ tabIndex: -1,
32
+ className: cn(inTab ? "bg-fd-secondary -mx-px -mb-px last:rounded-b-xl" : "my-4 bg-fd-card rounded-xl", keepBackground && "bg-(--shiki-light-bg) dark:bg-(--shiki-dark-bg)", "shiki relative border shadow-sm not-prose overflow-hidden text-sm", props.className),
33
+ children: [title ? /* @__PURE__ */ jsxs("div", {
34
+ className: "flex text-fd-muted-foreground items-center gap-2 h-9.5 border-b px-4",
35
+ children: [
36
+ typeof icon === "string" ? /* @__PURE__ */ jsx("div", {
37
+ className: "[&_svg]:size-3.5",
38
+ dangerouslySetInnerHTML: { __html: icon }
39
+ }) : icon,
40
+ /* @__PURE__ */ jsx("figcaption", {
41
+ className: "flex-1 truncate",
42
+ children: title
43
+ }),
44
+ Actions({
45
+ className: "-me-2",
46
+ children: allowCopy && /* @__PURE__ */ jsx(CopyButton, { containerRef: areaRef })
47
+ })
48
+ ]
49
+ }) : Actions({
50
+ className: "absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground",
51
+ children: allowCopy && /* @__PURE__ */ jsx(CopyButton, { containerRef: areaRef })
52
+ }), /* @__PURE__ */ jsx("div", {
53
+ ref: areaRef,
54
+ ...viewportProps,
55
+ role: "region",
56
+ tabIndex: 0,
57
+ className: cn("text-[0.8125rem] py-3.5 overflow-auto max-h-[600px] fd-scroll-container focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-fd-ring", viewportProps.className),
58
+ style: {
59
+ "--padding-right": !title ? "calc(var(--spacing) * 8)" : void 0,
60
+ counterSet: props["data-line-numbers"] ? `line ${Number(props["data-line-numbers-start"] ?? 1) - 1}` : void 0,
61
+ ...viewportProps.style
62
+ },
63
+ children
64
+ })]
65
+ });
66
+ }
67
+ function CopyButton({ className, containerRef, ...props }) {
68
+ const [checked, onClick] = useCopyButton(() => {
69
+ const pre = containerRef.current?.getElementsByTagName("pre").item(0);
70
+ if (!pre) return;
71
+ const clone = pre.cloneNode(true);
72
+ clone.querySelectorAll(".nd-copy-ignore").forEach((node) => {
73
+ node.replaceWith("\n");
74
+ });
75
+ navigator.clipboard.writeText(clone.textContent ?? "");
76
+ });
77
+ return /* @__PURE__ */ jsx("button", {
78
+ type: "button",
79
+ "data-checked": checked || void 0,
80
+ className: cn(buttonVariants({
81
+ className: "hover:text-fd-accent-foreground data-checked:text-fd-accent-foreground",
82
+ size: "icon-xs"
83
+ }), className),
84
+ "aria-label": checked ? "Copied Text" : "Copy Text",
85
+ onClick,
86
+ ...props,
87
+ children: checked ? /* @__PURE__ */ jsx(Check, {}) : /* @__PURE__ */ jsx(Clipboard, {})
88
+ });
89
+ }
90
+ function CodeBlockTabs({ ref, ...props }) {
91
+ const containerRef = useRef(null);
92
+ const nested = use(TabsContext) !== null;
93
+ return /* @__PURE__ */ jsx(Tabs, {
94
+ ref: mergeRefs(containerRef, ref),
95
+ ...props,
96
+ className: cn("bg-fd-card rounded-xl border", !nested && "my-4", props.className),
97
+ children: /* @__PURE__ */ jsx(TabsContext, {
98
+ value: useMemo(() => ({
99
+ containerRef,
100
+ nested
101
+ }), [nested]),
102
+ children: props.children
103
+ })
104
+ });
105
+ }
106
+ function CodeBlockTabsList(props) {
107
+ return /* @__PURE__ */ jsx(TabsList, {
108
+ ...props,
109
+ className: cn("flex flex-row px-2 overflow-x-auto text-fd-muted-foreground", props.className),
110
+ children: props.children
111
+ });
112
+ }
113
+ function CodeBlockTabsTrigger({ children, ...props }) {
114
+ return /* @__PURE__ */ jsxs(TabsTrigger, {
115
+ ...props,
116
+ className: cn("relative group inline-flex text-sm font-medium text-nowrap items-center transition-colors gap-2 px-2 py-1.5 hover:text-fd-accent-foreground data-[state=active]:text-fd-primary [&_svg]:size-3.5", props.className),
117
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-x-2 bottom-0 h-px group-data-[state=active]:bg-fd-primary" }), children]
118
+ });
119
+ }
120
+ function CodeBlockTab(props) {
121
+ return /* @__PURE__ */ jsx(TabsContent, { ...props });
122
+ }
123
+
124
+ //#endregion
125
+ export { CodeBlock, CodeBlockTab, CodeBlockTabs, CodeBlockTabsList, CodeBlockTabsTrigger, Pre };
126
+ //# sourceMappingURL=codeblock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeblock.js","names":["props"],"sources":["../../src/components/codeblock.tsx"],"sourcesContent":["'use client';\nimport { Check, Clipboard } from 'lucide-react';\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n use,\n useMemo,\n useRef,\n} from 'react';\nimport { cn } from '@hanzo/docs-ui/cn';\nimport { useCopyButton } from '@hanzo/docs-ui/hooks/use-copy-button';\nimport { buttonVariants } from '@/components/ui/button';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { mergeRefs } from '@hanzo/docs-ui/merge-refs';\n\nexport interface CodeBlockProps extends ComponentProps<'figure'> {\n /**\n * Icon of code block\n *\n * When passed as a string, it assumes the value is the HTML of icon\n */\n icon?: ReactNode;\n\n /**\n * Allow to copy code with copy button\n *\n * @defaultValue true\n */\n allowCopy?: boolean;\n\n /**\n * Keep original background color generated by Shiki or Rehype Code\n *\n * @defaultValue false\n */\n keepBackground?: boolean;\n\n viewportProps?: HTMLAttributes<HTMLElement>;\n\n /**\n * show line numbers\n */\n 'data-line-numbers'?: boolean;\n\n /**\n * @defaultValue 1\n */\n 'data-line-numbers-start'?: number;\n\n Actions?: (props: { className?: string; children?: ReactNode }) => ReactNode;\n}\n\nconst TabsContext = createContext<{\n containerRef: RefObject<HTMLDivElement | null>;\n nested: boolean;\n} | null>(null);\n\nexport function Pre(props: ComponentProps<'pre'>) {\n return (\n <pre {...props} className={cn('min-w-full w-max *:flex *:flex-col', props.className)}>\n {props.children}\n </pre>\n );\n}\n\nexport function CodeBlock({\n ref,\n title,\n allowCopy = true,\n keepBackground = false,\n icon,\n viewportProps = {},\n children,\n Actions = (props) => <div {...props} className={cn('empty:hidden', props.className)} />,\n ...props\n}: CodeBlockProps) {\n const inTab = use(TabsContext) !== null;\n const areaRef = useRef<HTMLDivElement>(null);\n\n return (\n <figure\n ref={ref}\n dir=\"ltr\"\n {...props}\n tabIndex={-1}\n className={cn(\n inTab ? 'bg-fd-secondary -mx-px -mb-px last:rounded-b-xl' : 'my-4 bg-fd-card rounded-xl',\n keepBackground && 'bg-(--shiki-light-bg) dark:bg-(--shiki-dark-bg)',\n\n 'shiki relative border shadow-sm not-prose overflow-hidden text-sm',\n props.className,\n )}\n >\n {title ? (\n <div className=\"flex text-fd-muted-foreground items-center gap-2 h-9.5 border-b px-4\">\n {typeof icon === 'string' ? (\n <div\n className=\"[&_svg]:size-3.5\"\n dangerouslySetInnerHTML={{\n __html: icon,\n }}\n />\n ) : (\n icon\n )}\n <figcaption className=\"flex-1 truncate\">{title}</figcaption>\n {Actions({\n className: '-me-2',\n children: allowCopy && <CopyButton containerRef={areaRef} />,\n })}\n </div>\n ) : (\n Actions({\n className:\n 'absolute top-3 right-2 z-2 backdrop-blur-lg rounded-lg text-fd-muted-foreground',\n children: allowCopy && <CopyButton containerRef={areaRef} />,\n })\n )}\n <div\n ref={areaRef}\n {...viewportProps}\n role=\"region\"\n tabIndex={0}\n className={cn(\n 'text-[0.8125rem] py-3.5 overflow-auto max-h-[600px] fd-scroll-container focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-fd-ring',\n viewportProps.className,\n )}\n style={\n {\n // space for toolbar\n '--padding-right': !title ? 'calc(var(--spacing) * 8)' : undefined,\n counterSet: props['data-line-numbers']\n ? `line ${Number(props['data-line-numbers-start'] ?? 1) - 1}`\n : undefined,\n ...viewportProps.style,\n } as object\n }\n >\n {children}\n </div>\n </figure>\n );\n}\n\nfunction CopyButton({\n className,\n containerRef,\n ...props\n}: ComponentProps<'button'> & {\n containerRef: RefObject<HTMLElement | null>;\n}) {\n const [checked, onClick] = useCopyButton(() => {\n const pre = containerRef.current?.getElementsByTagName('pre').item(0);\n if (!pre) return;\n\n const clone = pre.cloneNode(true) as HTMLElement;\n clone.querySelectorAll('.nd-copy-ignore').forEach((node) => {\n node.replaceWith('\\n');\n });\n\n void navigator.clipboard.writeText(clone.textContent ?? '');\n });\n\n return (\n <button\n type=\"button\"\n data-checked={checked || undefined}\n className={cn(\n buttonVariants({\n className: 'hover:text-fd-accent-foreground data-checked:text-fd-accent-foreground',\n size: 'icon-xs',\n }),\n className,\n )}\n aria-label={checked ? 'Copied Text' : 'Copy Text'}\n onClick={onClick}\n {...props}\n >\n {checked ? <Check /> : <Clipboard />}\n </button>\n );\n}\n\nexport function CodeBlockTabs({ ref, ...props }: ComponentProps<typeof Tabs>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const nested = use(TabsContext) !== null;\n\n return (\n <Tabs\n ref={mergeRefs(containerRef, ref)}\n {...props}\n className={cn('bg-fd-card rounded-xl border', !nested && 'my-4', props.className)}\n >\n <TabsContext\n value={useMemo(\n () => ({\n containerRef,\n nested,\n }),\n [nested],\n )}\n >\n {props.children}\n </TabsContext>\n </Tabs>\n );\n}\n\nexport function CodeBlockTabsList(props: ComponentProps<typeof TabsList>) {\n return (\n <TabsList\n {...props}\n className={cn('flex flex-row px-2 overflow-x-auto text-fd-muted-foreground', props.className)}\n >\n {props.children}\n </TabsList>\n );\n}\n\nexport function CodeBlockTabsTrigger({ children, ...props }: ComponentProps<typeof TabsTrigger>) {\n return (\n <TabsTrigger\n {...props}\n className={cn(\n 'relative group inline-flex text-sm font-medium text-nowrap items-center transition-colors gap-2 px-2 py-1.5 hover:text-fd-accent-foreground data-[state=active]:text-fd-primary [&_svg]:size-3.5',\n props.className,\n )}\n >\n <div className=\"absolute inset-x-2 bottom-0 h-px group-data-[state=active]:bg-fd-primary\" />\n {children}\n </TabsTrigger>\n );\n}\n\nexport function CodeBlockTab(props: ComponentProps<typeof TabsContent>) {\n return <TabsContent {...props} />;\n}\n"],"mappings":";;;;;;;;;;;;AAuDA,MAAM,cAAc,cAGV,KAAK;AAEf,SAAgB,IAAI,OAA8B;AAChD,QACE,oBAAC;EAAI,GAAI;EAAO,WAAW,GAAG,sCAAsC,MAAM,UAAU;YACjF,MAAM;GACH;;AAIV,SAAgB,UAAU,EACxB,KACA,OACA,YAAY,MACZ,iBAAiB,OACjB,MACA,gBAAgB,EAAE,EAClB,UACA,WAAW,YAAU,oBAAC;CAAI,GAAIA;CAAO,WAAW,GAAG,gBAAgBA,QAAM,UAAU;EAAI,EACvF,GAAG,SACc;CACjB,MAAM,QAAQ,IAAI,YAAY,KAAK;CACnC,MAAM,UAAU,OAAuB,KAAK;AAE5C,QACE,qBAAC;EACM;EACL,KAAI;EACJ,GAAI;EACJ,UAAU;EACV,WAAW,GACT,QAAQ,oDAAoD,8BAC5D,kBAAkB,mDAElB,qEACA,MAAM,UACP;aAEA,QACC,qBAAC;GAAI,WAAU;;IACZ,OAAO,SAAS,WACf,oBAAC;KACC,WAAU;KACV,yBAAyB,EACvB,QAAQ,MACT;MACD,GAEF;IAEF,oBAAC;KAAW,WAAU;eAAmB;MAAmB;IAC3D,QAAQ;KACP,WAAW;KACX,UAAU,aAAa,oBAAC,cAAW,cAAc,UAAW;KAC7D,CAAC;;IACE,GAEN,QAAQ;GACN,WACE;GACF,UAAU,aAAa,oBAAC,cAAW,cAAc,UAAW;GAC7D,CAAC,EAEJ,oBAAC;GACC,KAAK;GACL,GAAI;GACJ,MAAK;GACL,UAAU;GACV,WAAW,GACT,+KACA,cAAc,UACf;GACD,OACE;IAEE,mBAAmB,CAAC,QAAQ,6BAA6B;IACzD,YAAY,MAAM,uBACd,QAAQ,OAAO,MAAM,8BAA8B,EAAE,GAAG,MACxD;IACJ,GAAG,cAAc;IAClB;GAGF;IACG;GACC;;AAIb,SAAS,WAAW,EAClB,WACA,cACA,GAAG,SAGF;CACD,MAAM,CAAC,SAAS,WAAW,oBAAoB;EAC7C,MAAM,MAAM,aAAa,SAAS,qBAAqB,MAAM,CAAC,KAAK,EAAE;AACrE,MAAI,CAAC,IAAK;EAEV,MAAM,QAAQ,IAAI,UAAU,KAAK;AACjC,QAAM,iBAAiB,kBAAkB,CAAC,SAAS,SAAS;AAC1D,QAAK,YAAY,KAAK;IACtB;AAEF,EAAK,UAAU,UAAU,UAAU,MAAM,eAAe,GAAG;GAC3D;AAEF,QACE,oBAAC;EACC,MAAK;EACL,gBAAc,WAAW;EACzB,WAAW,GACT,eAAe;GACb,WAAW;GACX,MAAM;GACP,CAAC,EACF,UACD;EACD,cAAY,UAAU,gBAAgB;EAC7B;EACT,GAAI;YAEH,UAAU,oBAAC,UAAQ,GAAG,oBAAC,cAAY;GAC7B;;AAIb,SAAgB,cAAc,EAAE,KAAK,GAAG,SAAsC;CAC5E,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,SAAS,IAAI,YAAY,KAAK;AAEpC,QACE,oBAAC;EACC,KAAK,UAAU,cAAc,IAAI;EACjC,GAAI;EACJ,WAAW,GAAG,gCAAgC,CAAC,UAAU,QAAQ,MAAM,UAAU;YAEjF,oBAAC;GACC,OAAO,eACE;IACL;IACA;IACD,GACD,CAAC,OAAO,CACT;aAEA,MAAM;IACK;GACT;;AAIX,SAAgB,kBAAkB,OAAwC;AACxE,QACE,oBAAC;EACC,GAAI;EACJ,WAAW,GAAG,+DAA+D,MAAM,UAAU;YAE5F,MAAM;GACE;;AAIf,SAAgB,qBAAqB,EAAE,UAAU,GAAG,SAA6C;AAC/F,QACE,qBAAC;EACC,GAAI;EACJ,WAAW,GACT,oMACA,MAAM,UACP;aAED,oBAAC,SAAI,WAAU,6EAA6E,EAC3F;GACW;;AAIlB,SAAgB,aAAa,OAA2C;AACtE,QAAO,oBAAC,eAAY,GAAI,QAAS"}
@@ -0,0 +1,39 @@
1
+ import { search_d_exports } from "../../contexts/search.js";
2
+ import "./search.js";
3
+ import * as react_jsx_runtime46 from "react/jsx-runtime";
4
+ import { ReactNode } from "react";
5
+ import { AlgoliaOptions } from "@hanzo/docs-core/search/client";
6
+
7
+ //#region src/components/dialog/search-algolia.d.ts
8
+ interface AlgoliaSearchDialogProps extends search_d_exports.SharedProps {
9
+ searchOptions: AlgoliaOptions;
10
+ links?: search_d_exports.SearchLink[];
11
+ footer?: ReactNode;
12
+ defaultTag?: string;
13
+ tags?: search_d_exports.TagItem[];
14
+ /**
15
+ * Add the "Powered by Algolia" label, this is useful for free tier users
16
+ *
17
+ * @defaultValue false
18
+ */
19
+ showAlgolia?: boolean;
20
+ /**
21
+ * Allow to clear tag filters
22
+ *
23
+ * @defaultValue false
24
+ */
25
+ allowClear?: boolean;
26
+ }
27
+ declare function AlgoliaSearchDialog({
28
+ searchOptions,
29
+ tags,
30
+ defaultTag,
31
+ showAlgolia,
32
+ allowClear,
33
+ links,
34
+ footer,
35
+ ...props
36
+ }: AlgoliaSearchDialogProps): react_jsx_runtime46.JSX.Element;
37
+ //#endregion
38
+ export { AlgoliaSearchDialogProps, AlgoliaSearchDialog as default };
39
+ //# sourceMappingURL=search-algolia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-algolia.d.ts","names":[],"sources":["../../../src/components/dialog/search-algolia.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAuBiB,wBAAA,SAAiC,gBAAA,CAAA;iBACjC;UACP,gBAAA,CAAA;EAFO,MAAA,CAAA,EAIN,SAJM;EACA,UAAA,CAAA,EAAA,MAAA;EACP,IAAA,CAAA,EAKD,gBAAA,CAAA,OALC,EAAA;EAEC;;;;AAkBV;EAGC,WAAA,CAAA,EAAA,OAAA;EACA;;;;;EAKA,UAAA,CAAA,EAAA,OAAA;;AAEyB,iBATH,mBAAA,CASG;EAAA,aAAA;EAAA,IAAA;EAAA,UAAA;EAAA,WAAA;EAAA,UAAA;EAAA,KAAA;EAAA,MAAA;EAAA,GAAA;AAAA,CAAA,EAAxB,wBAAwB,CAAA,EAAA,mBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,68 @@
1
+ 'use client';
2
+
3
+ import { i18n_exports } from "../../contexts/i18n.js";
4
+ import { SearchDialog, SearchDialogClose, SearchDialogContent, SearchDialogFooter, SearchDialogHeader, SearchDialogIcon, SearchDialogInput, SearchDialogList, SearchDialogOverlay, TagsList, TagsListItem } from "./search.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { useMemo, useState } from "react";
7
+ import { useOnChange } from "@hanzo/docs-core/utils/use-on-change";
8
+ import { useDocsSearch } from "@hanzo/docs-core/search/client";
9
+
10
+ //#region src/components/dialog/search-algolia.tsx
11
+ function AlgoliaSearchDialog({ searchOptions, tags = [], defaultTag, showAlgolia = false, allowClear = false, links = [], footer, ...props }) {
12
+ const [tag, setTag] = useState(defaultTag);
13
+ const { locale } = (0, i18n_exports.useI18n)();
14
+ const { search, setSearch, query } = useDocsSearch({
15
+ type: "algolia",
16
+ tag,
17
+ locale,
18
+ ...searchOptions
19
+ });
20
+ const defaultItems = useMemo(() => {
21
+ if (links.length === 0) return null;
22
+ return links.map(([name, link]) => ({
23
+ type: "page",
24
+ id: name,
25
+ content: name,
26
+ url: link
27
+ }));
28
+ }, [links]);
29
+ useOnChange(defaultTag, (v) => {
30
+ setTag(v);
31
+ });
32
+ const label = showAlgolia && /* @__PURE__ */ jsx(AlgoliaTitle, {});
33
+ return /* @__PURE__ */ jsxs(SearchDialog, {
34
+ search,
35
+ onSearchChange: setSearch,
36
+ isLoading: query.isLoading,
37
+ ...props,
38
+ children: [
39
+ /* @__PURE__ */ jsx(SearchDialogOverlay, {}),
40
+ /* @__PURE__ */ jsxs(SearchDialogContent, { children: [/* @__PURE__ */ jsxs(SearchDialogHeader, { children: [
41
+ /* @__PURE__ */ jsx(SearchDialogIcon, {}),
42
+ /* @__PURE__ */ jsx(SearchDialogInput, {}),
43
+ /* @__PURE__ */ jsx(SearchDialogClose, {})
44
+ ] }), /* @__PURE__ */ jsx(SearchDialogList, { items: query.data !== "empty" ? query.data : defaultItems })] }),
45
+ /* @__PURE__ */ jsxs(SearchDialogFooter, { children: [tags.length > 0 ? /* @__PURE__ */ jsxs(TagsList, {
46
+ tag,
47
+ onTagChange: setTag,
48
+ allowClear,
49
+ children: [tags.map((tag$1) => /* @__PURE__ */ jsx(TagsListItem, {
50
+ value: tag$1.value,
51
+ children: tag$1.name
52
+ }, tag$1.value)), label]
53
+ }) : label, footer] })
54
+ ]
55
+ });
56
+ }
57
+ function AlgoliaTitle() {
58
+ return /* @__PURE__ */ jsx("a", {
59
+ href: "https://algolia.com",
60
+ rel: "noreferrer noopener",
61
+ className: "ms-auto text-xs text-fd-muted-foreground",
62
+ children: "Search powered by Algolia"
63
+ });
64
+ }
65
+
66
+ //#endregion
67
+ export { AlgoliaSearchDialog as default };
68
+ //# sourceMappingURL=search-algolia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-algolia.js","names":["tag"],"sources":["../../../src/components/dialog/search-algolia.tsx"],"sourcesContent":["'use client';\n\nimport { type AlgoliaOptions, useDocsSearch } from '@hanzo/docs-core/search/client';\nimport { type ReactNode, useMemo, useState } from 'react';\nimport { useOnChange } from '@hanzo/docs-core/utils/use-on-change';\nimport {\n SearchDialog,\n SearchDialogClose,\n SearchDialogContent,\n SearchDialogFooter,\n SearchDialogHeader,\n SearchDialogIcon,\n SearchDialogInput,\n SearchDialogList,\n SearchDialogOverlay,\n type SharedProps,\n TagsList,\n TagsListItem,\n} from './search';\nimport type { SortedResult } from '@hanzo/docs-core/search';\nimport type { SearchLink, TagItem } from '@/contexts/search';\nimport { useI18n } from '@/contexts/i18n';\n\nexport interface AlgoliaSearchDialogProps extends SharedProps {\n searchOptions: AlgoliaOptions;\n links?: SearchLink[];\n\n footer?: ReactNode;\n\n defaultTag?: string;\n tags?: TagItem[];\n\n /**\n * Add the \"Powered by Algolia\" label, this is useful for free tier users\n *\n * @defaultValue false\n */\n showAlgolia?: boolean;\n\n /**\n * Allow to clear tag filters\n *\n * @defaultValue false\n */\n allowClear?: boolean;\n}\n\nexport default function AlgoliaSearchDialog({\n searchOptions,\n tags = [],\n defaultTag,\n showAlgolia = false,\n allowClear = false,\n links = [],\n footer,\n ...props\n}: AlgoliaSearchDialogProps) {\n const [tag, setTag] = useState(defaultTag);\n const { locale } = useI18n();\n const { search, setSearch, query } = useDocsSearch({\n type: 'algolia',\n tag,\n locale,\n ...searchOptions,\n });\n const defaultItems = useMemo<SortedResult[] | null>(() => {\n if (links.length === 0) return null;\n return links.map(([name, link]) => ({\n type: 'page',\n id: name,\n content: name,\n url: link,\n }));\n }, [links]);\n\n useOnChange(defaultTag, (v) => {\n setTag(v);\n });\n\n const label = showAlgolia && <AlgoliaTitle />;\n\n return (\n <SearchDialog search={search} onSearchChange={setSearch} isLoading={query.isLoading} {...props}>\n <SearchDialogOverlay />\n <SearchDialogContent>\n <SearchDialogHeader>\n <SearchDialogIcon />\n <SearchDialogInput />\n <SearchDialogClose />\n </SearchDialogHeader>\n <SearchDialogList items={query.data !== 'empty' ? query.data : defaultItems} />\n </SearchDialogContent>\n <SearchDialogFooter>\n {tags.length > 0 ? (\n <TagsList tag={tag} onTagChange={setTag} allowClear={allowClear}>\n {tags.map((tag) => (\n <TagsListItem key={tag.value} value={tag.value}>\n {tag.name}\n </TagsListItem>\n ))}\n {label}\n </TagsList>\n ) : (\n label\n )}\n {footer}\n </SearchDialogFooter>\n </SearchDialog>\n );\n}\n\nfunction AlgoliaTitle() {\n return (\n <a\n href=\"https://algolia.com\"\n rel=\"noreferrer noopener\"\n className=\"ms-auto text-xs text-fd-muted-foreground\"\n >\n Search powered by Algolia\n </a>\n );\n}\n"],"mappings":";;;;;;;;;;AA+CA,SAAwB,oBAAoB,EAC1C,eACA,OAAO,EAAE,EACT,YACA,cAAc,OACd,aAAa,OACb,QAAQ,EAAE,EACV,QACA,GAAG,SACwB;CAC3B,MAAM,CAAC,KAAK,UAAU,SAAS,WAAW;CAC1C,MAAM,EAAE,sCAAoB;CAC5B,MAAM,EAAE,QAAQ,WAAW,UAAU,cAAc;EACjD,MAAM;EACN;EACA;EACA,GAAG;EACJ,CAAC;CACF,MAAM,eAAe,cAAqC;AACxD,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MAAM,KAAK,CAAC,MAAM,WAAW;GAClC,MAAM;GACN,IAAI;GACJ,SAAS;GACT,KAAK;GACN,EAAE;IACF,CAAC,MAAM,CAAC;AAEX,aAAY,aAAa,MAAM;AAC7B,SAAO,EAAE;GACT;CAEF,MAAM,QAAQ,eAAe,oBAAC,iBAAe;AAE7C,QACE,qBAAC;EAAqB;EAAQ,gBAAgB;EAAW,WAAW,MAAM;EAAW,GAAI;;GACvF,oBAAC,wBAAsB;GACvB,qBAAC,kCACC,qBAAC;IACC,oBAAC,qBAAmB;IACpB,oBAAC,sBAAoB;IACrB,oBAAC,sBAAoB;OACF,EACrB,oBAAC,oBAAiB,OAAO,MAAM,SAAS,UAAU,MAAM,OAAO,eAAgB,IAC3D;GACtB,qBAAC,iCACE,KAAK,SAAS,IACb,qBAAC;IAAc;IAAK,aAAa;IAAoB;eAClD,KAAK,KAAK,UACT,oBAAC;KAA6B,OAAOA,MAAI;eACtCA,MAAI;OADYA,MAAI,MAER,CACf,EACD;KACQ,GAEX,OAED,UACkB;;GACR;;AAInB,SAAS,eAAe;AACtB,QACE,oBAAC;EACC,MAAK;EACL,KAAI;EACJ,WAAU;YACX;GAEG"}
@@ -0,0 +1,44 @@
1
+ import { search_d_exports } from "../../contexts/search.js";
2
+ import "./search.js";
3
+ import * as react_jsx_runtime38 from "react/jsx-runtime";
4
+ import { ReactNode } from "react";
5
+
6
+ //#region src/components/dialog/search-default.d.ts
7
+ interface DefaultSearchDialogProps extends search_d_exports.SharedProps {
8
+ links?: search_d_exports.SearchLink[];
9
+ /**
10
+ * @defaultValue 'fetch'
11
+ */
12
+ type?: 'fetch' | 'static';
13
+ defaultTag?: string;
14
+ tags?: search_d_exports.TagItem[];
15
+ /**
16
+ * Search API URL
17
+ */
18
+ api?: string;
19
+ /**
20
+ * The debounced delay for performing a search.
21
+ */
22
+ delayMs?: number;
23
+ footer?: ReactNode;
24
+ /**
25
+ * Allow to clear tag filters
26
+ *
27
+ * @defaultValue false
28
+ */
29
+ allowClear?: boolean;
30
+ }
31
+ declare function DefaultSearchDialog({
32
+ defaultTag,
33
+ tags,
34
+ api,
35
+ delayMs,
36
+ type,
37
+ allowClear,
38
+ links,
39
+ footer,
40
+ ...props
41
+ }: DefaultSearchDialogProps): react_jsx_runtime38.JSX.Element;
42
+ //#endregion
43
+ export { DefaultSearchDialogProps, DefaultSearchDialog as default };
44
+ //# sourceMappingURL=search-default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-default.d.ts","names":[],"sources":["../../../src/components/dialog/search-default.tsx"],"sourcesContent":[],"mappings":";;;;;;UAuBiB,wBAAA,SAAiC,gBAAA,CAAA;UACxC,gBAAA,CAAA;;AADV;;EASS,IAAA,CAAA,EAAA,OAAA,GAAA,QAAA;EAYE,UAAA,CAAA,EAAA,MAAA;EArBuC,IAAA,CAAA,EASzC,gBAAA,CAAA,OATyC,EAAA;EAAW;AA6B5D;;EAIC,GAAA,CAAA,EAAA,MAAA;EACA;;;EAGA,OAAA,CAAA,EAAA,MAAA;EACA,MAAA,CAAA,EAjBS,SAiBT;EACA;;;;;;;iBARsB,mBAAA;;;;;;;;;;GAUrB,2BAAwB,mBAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1,66 @@
1
+ 'use client';
2
+
3
+ import { i18n_exports } from "../../contexts/i18n.js";
4
+ import { SearchDialog, SearchDialogClose, SearchDialogContent, SearchDialogFooter, SearchDialogHeader, SearchDialogIcon, SearchDialogInput, SearchDialogList, SearchDialogOverlay, TagsList, TagsListItem } from "./search.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { useMemo, useState } from "react";
7
+ import { useOnChange } from "@hanzo/docs-core/utils/use-on-change";
8
+ import { useDocsSearch } from "@hanzo/docs-core/search/client";
9
+
10
+ //#region src/components/dialog/search-default.tsx
11
+ function DefaultSearchDialog({ defaultTag, tags = [], api, delayMs, type = "fetch", allowClear = false, links = [], footer, ...props }) {
12
+ const { locale } = (0, i18n_exports.useI18n)();
13
+ const [tag, setTag] = useState(defaultTag);
14
+ const { search, setSearch, query } = useDocsSearch(type === "fetch" ? {
15
+ type: "fetch",
16
+ api,
17
+ locale,
18
+ tag,
19
+ delayMs
20
+ } : {
21
+ type: "static",
22
+ from: api,
23
+ locale,
24
+ tag,
25
+ delayMs
26
+ });
27
+ const defaultItems = useMemo(() => {
28
+ if (links.length === 0) return null;
29
+ return links.map(([name, link]) => ({
30
+ type: "page",
31
+ id: name,
32
+ content: name,
33
+ url: link
34
+ }));
35
+ }, [links]);
36
+ useOnChange(defaultTag, (v) => {
37
+ setTag(v);
38
+ });
39
+ return /* @__PURE__ */ jsxs(SearchDialog, {
40
+ search,
41
+ onSearchChange: setSearch,
42
+ isLoading: query.isLoading,
43
+ ...props,
44
+ children: [
45
+ /* @__PURE__ */ jsx(SearchDialogOverlay, {}),
46
+ /* @__PURE__ */ jsxs(SearchDialogContent, { children: [/* @__PURE__ */ jsxs(SearchDialogHeader, { children: [
47
+ /* @__PURE__ */ jsx(SearchDialogIcon, {}),
48
+ /* @__PURE__ */ jsx(SearchDialogInput, {}),
49
+ /* @__PURE__ */ jsx(SearchDialogClose, {})
50
+ ] }), /* @__PURE__ */ jsx(SearchDialogList, { items: query.data !== "empty" ? query.data : defaultItems })] }),
51
+ /* @__PURE__ */ jsxs(SearchDialogFooter, { children: [tags.length > 0 && /* @__PURE__ */ jsx(TagsList, {
52
+ tag,
53
+ onTagChange: setTag,
54
+ allowClear,
55
+ children: tags.map((tag$1) => /* @__PURE__ */ jsx(TagsListItem, {
56
+ value: tag$1.value,
57
+ children: tag$1.name
58
+ }, tag$1.value))
59
+ }), footer] })
60
+ ]
61
+ });
62
+ }
63
+
64
+ //#endregion
65
+ export { DefaultSearchDialog as default };
66
+ //# sourceMappingURL=search-default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-default.js","names":["tag"],"sources":["../../../src/components/dialog/search-default.tsx"],"sourcesContent":["'use client';\n\nimport { useDocsSearch } from '@hanzo/docs-core/search/client';\nimport { type ReactNode, useMemo, useState } from 'react';\nimport { useOnChange } from '@hanzo/docs-core/utils/use-on-change';\nimport { useI18n } from '@/contexts/i18n';\nimport {\n SearchDialog,\n SearchDialogClose,\n SearchDialogContent,\n SearchDialogFooter,\n SearchDialogHeader,\n SearchDialogIcon,\n SearchDialogInput,\n SearchDialogList,\n SearchDialogOverlay,\n type SharedProps,\n TagsList,\n TagsListItem,\n} from './search';\nimport type { SortedResult } from '@hanzo/docs-core/search';\nimport type { SearchLink, TagItem } from '@/contexts/search';\n\nexport interface DefaultSearchDialogProps extends SharedProps {\n links?: SearchLink[];\n\n /**\n * @defaultValue 'fetch'\n */\n type?: 'fetch' | 'static';\n\n defaultTag?: string;\n tags?: TagItem[];\n\n /**\n * Search API URL\n */\n api?: string;\n\n /**\n * The debounced delay for performing a search.\n */\n delayMs?: number;\n\n footer?: ReactNode;\n\n /**\n * Allow to clear tag filters\n *\n * @defaultValue false\n */\n allowClear?: boolean;\n}\n\nexport default function DefaultSearchDialog({\n defaultTag,\n tags = [],\n api,\n delayMs,\n type = 'fetch',\n allowClear = false,\n links = [],\n footer,\n ...props\n}: DefaultSearchDialogProps) {\n const { locale } = useI18n();\n const [tag, setTag] = useState(defaultTag);\n const { search, setSearch, query } = useDocsSearch(\n type === 'fetch'\n ? {\n type: 'fetch',\n api,\n locale,\n tag,\n delayMs,\n }\n : {\n type: 'static',\n from: api,\n locale,\n tag,\n delayMs,\n },\n );\n const defaultItems = useMemo<SortedResult[] | null>(() => {\n if (links.length === 0) return null;\n return links.map(([name, link]) => ({\n type: 'page',\n id: name,\n content: name,\n url: link,\n }));\n }, [links]);\n\n useOnChange(defaultTag, (v) => {\n setTag(v);\n });\n\n return (\n <SearchDialog search={search} onSearchChange={setSearch} isLoading={query.isLoading} {...props}>\n <SearchDialogOverlay />\n <SearchDialogContent>\n <SearchDialogHeader>\n <SearchDialogIcon />\n <SearchDialogInput />\n <SearchDialogClose />\n </SearchDialogHeader>\n <SearchDialogList items={query.data !== 'empty' ? query.data : defaultItems} />\n </SearchDialogContent>\n <SearchDialogFooter>\n {tags.length > 0 && (\n <TagsList tag={tag} onTagChange={setTag} allowClear={allowClear}>\n {tags.map((tag) => (\n <TagsListItem key={tag.value} value={tag.value}>\n {tag.name}\n </TagsListItem>\n ))}\n </TagsList>\n )}\n {footer}\n </SearchDialogFooter>\n </SearchDialog>\n );\n}\n"],"mappings":";;;;;;;;;;AAsDA,SAAwB,oBAAoB,EAC1C,YACA,OAAO,EAAE,EACT,KACA,SACA,OAAO,SACP,aAAa,OACb,QAAQ,EAAE,EACV,QACA,GAAG,SACwB;CAC3B,MAAM,EAAE,sCAAoB;CAC5B,MAAM,CAAC,KAAK,UAAU,SAAS,WAAW;CAC1C,MAAM,EAAE,QAAQ,WAAW,UAAU,cACnC,SAAS,UACL;EACE,MAAM;EACN;EACA;EACA;EACA;EACD,GACD;EACE,MAAM;EACN,MAAM;EACN;EACA;EACA;EACD,CACN;CACD,MAAM,eAAe,cAAqC;AACxD,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MAAM,KAAK,CAAC,MAAM,WAAW;GAClC,MAAM;GACN,IAAI;GACJ,SAAS;GACT,KAAK;GACN,EAAE;IACF,CAAC,MAAM,CAAC;AAEX,aAAY,aAAa,MAAM;AAC7B,SAAO,EAAE;GACT;AAEF,QACE,qBAAC;EAAqB;EAAQ,gBAAgB;EAAW,WAAW,MAAM;EAAW,GAAI;;GACvF,oBAAC,wBAAsB;GACvB,qBAAC,kCACC,qBAAC;IACC,oBAAC,qBAAmB;IACpB,oBAAC,sBAAoB;IACrB,oBAAC,sBAAoB;OACF,EACrB,oBAAC,oBAAiB,OAAO,MAAM,SAAS,UAAU,MAAM,OAAO,eAAgB,IAC3D;GACtB,qBAAC,iCACE,KAAK,SAAS,KACb,oBAAC;IAAc;IAAK,aAAa;IAAoB;cAClD,KAAK,KAAK,UACT,oBAAC;KAA6B,OAAOA,MAAI;eACtCA,MAAI;OADYA,MAAI,MAER,CACf;KACO,EAEZ,UACkB;;GACR"}
@@ -0,0 +1,46 @@
1
+ import { search_d_exports } from "../../contexts/search.js";
2
+ import "./search.js";
3
+ import * as react_jsx_runtime3 from "react/jsx-runtime";
4
+ import { ReactNode } from "react";
5
+ import { OramaCloudOptions } from "@hanzo/docs-core/search/client";
6
+
7
+ //#region src/components/dialog/search-orama.d.ts
8
+ interface OramaSearchDialogProps extends search_d_exports.SharedProps {
9
+ links?: search_d_exports.SearchLink[];
10
+ client: OramaCloudOptions['client'];
11
+ searchOptions?: OramaCloudOptions['params'];
12
+ index?: OramaCloudOptions['index'];
13
+ footer?: ReactNode;
14
+ defaultTag?: string;
15
+ tags?: search_d_exports.TagItem[];
16
+ /**
17
+ * Add the "Powered by Orama" label
18
+ *
19
+ * @defaultValue true
20
+ */
21
+ showOrama?: boolean;
22
+ /**
23
+ * Allow to clear tag filters
24
+ *
25
+ * @defaultValue false
26
+ */
27
+ allowClear?: boolean;
28
+ }
29
+ /**
30
+ * Orama Cloud integration
31
+ */
32
+ declare function OramaSearchDialog({
33
+ client,
34
+ searchOptions,
35
+ tags,
36
+ defaultTag,
37
+ showOrama,
38
+ allowClear,
39
+ index,
40
+ footer,
41
+ links,
42
+ ...props
43
+ }: OramaSearchDialogProps): react_jsx_runtime3.JSX.Element;
44
+ //#endregion
45
+ export { OramaSearchDialogProps, OramaSearchDialog as default };
46
+ //# sourceMappingURL=search-orama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-orama.d.ts","names":[],"sources":["../../../src/components/dialog/search-orama.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAuBiB,sBAAA,SAA+B,gBAAA,CAAA;UACtC,gBAAA,CAAA;UACA;EAFO,aAAA,CAAA,EAGC,iBAHsB,CAAA,QAAA,CAAA;EAC9B,KAAA,CAAA,EAGA,iBAHA,CAAA,OAAA,CAAA;EACA,MAAA,CAAA,EAIC,SAJD;EACQ,UAAA,CAAA,EAAA,MAAA;EACR,IAAA,CAAA,EAKD,gBAAA,CAAA,OALC,EAAA;EAEC;;;;AAkBV;EAMC,SAAA,CAAA,EAAA,OAAA;EACA;;;;;EAKA,UAAA,CAAA,EAAA,OAAA;;;;;AAIuB,iBAXD,iBAAA,CAWC;EAAA,MAAA;EAAA,aAAA;EAAA,IAAA;EAAA,UAAA;EAAA,SAAA;EAAA,UAAA;EAAA,KAAA;EAAA,MAAA;EAAA,KAAA;EAAA,GAAA;AAAA,CAAA,EAAtB,sBAAsB,CAAA,EAAA,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,73 @@
1
+ 'use client';
2
+
3
+ import { i18n_exports } from "../../contexts/i18n.js";
4
+ import { SearchDialog, SearchDialogClose, SearchDialogContent, SearchDialogFooter, SearchDialogHeader, SearchDialogIcon, SearchDialogInput, SearchDialogList, SearchDialogOverlay, TagsList, TagsListItem } from "./search.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { useMemo, useState } from "react";
7
+ import { useOnChange } from "@hanzo/docs-core/utils/use-on-change";
8
+ import { useDocsSearch } from "@hanzo/docs-core/search/client";
9
+
10
+ //#region src/components/dialog/search-orama.tsx
11
+ /**
12
+ * Orama Cloud integration
13
+ */
14
+ function OramaSearchDialog({ client, searchOptions, tags = [], defaultTag, showOrama = true, allowClear = false, index, footer, links = [], ...props }) {
15
+ const { locale } = (0, i18n_exports.useI18n)();
16
+ const [tag, setTag] = useState(defaultTag);
17
+ const { search, setSearch, query } = useDocsSearch({
18
+ type: "orama-cloud",
19
+ client,
20
+ index,
21
+ params: searchOptions,
22
+ locale,
23
+ tag
24
+ });
25
+ const defaultItems = useMemo(() => {
26
+ if (links.length === 0) return null;
27
+ return links.map(([name, link]) => ({
28
+ type: "page",
29
+ id: name,
30
+ content: name,
31
+ url: link
32
+ }));
33
+ }, [links]);
34
+ useOnChange(defaultTag, (v) => {
35
+ setTag(v);
36
+ });
37
+ const label = showOrama && /* @__PURE__ */ jsx(Label, {});
38
+ return /* @__PURE__ */ jsxs(SearchDialog, {
39
+ search,
40
+ onSearchChange: setSearch,
41
+ isLoading: query.isLoading,
42
+ ...props,
43
+ children: [/* @__PURE__ */ jsx(SearchDialogOverlay, {}), /* @__PURE__ */ jsxs(SearchDialogContent, { children: [
44
+ /* @__PURE__ */ jsxs(SearchDialogHeader, { children: [
45
+ /* @__PURE__ */ jsx(SearchDialogIcon, {}),
46
+ /* @__PURE__ */ jsx(SearchDialogInput, {}),
47
+ /* @__PURE__ */ jsx(SearchDialogClose, {})
48
+ ] }),
49
+ /* @__PURE__ */ jsx(SearchDialogList, { items: query.data !== "empty" ? query.data : defaultItems }),
50
+ /* @__PURE__ */ jsxs(SearchDialogFooter, { children: [tags.length > 0 ? /* @__PURE__ */ jsxs(TagsList, {
51
+ tag,
52
+ onTagChange: setTag,
53
+ allowClear,
54
+ children: [tags.map((tag$1) => /* @__PURE__ */ jsx(TagsListItem, {
55
+ value: tag$1.value,
56
+ children: tag$1.name
57
+ }, tag$1.value)), label]
58
+ }) : label, footer] })
59
+ ] })]
60
+ });
61
+ }
62
+ function Label() {
63
+ return /* @__PURE__ */ jsx("a", {
64
+ href: "https://orama.com",
65
+ rel: "noreferrer noopener",
66
+ className: "ms-auto text-xs text-fd-muted-foreground",
67
+ children: "Search powered by Orama"
68
+ });
69
+ }
70
+
71
+ //#endregion
72
+ export { OramaSearchDialog as default };
73
+ //# sourceMappingURL=search-orama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-orama.js","names":["tag"],"sources":["../../../src/components/dialog/search-orama.tsx"],"sourcesContent":["'use client';\n\nimport { type OramaCloudOptions, useDocsSearch } from '@hanzo/docs-core/search/client';\nimport { type ReactNode, useMemo, useState } from 'react';\nimport { useOnChange } from '@hanzo/docs-core/utils/use-on-change';\nimport {\n SearchDialog,\n SearchDialogClose,\n SearchDialogContent,\n SearchDialogFooter,\n SearchDialogHeader,\n SearchDialogIcon,\n SearchDialogInput,\n SearchDialogList,\n SearchDialogOverlay,\n type SharedProps,\n TagsList,\n TagsListItem,\n} from './search';\nimport type { SortedResult } from '@hanzo/docs-core/search';\nimport type { SearchLink, TagItem } from '@/contexts/search';\nimport { useI18n } from '@/contexts/i18n';\n\nexport interface OramaSearchDialogProps extends SharedProps {\n links?: SearchLink[];\n client: OramaCloudOptions['client'];\n searchOptions?: OramaCloudOptions['params'];\n index?: OramaCloudOptions['index'];\n\n footer?: ReactNode;\n\n defaultTag?: string;\n tags?: TagItem[];\n\n /**\n * Add the \"Powered by Orama\" label\n *\n * @defaultValue true\n */\n showOrama?: boolean;\n\n /**\n * Allow to clear tag filters\n *\n * @defaultValue false\n */\n allowClear?: boolean;\n}\n\n/**\n * Orama Cloud integration\n */\nexport default function OramaSearchDialog({\n client,\n searchOptions,\n tags = [],\n defaultTag,\n showOrama = true,\n allowClear = false,\n index,\n footer,\n links = [],\n ...props\n}: OramaSearchDialogProps) {\n const { locale } = useI18n();\n const [tag, setTag] = useState(defaultTag);\n const { search, setSearch, query } = useDocsSearch({\n type: 'orama-cloud',\n client,\n index,\n params: searchOptions,\n locale,\n tag,\n });\n\n const defaultItems = useMemo<SortedResult[] | null>(() => {\n if (links.length === 0) return null;\n\n return links.map(([name, link]) => ({\n type: 'page',\n id: name,\n content: name,\n url: link,\n }));\n }, [links]);\n\n useOnChange(defaultTag, (v) => {\n setTag(v);\n });\n\n const label = showOrama && <Label />;\n\n return (\n <SearchDialog search={search} onSearchChange={setSearch} isLoading={query.isLoading} {...props}>\n <SearchDialogOverlay />\n <SearchDialogContent>\n <SearchDialogHeader>\n <SearchDialogIcon />\n <SearchDialogInput />\n <SearchDialogClose />\n </SearchDialogHeader>\n <SearchDialogList items={query.data !== 'empty' ? query.data : defaultItems} />\n <SearchDialogFooter>\n {tags.length > 0 ? (\n <TagsList tag={tag} onTagChange={setTag} allowClear={allowClear}>\n {tags.map((tag) => (\n <TagsListItem key={tag.value} value={tag.value}>\n {tag.name}\n </TagsListItem>\n ))}\n {label}\n </TagsList>\n ) : (\n label\n )}\n {footer}\n </SearchDialogFooter>\n </SearchDialogContent>\n </SearchDialog>\n );\n}\n\nfunction Label() {\n return (\n <a\n href=\"https://orama.com\"\n rel=\"noreferrer noopener\"\n className=\"ms-auto text-xs text-fd-muted-foreground\"\n >\n Search powered by Orama\n </a>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAoDA,SAAwB,kBAAkB,EACxC,QACA,eACA,OAAO,EAAE,EACT,YACA,YAAY,MACZ,aAAa,OACb,OACA,QACA,QAAQ,EAAE,EACV,GAAG,SACsB;CACzB,MAAM,EAAE,sCAAoB;CAC5B,MAAM,CAAC,KAAK,UAAU,SAAS,WAAW;CAC1C,MAAM,EAAE,QAAQ,WAAW,UAAU,cAAc;EACjD,MAAM;EACN;EACA;EACA,QAAQ;EACR;EACA;EACD,CAAC;CAEF,MAAM,eAAe,cAAqC;AACxD,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,SAAO,MAAM,KAAK,CAAC,MAAM,WAAW;GAClC,MAAM;GACN,IAAI;GACJ,SAAS;GACT,KAAK;GACN,EAAE;IACF,CAAC,MAAM,CAAC;AAEX,aAAY,aAAa,MAAM;AAC7B,SAAO,EAAE;GACT;CAEF,MAAM,QAAQ,aAAa,oBAAC,UAAQ;AAEpC,QACE,qBAAC;EAAqB;EAAQ,gBAAgB;EAAW,WAAW,MAAM;EAAW,GAAI;aACvF,oBAAC,wBAAsB,EACvB,qBAAC;GACC,qBAAC;IACC,oBAAC,qBAAmB;IACpB,oBAAC,sBAAoB;IACrB,oBAAC,sBAAoB;OACF;GACrB,oBAAC,oBAAiB,OAAO,MAAM,SAAS,UAAU,MAAM,OAAO,eAAgB;GAC/E,qBAAC,iCACE,KAAK,SAAS,IACb,qBAAC;IAAc;IAAK,aAAa;IAAoB;eAClD,KAAK,KAAK,UACT,oBAAC;KAA6B,OAAOA,MAAI;eACtCA,MAAI;OADYA,MAAI,MAER,CACf,EACD;KACQ,GAEX,OAED,UACkB;MACD;GACT;;AAInB,SAAS,QAAQ;AACf,QACE,oBAAC;EACC,MAAK;EACL,KAAI;EACJ,WAAU;YACX;GAEG"}