zudoku 0.0.0-z6e949a6d → 0.0.0-z8ac421f0

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 (209) hide show
  1. package/dist/app/main.js +1 -1
  2. package/dist/app/main.js.map +1 -1
  3. package/dist/config/create-plugin.d.ts +2 -0
  4. package/dist/config/create-plugin.js +55 -0
  5. package/dist/config/create-plugin.js.map +1 -0
  6. package/dist/config/loader.js +2 -2
  7. package/dist/config/loader.js.map +1 -1
  8. package/dist/config/validators/InputNavigationSchema.d.ts +67 -67
  9. package/dist/config/validators/NavigationSchema.js +1 -0
  10. package/dist/config/validators/NavigationSchema.js.map +1 -1
  11. package/dist/config/validators/validate.d.ts +5 -4
  12. package/dist/config/validators/validate.js +2 -0
  13. package/dist/config/validators/validate.js.map +1 -1
  14. package/dist/flat-config.d.ts +1 -0
  15. package/dist/index.d.ts +2 -1
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/components/Bootstrap.js +1 -2
  19. package/dist/lib/components/Bootstrap.js.map +1 -1
  20. package/dist/lib/components/Slot.test.js +1 -1
  21. package/dist/lib/components/Slot.test.js.map +1 -1
  22. package/dist/lib/components/Zudoku.d.ts +4 -1
  23. package/dist/lib/components/Zudoku.js +4 -7
  24. package/dist/lib/components/Zudoku.js.map +1 -1
  25. package/dist/lib/components/context/ZudokuContext.d.ts +2 -4
  26. package/dist/lib/components/context/ZudokuContext.js +2 -2
  27. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  28. package/dist/lib/components/context/ZudokuProvider.js +1 -1
  29. package/dist/lib/components/context/ZudokuProvider.js.map +1 -1
  30. package/dist/lib/components/context/ZudokuReactContext.d.ts +11 -0
  31. package/dist/lib/components/context/ZudokuReactContext.js +4 -0
  32. package/dist/lib/components/context/ZudokuReactContext.js.map +1 -0
  33. package/dist/lib/core/ZudokuContext.d.ts +2 -1
  34. package/dist/lib/core/ZudokuContext.js +3 -1
  35. package/dist/lib/core/ZudokuContext.js.map +1 -1
  36. package/dist/lib/core/__internal.d.ts +1 -0
  37. package/dist/lib/core/__internal.js +2 -0
  38. package/dist/lib/core/__internal.js.map +1 -1
  39. package/dist/lib/core/plugins.d.ts +5 -1
  40. package/dist/lib/core/plugins.js.map +1 -1
  41. package/dist/lib/core/transform-config.d.ts +4 -2
  42. package/dist/lib/core/transform-config.js +33 -13
  43. package/dist/lib/core/transform-config.js.map +1 -1
  44. package/dist/lib/core/transform-config.test.d.ts +1 -0
  45. package/dist/lib/core/transform-config.test.js +83 -0
  46. package/dist/lib/core/transform-config.test.js.map +1 -0
  47. package/dist/lib/errors/ErrorAlert.js +1 -2
  48. package/dist/lib/errors/ErrorAlert.js.map +1 -1
  49. package/dist/lib/hooks/useEvent.test.js +1 -1
  50. package/dist/lib/hooks/useEvent.test.js.map +1 -1
  51. package/dist/lib/plugins/openapi/ParamInfos.js +8 -5
  52. package/dist/lib/plugins/openapi/ParamInfos.js.map +1 -1
  53. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  54. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  55. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +2 -2
  56. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  57. package/dist/lib/ui/Alert.d.ts +3 -2
  58. package/dist/lib/ui/Alert.js +9 -5
  59. package/dist/lib/ui/Alert.js.map +1 -1
  60. package/dist/lib/ui/Secret.js +2 -2
  61. package/dist/lib/ui/Secret.js.map +1 -1
  62. package/dist/lib/util/flattenAllOf.js +6 -0
  63. package/dist/lib/util/flattenAllOf.js.map +1 -1
  64. package/dist/lib/util/flattenAllOf.test.js +26 -0
  65. package/dist/lib/util/flattenAllOf.test.js.map +1 -1
  66. package/dist/vite/config.js +5 -2
  67. package/dist/vite/config.js.map +1 -1
  68. package/dist/vite/plugin-config.js +16 -4
  69. package/dist/vite/plugin-config.js.map +1 -1
  70. package/dist/vite/plugin-theme.js +2 -1
  71. package/dist/vite/plugin-theme.js.map +1 -1
  72. package/dist/vite/prerender/prerender.js +3 -1
  73. package/dist/vite/prerender/prerender.js.map +1 -1
  74. package/dist/vite/prerender/worker.js +3 -1
  75. package/dist/vite/prerender/worker.js.map +1 -1
  76. package/lib/{ClaudeLogo-OpUSMQJe.js → ClaudeLogo-Br8C_vTq.js} +3 -3
  77. package/lib/{ClaudeLogo-OpUSMQJe.js.map → ClaudeLogo-Br8C_vTq.js.map} +1 -1
  78. package/lib/Drawer-Ch7927PF.js.map +1 -1
  79. package/lib/{HydrationBoundary-CNF2ZV3E.js → HydrationBoundary-CJu4vUlG.js} +6 -6
  80. package/lib/{HydrationBoundary-CNF2ZV3E.js.map → HydrationBoundary-CJu4vUlG.js.map} +1 -1
  81. package/lib/{MdxPage-dzCPGdvD.js → MdxPage-C0QFAsgv.js} +6 -6
  82. package/lib/{MdxPage-dzCPGdvD.js.map → MdxPage-C0QFAsgv.js.map} +1 -1
  83. package/lib/Mermaid-Chx5BPHn.js +104 -0
  84. package/lib/Mermaid-Chx5BPHn.js.map +1 -0
  85. package/lib/{OAuthErrorPage-D7n-_cqN.js → OAuthErrorPage-CFz_gBFx.js} +11 -10
  86. package/lib/{OAuthErrorPage-D7n-_cqN.js.map → OAuthErrorPage-CFz_gBFx.js.map} +1 -1
  87. package/lib/{OasProvider-DPPdikt_.js → OasProvider-BwIOIlky.js} +3 -3
  88. package/lib/{OasProvider-DPPdikt_.js.map → OasProvider-BwIOIlky.js.map} +1 -1
  89. package/lib/OperationList-DYRzbPJu.js +5908 -0
  90. package/lib/OperationList-DYRzbPJu.js.map +1 -0
  91. package/lib/{RouteGuard-BMbu_Yb7.js → RouteGuard-CVs3yvEs.js} +3 -3
  92. package/lib/{RouteGuard-BMbu_Yb7.js.map → RouteGuard-CVs3yvEs.js.map} +1 -1
  93. package/lib/{SchemaList-CRC8n5co.js → SchemaList-D4FEyoDV.js} +7 -7
  94. package/lib/{SchemaList-CRC8n5co.js.map → SchemaList-D4FEyoDV.js.map} +1 -1
  95. package/lib/{SchemaView-BR6dtnPg.js → SchemaView-ScvkhsYE.js} +116 -110
  96. package/lib/SchemaView-ScvkhsYE.js.map +1 -0
  97. package/lib/{Secret-BDBqq4p3.js → Secret-DUpgv4V3.js} +92 -72
  98. package/lib/Secret-DUpgv4V3.js.map +1 -0
  99. package/lib/{SignUp-ChqXj9vd.js → SignUp-Dug1jAGC.js} +4 -4
  100. package/lib/{SignUp-ChqXj9vd.js.map → SignUp-Dug1jAGC.js.map} +1 -1
  101. package/lib/{SyntaxHighlight-O-IZOPLg.js → SyntaxHighlight-BMu0b_hF.js} +8 -8
  102. package/lib/{SyntaxHighlight-O-IZOPLg.js.map → SyntaxHighlight-BMu0b_hF.js.map} +1 -1
  103. package/lib/{Toc-DQF7trHT.js → Toc-BiJ2YL0O.js} +2 -2
  104. package/lib/{Toc-DQF7trHT.js.map → Toc-BiJ2YL0O.js.map} +1 -1
  105. package/lib/{Zudoku-DA1yA-te.js → Zudoku-iyiXgWFY.js} +2101 -2121
  106. package/lib/Zudoku-iyiXgWFY.js.map +1 -0
  107. package/lib/ZudokuContext-CYyb_PB_.js +175 -0
  108. package/lib/ZudokuContext-CYyb_PB_.js.map +1 -0
  109. package/lib/ZudokuReactContext-DGJAP1sN.js +222 -0
  110. package/lib/ZudokuReactContext-DGJAP1sN.js.map +1 -0
  111. package/lib/chunk-EPOLDU6W-C6C8jAwd.js.map +1 -1
  112. package/lib/{circular-C4l1Kj1N.js → circular-BOpxmAie.js} +2 -2
  113. package/lib/{circular-C4l1Kj1N.js.map → circular-BOpxmAie.js.map} +1 -1
  114. package/lib/{createServer-DoRZ6tMa.js → createServer-BunbJzB5.js} +6 -4
  115. package/lib/{createServer-DoRZ6tMa.js.map → createServer-BunbJzB5.js.map} +1 -1
  116. package/lib/{errors-CYLN8SNc.js → errors-B77S9iOc.js} +2 -2
  117. package/lib/{errors-CYLN8SNc.js.map → errors-B77S9iOc.js.map} +1 -1
  118. package/lib/{firebase-DF-VVKB7.js → firebase-C7XKRGLf.js} +25 -24
  119. package/lib/{firebase-DF-VVKB7.js.map → firebase-C7XKRGLf.js.map} +1 -1
  120. package/lib/{hook-C35h0YhF.js → hook-Dz_n9SoE.js} +16 -15
  121. package/lib/{hook-C35h0YhF.js.map → hook-Dz_n9SoE.js.map} +1 -1
  122. package/lib/{index-DrAVvbXa.js → index-BDp2MTiq.js} +2 -2
  123. package/lib/{index-DrAVvbXa.js.map → index-BDp2MTiq.js.map} +1 -1
  124. package/lib/{index-Ck4TmzTO.js → index-Bx29qHVi.js} +52 -50
  125. package/lib/{index-Ck4TmzTO.js.map → index-Bx29qHVi.js.map} +1 -1
  126. package/lib/index-CrcNWbel.js.map +1 -1
  127. package/lib/index-DAWHN3cH.js.map +1 -1
  128. package/lib/index.esm-BYObtETB.js.map +1 -1
  129. package/lib/index.esm-Ca5zvoff.js.map +1 -1
  130. package/lib/{index.esm-B2cLXwjS.js → index.esm-Cth49JBv.js} +2 -2
  131. package/lib/index.esm-Cth49JBv.js.map +1 -0
  132. package/lib/jsx-runtime-BzflLqGi.js.map +1 -1
  133. package/lib/{mutation-BISOc7OM.js → mutation-B7eFBLZY.js} +2 -2
  134. package/lib/{mutation-BISOc7OM.js.map → mutation-B7eFBLZY.js.map} +1 -1
  135. package/lib/ui/Alert.js +32 -20
  136. package/lib/ui/Alert.js.map +1 -1
  137. package/lib/ui/Carousel.js.map +1 -1
  138. package/lib/ui/Secret.js +2 -2
  139. package/lib/ui/Secret.js.map +1 -1
  140. package/lib/ui/SyntaxHighlight.js +2 -2
  141. package/lib/useExposedProps-CzTDfXfq.js.map +1 -1
  142. package/lib/{useMutation-CFMGlAMW.js → useMutation-CErliDZ9.js} +5 -5
  143. package/lib/{useMutation-CFMGlAMW.js.map → useMutation-CErliDZ9.js.map} +1 -1
  144. package/lib/{useSuspenseQuery-CSB_rVek.js → useQuery-ht7aWJ3S.js} +432 -446
  145. package/lib/useQuery-ht7aWJ3S.js.map +1 -0
  146. package/lib/useSuspenseQuery-DQH4Bmc2.js +18 -0
  147. package/lib/useSuspenseQuery-DQH4Bmc2.js.map +1 -0
  148. package/lib/zudoku.__internal.js +520 -496
  149. package/lib/zudoku.__internal.js.map +1 -1
  150. package/lib/zudoku.auth-auth0.js +6 -5
  151. package/lib/zudoku.auth-auth0.js.map +1 -1
  152. package/lib/zudoku.auth-azureb2c.js +14 -13
  153. package/lib/zudoku.auth-azureb2c.js.map +1 -1
  154. package/lib/zudoku.auth-clerk.js +2 -2
  155. package/lib/zudoku.auth-firebase.js +4 -4
  156. package/lib/zudoku.auth-openid.js +7 -6
  157. package/lib/zudoku.auth-openid.js.map +1 -1
  158. package/lib/zudoku.auth-supabase.js +4 -4
  159. package/lib/zudoku.components.js +3 -3
  160. package/lib/zudoku.hooks.js +3 -3
  161. package/lib/zudoku.mermaid.js +3 -3
  162. package/lib/zudoku.plugin-api-catalog.js +28 -27
  163. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  164. package/lib/zudoku.plugin-api-keys.js +98 -96
  165. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  166. package/lib/zudoku.plugin-custom-pages.js +1 -1
  167. package/lib/zudoku.plugin-markdown.js +1 -1
  168. package/lib/zudoku.plugin-openapi.js +2 -2
  169. package/lib/zudoku.plugin-search-pagefind.js +19 -18
  170. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  171. package/lib/zudoku.plugins.js.map +1 -1
  172. package/lib/zudoku.react-query.js +26 -25
  173. package/lib/zudoku.react-query.js.map +1 -1
  174. package/lib/zudoku.router.js.map +1 -1
  175. package/package.json +13 -7
  176. package/src/app/defaultTheme.css +4 -0
  177. package/src/app/main.css +2 -0
  178. package/src/app/main.tsx +1 -1
  179. package/src/lib/components/Bootstrap.tsx +1 -4
  180. package/src/lib/components/Slot.test.tsx +1 -1
  181. package/src/lib/components/Zudoku.tsx +18 -14
  182. package/src/lib/components/context/ZudokuContext.ts +2 -6
  183. package/src/lib/components/context/ZudokuProvider.tsx +1 -1
  184. package/src/lib/components/context/ZudokuReactContext.tsx +17 -0
  185. package/src/lib/core/ZudokuContext.ts +7 -1
  186. package/src/lib/core/__internal.tsx +2 -0
  187. package/src/lib/core/plugins.ts +7 -3
  188. package/src/lib/core/transform-config.test.tsx +99 -0
  189. package/src/lib/core/transform-config.ts +57 -19
  190. package/src/lib/errors/ErrorAlert.tsx +1 -6
  191. package/src/lib/hooks/useEvent.test.tsx +1 -1
  192. package/src/lib/plugins/openapi/ParamInfos.tsx +10 -5
  193. package/src/lib/plugins/openapi/ParameterListItem.tsx +1 -0
  194. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +2 -0
  195. package/src/lib/ui/Alert.tsx +17 -5
  196. package/src/lib/ui/Secret.tsx +2 -2
  197. package/src/lib/util/flattenAllOf.test.ts +32 -0
  198. package/src/lib/util/flattenAllOf.ts +7 -0
  199. package/lib/Mermaid-JEnWyK0s.js +0 -103
  200. package/lib/Mermaid-JEnWyK0s.js.map +0 -1
  201. package/lib/OperationList-cEveQ_l5.js +0 -5822
  202. package/lib/OperationList-cEveQ_l5.js.map +0 -1
  203. package/lib/SchemaView-BR6dtnPg.js.map +0 -1
  204. package/lib/Secret-BDBqq4p3.js.map +0 -1
  205. package/lib/Zudoku-DA1yA-te.js.map +0 -1
  206. package/lib/ZudokuContext-C6wlLMUH.js +0 -389
  207. package/lib/ZudokuContext-C6wlLMUH.js.map +0 -1
  208. package/lib/index.esm-B2cLXwjS.js.map +0 -1
  209. package/lib/useSuspenseQuery-CSB_rVek.js.map +0 -1
@@ -103,7 +103,7 @@ export const Secret = ({
103
103
  setRevealed((prev) => !prev);
104
104
  onReveal?.(!revealed);
105
105
  }}
106
- size="icon"
106
+ size="icon-sm"
107
107
  >
108
108
  {revealed ? <EyeOffIcon size={16} /> : <EyeIcon size={16} />}
109
109
  </Button>
@@ -114,7 +114,7 @@ export const Secret = ({
114
114
  copyToClipboard(secret);
115
115
  onCopy?.(secret);
116
116
  }}
117
- size="icon"
117
+ size="icon-sm"
118
118
  >
119
119
  {isCopied ? <CheckIcon size={16} /> : <CopyIcon size={16} />}
120
120
  </Button>
@@ -243,6 +243,38 @@ describe("flattenAllOf", () => {
243
243
  expect(flattenAllOf(objectSchema)).toEqual(objectSchema);
244
244
  });
245
245
 
246
+ it("should convert boolean true to empty object", () => {
247
+ // Empty objects merge to boolean true, should convert back to {}
248
+ const schema = { allOf: [{}] } as JSONSchema7;
249
+ const result = flattenAllOf(schema);
250
+ expect(result).toEqual({});
251
+ });
252
+
253
+ it("should convert boolean false to not schema", () => {
254
+ // Boolean false should convert to { not: {} }
255
+ const result = flattenAllOf(false);
256
+ expect(result).toEqual({ not: {} });
257
+ });
258
+
259
+ it("should handle empty schema objects in properties", () => {
260
+ // Reproduces issue #1837: _id: {} should not crash
261
+ const schema = {
262
+ type: "object",
263
+ properties: {
264
+ _id: {},
265
+ name: { type: "string" },
266
+ },
267
+ } as JSONSchema7;
268
+
269
+ const result = flattenAllOf(schema);
270
+
271
+ invariant(typeof result === "object", "Result is not a schema");
272
+
273
+ // Empty object should be preserved or converted to valid schema
274
+ expect(result.properties?._id).toBeDefined();
275
+ expect(result.properties?.name).toEqual({ type: "string" });
276
+ });
277
+
246
278
  it("should preserve description and other properties", () => {
247
279
  const schema = {
248
280
  description: "A test schema",
@@ -25,6 +25,13 @@ export const flattenAllOf = (
25
25
  ): JSONSchema7Definition => {
26
26
  const merged = shallowAllOfMerge(schema);
27
27
 
28
+ // Convert boolean schemas to object form for OpenAPI compatibility
29
+ // true (accepts anything) → {} (empty schema)
30
+ // false (rejects everything) → { not: {} } (schema that never validates)
31
+ if (typeof merged === "boolean") {
32
+ return merged ? {} : { not: {} };
33
+ }
34
+
28
35
  if (merged == null || typeof merged !== "object") {
29
36
  return merged;
30
37
  }
@@ -1,103 +0,0 @@
1
- import { j as r } from "./jsx-runtime-BzflLqGi.js";
2
- import { e as f } from "./useSuspenseQuery-CSB_rVek.js";
3
- import { useId as p } from "react";
4
- import { c as g } from "./index-DI5SPFK9.js";
5
- import { c as i } from "./cn-5-Gd1Dss.js";
6
- import { z as v } from "./index-DAWHN3cH.js";
7
- import "./ZudokuContext-C6wlLMUH.js";
8
- import { S as x } from "./Spinner-CI6bRyZw.js";
9
- const h = g(
10
- "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
11
- {
12
- variants: {
13
- variant: {
14
- default: "bg-card text-card-foreground",
15
- destructive: "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"
16
- }
17
- },
18
- defaultVariants: {
19
- variant: "default"
20
- }
21
- }
22
- );
23
- function w({
24
- className: e,
25
- variant: t,
26
- ...a
27
- }) {
28
- return /* @__PURE__ */ r.jsx(
29
- "div",
30
- {
31
- "data-slot": "alert",
32
- role: "alert",
33
- className: i(h({ variant: t }), e),
34
- ...a
35
- }
36
- );
37
- }
38
- function y({ className: e, ...t }) {
39
- return /* @__PURE__ */ r.jsx(
40
- "div",
41
- {
42
- "data-slot": "alert-title",
43
- className: i(
44
- "col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
45
- e
46
- ),
47
- ...t
48
- }
49
- );
50
- }
51
- function j({
52
- className: e,
53
- ...t
54
- }) {
55
- return /* @__PURE__ */ r.jsx(
56
- "div",
57
- {
58
- "data-slot": "alert-description",
59
- className: i(
60
- "text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
61
- e
62
- ),
63
- ...t
64
- }
65
- );
66
- }
67
- let s = null;
68
- const b = () => (s || (s = import("mermaid").then((e) => e.default).catch((e) => {
69
- throw new Error(
70
- "Mermaid is not installed. Please install it with: npm install mermaid",
71
- { cause: e }
72
- );
73
- })), s), P = ({ chart: e, config: t, ...a }) => {
74
- const d = p(), n = v(), {
75
- data: m,
76
- error: o,
77
- isPending: c
78
- } = f({
79
- queryKey: ["mermaid", e, t, n.resolvedTheme],
80
- queryFn: async () => {
81
- const l = await b();
82
- l.initialize({
83
- theme: n.resolvedTheme === "dark" ? "dark" : "base",
84
- ...t
85
- });
86
- const { svg: u } = await l.render(d, e);
87
- return u;
88
- },
89
- enabled: typeof window < "u",
90
- retry: !1
91
- });
92
- return o ? /* @__PURE__ */ r.jsxs(w, { className: "flex flex-col gap-2", variant: "destructive", children: [
93
- /* @__PURE__ */ r.jsx(y, { children: "Mermaid Error" }),
94
- /* @__PURE__ */ r.jsx(j, { className: "overflow-auto wrap-break-word whitespace-pre-wrap font-mono text-xs", children: o.message })
95
- ] }) : c ? /* @__PURE__ */ r.jsx(x, {}) : /* @__PURE__ */ r.jsx("div", { ...a, dangerouslySetInnerHTML: { __html: m } });
96
- };
97
- export {
98
- w as A,
99
- P as M,
100
- y as a,
101
- j as b
102
- };
103
- //# sourceMappingURL=Mermaid-JEnWyK0s.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Mermaid-JEnWyK0s.js","sources":["../src/lib/ui/Alert.tsx","../src/lib/components/Mermaid.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertDescription, AlertTitle };\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { MermaidConfig } from \"mermaid\";\nimport type { ComponentProps } from \"react\";\nimport { useId } from \"react\";\nimport { Alert, AlertDescription, AlertTitle } from \"zudoku/ui/Alert.js\";\nimport { useTheme } from \"../hooks/index.js\";\nimport { Spinner } from \"./Spinner.js\";\n\nexport type MermaidProps = {\n chart: string;\n config?: MermaidConfig;\n} & ComponentProps<\"div\">;\n\nlet mermaidPromise: Promise<typeof import(\"mermaid\").default> | null = null;\n\nconst loadMermaid = () => {\n if (!mermaidPromise) {\n mermaidPromise = import(\"mermaid\")\n .then((mod) => mod.default)\n .catch((error) => {\n throw new Error(\n \"Mermaid is not installed. Please install it with: npm install mermaid\",\n { cause: error },\n );\n });\n }\n return mermaidPromise;\n};\n\nexport const Mermaid = ({ chart, config, ...props }: MermaidProps) => {\n const id = useId();\n const theme = useTheme();\n\n const {\n data: svg,\n error,\n isPending,\n } = useQuery({\n queryKey: [\"mermaid\", chart, config, theme.resolvedTheme],\n queryFn: async () => {\n const mermaid = await loadMermaid();\n mermaid.initialize({\n theme: theme.resolvedTheme === \"dark\" ? \"dark\" : \"base\",\n ...config,\n });\n\n const { svg } = await mermaid.render(id, chart);\n return svg;\n },\n enabled: typeof window !== \"undefined\",\n retry: false,\n });\n\n if (error)\n return (\n <Alert className=\"flex flex-col gap-2\" variant=\"destructive\">\n <AlertTitle>Mermaid Error</AlertTitle>\n <AlertDescription className=\"overflow-auto wrap-break-word whitespace-pre-wrap font-mono text-xs\">\n {error.message}\n </AlertDescription>\n </Alert>\n );\n\n if (isPending) return <Spinner />;\n\n // biome-ignore lint/security/noDangerouslySetInnerHtml: Mermaid generates valid SVG\n return <div {...props} dangerouslySetInnerHTML={{ __html: svg }} />;\n};\n"],"names":["alertVariants","cva","Alert","className","variant","props","jsx","cn","AlertTitle","AlertDescription","mermaidPromise","loadMermaid","mod","error","Mermaid","chart","config","id","useId","theme","useTheme","svg","isPending","useQuery","mermaid","jsxs","Spinner"],"mappings":";;;;;;;;AAIA,MAAMA,IAAgBC;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAEA,SAASC,EAAM;AAAA,EACb,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGC;AACL,GAAqE;AACnE,SACEC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAWC,EAAGP,EAAc,EAAE,SAAAI,EAAA,CAAS,GAAGD,CAAS;AAAA,MAClD,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASG,EAAW,EAAE,WAAAL,GAAW,GAAGE,KAAsC;AACxE,SACEC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAASI,EAAiB;AAAA,EACxB,WAAAN;AAAA,EACA,GAAGE;AACL,GAAgC;AAC9B,SACEC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;ACjDA,IAAIK,IAAmE;AAEvE,MAAMC,IAAc,OACbD,MACHA,IAAiB,OAAO,SAAS,EAC9B,KAAK,CAACE,MAAQA,EAAI,OAAO,EACzB,MAAM,CAACC,MAAU;AAChB,QAAM,IAAI;AAAA,IACR;AAAA,IACA,EAAE,OAAOA,EAAA;AAAA,EAAM;AAEnB,CAAC,IAEEH,IAGII,IAAU,CAAC,EAAE,OAAAC,GAAO,QAAAC,GAAQ,GAAGX,QAA0B;AACpE,QAAMY,IAAKC,EAAA,GACLC,IAAQC,EAAA,GAER;AAAA,IACJ,MAAMC;AAAA,IACN,OAAAR;AAAA,IACA,WAAAS;AAAA,EAAA,IACEC,EAAS;AAAA,IACX,UAAU,CAAC,WAAWR,GAAOC,GAAQG,EAAM,aAAa;AAAA,IACxD,SAAS,YAAY;AACnB,YAAMK,IAAU,MAAMb,EAAA;AACtB,MAAAa,EAAQ,WAAW;AAAA,QACjB,OAAOL,EAAM,kBAAkB,SAAS,SAAS;AAAA,QACjD,GAAGH;AAAA,MAAA,CACJ;AAED,YAAM,EAAE,KAAAK,EAAAA,IAAQ,MAAMG,EAAQ,OAAOP,GAAIF,CAAK;AAC9C,aAAOM;AAAAA,IACT;AAAA,IACA,SAAS,OAAO,SAAW;AAAA,IAC3B,OAAO;AAAA,EAAA,CACR;AAED,SAAIR,IAEAY,gBAAAA,EAAAA,KAACvB,GAAA,EAAM,WAAU,uBAAsB,SAAQ,eAC7C,UAAA;AAAA,IAAAI,gBAAAA,EAAAA,IAACE,KAAW,UAAA,gBAAA,CAAa;AAAA,IACzBF,gBAAAA,EAAAA,IAACG,GAAA,EAAiB,WAAU,uEACzB,YAAM,QAAA,CACT;AAAA,EAAA,GACF,IAGAa,IAAkBhB,gBAAAA,MAACoB,GAAA,CAAA,CAAQ,IAGxBpB,gBAAAA,EAAAA,IAAC,SAAK,GAAGD,GAAO,yBAAyB,EAAE,QAAQgB,KAAO;AACnE;"}