@docubook/mdx-content 3.4.1 → 3.4.2

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 (212) hide show
  1. package/dist/adapters/next/index.d.ts +54 -5
  2. package/dist/adapters/next/index.js +420 -4
  3. package/dist/adapters/next/index.js.map +1 -1
  4. package/dist/chunk-PSDC53TU.js +1056 -0
  5. package/dist/chunk-PSDC53TU.js.map +1 -0
  6. package/dist/client.d.ts +91 -9
  7. package/dist/client.js +1191 -8
  8. package/dist/client.js.map +1 -1
  9. package/dist/index.d.ts +91 -20
  10. package/dist/index.js +1245 -19
  11. package/dist/index.js.map +1 -1
  12. package/dist/server-BObcTM97.d.ts +100 -0
  13. package/dist/server.d.ts +3 -11
  14. package/dist/server.js +40 -10
  15. package/dist/server.js.map +1 -1
  16. package/package.json +5 -4
  17. package/dist/__test__/AccordionMdx.test.d.ts +0 -2
  18. package/dist/__test__/AccordionMdx.test.d.ts.map +0 -1
  19. package/dist/__test__/AccordionMdx.test.js +0 -21
  20. package/dist/__test__/AccordionMdx.test.js.map +0 -1
  21. package/dist/__test__/AccordionsMdx.test.d.ts +0 -2
  22. package/dist/__test__/AccordionsMdx.test.d.ts.map +0 -1
  23. package/dist/__test__/AccordionsMdx.test.js +0 -22
  24. package/dist/__test__/AccordionsMdx.test.js.map +0 -1
  25. package/dist/__test__/ButtonMdx.test.d.ts +0 -2
  26. package/dist/__test__/ButtonMdx.test.d.ts.map +0 -1
  27. package/dist/__test__/ButtonMdx.test.js +0 -20
  28. package/dist/__test__/ButtonMdx.test.js.map +0 -1
  29. package/dist/__test__/CardMdx.test.d.ts +0 -2
  30. package/dist/__test__/CardMdx.test.d.ts.map +0 -1
  31. package/dist/__test__/CardMdx.test.js +0 -29
  32. package/dist/__test__/CardMdx.test.js.map +0 -1
  33. package/dist/__test__/CardsMdx.test.d.ts +0 -2
  34. package/dist/__test__/CardsMdx.test.d.ts.map +0 -1
  35. package/dist/__test__/CardsMdx.test.js +0 -33
  36. package/dist/__test__/CardsMdx.test.js.map +0 -1
  37. package/dist/__test__/CodeBlockMdx.test.d.ts +0 -2
  38. package/dist/__test__/CodeBlockMdx.test.d.ts.map +0 -1
  39. package/dist/__test__/CodeBlockMdx.test.js +0 -48
  40. package/dist/__test__/CodeBlockMdx.test.js.map +0 -1
  41. package/dist/__test__/FileTreeMdx.test.d.ts +0 -2
  42. package/dist/__test__/FileTreeMdx.test.d.ts.map +0 -1
  43. package/dist/__test__/FileTreeMdx.test.js +0 -26
  44. package/dist/__test__/FileTreeMdx.test.js.map +0 -1
  45. package/dist/__test__/ImageMdx.test.d.ts +0 -2
  46. package/dist/__test__/ImageMdx.test.d.ts.map +0 -1
  47. package/dist/__test__/ImageMdx.test.js +0 -32
  48. package/dist/__test__/ImageMdx.test.js.map +0 -1
  49. package/dist/__test__/KbdMdx.test.d.ts +0 -2
  50. package/dist/__test__/KbdMdx.test.d.ts.map +0 -1
  51. package/dist/__test__/KbdMdx.test.js +0 -27
  52. package/dist/__test__/KbdMdx.test.js.map +0 -1
  53. package/dist/__test__/LinkMdx.test.d.ts +0 -2
  54. package/dist/__test__/LinkMdx.test.d.ts.map +0 -1
  55. package/dist/__test__/LinkMdx.test.js +0 -29
  56. package/dist/__test__/LinkMdx.test.js.map +0 -1
  57. package/dist/__test__/MermaidMdx.test.d.ts +0 -2
  58. package/dist/__test__/MermaidMdx.test.d.ts.map +0 -1
  59. package/dist/__test__/MermaidMdx.test.js +0 -287
  60. package/dist/__test__/MermaidMdx.test.js.map +0 -1
  61. package/dist/__test__/NoteMdx.test.d.ts +0 -2
  62. package/dist/__test__/NoteMdx.test.d.ts.map +0 -1
  63. package/dist/__test__/NoteMdx.test.js +0 -39
  64. package/dist/__test__/NoteMdx.test.js.map +0 -1
  65. package/dist/__test__/ReleaseMdx.test.d.ts +0 -2
  66. package/dist/__test__/ReleaseMdx.test.d.ts.map +0 -1
  67. package/dist/__test__/ReleaseMdx.test.js +0 -39
  68. package/dist/__test__/ReleaseMdx.test.js.map +0 -1
  69. package/dist/__test__/StepperMdx.test.d.ts +0 -2
  70. package/dist/__test__/StepperMdx.test.d.ts.map +0 -1
  71. package/dist/__test__/StepperMdx.test.js +0 -25
  72. package/dist/__test__/StepperMdx.test.js.map +0 -1
  73. package/dist/__test__/TableMdx.test.d.ts +0 -2
  74. package/dist/__test__/TableMdx.test.d.ts.map +0 -1
  75. package/dist/__test__/TableMdx.test.js +0 -25
  76. package/dist/__test__/TableMdx.test.js.map +0 -1
  77. package/dist/__test__/TabsMdx.test.d.ts +0 -2
  78. package/dist/__test__/TabsMdx.test.d.ts.map +0 -1
  79. package/dist/__test__/TabsMdx.test.js +0 -30
  80. package/dist/__test__/TabsMdx.test.js.map +0 -1
  81. package/dist/__test__/TooltipMdx.test.d.ts +0 -2
  82. package/dist/__test__/TooltipMdx.test.d.ts.map +0 -1
  83. package/dist/__test__/TooltipMdx.test.js +0 -23
  84. package/dist/__test__/TooltipMdx.test.js.map +0 -1
  85. package/dist/__test__/YoutubeMdx.test.d.ts +0 -2
  86. package/dist/__test__/YoutubeMdx.test.d.ts.map +0 -1
  87. package/dist/__test__/YoutubeMdx.test.js +0 -25
  88. package/dist/__test__/YoutubeMdx.test.js.map +0 -1
  89. package/dist/__test__/utils/ExpandableCode.test.d.ts +0 -2
  90. package/dist/__test__/utils/ExpandableCode.test.d.ts.map +0 -1
  91. package/dist/__test__/utils/ExpandableCode.test.js +0 -62
  92. package/dist/__test__/utils/ExpandableCode.test.js.map +0 -1
  93. package/dist/__test__/utils/Icon.test.d.ts +0 -2
  94. package/dist/__test__/utils/Icon.test.d.ts.map +0 -1
  95. package/dist/__test__/utils/Icon.test.js +0 -29
  96. package/dist/__test__/utils/Icon.test.js.map +0 -1
  97. package/dist/adapters/next/ButtonMdx.d.ts +0 -4
  98. package/dist/adapters/next/ButtonMdx.d.ts.map +0 -1
  99. package/dist/adapters/next/ButtonMdx.js +0 -8
  100. package/dist/adapters/next/ButtonMdx.js.map +0 -1
  101. package/dist/adapters/next/CardMdx.d.ts +0 -4
  102. package/dist/adapters/next/CardMdx.d.ts.map +0 -1
  103. package/dist/adapters/next/CardMdx.js +0 -8
  104. package/dist/adapters/next/CardMdx.js.map +0 -1
  105. package/dist/adapters/next/ImageMdx.d.ts +0 -8
  106. package/dist/adapters/next/ImageMdx.d.ts.map +0 -1
  107. package/dist/adapters/next/ImageMdx.js +0 -8
  108. package/dist/adapters/next/ImageMdx.js.map +0 -1
  109. package/dist/adapters/next/LinkMdx.d.ts +0 -3
  110. package/dist/adapters/next/LinkMdx.d.ts.map +0 -1
  111. package/dist/adapters/next/LinkMdx.js +0 -11
  112. package/dist/adapters/next/LinkMdx.js.map +0 -1
  113. package/dist/adapters/next/index.d.ts.map +0 -1
  114. package/dist/client.d.ts.map +0 -1
  115. package/dist/components/AccordionMdx.d.ts +0 -11
  116. package/dist/components/AccordionMdx.d.ts.map +0 -1
  117. package/dist/components/AccordionMdx.js +0 -64
  118. package/dist/components/AccordionMdx.js.map +0 -1
  119. package/dist/components/AccordionsMdx.d.ts +0 -7
  120. package/dist/components/AccordionsMdx.d.ts.map +0 -1
  121. package/dist/components/AccordionsMdx.js +0 -14
  122. package/dist/components/AccordionsMdx.js.map +0 -1
  123. package/dist/components/ButtonMdx.d.ts +0 -17
  124. package/dist/components/ButtonMdx.d.ts.map +0 -1
  125. package/dist/components/ButtonMdx.js +0 -57
  126. package/dist/components/ButtonMdx.js.map +0 -1
  127. package/dist/components/CardMdx.d.ts +0 -17
  128. package/dist/components/CardMdx.d.ts.map +0 -1
  129. package/dist/components/CardMdx.js +0 -52
  130. package/dist/components/CardMdx.js.map +0 -1
  131. package/dist/components/CardsMdx.d.ts +0 -9
  132. package/dist/components/CardsMdx.d.ts.map +0 -1
  133. package/dist/components/CardsMdx.js +0 -9
  134. package/dist/components/CardsMdx.js.map +0 -1
  135. package/dist/components/CodeBlockMdx.d.ts +0 -11
  136. package/dist/components/CodeBlockMdx.d.ts.map +0 -1
  137. package/dist/components/CodeBlockMdx.js +0 -135
  138. package/dist/components/CodeBlockMdx.js.map +0 -1
  139. package/dist/components/FileTreeMdx.d.ts +0 -19
  140. package/dist/components/FileTreeMdx.d.ts.map +0 -1
  141. package/dist/components/FileTreeMdx.js +0 -99
  142. package/dist/components/FileTreeMdx.js.map +0 -1
  143. package/dist/components/ImageMdx.d.ts +0 -8
  144. package/dist/components/ImageMdx.d.ts.map +0 -1
  145. package/dist/components/ImageMdx.js +0 -111
  146. package/dist/components/ImageMdx.js.map +0 -1
  147. package/dist/components/KbdMdx.d.ts +0 -9
  148. package/dist/components/KbdMdx.d.ts.map +0 -1
  149. package/dist/components/KbdMdx.js +0 -74
  150. package/dist/components/KbdMdx.js.map +0 -1
  151. package/dist/components/LinkMdx.d.ts +0 -4
  152. package/dist/components/LinkMdx.d.ts.map +0 -1
  153. package/dist/components/LinkMdx.js +0 -10
  154. package/dist/components/LinkMdx.js.map +0 -1
  155. package/dist/components/MermaidMdx.d.ts +0 -13
  156. package/dist/components/MermaidMdx.d.ts.map +0 -1
  157. package/dist/components/MermaidMdx.js +0 -241
  158. package/dist/components/MermaidMdx.js.map +0 -1
  159. package/dist/components/NoteMdx.d.ts +0 -13
  160. package/dist/components/NoteMdx.d.ts.map +0 -1
  161. package/dist/components/NoteMdx.js +0 -79
  162. package/dist/components/NoteMdx.js.map +0 -1
  163. package/dist/components/ReleaseMdx.d.ts +0 -16
  164. package/dist/components/ReleaseMdx.d.ts.map +0 -1
  165. package/dist/components/ReleaseMdx.js +0 -44
  166. package/dist/components/ReleaseMdx.js.map +0 -1
  167. package/dist/components/StepperMdx.d.ts +0 -17
  168. package/dist/components/StepperMdx.d.ts.map +0 -1
  169. package/dist/components/StepperMdx.js +0 -74
  170. package/dist/components/StepperMdx.js.map +0 -1
  171. package/dist/components/TableMdx.d.ts +0 -9
  172. package/dist/components/TableMdx.d.ts.map +0 -1
  173. package/dist/components/TableMdx.js +0 -56
  174. package/dist/components/TableMdx.js.map +0 -1
  175. package/dist/components/TabsMdx.d.ts +0 -13
  176. package/dist/components/TabsMdx.d.ts.map +0 -1
  177. package/dist/components/TabsMdx.js +0 -67
  178. package/dist/components/TabsMdx.js.map +0 -1
  179. package/dist/components/TooltipMdx.d.ts +0 -10
  180. package/dist/components/TooltipMdx.d.ts.map +0 -1
  181. package/dist/components/TooltipMdx.js +0 -36
  182. package/dist/components/TooltipMdx.js.map +0 -1
  183. package/dist/components/YoutubeMdx.d.ts +0 -7
  184. package/dist/components/YoutubeMdx.d.ts.map +0 -1
  185. package/dist/components/YoutubeMdx.js +0 -24
  186. package/dist/components/YoutubeMdx.js.map +0 -1
  187. package/dist/components/index.d.ts +0 -19
  188. package/dist/components/index.d.ts.map +0 -1
  189. package/dist/components/index.js +0 -19
  190. package/dist/components/index.js.map +0 -1
  191. package/dist/index.d.ts.map +0 -1
  192. package/dist/registry/index.d.ts +0 -4
  193. package/dist/registry/index.d.ts.map +0 -1
  194. package/dist/registry/index.js +0 -38
  195. package/dist/registry/index.js.map +0 -1
  196. package/dist/server.d.ts.map +0 -1
  197. package/dist/utils/AccordionGroupContext.d.ts +0 -8
  198. package/dist/utils/AccordionGroupContext.d.ts.map +0 -1
  199. package/dist/utils/AccordionGroupContext.js +0 -4
  200. package/dist/utils/AccordionGroupContext.js.map +0 -1
  201. package/dist/utils/CopyButton.d.ts +0 -6
  202. package/dist/utils/CopyButton.d.ts.map +0 -1
  203. package/dist/utils/CopyButton.js +0 -39
  204. package/dist/utils/CopyButton.js.map +0 -1
  205. package/dist/utils/ExpandableCode.d.ts +0 -11
  206. package/dist/utils/ExpandableCode.d.ts.map +0 -1
  207. package/dist/utils/ExpandableCode.js +0 -78
  208. package/dist/utils/ExpandableCode.js.map +0 -1
  209. package/dist/utils/Icon.d.ts +0 -6
  210. package/dist/utils/Icon.d.ts.map +0 -1
  211. package/dist/utils/Icon.js +0 -12
  212. package/dist/utils/Icon.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAsB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAqB,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAwB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"sources":["../src/components/AccordionMdx.tsx","../src/utils/AccordionGroupContext.tsx","../src/components/AccordionsMdx.tsx","../src/components/CardMdx.tsx","../src/components/FileTreeMdx.tsx","../src/components/ImageMdx.tsx","../src/components/MermaidMdx.tsx","../src/components/TabsMdx.tsx","../src/components/TooltipMdx.tsx","../src/registry/index.ts"],"sourcesContent":["\"use client\";\n\nimport { useContext, useId, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport { AccordionGroupContext } from \"../utils/AccordionGroupContext\";\nimport { IconProp, resolveLucideIcon } from \"../utils/Icon\";\nimport { ChevronRight } from \"lucide-react\";\n\ntype AccordionMdxProps = {\n title: string;\n icon?: IconProp;\n className?: string;\n children?: ReactNode;\n};\n\nexport function AccordionMdx({ title, icon, className, children }: AccordionMdxProps) {\n const groupContext = useContext(AccordionGroupContext);\n const [localOpen, setLocalOpen] = useState(false);\n const panelId = useId();\n const triggerId = `${panelId}-trigger`;\n\n const isGroup = groupContext?.inGroup === true;\n const isOpen = isGroup ? groupContext?.openTitle === title : localOpen;\n const resolvedIcon = resolveLucideIcon(icon);\n\n function onToggle() {\n if (isGroup && groupContext) {\n groupContext.setOpenTitle(groupContext.openTitle === title ? null : title);\n return;\n }\n setLocalOpen((prev) => !prev);\n }\n\n return (\n <div\n className={`mdx-accordion ${isGroup ? \"mdx-accordion-group-item\" : \"\"} ${className ?? \"\"}`}\n style={{\n border: \"1px solid hsl(var(--border-color, 210 20% 85%))\",\n borderRadius: 10,\n overflow: \"hidden\",\n background: \"hsl(var(--card, 0 0% 100%))\",\n }}\n >\n <button\n className=\"mdx-accordion-header\"\n type=\"button\"\n onClick={onToggle}\n aria-expanded={isOpen}\n aria-controls={panelId}\n id={triggerId}\n onKeyDown={(event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onToggle();\n }\n }}\n style={{\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n gap: \"0.5rem\",\n textAlign: \"left\",\n border: 0,\n cursor: \"pointer\",\n background: \"hsl(var(--muted, 210 20% 92%))\",\n color: \"hsl(var(--foreground, 220 30% 15%))\",\n fontWeight: 600,\n padding: \"0.95rem 1rem\",\n }}\n >\n <ChevronRight\n className=\"mdx-accordion-chevron\"\n aria-hidden=\"true\"\n size={16}\n style={{\n transform: isOpen ? \"rotate(90deg)\" : \"rotate(0deg)\",\n transition: \"transform 0.2s ease\",\n flexShrink: 0,\n color: \"hsl(var(--foreground, 220 30% 15%) / 0.74)\",\n marginRight: \"0.4rem\",\n }}\n />\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: \"0.5rem\", flex: 1 }}>\n {resolvedIcon ? (\n <span\n aria-hidden=\"true\"\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: \"1.45rem\",\n height: \"1.45rem\",\n color: \"hsl(var(--foreground, 220 30% 15%))\",\n }}\n >\n {resolvedIcon}\n </span>\n ) : null}\n <span>{title}</span>\n </span>\n </button>\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className=\"mdx-accordion-content\"\n style={{\n padding: \"0.75rem 0.8rem\",\n background: \"hsl(var(--card, 0 0% 100%))\",\n color: \"hsl(var(--card-foreground, 220 30% 15%))\",\n }}\n >\n {children}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { createContext } from \"react\";\n\ntype AccordionGroupContextType = {\n inGroup: boolean;\n openTitle: string | null;\n setOpenTitle: (title: string | null) => void;\n};\n\nexport const AccordionGroupContext = createContext<AccordionGroupContextType | null>(null);\n","\"use client\";\n\nimport { useMemo, useState, type ReactNode } from \"react\";\nimport { AccordionGroupContext } from \"../utils/AccordionGroupContext\";\n\ntype AccordionsMdxProps = {\n children?: ReactNode;\n};\n\nexport function AccordionsMdx({ children }: AccordionsMdxProps) {\n const [openTitle, setOpenTitle] = useState<string | null>(null);\n\n const value = useMemo(() => ({ inGroup: true, openTitle, setOpenTitle }), [openTitle]);\n\n return (\n <AccordionGroupContext.Provider value={value}>\n <div\n className=\"mdx-accordion-group\"\n style={{\n margin: \"1rem 0\",\n display: \"grid\",\n gap: \"0.85rem\",\n }}\n >\n {children}\n </div>\n </AccordionGroupContext.Provider>\n );\n}\n","\"use client\";\n\nimport type { ComponentType, CSSProperties, HTMLAttributes, ReactNode } from \"react\";\nimport { LinkMdx } from \"./LinkMdx\";\nimport { IconProp, resolveLucideIcon } from \"../utils/Icon\";\nimport type { LinkMdxProps } from \"./LinkMdx\";\n\ntype LinkRenderer = ComponentType<LinkMdxProps>;\n\nexport type CardMdxProps = HTMLAttributes<HTMLDivElement> & {\n title: string;\n icon?: IconProp;\n href?: string;\n horizontal?: boolean;\n children?: ReactNode;\n style?: CSSProperties;\n /** Internal adapter hook: inject framework link component without duplicating styles. */\n __LinkComponent?: LinkRenderer;\n};\n\nconst baseStyle: CSSProperties = {\n display: \"block\",\n border: \"1px solid hsl(var(--border-color, 210 20% 85%))\",\n borderRadius: 14,\n background: \"hsl(var(--card, 0 0% 100%))\",\n color: \"hsl(var(--foreground, 220 30% 15%))\",\n textDecoration: \"none\",\n padding: \"1rem\",\n minHeight: 120,\n boxShadow: \"0 0 0 rgba(0,0,0,0)\",\n transition:\n \"border-color 0.2s ease, box-shadow 0.24s ease, transform 0.24s ease, color 0.2s ease\",\n overflow: \"hidden\",\n};\n\nexport function CardMdx({\n title,\n icon,\n href,\n horizontal,\n children,\n style,\n className,\n __LinkComponent,\n ...props\n}: CardMdxProps) {\n const resolvedIcon = resolveLucideIcon(icon);\n const LinkComponent = __LinkComponent ?? LinkMdx;\n\n const content = (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: horizontal ? \"auto 1fr\" : \"1fr\",\n gap: horizontal ? \"0.75rem\" : \"0.4rem\",\n alignItems: horizontal ? \"flex-start\" : \"flex-start\",\n }}\n >\n {resolvedIcon ? (\n <span\n aria-hidden=\"true\"\n data-card-icon=\"\"\n style={{\n display: \"block\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"1rem\",\n height: \"1rem\",\n color: \"hsl(var(--primary, 210 81% 56%))\",\n fontSize: \"2rem\",\n transition: \"transform 0.2s ease, color 0.2s ease\",\n }}\n >\n {resolvedIcon}\n </span>\n ) : null}\n <div style={{ display: \"grid\", gridAutoRows: \"min-content\", gap: 0 }}>\n <div\n style={{\n fontWeight: 700,\n fontSize: \"1.22rem\",\n lineHeight: 1.3,\n color: \"hsl(var(--foreground, 220 30% 15%))\",\n }}\n >\n {title}\n </div>\n {children ? (\n <div\n style={{\n color: \"hsl(var(--muted-foreground, 220 15% 50%))\",\n fontSize: \"0.96rem\",\n lineHeight: 1.42,\n marginTop: \"-0.5rem\",\n }}\n >\n {children}\n </div>\n ) : null}\n </div>\n </div>\n );\n\n const combinedStyle = { ...baseStyle, ...style };\n\n if (href) {\n return (\n <LinkComponent\n href={href}\n data-card-hover=\"\"\n data-card-link=\"\"\n style={combinedStyle}\n {...(className ? { className } : {})}\n {...(props as React.ComponentProps<typeof LinkComponent>)}\n >\n {content}\n </LinkComponent>\n );\n }\n\n return (\n <div style={combinedStyle} {...(className ? { className } : {})} {...props}>\n {content}\n </div>\n );\n}\n","\"use client\";\n\nimport React, {\n useId,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { ChevronRight, File as FileIcon, Folder as FolderIcon, FolderOpen } from \"lucide-react\";\n\ntype FilesMdxProps = HTMLAttributes<HTMLDivElement> & {\n children?: ReactNode;\n style?: CSSProperties;\n};\ntype FolderMdxProps = HTMLAttributes<HTMLDivElement> & {\n name: string;\n children?: ReactNode;\n style?: CSSProperties;\n};\ntype FileMdxProps = HTMLAttributes<HTMLDivElement> & { name: string; style?: CSSProperties };\n\nexport function FilesMdx({ children, style, className, ...props }: FilesMdxProps) {\n return (\n <div\n className={className}\n {...props}\n role=\"tree\"\n aria-label={props[\"aria-label\"] ?? \"File tree\"}\n style={{\n border: \"1px solid hsl(var(--border-color, 210 20% 85%))\",\n borderRadius: 12,\n padding: \"0.5rem\",\n margin: \"1rem 0\",\n background: \"hsla(var(--card, 0 0% 100%) / 0.9)\",\n backdropFilter: \"blur(8px)\",\n boxShadow: \"0 10px 20px rgba(0,0,0,0.05)\",\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function FolderMdx({ name, children, style, className, ...props }: FolderMdxProps) {\n const [isOpen, setIsOpen] = useState(true);\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const hasChildren = React.Children.count(children) > 0;\n const groupId = useId();\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (!hasChildren) {\n return;\n }\n\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n setIsOpen(true);\n return;\n }\n\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setIsOpen(false);\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setIsOpen((prev) => !prev);\n }\n };\n\n return (\n <div\n className={className}\n {...props}\n role=\"treeitem\"\n aria-expanded={hasChildren ? isOpen : undefined}\n style={{ marginLeft: \"0.35rem\", ...style }}\n >\n <button\n type=\"button\"\n className=\"flex items-center gap-2 rounded-md px-2 py-1.5 transition-colors duration-150\"\n onClick={() => hasChildren && setIsOpen((prev) => !prev)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n aria-label={`${isOpen ? \"Collapse\" : \"Expand\"} folder ${name}`}\n aria-expanded={hasChildren ? isOpen : undefined}\n aria-controls={hasChildren ? groupId : undefined}\n style={{\n cursor: hasChildren ? \"pointer\" : \"default\",\n width: \"100%\",\n border: \"none\",\n textAlign: \"left\",\n background:\n isHovered || isFocused ? \"hsla(var(--muted, 210 20% 92%) / 0.45)\" : \"transparent\",\n }}\n >\n {hasChildren ? (\n <ChevronRight\n className=\"h-3.5 w-3.5 transition-transform duration-200\"\n style={{\n transform: isOpen ? \"rotate(90deg)\" : \"rotate(0deg)\",\n color:\n isHovered || isFocused\n ? \"hsl(var(--primary, 210 81% 56%))\"\n : \"hsl(var(--muted-foreground, 220 15% 50%))\",\n }}\n />\n ) : (\n <div className=\"w-3.5\" />\n )}\n {isOpen ? (\n <FolderOpen\n className=\"h-4 w-4\"\n style={{\n color:\n isHovered || isFocused\n ? \"hsl(var(--primary, 210 81% 56%))\"\n : \"hsl(var(--muted-foreground, 220 15% 50%))\",\n }}\n />\n ) : (\n <FolderIcon\n className=\"h-4 w-4\"\n style={{\n color:\n isHovered || isFocused\n ? \"hsl(var(--primary, 210 81% 56%))\"\n : \"hsl(var(--muted-foreground, 220 15% 50%))\",\n }}\n />\n )}\n <span\n style={{\n fontWeight: 600,\n color:\n isHovered || isFocused\n ? \"hsl(var(--primary, 210 81% 56%))\"\n : \"hsl(var(--foreground, 220 30% 15%))\",\n }}\n >\n {name}\n </span>\n </button>\n {isOpen && hasChildren && (\n <div\n id={groupId}\n role=\"group\"\n style={{\n marginLeft: \"1rem\",\n borderLeft: \"2px solid hsl(var(--border-color, 210 20% 85%))\",\n paddingLeft: \"0.6rem\",\n }}\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\nexport function FileMdx({ name, style, className, ...props }: FileMdxProps) {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const fileExtension = name.split(\".\").pop()?.toUpperCase();\n\n return (\n <div\n className={className}\n {...props}\n role=\"treeitem\"\n tabIndex={0}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n padding: \"0.33rem 0.5rem\",\n borderRadius: \"0.45rem\",\n userSelect: \"none\",\n background:\n isHovered || isFocused ? \"hsla(var(--muted, 210 20% 92%) / 0.35)\" : \"transparent\",\n ...style,\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n >\n <FileIcon\n className=\"h-3.5 w-3.5\"\n style={{\n color:\n isHovered || isFocused\n ? \"hsl(var(--primary, 210 81% 56%))\"\n : \"hsl(var(--muted-foreground, 220 15% 50%))\",\n }}\n />\n <span\n style={{\n fontFamily:\n \"SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace\",\n fontSize: \"0.9rem\",\n color: \"hsl(var(--foreground, 220 30% 15%))\",\n }}\n >\n {name}\n </span>\n {(isHovered || isFocused) && fileExtension && (\n <span\n style={{\n marginLeft: \"auto\",\n fontSize: \"0.7rem\",\n color: \"hsl(var(--muted-foreground, 220 15% 50%))\",\n }}\n >\n {fileExtension}\n </span>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { createPortal } from \"react-dom\";\nimport { useEffect, useId, useRef, useState, type ComponentProps, type ComponentType } from \"react\";\n\nexport type ImageMdxProps = Omit<ComponentProps<\"img\">, \"src\"> & {\n src?: any;\n zoom?: boolean;\n ImageComponent?: ComponentType<any>;\n};\n\nexport function ImageMdx({\n src,\n alt = \"image\",\n width = 800,\n height = 350,\n zoom = true,\n style,\n ImageComponent,\n ...props\n}: ImageMdxProps) {\n const Image: any = ImageComponent ?? \"img\";\n const [isOpen, setIsOpen] = useState(false);\n const scrollYRef = useRef(0);\n const closeButtonRef = useRef<HTMLButtonElement | null>(null);\n const dialogId = useId();\n\n useEffect(() => {\n if (!isOpen) return;\n\n scrollYRef.current = window.scrollY;\n document.body.style.position = \"fixed\";\n document.body.style.top = `-${scrollYRef.current}px`;\n document.body.style.width = \"100%\";\n\n closeButtonRef.current?.focus();\n\n const onEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setIsOpen(false);\n };\n\n const onFocusTrap = (e: KeyboardEvent) => {\n if (e.key !== \"Tab\") return;\n\n const dialog = document.getElementById(dialogId);\n const focusable = dialog?.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n if (!focusable || focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n };\n\n window.addEventListener(\"keydown\", onEsc);\n window.addEventListener(\"keydown\", onFocusTrap);\n\n return () => {\n document.body.style.position = \"\";\n document.body.style.top = \"\";\n document.body.style.width = \"\";\n window.scrollTo(0, scrollYRef.current);\n window.removeEventListener(\"keydown\", onEsc);\n window.removeEventListener(\"keydown\", onFocusTrap);\n };\n }, [dialogId, isOpen]);\n\n if (!src) return null;\n\n const canZoom = zoom;\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => canZoom && setIsOpen(true)}\n aria-label={canZoom ? \"Zoom image\" : \"Image\"}\n style={{\n position: \"relative\",\n width: \"100%\",\n border: \"none\",\n background: \"transparent\",\n padding: 0,\n margin: \"1rem 0\",\n cursor: canZoom ? \"zoom-in\" : \"default\",\n }}\n >\n <Image\n src={src}\n alt={alt}\n width={typeof width === \"number\" ? width : parseInt(width as string, 10)}\n height={typeof height === \"number\" ? height : parseInt(height as string, 10)}\n style={{\n width: \"100%\",\n height: \"auto\",\n borderRadius: 10,\n objectFit: \"contain\",\n ...style,\n }}\n {...props}\n />\n </button>\n\n {canZoom && isOpen ? (\n <Portal>\n <div\n id={dialogId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Image preview\"\n onClick={() => setIsOpen(false)}\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 99999,\n background: \"rgba(0,0,0,0.88)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"1rem\",\n }}\n >\n <button\n ref={closeButtonRef}\n type=\"button\"\n aria-label=\"Close image preview\"\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(false);\n }}\n style={{\n position: \"absolute\",\n top: 16,\n right: 16,\n border: \"1px solid rgba(255,255,255,0.24)\",\n borderRadius: 8,\n background: \"rgba(0,0,0,0.45)\",\n color: \"#fff\",\n padding: \"0.4rem 0.55rem\",\n cursor: \"pointer\",\n }}\n >\n Close\n </button>\n\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n maxWidth: \"92vw\",\n maxHeight: \"90vh\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Image\n src={src}\n alt={alt}\n width={1920}\n height={1080}\n style={{\n width: \"auto\",\n height: \"auto\",\n maxWidth: \"92vw\",\n maxHeight: \"90vh\",\n objectFit: \"contain\",\n borderRadius: 10,\n }}\n />\n </div>\n </div>\n </Portal>\n ) : null}\n </>\n );\n}\n\nfunction Portal({ children }: { children: React.ReactNode }) {\n if (typeof window === \"undefined\") return null;\n return createPortal(children, document.body);\n}\n","\"use client\";\n\nimport {\n useId,\n useRef,\n useEffect,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport type { Mermaid } from \"mermaid\";\n\n// Module-level singleton — one dynamic import regardless of diagram count\nlet mermaidPromise: Promise<typeof import(\"mermaid\")> | null = null;\n\ninterface MermaidMdxProps {\n /** Mermaid diagram definition (from rehype plugin or programmatic) */\n chart: string;\n /** Custom DOM id (auto-generated if omitted) */\n id?: string;\n /** Additional CSS class on container */\n className?: string;\n /** Show GFM-style pan/zoom controls once the diagram renders (default true) */\n panZoom?: boolean;\n}\n\nfunction getTheme(): \"dark\" | \"default\" {\n return document.documentElement.classList.contains(\"dark\") ? \"dark\" : \"default\";\n}\n\n// Pan/zoom tuning — button-driven like GFM's mermaid viewer (no drag/wheel)\nconst PAN_STEP = 50;\nconst ZOOM_STEP = 1.2;\nconst MIN_SCALE = 0.4;\nconst MAX_SCALE = 4;\n\nconst clampScale = (scale: number) => Math.min(MAX_SCALE, Math.max(MIN_SCALE, scale));\n\nconst controlButtonStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n padding: 0,\n border: \"1px solid rgba(127,127,127,0.35)\",\n borderRadius: 6,\n background: \"rgba(127,127,127,0.12)\",\n color: \"currentcolor\",\n cursor: \"pointer\",\n};\n\nfunction ControlButton({\n label,\n onClick,\n cell,\n children,\n}: {\n label: string;\n onClick: () => void;\n cell: { col: number; row: number };\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n onClick={onClick}\n style={{ ...controlButtonStyle, gridColumn: cell.col, gridRow: cell.row }}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n </button>\n );\n}\n\nexport function MermaidMdx({ chart, id, className, panZoom = true }: MermaidMdxProps) {\n const generatedId = useId();\n const domId = id ?? `mermaid-${generatedId.replace(/[:.]/g, \"-\")}`;\n const ref = useRef<HTMLPreElement>(null);\n const chartRef = useRef(chart);\n const mermaidRef = useRef<Mermaid | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [rendered, setRendered] = useState(false);\n const [view, setView] = useState({ x: 0, y: 0, scale: 1 });\n const [fullscreen, setFullscreen] = useState(false);\n\n // Keep chartRef in sync so theme-change re-render (T-005) can restore text\n chartRef.current = chart;\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (!chart) return;\n\n let cancelled = false;\n let lazyObserver: IntersectionObserver | null = null;\n let syncObserver: MutationObserver | null = null;\n let themeTimer: ReturnType<typeof setTimeout> | null = null;\n let lastTheme = getTheme();\n // Serialize mermaid.run calls — overlapping runs on the same node detach\n // in-flight SVG and crash inside d3's dispatchEvent (issue #268)\n let runChain: Promise<void> = Promise.resolve();\n\n function enqueueRun(run: () => Promise<void>): Promise<void> {\n const next = runChain.then(() => {\n if (cancelled || !ref.current?.isConnected) return;\n return run();\n });\n // Keep the chain alive after a failure; the caller handles rejection\n runChain = next.catch(() => {});\n return next;\n }\n\n async function init(): Promise<void> {\n try {\n // Invariant 6: singleton dynamic import\n if (!mermaidPromise) {\n mermaidPromise = import(\"mermaid\");\n }\n const mod = await mermaidPromise;\n const mermaid = (mermaidRef.current = mod.default);\n\n mermaid.initialize({ startOnLoad: false, theme: getTheme() });\n\n // Validate syntax early — show error before attempting render\n try {\n await mermaid.parse(chart);\n } catch {\n if (!cancelled) setError(\"Invalid Mermaid syntax\");\n return;\n }\n\n if (cancelled || !ref.current) return;\n\n // T-009: lazy rendering via IntersectionObserver\n lazyObserver = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting || cancelled || !ref.current) return;\n enqueueRun(() => {\n const node = ref.current;\n if (!node) return Promise.resolve();\n return mermaid.run({ nodes: [node] });\n })\n .then(() => {\n if (!cancelled) setRendered(true);\n })\n .catch(() => {\n if (!cancelled) setError(\"Failed to render diagram\");\n });\n lazyObserver?.disconnect();\n },\n { rootMargin: \"200px\" }\n );\n lazyObserver.observe(ref.current);\n } catch {\n if (!cancelled) setError(\"Failed to load Mermaid renderer\");\n }\n }\n\n init();\n\n // T-005: theme sync via MutationObserver on <html class>\n syncObserver = new MutationObserver(() => {\n if (themeTimer) clearTimeout(themeTimer);\n themeTimer = setTimeout(() => {\n if (cancelled || !mermaidRef.current || !ref.current) return;\n // Mount effects toggle the class without changing the theme — skip\n // so a spurious mutation cannot race the initial render (issue #268)\n if (getTheme() === lastTheme) return;\n enqueueRun(() => {\n const mermaid = mermaidRef.current;\n const node = ref.current;\n if (!mermaid || !node) return Promise.resolve();\n lastTheme = getTheme();\n // Mermaid replaces innerHTML — restore original chart text before re-render\n node.textContent = chartRef.current;\n // Remove data-processed so mermaid v11 does not skip this node\n node.removeAttribute(\"data-processed\");\n mermaid.initialize({ startOnLoad: false, theme: lastTheme });\n return mermaid.run({ nodes: [node] });\n }).catch((e) => {\n // Warn, not error state — the previously rendered diagram is still on screen\n console.warn(\"[mermaid] diagram render error:\", e);\n });\n }, 200);\n });\n syncObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n\n return () => {\n cancelled = true;\n if (themeTimer) clearTimeout(themeTimer);\n lazyObserver?.disconnect();\n syncObserver?.disconnect();\n };\n // chart string is static from MDX — this only fires on mount\n }, []);\n\n // Lock page scroll while the fullscreen lightbox is open\n useEffect(() => {\n if (!fullscreen) return;\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [fullscreen]);\n\n // Guard: empty chart\n if (!chart) return null;\n\n const pan = (dx: number, dy: number) => setView((v) => ({ ...v, x: v.x + dx, y: v.y + dy }));\n const zoom = (factor: number) => setView((v) => ({ ...v, scale: clampScale(v.scale * factor) }));\n const resetView = () => setView({ x: 0, y: 0, scale: 1 });\n\n const controlsActive = panZoom && rendered;\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n // Leave browser shortcuts (Ctrl/Cmd+0, Ctrl/Cmd+-, Alt+arrows, ...) alone\n if (!controlsActive || e.ctrlKey || e.metaKey || e.altKey) return;\n const actions: Record<string, () => void> = {\n ArrowUp: () => pan(0, -PAN_STEP),\n ArrowDown: () => pan(0, PAN_STEP),\n ArrowLeft: () => pan(-PAN_STEP, 0),\n ArrowRight: () => pan(PAN_STEP, 0),\n \"+\": () => zoom(ZOOM_STEP),\n \"=\": () => zoom(ZOOM_STEP),\n \"-\": () => zoom(1 / ZOOM_STEP),\n \"0\": resetView,\n ...(fullscreen ? { Escape: () => setFullscreen(false) } : {}),\n };\n const action = actions[e.key];\n if (!action) return;\n e.preventDefault();\n action();\n };\n\n if (error) {\n return (\n <div\n className={className}\n style={{\n border: \"1px solid hsl(var(--destructive, 0 85% 60%))\",\n borderRadius: 8,\n padding: \"0.75rem 1rem\",\n margin: \"1em 0\",\n }}\n >\n <p\n style={{\n color: \"hsl(var(--destructive, 0 85% 60%))\",\n fontWeight: 600,\n marginBottom: 8,\n fontSize: \"0.875rem\",\n }}\n >\n ⚠️ Diagram rendering error\n </p>\n <pre\n style={{\n fontSize: \"0.875rem\",\n whiteSpace: \"pre-wrap\",\n margin: 0,\n }}\n >\n {chart}\n </pre>\n </div>\n );\n }\n\n return (\n <div\n className=\"max-w-full\"\n tabIndex={controlsActive ? 0 : undefined}\n role={controlsActive ? \"group\" : undefined}\n aria-label={\n controlsActive\n ? \"Mermaid diagram. Use arrow keys to pan, + and - to zoom, 0 to reset.\"\n : undefined\n }\n onKeyDown={handleKeyDown}\n style={{\n ...(fullscreen\n ? {\n position: \"fixed\",\n inset: 0,\n zIndex: 50,\n background: \"hsl(var(--background, 0 0% 100%))\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }\n : { position: \"relative\" }),\n ...(controlsActive ? { overflow: \"hidden\" } : { overflowX: \"auto\" }),\n }}\n >\n <div\n style={\n controlsActive\n ? {\n transform: `translate(${view.x}px, ${view.y}px) scale(${view.scale})`,\n transformOrigin: \"center center\",\n transition: \"transform 150ms ease\",\n }\n : undefined\n }\n >\n <pre\n ref={ref}\n id={domId}\n className={`mermaid not-prose${className ? ` ${className}` : \"\"}`}\n style={{ margin: \"1em auto\", width: \"fit-content\", maxWidth: \"100%\" }}\n >\n {chart}\n </pre>\n </div>\n\n {controlsActive ? (\n <div\n role=\"group\"\n aria-label=\"Pan and zoom controls\"\n style={{\n position: \"absolute\",\n bottom: 8,\n right: 8,\n display: \"grid\",\n gridTemplateColumns: \"repeat(3, 28px)\",\n gap: 4,\n }}\n >\n <ControlButton\n label={fullscreen ? \"Exit full screen\" : \"Enter full screen\"}\n onClick={() => setFullscreen((f) => !f)}\n cell={{ col: 1, row: 1 }}\n >\n {fullscreen ? (\n <path d=\"M8 3v3a2 2 0 0 1-2 2H3M21 8h-3a2 2 0 0 1-2-2V3M3 16h3a2 2 0 0 1 2 2v3M16 21v-3a2 2 0 0 1 2-2h3\" />\n ) : (\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3\" />\n )}\n </ControlButton>\n <ControlButton label=\"Pan up\" onClick={() => pan(0, -PAN_STEP)} cell={{ col: 2, row: 1 }}>\n <path d=\"m18 15-6-6-6 6\" />\n </ControlButton>\n <ControlButton label=\"Zoom in\" onClick={() => zoom(ZOOM_STEP)} cell={{ col: 3, row: 1 }}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m21 21-4-4M8 11h6M11 8v6\" />\n </ControlButton>\n <ControlButton\n label=\"Pan left\"\n onClick={() => pan(-PAN_STEP, 0)}\n cell={{ col: 1, row: 2 }}\n >\n <path d=\"m15 18-6-6 6-6\" />\n </ControlButton>\n <ControlButton label=\"Reset view\" onClick={resetView} cell={{ col: 2, row: 2 }}>\n <path d=\"M3 12a9 9 0 1 0 2.6-6.3L3 8\" />\n <path d=\"M3 3v5h5\" />\n </ControlButton>\n <ControlButton\n label=\"Pan right\"\n onClick={() => pan(PAN_STEP, 0)}\n cell={{ col: 3, row: 2 }}\n >\n <path d=\"m9 18 6-6-6-6\" />\n </ControlButton>\n <ControlButton\n label=\"Pan down\"\n onClick={() => pan(0, PAN_STEP)}\n cell={{ col: 2, row: 3 }}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </ControlButton>\n <ControlButton\n label=\"Zoom out\"\n onClick={() => zoom(1 / ZOOM_STEP)}\n cell={{ col: 3, row: 3 }}\n >\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m21 21-4-4M8 11h6\" />\n </ControlButton>\n </div>\n ) : null}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n Children,\n isValidElement,\n useId,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\ntype TabMdxProps = {\n title: string;\n children?: ReactNode;\n};\n\nexport function TabMdx({ children }: TabMdxProps) {\n return <>{children}</>;\n}\n\ntype TabsMdxProps = {\n className?: string;\n children: ReactNode;\n};\n\nfunction titleToValue(title: string) {\n return title\n .trim()\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-_]/g, \"\");\n}\n\nexport function TabsMdx({ className, children }: TabsMdxProps) {\n const id = useId();\n const childArray = Children.toArray(children);\n\n const tabItems = childArray\n .filter(\n (child): child is ReactElement<TabMdxProps> =>\n isValidElement(child) && typeof (child.props as { title?: unknown }).title === \"string\"\n )\n .map((child, index) => {\n const title = child.props.title;\n const fallback = `tab-${index + 1}`;\n const slug = titleToValue(title) || fallback;\n return {\n value: `${slug}-${index + 1}`,\n title,\n children: child.props.children,\n };\n });\n\n const [activeValue, setActiveValue] = useState(tabItems[0]?.value ?? \"\");\n\n const activeItem = tabItems.find((item) => item.value === activeValue) ?? tabItems[0];\n\n return (\n <div className={className} style={{ margin: \"1rem 0\" }}>\n <div\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n style={{\n display: \"flex\",\n flexWrap: \"nowrap\",\n gap: \"0.75rem\",\n alignItems: \"center\",\n overflowX: \"auto\",\n borderBottom: \"1px solid hsl(var(--border-color, 210 20% 85%))\",\n }}\n >\n {tabItems.map((item) => {\n const active = item.value === activeItem?.value;\n const triggerId = `${id}-tab-${item.value}`;\n const panelId = `${id}-panel-${item.value}`;\n return (\n <button\n key={item.value}\n id={triggerId}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n aria-controls={panelId}\n tabIndex={active ? 0 : -1}\n onClick={() => setActiveValue(item.value)}\n style={{\n border: \"none\",\n borderBottom: active\n ? \"2px solid hsl(var(--primary, 210 81% 56%))\"\n : \"2px solid transparent\",\n background: \"transparent\",\n color: active\n ? \"hsl(var(--primary, 210 81% 56%))\"\n : \"hsl(var(--foreground, 220 30% 15%))\",\n fontSize: \"0.875rem\",\n fontWeight: 600,\n lineHeight: 1.2,\n padding: \"0.7rem 0.15rem\",\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.title}\n </button>\n );\n })}\n </div>\n\n {tabItems.map((item) => {\n const active = item.value === activeItem?.value;\n const triggerId = `${id}-tab-${item.value}`;\n const panelId = `${id}-panel-${item.value}`;\n return (\n <div\n key={item.value}\n role=\"tabpanel\"\n id={panelId}\n aria-labelledby={triggerId}\n hidden={!active}\n tabIndex={0}\n style={{\n marginTop: \"1rem\",\n }}\n >\n {item.children}\n </div>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport { useId, useState, type CSSProperties, type HTMLAttributes, type ReactNode } from \"react\";\n\ntype TooltipMdxProps = HTMLAttributes<HTMLSpanElement> & {\n text?: ReactNode;\n tip?: ReactNode;\n side?: \"top\" | \"bottom\";\n style?: CSSProperties;\n};\n\nexport function TooltipMdx({\n text,\n tip,\n side = \"top\",\n style,\n className,\n ...props\n}: TooltipMdxProps) {\n const [open, setOpen] = useState(false);\n const id = useId();\n const tooltipContent = tip ?? \"\";\n const triggerContent = text ?? \"?\";\n const floatingPosition =\n side === \"bottom\" ? { top: \"calc(100% + 8px)\" } : { bottom: \"calc(100% + 8px)\" };\n\n return (\n <span\n className={className}\n {...props}\n data-tooltip={typeof tooltipContent === \"string\" ? tooltipContent : \"\"}\n data-tooltip-side={side}\n style={{ position: \"relative\", display: \"inline-block\", ...style }}\n onMouseEnter={() => setOpen(true)}\n onMouseLeave={() => setOpen(false)}\n onFocus={() => setOpen(true)}\n onBlur={() => setOpen(false)}\n >\n <span\n tabIndex={0}\n aria-describedby={id}\n style={{\n cursor: \"help\",\n color: \"hsl(var(--primary, 210 81% 56%))\",\n textDecorationLine: \"underline\",\n textDecorationStyle: \"dotted\",\n textDecorationColor: \"hsl(var(--primary, 210 81% 56%))\",\n textUnderlineOffset: \"0.18em\",\n }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n }}\n >\n {triggerContent}\n </span>\n {open && tooltipContent ? (\n <span\n id={id}\n role=\"tooltip\"\n style={{\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n ...floatingPosition,\n border: \"1px solid hsl(var(--border-color, 210 20% 85%))\",\n background: \"hsl(var(--card, 0 0% 100%))\",\n color: \"hsl(var(--foreground, 220 30% 15%))\",\n borderRadius: 8,\n padding: \"0.35rem 0.5rem\",\n fontSize: \"0.78rem\",\n whiteSpace: \"nowrap\",\n zIndex: 20,\n }}\n >\n {tooltipContent}\n </span>\n ) : null}\n </span>\n );\n}\n","import type { ComponentType } from \"react\";\nimport {\n AccordionMdx,\n AccordionsMdx,\n ButtonMdx,\n CardsMdx,\n CardMdx,\n CodeBlock,\n FileMdx,\n FilesMdx,\n FolderMdx,\n ImageMdx,\n KbdMdx,\n LinkMdx,\n MermaidMdx,\n NoteMdx,\n ReleaseMdx,\n ChangesMdx,\n StepMdx,\n StepsMdx,\n TableMdx,\n TableHeaderMdx,\n TableBodyMdx,\n TableFooterMdx,\n TableRowMdx,\n TableHeadMdx,\n TableCellMdx,\n TabMdx,\n TabsMdx,\n TooltipMdx,\n YoutubeMdx,\n} from \"../components\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type MdxComponentMap = Record<string, ComponentType<any>>;\n\nexport function createMdxComponents(customComponents: MdxComponentMap = {}): MdxComponentMap {\n return {\n Tabs: TabsMdx,\n Tab: TabMdx,\n table: TableMdx,\n thead: TableHeaderMdx,\n tbody: TableBodyMdx,\n tfoot: TableFooterMdx,\n tr: TableRowMdx,\n th: TableHeadMdx,\n td: TableCellMdx,\n pre: CodeBlock,\n a: LinkMdx,\n Link: LinkMdx,\n Card: CardMdx,\n Button: ButtonMdx,\n Note: NoteMdx,\n Steps: StepsMdx,\n Step: StepMdx,\n Accordion: AccordionMdx,\n Accordions: AccordionsMdx,\n Cards: CardsMdx,\n Kbd: KbdMdx,\n Release: ReleaseMdx,\n Changes: ChangesMdx,\n File: FileMdx,\n Files: FilesMdx,\n Folder: FolderMdx,\n Image: ImageMdx,\n img: ImageMdx,\n Youtube: YoutubeMdx,\n Tooltip: TooltipMdx,\n Mermaid: MermaidMdx,\n ...customComponents,\n };\n}\n"],"mappings":"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","names":["useState","jsx","useState","jsx","jsxs","useId","useState","ChevronRight","jsx","jsxs","useId","useState","jsx","jsxs","useId","useRef","useEffect","useState","jsx","jsxs","useId","useState","Fragment","jsx","jsxs","useId","useState","jsx","jsxs"]}
@@ -0,0 +1,100 @@
1
+ import * as react from 'react';
2
+ import { ComponentProps, ButtonHTMLAttributes, ComponentType, ReactNode, CSSProperties, HTMLAttributes, LiHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes, TableHTMLAttributes } from 'react';
3
+ import * as LucideIcons from 'lucide-react';
4
+
5
+ type IconName = keyof typeof LucideIcons;
6
+ type IconProp = IconName | string;
7
+
8
+ type LinkMdxProps = ComponentProps<"a">;
9
+ declare function LinkMdx({ href, rel, target, ...props }: LinkMdxProps): react.JSX.Element | null;
10
+
11
+ type LinkRenderer = ComponentType<LinkMdxProps>;
12
+ type ButtonMdxProps = ButtonHTMLAttributes<HTMLButtonElement> & {
13
+ href?: string;
14
+ variant?: "primary" | "secondary" | "ghost";
15
+ size?: "sm" | "md" | "lg";
16
+ icon?: IconProp;
17
+ text?: string;
18
+ target?: string;
19
+ /** Internal adapter hook: inject framework link component without duplicating styles. */
20
+ __LinkComponent?: LinkRenderer;
21
+ };
22
+ declare function ButtonMdx({ href, variant, size, icon, text, style, children, target, __LinkComponent, ...props }: ButtonMdxProps): react.JSX.Element;
23
+
24
+ type CardsMdxProps = {
25
+ cols?: number;
26
+ children?: ReactNode;
27
+ style?: CSSProperties;
28
+ };
29
+ declare function CardsMdx({ cols, children, style }: CardsMdxProps): react.JSX.Element;
30
+
31
+ type CodeBlockProps = ComponentProps<"pre"> & {
32
+ raw?: string;
33
+ "data-title"?: string;
34
+ "data-language"?: string;
35
+ "data-expandable"?: string;
36
+ "data-expandable-lines"?: string;
37
+ };
38
+ declare function CodeBlock({ children, raw, ...rest }: CodeBlockProps): react.JSX.Element;
39
+
40
+ type KeyboardMdxProps = {
41
+ show: string;
42
+ type?: "window" | "mac";
43
+ style?: CSSProperties;
44
+ };
45
+ declare function KbdMdx({ show, type, style }: KeyboardMdxProps): react.JSX.Element;
46
+
47
+ type NoteType = "danger" | "warning" | "success" | "info" | "tip";
48
+ type NoteMdxProps = HTMLAttributes<HTMLElement> & {
49
+ type?: NoteType;
50
+ title?: string;
51
+ icon?: IconProp;
52
+ children?: ReactNode;
53
+ style?: CSSProperties;
54
+ };
55
+ declare function NoteMdx({ type, title, icon, children, style, className, ...props }: NoteMdxProps): react.JSX.Element | null;
56
+
57
+ type ReleaseMdxProps = {
58
+ version: string;
59
+ date?: string;
60
+ title: string;
61
+ children?: ReactNode;
62
+ style?: CSSProperties;
63
+ };
64
+ type ChangesMdxProps = {
65
+ type?: "added" | "changed" | "fixed" | "improved" | "deprecated" | "removed";
66
+ children?: ReactNode;
67
+ };
68
+ declare function ReleaseMdx({ version, date, title, children, style }: ReleaseMdxProps): react.JSX.Element;
69
+ declare function ChangesMdx({ type, children }: ChangesMdxProps): react.JSX.Element;
70
+
71
+ type StepsMdxProps = HTMLAttributes<HTMLOListElement> & {
72
+ children?: ReactNode;
73
+ style?: CSSProperties;
74
+ };
75
+ type StepMdxProps = LiHTMLAttributes<HTMLLIElement> & {
76
+ title: string;
77
+ children?: ReactNode;
78
+ style?: CSSProperties;
79
+ };
80
+ type InternalStepProps = StepMdxProps & {
81
+ stepNumber?: number;
82
+ };
83
+ declare function StepsMdx({ children, style, className, ...props }: StepsMdxProps): react.JSX.Element;
84
+ declare function StepMdx({ title, children, style, className, ...props }: InternalStepProps): react.JSX.Element;
85
+
86
+ declare function TableMdx({ style, ...props }: TableHTMLAttributes<HTMLTableElement>): react.JSX.Element;
87
+ declare function TableHeaderMdx(props: HTMLAttributes<HTMLTableSectionElement>): react.JSX.Element;
88
+ declare function TableBodyMdx(props: HTMLAttributes<HTMLTableSectionElement>): react.JSX.Element;
89
+ declare function TableFooterMdx(props: HTMLAttributes<HTMLTableSectionElement>): react.JSX.Element;
90
+ declare function TableRowMdx(props: HTMLAttributes<HTMLTableRowElement>): react.JSX.Element;
91
+ declare function TableHeadMdx(props: ThHTMLAttributes<HTMLTableCellElement>): react.JSX.Element;
92
+ declare function TableCellMdx(props: TdHTMLAttributes<HTMLTableCellElement>): react.JSX.Element;
93
+
94
+ type YoutubeMdxProps = {
95
+ videoId: string;
96
+ title?: string;
97
+ };
98
+ declare function YoutubeMdx({ videoId, title }: YoutubeMdxProps): react.JSX.Element;
99
+
100
+ export { ButtonMdx as B, CardsMdx as C, type IconProp as I, KbdMdx as K, type LinkMdxProps as L, NoteMdx as N, ReleaseMdx as R, StepMdx as S, TableBodyMdx as T, YoutubeMdx as Y, ChangesMdx as a, CodeBlock as b, LinkMdx as c, StepsMdx as d, TableCellMdx as e, TableFooterMdx as f, TableHeadMdx as g, TableHeaderMdx as h, TableMdx as i, TableRowMdx as j };
package/dist/server.d.ts CHANGED
@@ -1,11 +1,3 @@
1
- export { ButtonMdx } from "./components/ButtonMdx";
2
- export { CardsMdx } from "./components/CardsMdx";
3
- export { CodeBlock } from "./components/CodeBlockMdx";
4
- export { KbdMdx } from "./components/KbdMdx";
5
- export { LinkMdx } from "./components/LinkMdx";
6
- export { NoteMdx } from "./components/NoteMdx";
7
- export { ChangesMdx, ReleaseMdx } from "./components/ReleaseMdx";
8
- export { StepMdx, StepsMdx } from "./components/StepperMdx";
9
- export { TableMdx, TableHeaderMdx, TableBodyMdx, TableFooterMdx, TableRowMdx, TableHeadMdx, TableCellMdx, } from "./components/TableMdx";
10
- export { YoutubeMdx } from "./components/YoutubeMdx";
11
- //# sourceMappingURL=server.d.ts.map
1
+ export { B as ButtonMdx, C as CardsMdx, a as ChangesMdx, b as CodeBlock, K as KbdMdx, c as LinkMdx, N as NoteMdx, R as ReleaseMdx, S as StepMdx, d as StepsMdx, T as TableBodyMdx, e as TableCellMdx, f as TableFooterMdx, g as TableHeadMdx, h as TableHeaderMdx, i as TableMdx, j as TableRowMdx, Y as YoutubeMdx } from './server-BObcTM97.js';
2
+ import 'react';
3
+ import 'lucide-react';
package/dist/server.js CHANGED
@@ -1,11 +1,41 @@
1
- export { ButtonMdx } from "./components/ButtonMdx";
2
- export { CardsMdx } from "./components/CardsMdx";
3
- export { CodeBlock } from "./components/CodeBlockMdx";
4
- export { KbdMdx } from "./components/KbdMdx";
5
- export { LinkMdx } from "./components/LinkMdx";
6
- export { NoteMdx } from "./components/NoteMdx";
7
- export { ChangesMdx, ReleaseMdx } from "./components/ReleaseMdx";
8
- export { StepMdx, StepsMdx } from "./components/StepperMdx";
9
- export { TableMdx, TableHeaderMdx, TableBodyMdx, TableFooterMdx, TableRowMdx, TableHeadMdx, TableCellMdx, } from "./components/TableMdx";
10
- export { YoutubeMdx } from "./components/YoutubeMdx";
1
+ import {
2
+ ButtonMdx,
3
+ CardsMdx,
4
+ ChangesMdx,
5
+ CodeBlock,
6
+ KbdMdx,
7
+ LinkMdx,
8
+ NoteMdx,
9
+ ReleaseMdx,
10
+ StepMdx,
11
+ StepsMdx,
12
+ TableBodyMdx,
13
+ TableCellMdx,
14
+ TableFooterMdx,
15
+ TableHeadMdx,
16
+ TableHeaderMdx,
17
+ TableMdx,
18
+ TableRowMdx,
19
+ YoutubeMdx
20
+ } from "./chunk-PSDC53TU.js";
21
+ export {
22
+ ButtonMdx,
23
+ CardsMdx,
24
+ ChangesMdx,
25
+ CodeBlock,
26
+ KbdMdx,
27
+ LinkMdx,
28
+ NoteMdx,
29
+ ReleaseMdx,
30
+ StepMdx,
31
+ StepsMdx,
32
+ TableBodyMdx,
33
+ TableCellMdx,
34
+ TableFooterMdx,
35
+ TableHeadMdx,
36
+ TableHeaderMdx,
37
+ TableMdx,
38
+ TableRowMdx,
39
+ YoutubeMdx
40
+ };
11
41
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docubook/mdx-content",
3
- "version": "3.4.1",
3
+ "version": "3.4.2",
4
4
  "description": "Portable MDX components and framework adapters for DocuBook",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -58,7 +58,7 @@
58
58
  "react": ">=18",
59
59
  "react-dom": ">=18",
60
60
  "react-icons": "^5.0.0",
61
- "@docubook/core": "^1.8.0"
61
+ "@docubook/core": "^1.8.1"
62
62
  },
63
63
  "peerDependenciesMeta": {
64
64
  "next": {
@@ -75,10 +75,11 @@
75
75
  "react": "^19.2.7",
76
76
  "react-dom": "^19.2.7",
77
77
  "react-icons": "^5.0.0",
78
- "typescript": "^6.0.3"
78
+ "tsup": "^8.5.1",
79
+ "typescript": "^5.9.3"
79
80
  },
80
81
  "scripts": {
81
- "build": "rm -rf dist tsconfig.tsbuildinfo && tsc -p tsconfig.json",
82
+ "build": "rm -rf dist tsconfig.tsbuildinfo && tsup",
82
83
  "clean": "rm -rf dist tsconfig.tsbuildinfo",
83
84
  "test": "vitest run",
84
85
  "typecheck": "tsc -p tsconfig.json --noEmit"
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=AccordionMdx.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccordionMdx.test.d.ts","sourceRoot":"","sources":["../../src/__test__/AccordionMdx.test.tsx"],"names":[],"mappings":""}
@@ -1,21 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { describe, it, expect } from "vitest";
3
- import { render } from "@testing-library/react";
4
- import { AccordionMdx } from "../components/AccordionMdx";
5
- describe("AccordionMdx", () => {
6
- it("renders with valid icon", () => {
7
- const { container } = render(_jsx(AccordionMdx, { title: "Test", icon: "Home", children: "Content" }));
8
- expect(container.querySelector("svg")).not.toBeNull();
9
- expect(container.textContent).toContain("Test");
10
- });
11
- it("does not crash with invalid icon", () => {
12
- const { container } = render(_jsx(AccordionMdx, { title: "Test", icon: "__proto__", children: "Content" }));
13
- expect(container.textContent).toContain("Test");
14
- expect(container.textContent).toContain("Content");
15
- });
16
- it("renders children", () => {
17
- const { container } = render(_jsx(AccordionMdx, { title: "Acc", children: _jsx("p", { children: "Child" }) }));
18
- expect(container.querySelector("p")).not.toBeNull();
19
- });
20
- });
21
- //# sourceMappingURL=AccordionMdx.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccordionMdx.test.js","sourceRoot":"","sources":["../../src/__test__/AccordionMdx.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,YAAY,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,wBAEvB,CAChB,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,YAAY,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,WAAW,wBAE5B,CAChB,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,YAAY,IAAC,KAAK,EAAC,KAAK,YACvB,gCAAY,GACC,CAChB,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=AccordionsMdx.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccordionsMdx.test.d.ts","sourceRoot":"","sources":["../../src/__test__/AccordionsMdx.test.tsx"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { describe, it, expect } from "vitest";
3
- import { render } from "@testing-library/react";
4
- import { AccordionsMdx } from "../components/AccordionsMdx";
5
- import { AccordionMdx } from "../components/AccordionMdx";
6
- describe("AccordionsMdx", () => {
7
- it("renders group with multiple accordions", () => {
8
- const { container } = render(_jsxs(AccordionsMdx, { children: [_jsx(AccordionMdx, { title: "First", children: "Content 1" }), _jsx(AccordionMdx, { title: "Second", icon: "Code", children: "Content 2" })] }));
9
- expect(container.querySelectorAll(".mdx-accordion")).toHaveLength(2);
10
- expect(container.textContent).toContain("First");
11
- expect(container.textContent).toContain("Second");
12
- });
13
- it("renders with mdx-accordion-group class", () => {
14
- const { container } = render(_jsx(AccordionsMdx, { children: _jsx(AccordionMdx, { title: "A", children: "x" }) }));
15
- expect(container.querySelector(".mdx-accordion-group")).not.toBeNull();
16
- });
17
- it("does not crash with no children", () => {
18
- const { container } = render(_jsx(AccordionsMdx, { children: null }));
19
- expect(container.firstChild).not.toBeNull();
20
- });
21
- });
22
- //# sourceMappingURL=AccordionsMdx.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccordionsMdx.test.js","sourceRoot":"","sources":["../../src/__test__/AccordionsMdx.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,MAAC,aAAa,eACZ,KAAC,YAAY,IAAC,KAAK,EAAC,OAAO,0BAAyB,EACpD,KAAC,YAAY,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,0BAEzB,IACD,CACjB,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,aAAa,cACZ,KAAC,YAAY,IAAC,KAAK,EAAC,GAAG,kBAAiB,GAC1B,CACjB,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,aAAa,cAAE,IAAI,GAAiB,CAAC,CAAC;QACpE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ButtonMdx.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ButtonMdx.test.d.ts","sourceRoot":"","sources":["../../src/__test__/ButtonMdx.test.tsx"],"names":[],"mappings":""}
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { describe, it, expect } from "vitest";
3
- import { render } from "@testing-library/react";
4
- import { ButtonMdx } from "../components/ButtonMdx";
5
- describe("ButtonMdx", () => {
6
- it("renders with valid icon", () => {
7
- const { container } = render(_jsx(ButtonMdx, { icon: "Home", text: "Click" }));
8
- expect(container.querySelector("svg")).not.toBeNull();
9
- expect(container.textContent).toContain("Click");
10
- });
11
- it("does not crash with invalid icon", () => {
12
- const { container } = render(_jsx(ButtonMdx, { icon: "__proto__", text: "Click" }));
13
- expect(container.textContent).toContain("Click");
14
- });
15
- it("renders without icon", () => {
16
- const { container } = render(_jsx(ButtonMdx, { text: "No Icon" }));
17
- expect(container.textContent).toContain("No Icon");
18
- });
19
- });
20
- //# sourceMappingURL=ButtonMdx.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ButtonMdx.test.js","sourceRoot":"","sources":["../../src/__test__/ButtonMdx.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,GAAG,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,SAAS,IAAC,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,OAAO,GAAG,CAAC,CAAC;QAC1E,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,SAAS,IAAC,IAAI,EAAC,SAAS,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=CardMdx.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CardMdx.test.d.ts","sourceRoot":"","sources":["../../src/__test__/CardMdx.test.tsx"],"names":[],"mappings":""}
@@ -1,29 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { describe, it, expect } from "vitest";
3
- import { render } from "@testing-library/react";
4
- import { CardMdx } from "../components/CardMdx";
5
- describe("CardMdx", () => {
6
- it("renders with valid icon", () => {
7
- const { container } = render(_jsx(CardMdx, { title: "Card", icon: "Home", children: "Body" }));
8
- expect(container.querySelector("svg")).not.toBeNull();
9
- expect(container.textContent).toContain("Card");
10
- });
11
- it("does not crash with invalid icon", () => {
12
- const { container } = render(_jsx(CardMdx, { title: "Card", icon: "__proto__", children: "Body" }));
13
- expect(container.textContent).toContain("Card");
14
- expect(container.textContent).toContain("Body");
15
- });
16
- it("renders children", () => {
17
- const { container } = render(_jsx(CardMdx, { title: "Card", children: _jsx("span", { children: "Child" }) }));
18
- expect(container.querySelector("span")?.textContent).toBe("Child");
19
- });
20
- it("applies data-card-hover attribute when href is provided", () => {
21
- const { container } = render(_jsx(CardMdx, { title: "Link Card", href: "/docs", children: "Body" }));
22
- expect(container.querySelector("[data-card-hover]")).not.toBeNull();
23
- });
24
- it("does not inject inline style tag", () => {
25
- const { container } = render(_jsx(CardMdx, { title: "Card", href: "/docs", children: "Body" }));
26
- expect(container.querySelector("style")).toBeNull();
27
- });
28
- });
29
- //# sourceMappingURL=CardMdx.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CardMdx.test.js","sourceRoot":"","sources":["../../src/__test__/CardMdx.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,OAAO,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,qBAEvB,CACX,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,OAAO,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,WAAW,qBAE5B,CACX,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,OAAO,IAAC,KAAK,EAAC,MAAM,YACnB,mCAAkB,GACV,CACX,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,OAAO,IAAC,KAAK,EAAC,WAAW,EAAC,IAAI,EAAC,OAAO,qBAE7B,CACX,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,KAAC,OAAO,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,qBAExB,CACX,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=CardsMdx.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CardsMdx.test.d.ts","sourceRoot":"","sources":["../../src/__test__/CardsMdx.test.tsx"],"names":[],"mappings":""}
@@ -1,33 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { describe, it, expect } from "vitest";
3
- import { render } from "@testing-library/react";
4
- import { CardsMdx } from "../components/CardsMdx";
5
- import { CardMdx } from "../components/CardMdx";
6
- describe("CardsMdx", () => {
7
- it("renders grid with children", () => {
8
- const { container } = render(_jsxs(CardsMdx, { cols: 2, children: [_jsx(CardMdx, { title: "Card 1", icon: "Heading1", children: "Content 1" }), _jsx(CardMdx, { title: "Card 2", icon: "Heading2", children: "Content 2" })] }));
9
- expect(container.querySelector(".docubook-card-group")).not.toBeNull();
10
- expect(container.textContent).toContain("Card 1");
11
- expect(container.textContent).toContain("Card 2");
12
- });
13
- it("clamps cols to max 4", () => {
14
- const { container } = render(_jsx(CardsMdx, { cols: 10, children: "child" }));
15
- const el = container.querySelector(".docubook-card-group");
16
- expect(el?.style.getPropertyValue("--docubook-card-group-template")).toContain("repeat(4");
17
- });
18
- it("defaults cols to 2", () => {
19
- const { container } = render(_jsx(CardsMdx, { children: "child" }));
20
- const el = container.querySelector(".docubook-card-group");
21
- expect(el?.style.getPropertyValue("--docubook-card-group-template")).toContain("repeat(2");
22
- });
23
- it("passes style prop", () => {
24
- const { container } = render(_jsx(CardsMdx, { style: { gap: "2rem" }, children: "x" }));
25
- const el = container.querySelector(".docubook-card-group");
26
- expect(el?.style.gap).toBe("2rem");
27
- });
28
- it("does not inject inline style tag", () => {
29
- const { container } = render(_jsx(CardsMdx, { children: "x" }));
30
- expect(container.querySelector("style")).toBeNull();
31
- });
32
- });
33
- //# sourceMappingURL=CardsMdx.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CardsMdx.test.js","sourceRoot":"","sources":["../../src/__test__/CardsMdx.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC1B,MAAC,QAAQ,IAAC,IAAI,EAAE,CAAC,aACf,KAAC,OAAO,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,0BAE7B,EACV,KAAC,OAAO,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,0BAE7B,IACD,CACZ,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,sBAAkB,CAAC,CAAC;QACnE,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,sBAAsB,CAAgB,CAAC;QAC1E,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,QAAQ,wBAAiB,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,sBAAsB,CAAgB,CAAC;QAC1E,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,kBAAc,CAAC,CAAC;QAC7E,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,sBAAsB,CAAgB,CAAC;QAC1E,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,QAAQ,oBAAa,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=CodeBlockMdx.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodeBlockMdx.test.d.ts","sourceRoot":"","sources":["../../src/__test__/CodeBlockMdx.test.tsx"],"names":[],"mappings":""}