@docubook/mdx-content 3.4.0 → 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.
- package/dist/adapters/next/index.d.ts +54 -5
- package/dist/adapters/next/index.js +420 -4
- package/dist/adapters/next/index.js.map +1 -1
- package/dist/chunk-PSDC53TU.js +1056 -0
- package/dist/chunk-PSDC53TU.js.map +1 -0
- package/dist/client.d.ts +91 -9
- package/dist/client.js +1191 -8
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +91 -20
- package/dist/index.js +1245 -19
- package/dist/index.js.map +1 -1
- package/dist/server-BObcTM97.d.ts +100 -0
- package/dist/server.d.ts +3 -11
- package/dist/server.js +40 -10
- package/dist/server.js.map +1 -1
- package/package.json +5 -4
- package/dist/__test__/AccordionMdx.test.d.ts +0 -2
- package/dist/__test__/AccordionMdx.test.d.ts.map +0 -1
- package/dist/__test__/AccordionMdx.test.js +0 -21
- package/dist/__test__/AccordionMdx.test.js.map +0 -1
- package/dist/__test__/AccordionsMdx.test.d.ts +0 -2
- package/dist/__test__/AccordionsMdx.test.d.ts.map +0 -1
- package/dist/__test__/AccordionsMdx.test.js +0 -22
- package/dist/__test__/AccordionsMdx.test.js.map +0 -1
- package/dist/__test__/ButtonMdx.test.d.ts +0 -2
- package/dist/__test__/ButtonMdx.test.d.ts.map +0 -1
- package/dist/__test__/ButtonMdx.test.js +0 -20
- package/dist/__test__/ButtonMdx.test.js.map +0 -1
- package/dist/__test__/CardMdx.test.d.ts +0 -2
- package/dist/__test__/CardMdx.test.d.ts.map +0 -1
- package/dist/__test__/CardMdx.test.js +0 -29
- package/dist/__test__/CardMdx.test.js.map +0 -1
- package/dist/__test__/CardsMdx.test.d.ts +0 -2
- package/dist/__test__/CardsMdx.test.d.ts.map +0 -1
- package/dist/__test__/CardsMdx.test.js +0 -33
- package/dist/__test__/CardsMdx.test.js.map +0 -1
- package/dist/__test__/CodeBlockMdx.test.d.ts +0 -2
- package/dist/__test__/CodeBlockMdx.test.d.ts.map +0 -1
- package/dist/__test__/CodeBlockMdx.test.js +0 -48
- package/dist/__test__/CodeBlockMdx.test.js.map +0 -1
- package/dist/__test__/FileTreeMdx.test.d.ts +0 -2
- package/dist/__test__/FileTreeMdx.test.d.ts.map +0 -1
- package/dist/__test__/FileTreeMdx.test.js +0 -26
- package/dist/__test__/FileTreeMdx.test.js.map +0 -1
- package/dist/__test__/ImageMdx.test.d.ts +0 -2
- package/dist/__test__/ImageMdx.test.d.ts.map +0 -1
- package/dist/__test__/ImageMdx.test.js +0 -32
- package/dist/__test__/ImageMdx.test.js.map +0 -1
- package/dist/__test__/KbdMdx.test.d.ts +0 -2
- package/dist/__test__/KbdMdx.test.d.ts.map +0 -1
- package/dist/__test__/KbdMdx.test.js +0 -27
- package/dist/__test__/KbdMdx.test.js.map +0 -1
- package/dist/__test__/LinkMdx.test.d.ts +0 -2
- package/dist/__test__/LinkMdx.test.d.ts.map +0 -1
- package/dist/__test__/LinkMdx.test.js +0 -29
- package/dist/__test__/LinkMdx.test.js.map +0 -1
- package/dist/__test__/MermaidMdx.test.d.ts +0 -2
- package/dist/__test__/MermaidMdx.test.d.ts.map +0 -1
- package/dist/__test__/MermaidMdx.test.js +0 -207
- package/dist/__test__/MermaidMdx.test.js.map +0 -1
- package/dist/__test__/NoteMdx.test.d.ts +0 -2
- package/dist/__test__/NoteMdx.test.d.ts.map +0 -1
- package/dist/__test__/NoteMdx.test.js +0 -39
- package/dist/__test__/NoteMdx.test.js.map +0 -1
- package/dist/__test__/ReleaseMdx.test.d.ts +0 -2
- package/dist/__test__/ReleaseMdx.test.d.ts.map +0 -1
- package/dist/__test__/ReleaseMdx.test.js +0 -39
- package/dist/__test__/ReleaseMdx.test.js.map +0 -1
- package/dist/__test__/StepperMdx.test.d.ts +0 -2
- package/dist/__test__/StepperMdx.test.d.ts.map +0 -1
- package/dist/__test__/StepperMdx.test.js +0 -25
- package/dist/__test__/StepperMdx.test.js.map +0 -1
- package/dist/__test__/TableMdx.test.d.ts +0 -2
- package/dist/__test__/TableMdx.test.d.ts.map +0 -1
- package/dist/__test__/TableMdx.test.js +0 -25
- package/dist/__test__/TableMdx.test.js.map +0 -1
- package/dist/__test__/TabsMdx.test.d.ts +0 -2
- package/dist/__test__/TabsMdx.test.d.ts.map +0 -1
- package/dist/__test__/TabsMdx.test.js +0 -30
- package/dist/__test__/TabsMdx.test.js.map +0 -1
- package/dist/__test__/TooltipMdx.test.d.ts +0 -2
- package/dist/__test__/TooltipMdx.test.d.ts.map +0 -1
- package/dist/__test__/TooltipMdx.test.js +0 -23
- package/dist/__test__/TooltipMdx.test.js.map +0 -1
- package/dist/__test__/YoutubeMdx.test.d.ts +0 -2
- package/dist/__test__/YoutubeMdx.test.d.ts.map +0 -1
- package/dist/__test__/YoutubeMdx.test.js +0 -25
- package/dist/__test__/YoutubeMdx.test.js.map +0 -1
- package/dist/__test__/utils/ExpandableCode.test.d.ts +0 -2
- package/dist/__test__/utils/ExpandableCode.test.d.ts.map +0 -1
- package/dist/__test__/utils/ExpandableCode.test.js +0 -62
- package/dist/__test__/utils/ExpandableCode.test.js.map +0 -1
- package/dist/__test__/utils/Icon.test.d.ts +0 -2
- package/dist/__test__/utils/Icon.test.d.ts.map +0 -1
- package/dist/__test__/utils/Icon.test.js +0 -29
- package/dist/__test__/utils/Icon.test.js.map +0 -1
- package/dist/adapters/next/ButtonMdx.d.ts +0 -4
- package/dist/adapters/next/ButtonMdx.d.ts.map +0 -1
- package/dist/adapters/next/ButtonMdx.js +0 -8
- package/dist/adapters/next/ButtonMdx.js.map +0 -1
- package/dist/adapters/next/CardMdx.d.ts +0 -4
- package/dist/adapters/next/CardMdx.d.ts.map +0 -1
- package/dist/adapters/next/CardMdx.js +0 -8
- package/dist/adapters/next/CardMdx.js.map +0 -1
- package/dist/adapters/next/ImageMdx.d.ts +0 -8
- package/dist/adapters/next/ImageMdx.d.ts.map +0 -1
- package/dist/adapters/next/ImageMdx.js +0 -8
- package/dist/adapters/next/ImageMdx.js.map +0 -1
- package/dist/adapters/next/LinkMdx.d.ts +0 -3
- package/dist/adapters/next/LinkMdx.d.ts.map +0 -1
- package/dist/adapters/next/LinkMdx.js +0 -11
- package/dist/adapters/next/LinkMdx.js.map +0 -1
- package/dist/adapters/next/index.d.ts.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/components/AccordionMdx.d.ts +0 -11
- package/dist/components/AccordionMdx.d.ts.map +0 -1
- package/dist/components/AccordionMdx.js +0 -64
- package/dist/components/AccordionMdx.js.map +0 -1
- package/dist/components/AccordionsMdx.d.ts +0 -7
- package/dist/components/AccordionsMdx.d.ts.map +0 -1
- package/dist/components/AccordionsMdx.js +0 -14
- package/dist/components/AccordionsMdx.js.map +0 -1
- package/dist/components/ButtonMdx.d.ts +0 -17
- package/dist/components/ButtonMdx.d.ts.map +0 -1
- package/dist/components/ButtonMdx.js +0 -57
- package/dist/components/ButtonMdx.js.map +0 -1
- package/dist/components/CardMdx.d.ts +0 -17
- package/dist/components/CardMdx.d.ts.map +0 -1
- package/dist/components/CardMdx.js +0 -52
- package/dist/components/CardMdx.js.map +0 -1
- package/dist/components/CardsMdx.d.ts +0 -9
- package/dist/components/CardsMdx.d.ts.map +0 -1
- package/dist/components/CardsMdx.js +0 -9
- package/dist/components/CardsMdx.js.map +0 -1
- package/dist/components/CodeBlockMdx.d.ts +0 -11
- package/dist/components/CodeBlockMdx.d.ts.map +0 -1
- package/dist/components/CodeBlockMdx.js +0 -135
- package/dist/components/CodeBlockMdx.js.map +0 -1
- package/dist/components/FileTreeMdx.d.ts +0 -19
- package/dist/components/FileTreeMdx.d.ts.map +0 -1
- package/dist/components/FileTreeMdx.js +0 -99
- package/dist/components/FileTreeMdx.js.map +0 -1
- package/dist/components/ImageMdx.d.ts +0 -8
- package/dist/components/ImageMdx.d.ts.map +0 -1
- package/dist/components/ImageMdx.js +0 -111
- package/dist/components/ImageMdx.js.map +0 -1
- package/dist/components/KbdMdx.d.ts +0 -9
- package/dist/components/KbdMdx.d.ts.map +0 -1
- package/dist/components/KbdMdx.js +0 -74
- package/dist/components/KbdMdx.js.map +0 -1
- package/dist/components/LinkMdx.d.ts +0 -4
- package/dist/components/LinkMdx.d.ts.map +0 -1
- package/dist/components/LinkMdx.js +0 -10
- package/dist/components/LinkMdx.js.map +0 -1
- package/dist/components/MermaidMdx.d.ts +0 -13
- package/dist/components/MermaidMdx.d.ts.map +0 -1
- package/dist/components/MermaidMdx.js +0 -211
- package/dist/components/MermaidMdx.js.map +0 -1
- package/dist/components/NoteMdx.d.ts +0 -13
- package/dist/components/NoteMdx.d.ts.map +0 -1
- package/dist/components/NoteMdx.js +0 -79
- package/dist/components/NoteMdx.js.map +0 -1
- package/dist/components/ReleaseMdx.d.ts +0 -16
- package/dist/components/ReleaseMdx.d.ts.map +0 -1
- package/dist/components/ReleaseMdx.js +0 -44
- package/dist/components/ReleaseMdx.js.map +0 -1
- package/dist/components/StepperMdx.d.ts +0 -17
- package/dist/components/StepperMdx.d.ts.map +0 -1
- package/dist/components/StepperMdx.js +0 -74
- package/dist/components/StepperMdx.js.map +0 -1
- package/dist/components/TableMdx.d.ts +0 -9
- package/dist/components/TableMdx.d.ts.map +0 -1
- package/dist/components/TableMdx.js +0 -56
- package/dist/components/TableMdx.js.map +0 -1
- package/dist/components/TabsMdx.d.ts +0 -13
- package/dist/components/TabsMdx.d.ts.map +0 -1
- package/dist/components/TabsMdx.js +0 -67
- package/dist/components/TabsMdx.js.map +0 -1
- package/dist/components/TooltipMdx.d.ts +0 -10
- package/dist/components/TooltipMdx.d.ts.map +0 -1
- package/dist/components/TooltipMdx.js +0 -36
- package/dist/components/TooltipMdx.js.map +0 -1
- package/dist/components/YoutubeMdx.d.ts +0 -7
- package/dist/components/YoutubeMdx.d.ts.map +0 -1
- package/dist/components/YoutubeMdx.js +0 -24
- package/dist/components/YoutubeMdx.js.map +0 -1
- package/dist/components/index.d.ts +0 -19
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -19
- package/dist/components/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/registry/index.d.ts +0 -4
- package/dist/registry/index.d.ts.map +0 -1
- package/dist/registry/index.js +0 -38
- package/dist/registry/index.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/utils/AccordionGroupContext.d.ts +0 -8
- package/dist/utils/AccordionGroupContext.d.ts.map +0 -1
- package/dist/utils/AccordionGroupContext.js +0 -4
- package/dist/utils/AccordionGroupContext.js.map +0 -1
- package/dist/utils/CopyButton.d.ts +0 -6
- package/dist/utils/CopyButton.d.ts.map +0 -1
- package/dist/utils/CopyButton.js +0 -39
- package/dist/utils/CopyButton.js.map +0 -1
- package/dist/utils/ExpandableCode.d.ts +0 -11
- package/dist/utils/ExpandableCode.d.ts.map +0 -1
- package/dist/utils/ExpandableCode.js +0 -78
- package/dist/utils/ExpandableCode.js.map +0 -1
- package/dist/utils/Icon.d.ts +0 -6
- package/dist/utils/Icon.d.ts.map +0 -1
- package/dist/utils/Icon.js +0 -12
- package/dist/utils/Icon.js.map +0 -1
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../src/components/AccordionMdx.tsx","../src/utils/AccordionGroupContext.tsx","../src/utils/Icon.tsx","../src/components/AccordionsMdx.tsx","../src/components/TabsMdx.tsx","../src/components/TooltipMdx.tsx","../src/components/ImageMdx.tsx","../src/components/LinkMdx.tsx","../src/components/CardMdx.tsx","../src/components/FileTreeMdx.tsx","../src/components/MermaidMdx.tsx"],"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","import * as LucideIcons from \"lucide-react\";\nimport type { LucideProps } from \"lucide-react\";\nimport type { ReactNode, ComponentType } from \"react\";\n\nexport type IconName = keyof typeof LucideIcons;\nexport type IconProp = IconName | string;\n\nconst DEFAULT_ICON_SIZE = 20;\n\nexport function resolveLucideIcon(icon?: IconProp): ReactNode {\n const normalized = typeof icon === \"string\" ? icon.trim() : icon;\n if (!normalized || !Object.hasOwn(LucideIcons, normalized)) {\n return undefined;\n }\n\n const IconComponent = LucideIcons[normalized as IconName] as ComponentType<LucideProps>;\n\n return <IconComponent size={DEFAULT_ICON_SIZE} />;\n}\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 {\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","\"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","import type { ComponentProps } from \"react\";\n\nexport type LinkMdxProps = ComponentProps<\"a\">;\n\nexport function LinkMdx({ href, rel, target, ...props }: LinkMdxProps) {\n if (!href) return null;\n\n const external = /^https?:\\/\\//.test(href);\n const computedTarget = target ?? (external ? \"_blank\" : undefined);\n const computedRel = rel ?? (external ? \"noopener noreferrer\" : undefined);\n\n return <a href={href} target={computedTarget} rel={computedRel} {...props} />;\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 {\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"],"mappings":"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","names":["jsx","useState","jsx","useState","useId","useState","jsx","jsxs","useId","useState","jsx","jsxs","useId","useState","Fragment","jsx","jsxs","jsx","jsx","jsxs","useId","useState","ChevronRight","jsx","jsxs","useId","useRef","useEffect","useState","jsx","jsxs"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,20 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import react__default, { ReactNode, HTMLAttributes, CSSProperties, ComponentType, ComponentProps } from 'react';
|
|
3
|
+
import { I as IconProp, L as LinkMdxProps } from './server-BObcTM97.js';
|
|
4
|
+
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';
|
|
5
|
+
import 'lucide-react';
|
|
6
|
+
|
|
7
|
+
type AccordionMdxProps = {
|
|
8
|
+
title: string;
|
|
9
|
+
icon?: IconProp;
|
|
10
|
+
className?: string;
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
};
|
|
13
|
+
declare function AccordionMdx({ title, icon, className, children }: AccordionMdxProps): react.JSX.Element;
|
|
14
|
+
|
|
15
|
+
type AccordionsMdxProps = {
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
};
|
|
18
|
+
declare function AccordionsMdx({ children }: AccordionsMdxProps): react.JSX.Element;
|
|
19
|
+
|
|
20
|
+
type LinkRenderer = ComponentType<LinkMdxProps>;
|
|
21
|
+
type CardMdxProps = HTMLAttributes<HTMLDivElement> & {
|
|
22
|
+
title: string;
|
|
23
|
+
icon?: IconProp;
|
|
24
|
+
href?: string;
|
|
25
|
+
horizontal?: boolean;
|
|
26
|
+
children?: ReactNode;
|
|
27
|
+
style?: CSSProperties;
|
|
28
|
+
/** Internal adapter hook: inject framework link component without duplicating styles. */
|
|
29
|
+
__LinkComponent?: LinkRenderer;
|
|
30
|
+
};
|
|
31
|
+
declare function CardMdx({ title, icon, href, horizontal, children, style, className, __LinkComponent, ...props }: CardMdxProps): react.JSX.Element;
|
|
32
|
+
|
|
33
|
+
type FilesMdxProps = HTMLAttributes<HTMLDivElement> & {
|
|
34
|
+
children?: ReactNode;
|
|
35
|
+
style?: CSSProperties;
|
|
36
|
+
};
|
|
37
|
+
type FolderMdxProps = HTMLAttributes<HTMLDivElement> & {
|
|
38
|
+
name: string;
|
|
39
|
+
children?: ReactNode;
|
|
40
|
+
style?: CSSProperties;
|
|
41
|
+
};
|
|
42
|
+
type FileMdxProps = HTMLAttributes<HTMLDivElement> & {
|
|
43
|
+
name: string;
|
|
44
|
+
style?: CSSProperties;
|
|
45
|
+
};
|
|
46
|
+
declare function FilesMdx({ children, style, className, ...props }: FilesMdxProps): react__default.JSX.Element;
|
|
47
|
+
declare function FolderMdx({ name, children, style, className, ...props }: FolderMdxProps): react__default.JSX.Element;
|
|
48
|
+
declare function FileMdx({ name, style, className, ...props }: FileMdxProps): react__default.JSX.Element;
|
|
49
|
+
|
|
50
|
+
type ImageMdxProps = Omit<ComponentProps<"img">, "src"> & {
|
|
51
|
+
src?: any;
|
|
52
|
+
zoom?: boolean;
|
|
53
|
+
ImageComponent?: ComponentType<any>;
|
|
54
|
+
};
|
|
55
|
+
declare function ImageMdx({ src, alt, width, height, zoom, style, ImageComponent, ...props }: ImageMdxProps): react.JSX.Element | null;
|
|
56
|
+
|
|
57
|
+
interface MermaidMdxProps {
|
|
58
|
+
/** Mermaid diagram definition (from rehype plugin or programmatic) */
|
|
59
|
+
chart: string;
|
|
60
|
+
/** Custom DOM id (auto-generated if omitted) */
|
|
61
|
+
id?: string;
|
|
62
|
+
/** Additional CSS class on container */
|
|
63
|
+
className?: string;
|
|
64
|
+
/** Show GFM-style pan/zoom controls once the diagram renders (default true) */
|
|
65
|
+
panZoom?: boolean;
|
|
66
|
+
}
|
|
67
|
+
declare function MermaidMdx({ chart, id, className, panZoom }: MermaidMdxProps): react.JSX.Element | null;
|
|
68
|
+
|
|
69
|
+
type TabMdxProps = {
|
|
70
|
+
title: string;
|
|
71
|
+
children?: ReactNode;
|
|
72
|
+
};
|
|
73
|
+
declare function TabMdx({ children }: TabMdxProps): react.JSX.Element;
|
|
74
|
+
type TabsMdxProps = {
|
|
75
|
+
className?: string;
|
|
76
|
+
children: ReactNode;
|
|
77
|
+
};
|
|
78
|
+
declare function TabsMdx({ className, children }: TabsMdxProps): react.JSX.Element;
|
|
79
|
+
|
|
80
|
+
type TooltipMdxProps = HTMLAttributes<HTMLSpanElement> & {
|
|
81
|
+
text?: ReactNode;
|
|
82
|
+
tip?: ReactNode;
|
|
83
|
+
side?: "top" | "bottom";
|
|
84
|
+
style?: CSSProperties;
|
|
85
|
+
};
|
|
86
|
+
declare function TooltipMdx({ text, tip, side, style, className, ...props }: TooltipMdxProps): react.JSX.Element;
|
|
87
|
+
|
|
88
|
+
type MdxComponentMap = Record<string, ComponentType<any>>;
|
|
89
|
+
declare function createMdxComponents(customComponents?: MdxComponentMap): MdxComponentMap;
|
|
90
|
+
|
|
91
|
+
export { AccordionMdx, AccordionsMdx, CardMdx, FileMdx, FilesMdx, FolderMdx, ImageMdx, type ImageMdxProps, LinkMdxProps, type MdxComponentMap, MermaidMdx, TabMdx, TabsMdx, TooltipMdx, createMdxComponents };
|