@ai-react-markdown/mantine 1.0.8 → 1.1.0

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/README.md CHANGED
@@ -92,20 +92,20 @@ function StreamingChat({ content, isStreaming }: { content: string; isStreaming:
92
92
 
93
93
  Extends `AIMarkdownProps` from the core package. All core props are supported; listed below are the inherited props with Mantine-specific default overrides:
94
94
 
95
- | Prop | Type | Default | Description |
96
- | ---- | ---- | ------- | ----------- |
97
- | `content` | `string` | **(required)** | Raw markdown content to render. |
98
- | `streaming` | `boolean` | `false` | Whether content is actively being streamed. |
99
- | `fontSize` | `number \| string` | `'0.875rem'` | Base font size. Numbers are treated as pixels. |
100
- | `variant` | `AIMarkdownVariant` | `'default'` | Typography variant name. |
101
- | `colorScheme` | `AIMarkdownColorScheme` | Auto-detected | Color scheme. Defaults to Mantine's computed color scheme. |
102
- | `config` | `PartialDeep<TConfig>` | `undefined` | Partial render config, deep-merged with defaults. |
103
- | `defaultConfig` | `TConfig` | `defaultMantineAIMarkdownRenderConfig` | Base config. |
104
- | `metadata` | `TRenderData` | `undefined` | Arbitrary data for custom components via dedicated context. |
105
- | `contentPreprocessors` | `AIMDContentPreprocessor[]` | `[]` | Additional preprocessors after the built-in LaTeX preprocessor. |
106
- | `customComponents` | `AIMarkdownCustomComponents` | Mantine defaults | Component overrides, merged with Mantine's built-in `<pre>` handler. |
107
- | `Typography` | `AIMarkdownTypographyComponent` | `MantineAIMarkdownTypography` | Typography wrapper. |
108
- | `ExtraStyles` | `AIMarkdownExtraStylesComponent` | `MantineAIMDefaultExtraStyles` | Extra style wrapper. |
95
+ | Prop | Type | Default | Description |
96
+ | ---------------------- | -------------------------------- | -------------------------------------- | -------------------------------------------------------------------- |
97
+ | `content` | `string` | **(required)** | Raw markdown content to render. |
98
+ | `streaming` | `boolean` | `false` | Whether content is actively being streamed. |
99
+ | `fontSize` | `number \| string` | `'0.875rem'` | Base font size. Numbers are treated as pixels. |
100
+ | `variant` | `AIMarkdownVariant` | `'default'` | Typography variant name. |
101
+ | `colorScheme` | `AIMarkdownColorScheme` | Auto-detected | Color scheme. Defaults to Mantine's computed color scheme. |
102
+ | `config` | `PartialDeep<TConfig>` | `undefined` | Partial render config, deep-merged with defaults. |
103
+ | `defaultConfig` | `TConfig` | `defaultMantineAIMarkdownRenderConfig` | Base config. |
104
+ | `metadata` | `TRenderData` | `undefined` | Arbitrary data for custom components via dedicated context. |
105
+ | `contentPreprocessors` | `AIMDContentPreprocessor[]` | `[]` | Additional preprocessors after the built-in LaTeX preprocessor. |
106
+ | `customComponents` | `AIMarkdownCustomComponents` | Mantine defaults | Component overrides, merged with Mantine's built-in `<pre>` handler. |
107
+ | `Typography` | `AIMarkdownTypographyComponent` | `MantineAIMarkdownTypography` | Typography wrapper. |
108
+ | `ExtraStyles` | `AIMarkdownExtraStylesComponent` | `MantineAIMDefaultExtraStyles` | Extra style wrapper. |
109
109
 
110
110
  ## Mantine-Specific Configuration
111
111
 
@@ -115,10 +115,10 @@ The Mantine package extends the core `AIMarkdownRenderConfig` with additional op
115
115
 
116
116
  Inherits all core config fields plus:
117
117
 
118
- | Field | Type | Default | Description |
119
- | ----- | ---- | ------- | ----------- |
120
- | `forceSameFontSize` | `boolean` | `false` | Render all headings at the same size as body text. |
121
- | `codeBlock.defaultExpanded` | `boolean` | `true` | Whether code blocks start expanded. |
118
+ | Field | Type | Default | Description |
119
+ | ------------------------------------- | --------- | ------- | ------------------------------------------------------------------- |
120
+ | `forceSameFontSize` | `boolean` | `false` | Render all headings at the same size as body text. |
121
+ | `codeBlock.defaultExpanded` | `boolean` | `true` | Whether code blocks start expanded. |
122
122
  | `codeBlock.autoDetectUnknownLanguage` | `boolean` | `false` | Use highlight.js to auto-detect language for unlabeled code blocks. |
123
123
 
124
124
  ### Example: Compact Chat Mode
@@ -187,10 +187,7 @@ function App() {
187
187
  By default, code blocks without an explicit language annotation render as plaintext. Enable auto-detection via config:
188
188
 
189
189
  ```tsx
190
- <MantineAIMarkdown
191
- content={markdown}
192
- config={{ codeBlock: { autoDetectUnknownLanguage: true } }}
193
- />
190
+ <MantineAIMarkdown content={markdown} config={{ codeBlock: { autoDetectUnknownLanguage: true } }} />
194
191
  ```
195
192
 
196
193
  This uses `highlight.js`'s `highlightAuto` to guess the language. Results may vary for short or ambiguous snippets.
@@ -209,6 +206,7 @@ graph TD
209
206
  ````
210
207
 
211
208
  Features:
209
+
212
210
  - Automatic dark/light theme switching based on Mantine's color scheme
213
211
  - Toggle between rendered diagram and raw source code
214
212
  - Copy button for the mermaid source
@@ -231,6 +229,7 @@ The `mermaid` library is a direct dependency of this package -- no additional in
231
229
  ```
232
230
 
233
231
  The color scheme is passed to:
232
+
234
233
  - The core `<AIMarkdown>` component for typography theming
235
234
  - Mermaid diagram rendering (dark/base theme selection)
236
235
  - The extra styles wrapper for color-aware CSS
package/dist/index.cjs CHANGED
@@ -111,13 +111,18 @@ var MantineAIMMermaidCode = (0, import_react2.memo)((props) => {
111
111
  const ref = (0, import_react2.useRef)(null);
112
112
  const [showOriginalCode, setShowOriginalCode] = (0, import_react2.useState)(false);
113
113
  const [renderError, setRenderError] = (0, import_react2.useState)(false);
114
- const [chartType, setChartType] = (0, import_react2.useState)("unkown");
114
+ const [chartType, setChartType] = (0, import_react2.useState)("unknown");
115
115
  const debouncedUpdateRenderError = (0, import_react2.useMemo)(
116
116
  () => (0, import_debounce.default)((error) => {
117
117
  setRenderError(error);
118
118
  }, 200),
119
119
  []
120
120
  );
121
+ (0, import_react2.useEffect)(() => {
122
+ return () => {
123
+ debouncedUpdateRenderError.cancel();
124
+ };
125
+ }, [debouncedUpdateRenderError]);
121
126
  (0, import_react2.useEffect)(() => {
122
127
  if (props.code && ref.current) {
123
128
  const renderMermaid = async () => {
@@ -149,15 +154,16 @@ var MantineAIMMermaidCode = (0, import_react2.memo)((props) => {
149
154
  };
150
155
  renderMermaid();
151
156
  }
152
- }, [props.code, isDark, showOriginalCode]);
157
+ }, [props.code, isDark, showOriginalCode, debouncedUpdateRenderError]);
153
158
  const viewSvgInNewWindow = (0, import_react2.useCallback)(() => {
154
159
  handleViewSVGInNewWindow(ref.current?.querySelector("svg"), isDark);
155
- }, []);
160
+ }, [isDark]);
156
161
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
157
162
  (showOriginalCode || renderError) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
158
163
  import_code_highlight.CodeHighlightTabs,
159
164
  {
160
165
  mb: 15,
166
+ fz: renderState.fontSize,
161
167
  w: "100%",
162
168
  code: [
163
169
  {
@@ -252,19 +258,20 @@ var MermaidCode_default = MantineAIMMermaidCode;
252
258
 
253
259
  // src/components/customized/PreCode.tsx
254
260
  var import_jsx_runtime4 = require("react/jsx-runtime");
261
+ var SpecialCodeLanguage = /* @__PURE__ */ ((SpecialCodeLanguage2) => {
262
+ SpecialCodeLanguage2["Mermaid"] = "mermaid";
263
+ return SpecialCodeLanguage2;
264
+ })(SpecialCodeLanguage || {});
265
+ var SPECIAL_LANGUAGES = new Set(Object.values(SpecialCodeLanguage));
255
266
  var MantineAIMPreCode = (0, import_react3.memo)(
256
267
  (props) => {
257
268
  const renderState = useMantineAIMarkdownRenderState();
258
- const [codeLanguage, setCodeLanguage] = (0, import_react3.useState)(props.existLanguage || "");
259
- (0, import_react3.useEffect)(() => {
260
- if (props.existLanguage) {
261
- setCodeLanguage(props.existLanguage);
262
- } else if (renderState.config.codeBlock.autoDetectUnknownLanguage) {
263
- const result = import_highlight.default.highlightAuto(props.codeText);
264
- setCodeLanguage(result.language || "");
265
- } else {
266
- setCodeLanguage("");
269
+ const codeLanguage = (0, import_react3.useMemo)(() => {
270
+ if (props.existLanguage) return props.existLanguage;
271
+ if (renderState.config.codeBlock.autoDetectUnknownLanguage) {
272
+ return import_highlight.default.highlightAuto(props.codeText).language || "";
267
273
  }
274
+ return "";
268
275
  }, [props.existLanguage, props.codeText, renderState.config.codeBlock.autoDetectUnknownLanguage]);
269
276
  const [usedCodeLanguage, usedFileName] = (0, import_react3.useMemo)(() => {
270
277
  if (!codeLanguage) return ["plaintext", "unknown"];
@@ -273,9 +280,9 @@ var MantineAIMPreCode = (0, import_react3.memo)(
273
280
  }
274
281
  return [codeLanguage, codeLanguage];
275
282
  }, [codeLanguage]);
276
- const isMermaidCodeBlock = codeLanguage === "mermaid";
277
- const isSpecialCodeBlock = isMermaidCodeBlock;
283
+ const isSpecialCodeBlock = SPECIAL_LANGUAGES.has(codeLanguage);
278
284
  const normalCodeBlockContent = (0, import_react3.useMemo)(() => {
285
+ if (isSpecialCodeBlock) return null;
279
286
  let usedCodeStr = props.codeText;
280
287
  if (usedCodeStr && usedCodeLanguage.toLowerCase() === "json") {
281
288
  const deepParsedResult = (0, import_deep_parse_json.deepParseJson)(usedCodeStr);
@@ -285,6 +292,7 @@ var MantineAIMPreCode = (0, import_react3.memo)(
285
292
  import_code_highlight2.CodeHighlight,
286
293
  {
287
294
  mb: 15,
295
+ fz: renderState.fontSize,
288
296
  w: "100%",
289
297
  code: usedCodeStr,
290
298
  withBorder: true,
@@ -296,6 +304,7 @@ var MantineAIMPreCode = (0, import_react3.memo)(
296
304
  import_code_highlight2.CodeHighlightTabs,
297
305
  {
298
306
  mb: 15,
307
+ fz: renderState.fontSize,
299
308
  w: "100%",
300
309
  code: [
301
310
  {
@@ -310,11 +319,23 @@ var MantineAIMPreCode = (0, import_react3.memo)(
310
319
  maxCollapsedHeight: "320px"
311
320
  }
312
321
  );
313
- }, [props.codeText, usedCodeLanguage, usedFileName]);
314
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
315
- isMermaidCodeBlock && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MermaidCode_default, { code: props.codeText }),
316
- !isSpecialCodeBlock && normalCodeBlockContent
317
- ] });
322
+ }, [
323
+ isSpecialCodeBlock,
324
+ props.codeText,
325
+ usedCodeLanguage,
326
+ usedFileName,
327
+ renderState.fontSize,
328
+ renderState.config.codeBlock.defaultExpanded
329
+ ]);
330
+ const specialCodeBlockContent = (0, import_react3.useMemo)(() => {
331
+ switch (codeLanguage) {
332
+ case "mermaid" /* Mermaid */:
333
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MermaidCode_default, { code: props.codeText });
334
+ default:
335
+ return null;
336
+ }
337
+ }, [codeLanguage, props.codeText]);
338
+ return isSpecialCodeBlock ? specialCodeBlockContent : normalCodeBlockContent;
318
339
  }
319
340
  );
320
341
  MantineAIMPreCode.displayName = "MantineAIMPreCode";
@@ -324,19 +345,16 @@ var PreCode_default = MantineAIMPreCode;
324
345
  var import_core7 = require("@mantine/core");
325
346
  var import_jsx_runtime5 = require("react/jsx-runtime");
326
347
  var DefaultCustomComponents = {
327
- pre: (0, import_react4.memo)(({ node, ...usefulProps }) => {
348
+ pre: ({ node, ...usefulProps }) => {
328
349
  const code = node?.children[0];
329
- const memoizedPreCode = (0, import_react4.useMemo)(() => {
330
- if (!code || code.type !== "element" || code.tagName !== "code" || !code.position) {
331
- return null;
332
- }
333
- const key = `pre-code-${node.position?.start?.offset || 0}`;
334
- const detectedLanguage = code.properties?.className?.find((className) => className.startsWith("language-"))?.substring("language-".length);
335
- const codeText = code.children.map((child) => "value" in child ? child.value : "").join("\n");
336
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PreCode_default, { codeText, existLanguage: detectedLanguage }, key);
337
- }, [code, node?.position?.start?.offset]);
338
- return memoizedPreCode ?? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { ...usefulProps });
339
- })
350
+ if (!code || code.type !== "element" || code.tagName !== "code" || !code.position) {
351
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", { ...usefulProps });
352
+ }
353
+ const key = `pre-code-${node?.position?.start?.offset || 0}`;
354
+ const detectedLanguage = code.properties?.className?.find((className) => className.startsWith("language-"))?.substring("language-".length);
355
+ const codeText = code.children.map((child) => child.value ?? "").join("\n");
356
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PreCode_default, { codeText, existLanguage: detectedLanguage }, key);
357
+ }
340
358
  };
341
359
  var MantineAIMarkdownComponent = ({
342
360
  Typography: Typography2 = MantineTypography_default,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/MantineAIMarkdown.tsx","../src/components/typography/MantineTypography.tsx","../src/hooks/useMantineAIMarkdownRenderState.ts","../src/components/extra-styles/DefaultExtraStyles/index.tsx","../src/defs.tsx","../src/components/customized/PreCode.tsx","../src/components/customized/MermaidCode/index.tsx","../src/hooks/useMantineAIMarkdownMetadata.ts"],"sourcesContent":["/**\n * Public API surface for `@ai-react-markdown/mantine`.\n *\n * Re-exports the Mantine-integrated AI markdown component, its supporting\n * sub-components, extended types, default configuration, and typed hooks.\n *\n * @packageDocumentation\n */\n\n// --- Components ---\n\n/** Props for the main {@link MantineAIMarkdown} component. */\nexport type { MantineAIMarkdownProps } from './MantineAIMarkdown';\n\n/** Main component -- Mantine-integrated AI markdown renderer (default export). */\nexport { default } from './MantineAIMarkdown';\n\n/** Mantine-themed typography wrapper used by default inside {@link MantineAIMarkdown}. */\nexport { default as MantineAIMarkdownTypography } from './components/typography/MantineTypography';\n\n/** Default extra styles wrapper providing Mantine-compatible CSS scoping and overrides. */\nexport { default as MantineAIMDefaultExtraStyles } from './components/extra-styles/DefaultExtraStyles';\n\n// --- Types, config, and hooks ---\n\n/** Extended render configuration and metadata types for the Mantine integration. */\nexport type { MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata } from './defs';\n\n/** Default Mantine render configuration (frozen). */\nexport { defaultMantineAIMarkdownRenderConfig } from './defs';\n\n/** Typed hook for accessing render state with Mantine-specific config fields. */\nexport { useMantineAIMarkdownRenderState } from './hooks/useMantineAIMarkdownRenderState';\n\n/** Typed hook for accessing metadata within the Mantine AI markdown tree. */\nexport { useMantineAIMarkdownMetadata } from './hooks/useMantineAIMarkdownMetadata';\n","/**\n * Main Mantine integration component for AI markdown rendering.\n *\n * Wraps the core {@link AIMarkdown} component with Mantine-specific defaults:\n * - {@link MantineAIMarkdownTypography} as the typography wrapper\n * - {@link MantineAIMDefaultExtraStyles} as the extra styles wrapper\n * - {@link MantineAIMPreCode} as the default `<pre>` component (with syntax\n * highlighting via Mantine's CodeHighlight and mermaid diagram support)\n * - Automatic color scheme detection via Mantine's `useComputedColorScheme`\n *\n * @module MantineAIMarkdown\n */\n\nimport { memo, useMemo } from 'react';\nimport AIMarkdown from '@ai-react-markdown/core';\nimport { type AIMarkdownProps, type AIMarkdownCustomComponents, useStableValue } from '@ai-react-markdown/core';\nimport MantineAIMarkdownTypography from './components/typography/MantineTypography';\nimport MantineAIMDefaultExtraStyles from './components/extra-styles/DefaultExtraStyles';\nimport { MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata, defaultMantineAIMarkdownRenderConfig } from './defs';\nimport MantineAIMPreCode from './components/customized/PreCode';\nimport { useComputedColorScheme } from '@mantine/core';\n\n/**\n * Props for the {@link MantineAIMarkdown} component.\n *\n * Extends {@link AIMarkdownProps} with Mantine-specific config and metadata generics.\n * All core props (`content`, `streaming`, `fontSize`, `config`, etc.) are inherited.\n *\n * @typeParam TConfig - Render configuration type, defaults to {@link MantineAIMarkdownRenderConfig}.\n * @typeParam TRenderData - Metadata type, defaults to {@link MantineAIMarkdownMetadata}.\n */\nexport interface MantineAIMarkdownProps<\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n TRenderData extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n> extends AIMarkdownProps<TConfig, TRenderData> {}\n\n/**\n * Default custom component overrides applied by the Mantine integration.\n *\n * Overrides the `<pre>` element to extract code blocks and render them via\n * {@link MantineAIMPreCode}, which provides syntax highlighting, expand/collapse,\n * and mermaid diagram support. Falls back to a plain `<pre>` when the child\n * is not a recognized code element.\n */\nconst DefaultCustomComponents: AIMarkdownCustomComponents = {\n pre: memo(({ node, ...usefulProps }) => {\n const code = node?.children[0];\n const memoizedPreCode = useMemo(() => {\n if (!code || code.type !== 'element' || code.tagName !== 'code' || !code.position) {\n return null;\n }\n const key = `pre-code-${node.position?.start?.offset || 0}`;\n const detectedLanguage = (code.properties?.className as string[])\n ?.find((className: string) => className.startsWith('language-'))\n ?.substring('language-'.length);\n const codeText = code.children.map((child) => ('value' in child ? child.value : '')).join('\\n');\n return <MantineAIMPreCode key={key} codeText={codeText} existLanguage={detectedLanguage} />;\n }, [code, node?.position?.start?.offset]);\n return memoizedPreCode ?? <pre {...usefulProps} />;\n }),\n};\n\n/**\n * Inner (non-memoized) implementation of the Mantine AI markdown component.\n *\n * Merges caller-provided `customComponents` with the Mantine defaults (the caller's\n * overrides take precedence). Automatically resolves the color scheme from Mantine's\n * `useComputedColorScheme` when no explicit `colorScheme` prop is provided.\n *\n * @typeParam TConfig - Render configuration type.\n * @typeParam TRenderData - Metadata type.\n */\nconst MantineAIMarkdownComponent = <\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n TRenderData extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n>({\n Typography = MantineAIMarkdownTypography,\n ExtraStyles = MantineAIMDefaultExtraStyles,\n defaultConfig = defaultMantineAIMarkdownRenderConfig as TConfig,\n customComponents,\n colorScheme,\n ...props\n}: MantineAIMarkdownProps<TConfig, TRenderData>) => {\n const stableCustomComponents = useStableValue(customComponents);\n\n const usedComponents = useMemo(() => {\n return stableCustomComponents ? { ...DefaultCustomComponents, ...stableCustomComponents } : DefaultCustomComponents;\n }, [stableCustomComponents]);\n\n const computedColorScheme = useComputedColorScheme('light');\n\n return (\n <AIMarkdown<MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata>\n Typography={Typography}\n ExtraStyles={ExtraStyles}\n defaultConfig={defaultConfig}\n customComponents={usedComponents}\n colorScheme={colorScheme ?? computedColorScheme}\n {...props}\n />\n );\n};\n\n/**\n * Mantine-integrated AI markdown renderer.\n *\n * A memoized wrapper around the core `<AIMarkdown>` component that provides\n * Mantine-themed typography, code highlighting (via `@mantine/code-highlight`),\n * mermaid diagram rendering, and automatic color scheme detection.\n *\n * This is the default export of `@ai-react-markdown/mantine`.\n *\n * @example\n * ```tsx\n * import MantineAIMarkdown from '@ai-react-markdown/mantine';\n *\n * function Chat({ content }: { content: string }) {\n * return <MantineAIMarkdown content={content} />;\n * }\n * ```\n */\nexport const MantineAIMarkdown = memo(MantineAIMarkdownComponent);\n\nMantineAIMarkdown.displayName = 'MantineAIMarkdown';\n\nexport default MantineAIMarkdown as typeof MantineAIMarkdownComponent;\n","import { memo } from 'react';\nimport { Typography } from '@mantine/core';\nimport type { AIMarkdownTypographyProps } from '@ai-react-markdown/core';\n\n/**\n * Mantine-themed typography wrapper for AI markdown content.\n *\n * Replaces the core default typography component with Mantine's `<Typography>`\n * element, applying the configured `fontSize` at full width. This ensures all\n * rendered markdown inherits Mantine's font family, line height, and theming.\n *\n * Used as the default `Typography` prop in {@link MantineAIMarkdown}.\n * Can be replaced by passing a custom `Typography` component.\n *\n * @param props - Standard {@link AIMarkdownTypographyProps} from the core package.\n */\nconst MantineAIMarkdownTypography = memo(({ children, fontSize }: AIMarkdownTypographyProps) => (\n <Typography w=\"100%\" fz={fontSize}>\n {children}\n </Typography>\n));\n\nMantineAIMarkdownTypography.displayName = 'MantineAIMarkdownTypography';\n\nexport default MantineAIMarkdownTypography;\n","import { useAIMarkdownRenderState } from '@ai-react-markdown/core';\nimport { MantineAIMarkdownRenderConfig } from '../defs';\n\n/**\n * Typed wrapper around the core {@link useAIMarkdownRenderState} hook.\n *\n * Returns the current {@link AIMarkdownRenderState} defaulting to\n * {@link MantineAIMarkdownRenderConfig}. Accepts an optional generic parameter\n * for further extension, giving consumers direct access to Mantine-specific\n * config fields (`forceSameFontSize`, `codeBlock`, etc.) without manual annotation.\n *\n * Must be called inside a component rendered within the `<MantineAIMarkdown>` tree.\n * Throws if called outside the provider boundary.\n *\n * @typeParam TConfig - Config type (defaults to {@link MantineAIMarkdownRenderConfig}).\n * @returns The current render state typed with `TConfig`.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { config, streaming, colorScheme } = useMantineAIMarkdownRenderState();\n * const isExpanded = config.codeBlock.defaultExpanded;\n * // ...\n * }\n * ```\n */\nexport const useMantineAIMarkdownRenderState = <\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n>() => {\n return useAIMarkdownRenderState<TConfig>();\n};\n","import { AIMarkdownExtraStylesComponent } from '@ai-react-markdown/core';\nimport { useMantineAIMarkdownRenderState } from '../../../hooks/useMantineAIMarkdownRenderState';\nimport './styles.scss';\n\n/**\n * Default extra styles wrapper for the Mantine integration.\n *\n * Wraps markdown content in a `<div>` with the `aim-mantine-extra-styles` CSS class,\n * which provides Mantine-compatible typography overrides including:\n * - Relative `em`-based Mantine spacing and font-size CSS custom properties\n * - Heading, list, paragraph, blockquote, and code styling\n * - Definition list layout\n *\n * When {@link MantineAIMarkdownRenderConfig.forceSameFontSize} is enabled, the\n * `same-font-size` class is appended, overriding all heading levels to render\n * at the same size as body text.\n *\n * Used as the default `ExtraStyles` prop in {@link MantineAIMarkdown}.\n */\nconst MantineAIMDefaultExtraStyles: AIMarkdownExtraStylesComponent = ({ children }) => {\n const renderState = useMantineAIMarkdownRenderState();\n return (\n <div className={`aim-mantine-extra-styles${renderState.config.forceSameFontSize ? ' same-font-size' : ''}`}>\n {children}\n </div>\n );\n};\n\nexport default MantineAIMDefaultExtraStyles;\n","/**\n * Mantine-specific type definitions and default configuration.\n *\n * Extends the core {@link AIMarkdownRenderConfig} and {@link AIMarkdownMetadata}\n * with Mantine-themed options such as uniform heading sizes and code block behavior.\n *\n * @module defs\n */\n\nimport { AIMarkdownRenderConfig, AIMarkdownMetadata, defaultAIMarkdownRenderConfig } from '@ai-react-markdown/core';\n\n/**\n * Extended render configuration for the Mantine integration.\n *\n * Inherits all core config fields (extra syntax, display optimizations) and adds\n * Mantine-specific options for typography sizing and code block behavior.\n */\nexport interface MantineAIMarkdownRenderConfig extends AIMarkdownRenderConfig {\n /**\n * When `true`, all heading levels (h1-h6) are rendered at the same font size\n * as body text. Useful in compact UI contexts like chat bubbles.\n *\n * @default false\n */\n forceSameFontSize: boolean;\n\n /** Code block rendering options. */\n codeBlock: {\n /**\n * Whether code blocks start in their expanded state.\n * When `false`, long code blocks are collapsed with an expand button.\n *\n * @default true\n */\n defaultExpanded: boolean;\n\n /**\n * When `true`, uses `highlight.js` auto-detection to determine the language\n * of code blocks that lack an explicit language annotation.\n *\n * @default false\n */\n autoDetectUnknownLanguage: boolean;\n };\n}\n\n/**\n * Default Mantine render configuration.\n *\n * Extends {@link defaultAIMarkdownRenderConfig} with Mantine-specific defaults.\n * Frozen to prevent accidental mutation.\n */\nexport const defaultMantineAIMarkdownRenderConfig: MantineAIMarkdownRenderConfig = Object.freeze({\n ...defaultAIMarkdownRenderConfig,\n forceSameFontSize: false,\n codeBlock: Object.freeze({\n defaultExpanded: true,\n autoDetectUnknownLanguage: false,\n }),\n});\n\n/**\n * Metadata type for the Mantine integration.\n *\n * Currently identical to {@link AIMarkdownMetadata}. Exists as an extension point\n * so that consumers can augment metadata in Mantine-specific wrappers without\n * needing to reference the core type directly.\n */\nexport interface MantineAIMarkdownMetadata extends AIMarkdownMetadata {}\n","'use client';\n\nimport { HTMLAttributes, memo, useEffect, useMemo, useState } from 'react';\nimport { CodeHighlight, CodeHighlightTabs } from '@mantine/code-highlight';\nimport { deepParseJson } from 'deep-parse-json';\nimport hljs from 'highlight.js';\nimport { useMantineAIMarkdownRenderState } from '../../hooks/useMantineAIMarkdownRenderState';\nimport MantineAIMMermaidCode from './MermaidCode';\n\n/**\n * Mantine code block renderer for `<pre>` elements.\n *\n * Replaces the default `<pre>` rendering with Mantine's {@link CodeHighlight} or\n * {@link CodeHighlightTabs} components, providing syntax highlighting, expand/collapse\n * behavior, and file-name tabs.\n *\n * Behavior:\n * - If the code block has an explicit language annotation, uses that language.\n * - If no language is specified and `config.codeBlock.autoDetectUnknownLanguage` is\n * enabled, uses `highlight.js` auto-detection.\n * - Mermaid code blocks (`language-mermaid`) are rendered as interactive diagrams\n * via {@link MantineAIMMermaidCode}.\n * - JSON code blocks are deep-parsed and pretty-printed before display.\n * - Unrecognized languages render as plaintext with an \"unknown\" label using\n * {@link CodeHighlight} (no tabs).\n * - Recognized languages render with {@link CodeHighlightTabs} showing the\n * language name as the tab label.\n *\n * @param props.codeText - The raw text content of the code block.\n * @param props.existLanguage - Language identifier extracted from the `language-*` CSS class, if present.\n */\nconst MantineAIMPreCode = memo(\n (\n props: HTMLAttributes<HTMLPreElement> & {\n codeText: string;\n existLanguage?: string;\n }\n ) => {\n const renderState = useMantineAIMarkdownRenderState();\n\n const [codeLanguage, setCodeLanguage] = useState(props.existLanguage || '');\n\n useEffect(() => {\n if (props.existLanguage) {\n setCodeLanguage(props.existLanguage);\n } else if (renderState.config.codeBlock.autoDetectUnknownLanguage) {\n const result = hljs.highlightAuto(props.codeText);\n setCodeLanguage(result.language || '');\n } else {\n setCodeLanguage('');\n }\n }, [props.existLanguage, props.codeText, renderState.config.codeBlock.autoDetectUnknownLanguage]);\n\n const [usedCodeLanguage, usedFileName] = useMemo(() => {\n if (!codeLanguage) return ['plaintext', 'unknown'];\n if (!hljs.getLanguage(codeLanguage)) {\n return ['plaintext', codeLanguage];\n }\n return [codeLanguage, codeLanguage];\n }, [codeLanguage]);\n\n const isMermaidCodeBlock = codeLanguage === 'mermaid';\n const isSpecialCodeBlock = isMermaidCodeBlock;\n\n const normalCodeBlockContent = useMemo(() => {\n let usedCodeStr = props.codeText;\n if (usedCodeStr && usedCodeLanguage.toLowerCase() === 'json') {\n const deepParsedResult = deepParseJson(usedCodeStr);\n usedCodeStr =\n typeof deepParsedResult === 'string' ? deepParsedResult : JSON.stringify(deepParsedResult, null, 2);\n }\n return usedFileName === 'unknown' ? (\n <CodeHighlight\n mb={15}\n w=\"100%\"\n code={usedCodeStr}\n withBorder\n withExpandButton\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n />\n ) : (\n <CodeHighlightTabs\n mb={15}\n w=\"100%\"\n code={[\n {\n fileName: usedFileName,\n code: usedCodeStr,\n language: usedCodeLanguage,\n },\n ]}\n withBorder\n withExpandButton\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n />\n );\n }, [props.codeText, usedCodeLanguage, usedFileName]);\n\n return (\n <>\n {isMermaidCodeBlock && <MantineAIMMermaidCode code={props.codeText} />}\n {!isSpecialCodeBlock && normalCodeBlockContent}\n </>\n );\n }\n);\n\nMantineAIMPreCode.displayName = 'MantineAIMPreCode';\n\nexport default MantineAIMPreCode;\n","'use client';\n\nimport React, { memo, useMemo, useEffect, useRef, useState, useCallback } from 'react';\nimport { CodeHighlightControl, CodeHighlightTabs } from '@mantine/code-highlight';\nimport { ActionIcon, CopyButton, Flex, Tooltip } from '@mantine/core';\nimport debounce from 'lodash-es/debounce';\nimport mermaid from 'mermaid';\nimport { useMantineAIMarkdownRenderState } from '../../../hooks/useMantineAIMarkdownRenderState';\nimport './styles.scss';\n\n/**\n * Generate a unique ID for mermaid SVG rendering.\n * Combines a timestamp with a random suffix to avoid collisions when\n * multiple mermaid diagrams render concurrently.\n *\n * @returns A unique string in the format `mermaid-{timestamp}-{random}`.\n */\nconst generateMermaidUUID = () => {\n return `mermaid-${new Date().getTime()}-${Math.random().toString(36).slice(2, 10)}`;\n};\n\n/**\n * Open the rendered mermaid SVG in a new browser window.\n *\n * Clones the SVG element, applies a background color matching the current\n * color scheme, serializes it to an object URL, and opens it in a new tab.\n * The object URL is revoked after a short delay to free memory.\n *\n * @param svgElement - The rendered SVG element to view, or `null`/`undefined` to no-op.\n * @param isDark - Whether the current color scheme is dark (used for background color).\n */\nconst handleViewSVGInNewWindow = (svgElement: SVGElement | null | undefined, isDark: boolean) => {\n if (!svgElement) return;\n const targetSvg = svgElement.cloneNode(true) as SVGElement;\n targetSvg.style.backgroundColor = isDark ? '#242424' : 'white';\n const text = new XMLSerializer().serializeToString(targetSvg);\n const blob = new Blob([text], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(blob);\n const win = window.open(url);\n if (win) {\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n }\n};\n\n/**\n * Interactive mermaid diagram renderer.\n *\n * Parses and renders mermaid diagram source code into an inline SVG visualization.\n * Automatically adapts to the current Mantine color scheme (light/dark) by\n * re-initializing mermaid with the appropriate theme.\n *\n * Features:\n * - Live SVG rendering with automatic dark/light theme switching\n * - Fallback to raw source code display on parse/render errors\n * - Toggle between rendered diagram and raw mermaid source\n * - Click on the rendered diagram to open the SVG in a new browser window\n * - Copy button for the raw mermaid source code\n * - Chart type label extracted from mermaid's parse result\n * - Debounced error state to avoid flickering during rapid re-renders\n *\n * @param props.code - Raw mermaid diagram source code to render.\n */\nconst MantineAIMMermaidCode = memo((props: { code: string }) => {\n const renderState = useMantineAIMarkdownRenderState();\n const isDark = renderState.colorScheme === 'dark';\n\n const ref = useRef<HTMLPreElement>(null);\n const [showOriginalCode, setShowOriginalCode] = useState(false);\n const [renderError, setRenderError] = useState(false);\n const [chartType, setChartType] = useState('unkown');\n\n const debouncedUpdateRenderError = useMemo(\n () =>\n debounce((error: boolean) => {\n setRenderError(error);\n }, 200),\n []\n );\n\n useEffect(() => {\n if (props.code && ref.current) {\n const renderMermaid = async () => {\n try {\n debouncedUpdateRenderError(false);\n if (ref.current) {\n mermaid.initialize({\n startOnLoad: false,\n securityLevel: 'loose',\n theme: isDark ? 'dark' : 'base',\n darkMode: isDark,\n });\n const parseResult = await mermaid.parse(props.code);\n if (!parseResult) {\n throw new Error('Failed to parse mermaid code');\n }\n const { svg, bindFunctions, diagramType } = await mermaid.render(\n generateMermaidUUID(),\n props.code,\n ref.current\n );\n ref.current.innerHTML = svg;\n bindFunctions?.(ref.current);\n setChartType(diagramType);\n }\n } catch {\n debouncedUpdateRenderError(true);\n }\n };\n\n renderMermaid();\n }\n }, [props.code, isDark, showOriginalCode]);\n\n const viewSvgInNewWindow = useCallback(() => {\n handleViewSVGInNewWindow(ref.current?.querySelector('svg'), isDark);\n }, []);\n\n return (\n <>\n {(showOriginalCode || renderError) && (\n <CodeHighlightTabs\n mb={15}\n w=\"100%\"\n code={[\n {\n fileName: renderError ? 'Mermaid Render Error' : 'mermaid',\n code: props.code,\n language: 'mermaid',\n },\n ]}\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n styles={{\n filesScrollarea: {\n right: '90px',\n },\n }}\n controls={\n renderError\n ? []\n : [\n <CodeHighlightControl\n tooltipLabel=\"Render Mermaid\"\n key=\"gpt\"\n onClick={() => {\n setShowOriginalCode(false);\n }}\n >\n <Flex align=\"center\" justify=\"center\" w={18} h={18}>\n <span className=\"icon-[gravity-ui--logo-mermaid] relative bottom-[1px] text-[16px]\"></span>\n </Flex>\n </CodeHighlightControl>,\n ]\n }\n withBorder\n withExpandButton\n />\n )}\n <div\n className={`aim-mantine-mermaid-code ${isDark ? 'dark' : ''}`}\n style={\n showOriginalCode || renderError\n ? {\n display: 'none',\n }\n : {}\n }\n >\n <div className=\"chart-header\">\n <div className=\"chart-type-tag\">{chartType}</div>\n <Flex align=\"center\" justify=\"flex-end\" gap={0}>\n <Tooltip label=\"Show Mermaid Code\">\n <ActionIcon\n size={28}\n className=\"action-icon\"\n variant=\"transparent\"\n onClick={() => {\n setShowOriginalCode(true);\n }}\n >\n <Flex align=\"center\" justify=\"center\" w={18} h={18}>\n <span className=\"icon-[entypo--code] relative bottom-[0.25px] text-[16px]\"></span>\n </Flex>\n </ActionIcon>\n </Tooltip>\n <CopyButton value={props.code}>\n {({ copied, copy }) => (\n <Tooltip label={copied ? 'Copied' : 'Copy'} withArrow position=\"right\">\n <ActionIcon variant=\"transparent\" size={28} className=\"action-icon\" onClick={copy}>\n {copied ? (\n <span className=\"icon-origin-[lucide--check] text-[18px]\"></span>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"18px\"\n height=\"18px\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n <path d=\"M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z\"></path>\n <path d=\"M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2\"></path>\n </svg>\n )}\n </ActionIcon>\n </Tooltip>\n )}\n </CopyButton>\n </Flex>\n </div>\n <pre\n ref={ref}\n style={{ cursor: 'pointer', overflow: 'auto', width: '100%', padding: '0.5rem' }}\n onClick={() => viewSvgInNewWindow()}\n />\n </div>\n </>\n );\n});\n\nMantineAIMMermaidCode.displayName = 'MantineAIMMermaidCode';\n\nexport default MantineAIMMermaidCode;\n","import { useAIMarkdownMetadata } from '@ai-react-markdown/core';\nimport { MantineAIMarkdownMetadata } from '../defs';\n\n/**\n * Typed wrapper around the core {@link useAIMarkdownMetadata} hook.\n *\n * Returns the current metadata defaulting to {@link MantineAIMarkdownMetadata}.\n * Accepts an optional generic parameter for further extension.\n *\n * Metadata lives in a separate React context from the render state, meaning\n * metadata updates do not trigger re-renders in components that only consume\n * render state.\n *\n * Must be called inside a component rendered within the `<MantineAIMarkdown>` tree.\n *\n * @typeParam TMetadata - Metadata type (defaults to {@link MantineAIMarkdownMetadata}).\n * @returns The current metadata, or `undefined` if none was provided.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const metadata = useMantineAIMarkdownMetadata();\n * // Access Mantine-specific metadata fields\n * }\n * ```\n */\nexport const useMantineAIMarkdownMetadata = <\n TMetadata extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n>() => {\n return useAIMarkdownMetadata<TMetadata>();\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACaA,IAAAA,gBAA8B;AAC9B,IAAAC,eAAuB;AACvB,IAAAA,eAAsF;;;ACftF,mBAAqB;AACrB,kBAA2B;AAgBzB;AADF,IAAM,kCAA8B,mBAAK,CAAC,EAAE,UAAU,SAAS,MAC7D,4CAAC,0BAAW,GAAE,QAAO,IAAI,UACtB,UACH,CACD;AAED,4BAA4B,cAAc;AAE1C,IAAO,4BAAQ;;;ACxBf,IAAAC,eAAyC;AA0BlC,IAAM,kCAAkC,MAExC;AACL,aAAO,uCAAkC;AAC3C;;;ACRI,IAAAC,sBAAA;AAHJ,IAAM,+BAA+D,CAAC,EAAE,SAAS,MAAM;AACrF,QAAM,cAAc,gCAAgC;AACpD,SACE,6CAAC,SAAI,WAAW,2BAA2B,YAAY,OAAO,oBAAoB,oBAAoB,EAAE,IACrG,UACH;AAEJ;AAEA,IAAO,6BAAQ;;;ACnBf,IAAAC,eAA0F;AA2CnF,IAAM,uCAAsE,OAAO,OAAO;AAAA,EAC/F,GAAG;AAAA,EACH,mBAAmB;AAAA,EACnB,WAAW,OAAO,OAAO;AAAA,IACvB,iBAAiB;AAAA,IACjB,2BAA2B;AAAA,EAC7B,CAAC;AACH,CAAC;;;ACzDD,IAAAC,gBAAmE;AACnE,IAAAC,yBAAiD;AACjD,6BAA8B;AAC9B,uBAAiB;;;ACHjB,IAAAC,gBAA+E;AAC/E,4BAAwD;AACxD,IAAAC,eAAsD;AACtD,sBAAqB;AACrB,qBAAoB;AAgHhB,IAAAC,sBAAA;AArGJ,IAAM,sBAAsB,MAAM;AAChC,SAAO,YAAW,oBAAI,KAAK,GAAE,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AACnF;AAYA,IAAM,2BAA2B,CAAC,YAA2C,WAAoB;AAC/F,MAAI,CAAC,WAAY;AACjB,QAAM,YAAY,WAAW,UAAU,IAAI;AAC3C,YAAU,MAAM,kBAAkB,SAAS,YAAY;AACvD,QAAM,OAAO,IAAI,cAAc,EAAE,kBAAkB,SAAS;AAC5D,QAAM,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACvD,QAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,QAAM,MAAM,OAAO,KAAK,GAAG;AAC3B,MAAI,KAAK;AACP,eAAW,MAAM,IAAI,gBAAgB,GAAG,GAAG,GAAI;AAAA,EACjD;AACF;AAoBA,IAAM,4BAAwB,oBAAK,CAAC,UAA4B;AAC9D,QAAM,cAAc,gCAAgC;AACpD,QAAM,SAAS,YAAY,gBAAgB;AAE3C,QAAM,UAAM,sBAAuB,IAAI;AACvC,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,KAAK;AAC9D,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,KAAK;AACpD,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,QAAQ;AAEnD,QAAM,iCAA6B;AAAA,IACjC,UACE,gBAAAC,SAAS,CAAC,UAAmB;AAC3B,qBAAe,KAAK;AAAA,IACtB,GAAG,GAAG;AAAA,IACR,CAAC;AAAA,EACH;AAEA,+BAAU,MAAM;AACd,QAAI,MAAM,QAAQ,IAAI,SAAS;AAC7B,YAAM,gBAAgB,YAAY;AAChC,YAAI;AACF,qCAA2B,KAAK;AAChC,cAAI,IAAI,SAAS;AACf,2BAAAC,QAAQ,WAAW;AAAA,cACjB,aAAa;AAAA,cACb,eAAe;AAAA,cACf,OAAO,SAAS,SAAS;AAAA,cACzB,UAAU;AAAA,YACZ,CAAC;AACD,kBAAM,cAAc,MAAM,eAAAA,QAAQ,MAAM,MAAM,IAAI;AAClD,gBAAI,CAAC,aAAa;AAChB,oBAAM,IAAI,MAAM,8BAA8B;AAAA,YAChD;AACA,kBAAM,EAAE,KAAK,eAAe,YAAY,IAAI,MAAM,eAAAA,QAAQ;AAAA,cACxD,oBAAoB;AAAA,cACpB,MAAM;AAAA,cACN,IAAI;AAAA,YACN;AACA,gBAAI,QAAQ,YAAY;AACxB,4BAAgB,IAAI,OAAO;AAC3B,yBAAa,WAAW;AAAA,UAC1B;AAAA,QACF,QAAQ;AACN,qCAA2B,IAAI;AAAA,QACjC;AAAA,MACF;AAEA,oBAAc;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,MAAM,MAAM,QAAQ,gBAAgB,CAAC;AAEzC,QAAM,yBAAqB,2BAAY,MAAM;AAC3C,6BAAyB,IAAI,SAAS,cAAc,KAAK,GAAG,MAAM;AAAA,EACpE,GAAG,CAAC,CAAC;AAEL,SACE,8EACI;AAAA,yBAAoB,gBACpB;AAAA,MAAC;AAAA;AAAA,QACC,IAAI;AAAA,QACJ,GAAE;AAAA,QACF,MAAM;AAAA,UACJ;AAAA,YACE,UAAU,cAAc,yBAAyB;AAAA,YACjD,MAAM,MAAM;AAAA,YACZ,UAAU;AAAA,UACZ;AAAA,QACF;AAAA,QACA,iBAAiB,YAAY,OAAO,UAAU;AAAA,QAC9C,oBAAmB;AAAA,QACnB,QAAQ;AAAA,UACN,iBAAiB;AAAA,YACf,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,UACE,cACI,CAAC,IACD;AAAA,UACE;AAAA,YAAC;AAAA;AAAA,cACC,cAAa;AAAA,cAEb,SAAS,MAAM;AACb,oCAAoB,KAAK;AAAA,cAC3B;AAAA,cAEA,uDAAC,qBAAK,OAAM,UAAS,SAAQ,UAAS,GAAG,IAAI,GAAG,IAC9C,uDAAC,UAAK,WAAU,qEAAoE,GACtF;AAAA;AAAA,YAPI;AAAA,UAQN;AAAA,QACF;AAAA,QAEN,YAAU;AAAA,QACV,kBAAgB;AAAA;AAAA,IAClB;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,4BAA4B,SAAS,SAAS,EAAE;AAAA,QAC3D,OACE,oBAAoB,cAChB;AAAA,UACE,SAAS;AAAA,QACX,IACA,CAAC;AAAA,QAGP;AAAA,wDAAC,SAAI,WAAU,gBACb;AAAA,yDAAC,SAAI,WAAU,kBAAkB,qBAAU;AAAA,YAC3C,8CAAC,qBAAK,OAAM,UAAS,SAAQ,YAAW,KAAK,GAC3C;AAAA,2DAAC,wBAAQ,OAAM,qBACb;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAM;AAAA,kBACN,WAAU;AAAA,kBACV,SAAQ;AAAA,kBACR,SAAS,MAAM;AACb,wCAAoB,IAAI;AAAA,kBAC1B;AAAA,kBAEA,uDAAC,qBAAK,OAAM,UAAS,SAAQ,UAAS,GAAG,IAAI,GAAG,IAC9C,uDAAC,UAAK,WAAU,4DAA2D,GAC7E;AAAA;AAAA,cACF,GACF;AAAA,cACA,6CAAC,2BAAW,OAAO,MAAM,MACtB,WAAC,EAAE,QAAQ,KAAK,MACf,6CAAC,wBAAQ,OAAO,SAAS,WAAW,QAAQ,WAAS,MAAC,UAAS,SAC7D,uDAAC,2BAAW,SAAQ,eAAc,MAAM,IAAI,WAAU,eAAc,SAAS,MAC1E,mBACC,6CAAC,UAAK,WAAU,2CAA0C,IAE1D;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,SAAQ;AAAA,kBACR,aAAY;AAAA,kBACZ,QAAO;AAAA,kBACP,MAAK;AAAA,kBACL,eAAc;AAAA,kBACd,gBAAe;AAAA,kBACf,OAAM;AAAA,kBACN,QAAO;AAAA,kBAEP;AAAA,iEAAC,UAAK,QAAO,QAAO,GAAE,iBAAgB,MAAK,QAAO;AAAA,oBAClD,6CAAC,UAAK,GAAE,gFAA+E;AAAA,oBACvF,6CAAC,UAAK,GAAE,gEAA+D;AAAA;AAAA;AAAA,cACzE,GAEJ,GACF,GAEJ;AAAA,eACF;AAAA,aACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,OAAO,EAAE,QAAQ,WAAW,UAAU,QAAQ,OAAO,QAAQ,SAAS,SAAS;AAAA,cAC/E,SAAS,MAAM,mBAAmB;AAAA;AAAA,UACpC;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ,CAAC;AAED,sBAAsB,cAAc;AAEpC,IAAO,sBAAQ;;;AD1JP,IAAAC,sBAAA;AAzCR,IAAM,wBAAoB;AAAA,EACxB,CACE,UAIG;AACH,UAAM,cAAc,gCAAgC;AAEpD,UAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,MAAM,iBAAiB,EAAE;AAE1E,iCAAU,MAAM;AACd,UAAI,MAAM,eAAe;AACvB,wBAAgB,MAAM,aAAa;AAAA,MACrC,WAAW,YAAY,OAAO,UAAU,2BAA2B;AACjE,cAAM,SAAS,iBAAAC,QAAK,cAAc,MAAM,QAAQ;AAChD,wBAAgB,OAAO,YAAY,EAAE;AAAA,MACvC,OAAO;AACL,wBAAgB,EAAE;AAAA,MACpB;AAAA,IACF,GAAG,CAAC,MAAM,eAAe,MAAM,UAAU,YAAY,OAAO,UAAU,yBAAyB,CAAC;AAEhG,UAAM,CAAC,kBAAkB,YAAY,QAAI,uBAAQ,MAAM;AACrD,UAAI,CAAC,aAAc,QAAO,CAAC,aAAa,SAAS;AACjD,UAAI,CAAC,iBAAAA,QAAK,YAAY,YAAY,GAAG;AACnC,eAAO,CAAC,aAAa,YAAY;AAAA,MACnC;AACA,aAAO,CAAC,cAAc,YAAY;AAAA,IACpC,GAAG,CAAC,YAAY,CAAC;AAEjB,UAAM,qBAAqB,iBAAiB;AAC5C,UAAM,qBAAqB;AAE3B,UAAM,6BAAyB,uBAAQ,MAAM;AAC3C,UAAI,cAAc,MAAM;AACxB,UAAI,eAAe,iBAAiB,YAAY,MAAM,QAAQ;AAC5D,cAAM,uBAAmB,sCAAc,WAAW;AAClD,sBACE,OAAO,qBAAqB,WAAW,mBAAmB,KAAK,UAAU,kBAAkB,MAAM,CAAC;AAAA,MACtG;AACA,aAAO,iBAAiB,YACtB;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,UACJ,GAAE;AAAA,UACF,MAAM;AAAA,UACN,YAAU;AAAA,UACV,kBAAgB;AAAA,UAChB,iBAAiB,YAAY,OAAO,UAAU;AAAA,UAC9C,oBAAmB;AAAA;AAAA,MACrB,IAEA;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,UACJ,GAAE;AAAA,UACF,MAAM;AAAA,YACJ;AAAA,cACE,UAAU;AAAA,cACV,MAAM;AAAA,cACN,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA,YAAU;AAAA,UACV,kBAAgB;AAAA,UAChB,iBAAiB,YAAY,OAAO,UAAU;AAAA,UAC9C,oBAAmB;AAAA;AAAA,MACrB;AAAA,IAEJ,GAAG,CAAC,MAAM,UAAU,kBAAkB,YAAY,CAAC;AAEnD,WACE,8EACG;AAAA,4BAAsB,6CAAC,uBAAsB,MAAM,MAAM,UAAU;AAAA,MACnE,CAAC,sBAAsB;AAAA,OAC1B;AAAA,EAEJ;AACF;AAEA,kBAAkB,cAAc;AAEhC,IAAO,kBAAQ;;;AL3Ff,IAAAC,eAAuC;AAoC1B,IAAAC,sBAAA;AAZb,IAAM,0BAAsD;AAAA,EAC1D,SAAK,oBAAK,CAAC,EAAE,MAAM,GAAG,YAAY,MAAM;AACtC,UAAM,OAAO,MAAM,SAAS,CAAC;AAC7B,UAAM,sBAAkB,uBAAQ,MAAM;AACpC,UAAI,CAAC,QAAQ,KAAK,SAAS,aAAa,KAAK,YAAY,UAAU,CAAC,KAAK,UAAU;AACjF,eAAO;AAAA,MACT;AACA,YAAM,MAAM,YAAY,KAAK,UAAU,OAAO,UAAU,CAAC;AACzD,YAAM,mBAAoB,KAAK,YAAY,WACvC,KAAK,CAAC,cAAsB,UAAU,WAAW,WAAW,CAAC,GAC7D,UAAU,YAAY,MAAM;AAChC,YAAM,WAAW,KAAK,SAAS,IAAI,CAAC,UAAW,WAAW,QAAQ,MAAM,QAAQ,EAAG,EAAE,KAAK,IAAI;AAC9F,aAAO,6CAAC,mBAA4B,UAAoB,eAAe,oBAAxC,GAA0D;AAAA,IAC3F,GAAG,CAAC,MAAM,MAAM,UAAU,OAAO,MAAM,CAAC;AACxC,WAAO,mBAAmB,6CAAC,SAAK,GAAG,aAAa;AAAA,EAClD,CAAC;AACH;AAYA,IAAM,6BAA6B,CAGjC;AAAA,EACA,YAAAC,cAAa;AAAA,EACb,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAoD;AAClD,QAAM,6BAAyB,6BAAe,gBAAgB;AAE9D,QAAM,qBAAiB,uBAAQ,MAAM;AACnC,WAAO,yBAAyB,EAAE,GAAG,yBAAyB,GAAG,uBAAuB,IAAI;AAAA,EAC9F,GAAG,CAAC,sBAAsB,CAAC;AAE3B,QAAM,0BAAsB,qCAAuB,OAAO;AAE1D,SACE;AAAA,IAAC,aAAAC;AAAA,IAAA;AAAA,MACC,YAAYD;AAAA,MACZ;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,aAAa,eAAe;AAAA,MAC3B,GAAG;AAAA;AAAA,EACN;AAEJ;AAoBO,IAAM,wBAAoB,oBAAK,0BAA0B;AAEhE,kBAAkB,cAAc;AAEhC,IAAO,4BAAQ;;;AO7Hf,IAAAE,eAAsC;AA0B/B,IAAM,+BAA+B,MAErC;AACL,aAAO,oCAAiC;AAC1C;","names":["import_react","import_core","import_core","import_jsx_runtime","import_core","import_react","import_code_highlight","import_react","import_core","import_jsx_runtime","debounce","mermaid","import_jsx_runtime","hljs","import_core","import_jsx_runtime","Typography","AIMarkdown","import_core"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/MantineAIMarkdown.tsx","../src/components/typography/MantineTypography.tsx","../src/hooks/useMantineAIMarkdownRenderState.ts","../src/components/extra-styles/DefaultExtraStyles/index.tsx","../src/defs.tsx","../src/components/customized/PreCode.tsx","../src/components/customized/MermaidCode/index.tsx","../src/hooks/useMantineAIMarkdownMetadata.ts"],"sourcesContent":["/**\n * Public API surface for `@ai-react-markdown/mantine`.\n *\n * Re-exports the Mantine-integrated AI markdown component, its supporting\n * sub-components, extended types, default configuration, and typed hooks.\n *\n * @packageDocumentation\n */\n\n// --- Components ---\n\n/** Props for the main {@link MantineAIMarkdown} component. */\nexport type { MantineAIMarkdownProps } from './MantineAIMarkdown';\n\n/** Main component -- Mantine-integrated AI markdown renderer (default export). */\nexport { default } from './MantineAIMarkdown';\n\n/** Mantine-themed typography wrapper used by default inside {@link MantineAIMarkdown}. */\nexport { default as MantineAIMarkdownTypography } from './components/typography/MantineTypography';\n\n/** Default extra styles wrapper providing Mantine-compatible CSS scoping and overrides. */\nexport { default as MantineAIMDefaultExtraStyles } from './components/extra-styles/DefaultExtraStyles';\n\n// --- Types, config, and hooks ---\n\n/** Extended render configuration and metadata types for the Mantine integration. */\nexport type { MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata } from './defs';\n\n/** Default Mantine render configuration (frozen). */\nexport { defaultMantineAIMarkdownRenderConfig } from './defs';\n\n/** Typed hook for accessing render state with Mantine-specific config fields. */\nexport { useMantineAIMarkdownRenderState } from './hooks/useMantineAIMarkdownRenderState';\n\n/** Typed hook for accessing metadata within the Mantine AI markdown tree. */\nexport { useMantineAIMarkdownMetadata } from './hooks/useMantineAIMarkdownMetadata';\n","/**\n * Main Mantine integration component for AI markdown rendering.\n *\n * Wraps the core {@link AIMarkdown} component with Mantine-specific defaults:\n * - {@link MantineAIMarkdownTypography} as the typography wrapper\n * - {@link MantineAIMDefaultExtraStyles} as the extra styles wrapper\n * - {@link MantineAIMPreCode} as the default `<pre>` component (with syntax\n * highlighting via Mantine's CodeHighlight and mermaid diagram support)\n * - Automatic color scheme detection via Mantine's `useComputedColorScheme`\n *\n * @module MantineAIMarkdown\n */\n\nimport { memo, useMemo } from 'react';\nimport AIMarkdown from '@ai-react-markdown/core';\nimport { type AIMarkdownProps, type AIMarkdownCustomComponents, useStableValue } from '@ai-react-markdown/core';\nimport MantineAIMarkdownTypography from './components/typography/MantineTypography';\nimport MantineAIMDefaultExtraStyles from './components/extra-styles/DefaultExtraStyles';\nimport { MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata, defaultMantineAIMarkdownRenderConfig } from './defs';\nimport MantineAIMPreCode from './components/customized/PreCode';\nimport { useComputedColorScheme } from '@mantine/core';\n\n/**\n * Props for the {@link MantineAIMarkdown} component.\n *\n * Extends {@link AIMarkdownProps} with Mantine-specific config and metadata generics.\n * All core props (`content`, `streaming`, `fontSize`, `config`, etc.) are inherited.\n *\n * @typeParam TConfig - Render configuration type, defaults to {@link MantineAIMarkdownRenderConfig}.\n * @typeParam TRenderData - Metadata type, defaults to {@link MantineAIMarkdownMetadata}.\n */\nexport interface MantineAIMarkdownProps<\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n TRenderData extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n> extends AIMarkdownProps<TConfig, TRenderData> {}\n\n/**\n * Default custom component overrides applied by the Mantine integration.\n *\n * Overrides the `<pre>` element to extract code blocks and render them via\n * {@link MantineAIMPreCode}, which provides syntax highlighting, expand/collapse,\n * and mermaid diagram support. Falls back to a plain `<pre>` when the child\n * is not a recognized code element.\n */\nconst DefaultCustomComponents: AIMarkdownCustomComponents = {\n pre: ({ node, ...usefulProps }) => {\n const code = node?.children[0] as\n | { type: string; tagName?: string; position?: { start?: { offset?: number } }; properties?: Record<string, unknown>; children: { value?: string }[] }\n | undefined;\n if (!code || code.type !== 'element' || code.tagName !== 'code' || !code.position) {\n return <pre {...usefulProps} />;\n }\n const key = `pre-code-${node?.position?.start?.offset || 0}`;\n const detectedLanguage = (code.properties?.className as string[])\n ?.find((className: string) => className.startsWith('language-'))\n ?.substring('language-'.length);\n const codeText = code.children\n .map((child: { value?: string }) => child.value ?? '')\n .join('\\n');\n return <MantineAIMPreCode key={key} codeText={codeText} existLanguage={detectedLanguage} />;\n },\n};\n\n/**\n * Inner (non-memoized) implementation of the Mantine AI markdown component.\n *\n * Merges caller-provided `customComponents` with the Mantine defaults (the caller's\n * overrides take precedence). Automatically resolves the color scheme from Mantine's\n * `useComputedColorScheme` when no explicit `colorScheme` prop is provided.\n *\n * @typeParam TConfig - Render configuration type.\n * @typeParam TRenderData - Metadata type.\n */\nconst MantineAIMarkdownComponent = <\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n TRenderData extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n>({\n Typography = MantineAIMarkdownTypography,\n ExtraStyles = MantineAIMDefaultExtraStyles,\n defaultConfig = defaultMantineAIMarkdownRenderConfig as TConfig,\n customComponents,\n colorScheme,\n ...props\n}: MantineAIMarkdownProps<TConfig, TRenderData>) => {\n const stableCustomComponents = useStableValue(customComponents);\n\n const usedComponents = useMemo(() => {\n return stableCustomComponents ? { ...DefaultCustomComponents, ...stableCustomComponents } : DefaultCustomComponents;\n }, [stableCustomComponents]);\n\n const computedColorScheme = useComputedColorScheme('light');\n\n return (\n <AIMarkdown<MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata>\n Typography={Typography}\n ExtraStyles={ExtraStyles}\n defaultConfig={defaultConfig}\n customComponents={usedComponents}\n colorScheme={colorScheme ?? computedColorScheme}\n {...props}\n />\n );\n};\n\n/**\n * Mantine-integrated AI markdown renderer.\n *\n * A memoized wrapper around the core `<AIMarkdown>` component that provides\n * Mantine-themed typography, code highlighting (via `@mantine/code-highlight`),\n * mermaid diagram rendering, and automatic color scheme detection.\n *\n * This is the default export of `@ai-react-markdown/mantine`.\n *\n * @example\n * ```tsx\n * import MantineAIMarkdown from '@ai-react-markdown/mantine';\n *\n * function Chat({ content }: { content: string }) {\n * return <MantineAIMarkdown content={content} />;\n * }\n * ```\n */\nexport const MantineAIMarkdown = memo(MantineAIMarkdownComponent);\n\nMantineAIMarkdown.displayName = 'MantineAIMarkdown';\n\nexport default MantineAIMarkdown as typeof MantineAIMarkdownComponent;\n","import { memo } from 'react';\nimport { Typography } from '@mantine/core';\nimport type { AIMarkdownTypographyProps } from '@ai-react-markdown/core';\n\n/**\n * Mantine-themed typography wrapper for AI markdown content.\n *\n * Replaces the core default typography component with Mantine's `<Typography>`\n * element, applying the configured `fontSize` at full width. This ensures all\n * rendered markdown inherits Mantine's font family, line height, and theming.\n *\n * Used as the default `Typography` prop in {@link MantineAIMarkdown}.\n * Can be replaced by passing a custom `Typography` component.\n *\n * @param props - Standard {@link AIMarkdownTypographyProps} from the core package.\n */\nconst MantineAIMarkdownTypography = memo(({ children, fontSize }: AIMarkdownTypographyProps) => (\n <Typography w=\"100%\" fz={fontSize}>\n {children}\n </Typography>\n));\n\nMantineAIMarkdownTypography.displayName = 'MantineAIMarkdownTypography';\n\nexport default MantineAIMarkdownTypography;\n","import { useAIMarkdownRenderState } from '@ai-react-markdown/core';\nimport { MantineAIMarkdownRenderConfig } from '../defs';\n\n/**\n * Typed wrapper around the core {@link useAIMarkdownRenderState} hook.\n *\n * Returns the current {@link AIMarkdownRenderState} defaulting to\n * {@link MantineAIMarkdownRenderConfig}. Accepts an optional generic parameter\n * for further extension, giving consumers direct access to Mantine-specific\n * config fields (`forceSameFontSize`, `codeBlock`, etc.) without manual annotation.\n *\n * Must be called inside a component rendered within the `<MantineAIMarkdown>` tree.\n * Throws if called outside the provider boundary.\n *\n * @typeParam TConfig - Config type (defaults to {@link MantineAIMarkdownRenderConfig}).\n * @returns The current render state typed with `TConfig`.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { config, streaming, colorScheme } = useMantineAIMarkdownRenderState();\n * const isExpanded = config.codeBlock.defaultExpanded;\n * // ...\n * }\n * ```\n */\nexport const useMantineAIMarkdownRenderState = <\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n>() => {\n return useAIMarkdownRenderState<TConfig>();\n};\n","import { AIMarkdownExtraStylesComponent } from '@ai-react-markdown/core';\nimport { useMantineAIMarkdownRenderState } from '../../../hooks/useMantineAIMarkdownRenderState';\nimport './styles.scss';\n\n/**\n * Default extra styles wrapper for the Mantine integration.\n *\n * Wraps markdown content in a `<div>` with the `aim-mantine-extra-styles` CSS class,\n * which provides Mantine-compatible typography overrides including:\n * - Relative `em`-based Mantine spacing and font-size CSS custom properties\n * - Heading, list, paragraph, blockquote, and code styling\n * - Definition list layout\n *\n * When {@link MantineAIMarkdownRenderConfig.forceSameFontSize} is enabled, the\n * `same-font-size` class is appended, overriding all heading levels to render\n * at the same size as body text.\n *\n * Used as the default `ExtraStyles` prop in {@link MantineAIMarkdown}.\n */\nconst MantineAIMDefaultExtraStyles: AIMarkdownExtraStylesComponent = ({ children }) => {\n const renderState = useMantineAIMarkdownRenderState();\n return (\n <div className={`aim-mantine-extra-styles${renderState.config.forceSameFontSize ? ' same-font-size' : ''}`}>\n {children}\n </div>\n );\n};\n\nexport default MantineAIMDefaultExtraStyles;\n","/**\n * Mantine-specific type definitions and default configuration.\n *\n * Extends the core {@link AIMarkdownRenderConfig} and {@link AIMarkdownMetadata}\n * with Mantine-themed options such as uniform heading sizes and code block behavior.\n *\n * @module defs\n */\n\nimport { AIMarkdownRenderConfig, AIMarkdownMetadata, defaultAIMarkdownRenderConfig } from '@ai-react-markdown/core';\n\n/**\n * Extended render configuration for the Mantine integration.\n *\n * Inherits all core config fields (extra syntax, display optimizations) and adds\n * Mantine-specific options for typography sizing and code block behavior.\n */\nexport interface MantineAIMarkdownRenderConfig extends AIMarkdownRenderConfig {\n /**\n * When `true`, all heading levels (h1-h6) are rendered at the same font size\n * as body text. Useful in compact UI contexts like chat bubbles.\n *\n * @default false\n */\n forceSameFontSize: boolean;\n\n /** Code block rendering options. */\n codeBlock: {\n /**\n * Whether code blocks start in their expanded state.\n * When `false`, long code blocks are collapsed with an expand button.\n *\n * @default true\n */\n defaultExpanded: boolean;\n\n /**\n * When `true`, uses `highlight.js` auto-detection to determine the language\n * of code blocks that lack an explicit language annotation.\n *\n * @default false\n */\n autoDetectUnknownLanguage: boolean;\n };\n}\n\n/**\n * Default Mantine render configuration.\n *\n * Extends {@link defaultAIMarkdownRenderConfig} with Mantine-specific defaults.\n * Frozen to prevent accidental mutation.\n */\nexport const defaultMantineAIMarkdownRenderConfig: MantineAIMarkdownRenderConfig = Object.freeze({\n ...defaultAIMarkdownRenderConfig,\n forceSameFontSize: false,\n codeBlock: Object.freeze({\n defaultExpanded: true,\n autoDetectUnknownLanguage: false,\n }),\n});\n\n/**\n * Metadata type for the Mantine integration.\n *\n * Currently identical to {@link AIMarkdownMetadata}. Exists as an extension point\n * so that consumers can augment metadata in Mantine-specific wrappers without\n * needing to reference the core type directly.\n */\nexport interface MantineAIMarkdownMetadata extends AIMarkdownMetadata {}\n","'use client';\n\nimport { HTMLAttributes, memo, useMemo } from 'react';\nimport { CodeHighlight, CodeHighlightTabs } from '@mantine/code-highlight';\nimport { deepParseJson } from 'deep-parse-json';\nimport hljs from 'highlight.js';\nimport { useMantineAIMarkdownRenderState } from '../../hooks/useMantineAIMarkdownRenderState';\nimport MantineAIMMermaidCode from './MermaidCode';\n\n/**\n * Code languages that receive specialized rendering instead of standard\n * syntax-highlighted code blocks. Adding a new member here automatically\n * marks that language as \"special\" — you only need to add the corresponding\n * rendering branch in the component's return.\n */\nenum SpecialCodeLanguage {\n /** Rendered as interactive diagrams via {@link MantineAIMMermaidCode} */\n Mermaid = 'mermaid',\n}\n\n/** O(1) lookup set, derived from {@link SpecialCodeLanguage}. */\nconst SPECIAL_LANGUAGES = new Set<string>(Object.values(SpecialCodeLanguage));\n\n/**\n * Mantine code block renderer for `<pre>` elements.\n *\n * Replaces the default `<pre>` rendering with Mantine's {@link CodeHighlight} or\n * {@link CodeHighlightTabs} components, providing syntax highlighting, expand/collapse\n * behavior, and file-name tabs.\n *\n * Behavior:\n * - If the code block has an explicit language annotation, uses that language.\n * - If no language is specified and `config.codeBlock.autoDetectUnknownLanguage` is\n * enabled, uses `highlight.js` auto-detection.\n * - Mermaid code blocks (`language-mermaid`) are rendered as interactive diagrams\n * via {@link MantineAIMMermaidCode}.\n * - JSON code blocks are deep-parsed and pretty-printed before display.\n * - Unrecognized languages render as plaintext with an \"unknown\" label using\n * {@link CodeHighlight} (no tabs).\n * - Recognized languages render with {@link CodeHighlightTabs} showing the\n * language name as the tab label.\n *\n * @param props.codeText - The raw text content of the code block.\n * @param props.existLanguage - Language identifier extracted from the `language-*` CSS class, if present.\n */\nconst MantineAIMPreCode = memo(\n (\n props: HTMLAttributes<HTMLPreElement> & {\n codeText: string;\n existLanguage?: string;\n }\n ) => {\n const renderState = useMantineAIMarkdownRenderState();\n\n const codeLanguage = useMemo(() => {\n if (props.existLanguage) return props.existLanguage;\n if (renderState.config.codeBlock.autoDetectUnknownLanguage) {\n return hljs.highlightAuto(props.codeText).language || '';\n }\n return '';\n }, [props.existLanguage, props.codeText, renderState.config.codeBlock.autoDetectUnknownLanguage]);\n\n const [usedCodeLanguage, usedFileName] = useMemo(() => {\n if (!codeLanguage) return ['plaintext', 'unknown'];\n if (!hljs.getLanguage(codeLanguage)) {\n return ['plaintext', codeLanguage];\n }\n return [codeLanguage, codeLanguage];\n }, [codeLanguage]);\n\n const isSpecialCodeBlock = SPECIAL_LANGUAGES.has(codeLanguage);\n\n const normalCodeBlockContent = useMemo(() => {\n if (isSpecialCodeBlock) return null;\n let usedCodeStr = props.codeText;\n if (usedCodeStr && usedCodeLanguage.toLowerCase() === 'json') {\n const deepParsedResult = deepParseJson(usedCodeStr);\n usedCodeStr =\n typeof deepParsedResult === 'string' ? deepParsedResult : JSON.stringify(deepParsedResult, null, 2);\n }\n return usedFileName === 'unknown' ? (\n <CodeHighlight\n mb={15}\n fz={renderState.fontSize}\n w=\"100%\"\n code={usedCodeStr}\n withBorder\n withExpandButton\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n />\n ) : (\n <CodeHighlightTabs\n mb={15}\n fz={renderState.fontSize}\n w=\"100%\"\n code={[\n {\n fileName: usedFileName,\n code: usedCodeStr,\n language: usedCodeLanguage,\n },\n ]}\n withBorder\n withExpandButton\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n />\n );\n }, [\n isSpecialCodeBlock,\n props.codeText,\n usedCodeLanguage,\n usedFileName,\n renderState.fontSize,\n renderState.config.codeBlock.defaultExpanded,\n ]);\n\n const specialCodeBlockContent = useMemo(() => {\n switch (codeLanguage) {\n case SpecialCodeLanguage.Mermaid:\n return <MantineAIMMermaidCode code={props.codeText} />;\n default:\n return null;\n }\n }, [codeLanguage, props.codeText]);\n\n return isSpecialCodeBlock ? specialCodeBlockContent : normalCodeBlockContent;\n }\n);\n\nMantineAIMPreCode.displayName = 'MantineAIMPreCode';\n\nexport default MantineAIMPreCode;\n","'use client';\n\nimport React, { memo, useMemo, useEffect, useRef, useState, useCallback } from 'react';\nimport { CodeHighlightControl, CodeHighlightTabs } from '@mantine/code-highlight';\nimport { ActionIcon, CopyButton, Flex, Tooltip } from '@mantine/core';\nimport debounce from 'lodash-es/debounce';\nimport mermaid from 'mermaid';\nimport { useMantineAIMarkdownRenderState } from '../../../hooks/useMantineAIMarkdownRenderState';\nimport './styles.scss';\n\n/**\n * Generate a unique ID for mermaid SVG rendering.\n * Combines a timestamp with a random suffix to avoid collisions when\n * multiple mermaid diagrams render concurrently.\n *\n * @returns A unique string in the format `mermaid-{timestamp}-{random}`.\n */\nconst generateMermaidUUID = () => {\n return `mermaid-${new Date().getTime()}-${Math.random().toString(36).slice(2, 10)}`;\n};\n\n/**\n * Open the rendered mermaid SVG in a new browser window.\n *\n * Clones the SVG element, applies a background color matching the current\n * color scheme, serializes it to an object URL, and opens it in a new tab.\n * The object URL is revoked after a short delay to free memory.\n *\n * @param svgElement - The rendered SVG element to view, or `null`/`undefined` to no-op.\n * @param isDark - Whether the current color scheme is dark (used for background color).\n */\nconst handleViewSVGInNewWindow = (svgElement: SVGElement | null | undefined, isDark: boolean) => {\n if (!svgElement) return;\n const targetSvg = svgElement.cloneNode(true) as SVGElement;\n targetSvg.style.backgroundColor = isDark ? '#242424' : 'white';\n const text = new XMLSerializer().serializeToString(targetSvg);\n const blob = new Blob([text], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(blob);\n const win = window.open(url);\n if (win) {\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n }\n};\n\n/**\n * Interactive mermaid diagram renderer.\n *\n * Parses and renders mermaid diagram source code into an inline SVG visualization.\n * Automatically adapts to the current Mantine color scheme (light/dark) by\n * re-initializing mermaid with the appropriate theme.\n *\n * Features:\n * - Live SVG rendering with automatic dark/light theme switching\n * - Fallback to raw source code display on parse/render errors\n * - Toggle between rendered diagram and raw mermaid source\n * - Click on the rendered diagram to open the SVG in a new browser window\n * - Copy button for the raw mermaid source code\n * - Chart type label extracted from mermaid's parse result\n * - Debounced error state to avoid flickering during rapid re-renders\n *\n * @param props.code - Raw mermaid diagram source code to render.\n */\nconst MantineAIMMermaidCode = memo((props: { code: string }) => {\n const renderState = useMantineAIMarkdownRenderState();\n const isDark = renderState.colorScheme === 'dark';\n\n const ref = useRef<HTMLPreElement>(null);\n const [showOriginalCode, setShowOriginalCode] = useState(false);\n const [renderError, setRenderError] = useState(false);\n const [chartType, setChartType] = useState('unknown');\n\n const debouncedUpdateRenderError = useMemo(\n () =>\n debounce((error: boolean) => {\n setRenderError(error);\n }, 200),\n []\n );\n\n useEffect(() => {\n return () => {\n debouncedUpdateRenderError.cancel();\n };\n }, [debouncedUpdateRenderError]);\n\n useEffect(() => {\n if (props.code && ref.current) {\n const renderMermaid = async () => {\n try {\n debouncedUpdateRenderError(false);\n if (ref.current) {\n mermaid.initialize({\n startOnLoad: false,\n securityLevel: 'loose',\n theme: isDark ? 'dark' : 'base',\n darkMode: isDark,\n });\n const parseResult = await mermaid.parse(props.code);\n if (!parseResult) {\n throw new Error('Failed to parse mermaid code');\n }\n const { svg, bindFunctions, diagramType } = await mermaid.render(\n generateMermaidUUID(),\n props.code,\n ref.current\n );\n ref.current.innerHTML = svg;\n bindFunctions?.(ref.current);\n setChartType(diagramType);\n }\n } catch {\n debouncedUpdateRenderError(true);\n }\n };\n\n renderMermaid();\n }\n }, [props.code, isDark, showOriginalCode, debouncedUpdateRenderError]);\n\n const viewSvgInNewWindow = useCallback(() => {\n handleViewSVGInNewWindow(ref.current?.querySelector('svg'), isDark);\n }, [isDark]);\n\n return (\n <>\n {(showOriginalCode || renderError) && (\n <CodeHighlightTabs\n mb={15}\n fz={renderState.fontSize}\n w=\"100%\"\n code={[\n {\n fileName: renderError ? 'Mermaid Render Error' : 'mermaid',\n code: props.code,\n language: 'mermaid',\n },\n ]}\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n styles={{\n filesScrollarea: {\n right: '90px',\n },\n }}\n controls={\n renderError\n ? []\n : [\n <CodeHighlightControl\n tooltipLabel=\"Render Mermaid\"\n key=\"gpt\"\n onClick={() => {\n setShowOriginalCode(false);\n }}\n >\n <Flex align=\"center\" justify=\"center\" w={18} h={18}>\n <span className=\"icon-[gravity-ui--logo-mermaid] relative bottom-[1px] text-[16px]\"></span>\n </Flex>\n </CodeHighlightControl>,\n ]\n }\n withBorder\n withExpandButton\n />\n )}\n <div\n className={`aim-mantine-mermaid-code ${isDark ? 'dark' : ''}`}\n style={\n showOriginalCode || renderError\n ? {\n display: 'none',\n }\n : {}\n }\n >\n <div className=\"chart-header\">\n <div className=\"chart-type-tag\">{chartType}</div>\n <Flex align=\"center\" justify=\"flex-end\" gap={0}>\n <Tooltip label=\"Show Mermaid Code\">\n <ActionIcon\n size={28}\n className=\"action-icon\"\n variant=\"transparent\"\n onClick={() => {\n setShowOriginalCode(true);\n }}\n >\n <Flex align=\"center\" justify=\"center\" w={18} h={18}>\n <span className=\"icon-[entypo--code] relative bottom-[0.25px] text-[16px]\"></span>\n </Flex>\n </ActionIcon>\n </Tooltip>\n <CopyButton value={props.code}>\n {({ copied, copy }) => (\n <Tooltip label={copied ? 'Copied' : 'Copy'} withArrow position=\"right\">\n <ActionIcon variant=\"transparent\" size={28} className=\"action-icon\" onClick={copy}>\n {copied ? (\n <span className=\"icon-origin-[lucide--check] text-[18px]\"></span>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"18px\"\n height=\"18px\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n <path d=\"M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z\"></path>\n <path d=\"M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2\"></path>\n </svg>\n )}\n </ActionIcon>\n </Tooltip>\n )}\n </CopyButton>\n </Flex>\n </div>\n <pre\n ref={ref}\n style={{ cursor: 'pointer', overflow: 'auto', width: '100%', padding: '0.5rem' }}\n onClick={() => viewSvgInNewWindow()}\n />\n </div>\n </>\n );\n});\n\nMantineAIMMermaidCode.displayName = 'MantineAIMMermaidCode';\n\nexport default MantineAIMMermaidCode;\n","import { useAIMarkdownMetadata } from '@ai-react-markdown/core';\nimport { MantineAIMarkdownMetadata } from '../defs';\n\n/**\n * Typed wrapper around the core {@link useAIMarkdownMetadata} hook.\n *\n * Returns the current metadata defaulting to {@link MantineAIMarkdownMetadata}.\n * Accepts an optional generic parameter for further extension.\n *\n * Metadata lives in a separate React context from the render state, meaning\n * metadata updates do not trigger re-renders in components that only consume\n * render state.\n *\n * Must be called inside a component rendered within the `<MantineAIMarkdown>` tree.\n *\n * @typeParam TMetadata - Metadata type (defaults to {@link MantineAIMarkdownMetadata}).\n * @returns The current metadata, or `undefined` if none was provided.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const metadata = useMantineAIMarkdownMetadata();\n * // Access Mantine-specific metadata fields\n * }\n * ```\n */\nexport const useMantineAIMarkdownMetadata = <\n TMetadata extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n>() => {\n return useAIMarkdownMetadata<TMetadata>();\n};\n"],"mappings":"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","names":["import_react","import_core","import_core","import_jsx_runtime","import_core","import_react","import_code_highlight","import_react","import_core","import_jsx_runtime","debounce","mermaid","import_jsx_runtime","SpecialCodeLanguage","hljs","import_core","import_jsx_runtime","Typography","AIMarkdown","import_core"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/extra-styles/DefaultExtraStyles/styles.scss","../src/components/extra-styles/DefaultExtraStyles/%3Cinput css Xs_h4c%3E","../src/components/customized/MermaidCode/styles.scss","../src/components/customized/MermaidCode/%3Cinput css wjwbcW%3E"],"sourcesContent":[".aim-mantine-extra-styles {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-items: flex-start;\n align-items: flex-start;\n\n white-space: normal;\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n\n text-rendering: optimizeLegibility;\n\n --mantine-spacing-xs: calc(0.625em * var(--mantine-scale));\n --mantine-spacing-sm: calc(0.75em * var(--mantine-scale));\n --mantine-spacing-md: calc(1em * var(--mantine-scale));\n --mantine-spacing-lg: calc(1.25em * var(--mantine-scale));\n --mantine-spacing-xl: calc(2em * var(--mantine-scale));\n --mantine-font-size-xs: calc(0.75em * var(--mantine-scale));\n --mantine-font-size-sm: calc(0.875em * var(--mantine-scale));\n --mantine-font-size-md: calc(1em * var(--mantine-scale));\n --mantine-font-size-lg: calc(1.125em * var(--mantine-scale));\n --mantine-font-size-xl: calc(1.25em * var(--mantine-scale));\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n --mantine-h1-font-size: 2.125em;\n --mantine-h2-font-size: 1.625em;\n --mantine-h3-font-size: 1.375em;\n --mantine-h4-font-size: 1.125em;\n --mantine-h5-font-size: 1em;\n --mantine-h6-font-size: 0.875em;\n margin-top: 0;\n }\n\n &.same-font-size h1,\n &.same-font-size h2,\n &.same-font-size h3,\n &.same-font-size h4,\n &.same-font-size h5,\n &.same-font-size h6 {\n --mantine-h1-font-size: 1em;\n --mantine-h2-font-size: 1em;\n --mantine-h3-font-size: 1em;\n --mantine-h4-font-size: 1em;\n --mantine-h5-font-size: 1em;\n --mantine-h6-font-size: 1em;\n }\n\n ul,\n ol {\n list-style-position: outside;\n\n margin-bottom: 0.55em;\n padding-inline-start: 1.5em;\n\n li {\n margin-bottom: 0.275em;\n }\n }\n\n hr {\n width: 100%;\n height: 1px;\n background-color: var(--mantine-color-text);\n }\n\n ul {\n list-style-type: disc;\n }\n\n ul ul {\n list-style-type: circle;\n }\n\n ul ul ul {\n list-style-type: square;\n }\n\n ol {\n list-style-type: decimal;\n }\n\n p {\n --mantine-scale: 0.875;\n margin-bottom: 0.5em;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n blockquote {\n border-inline-start-width: 0.25rem;\n border-inline-start-color: var(--mantine-color-text);\n }\n\n pre {\n font-size: var(--mantine-font-size-md);\n }\n\n code {\n font-size: var(--mantine-font-size-md);\n }\n\n pre code {\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n }\n\n dl {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n max-width: 670px;\n }\n dl > * {\n padding-top: 0.5em;\n }\n dt {\n width: 30%;\n font-weight: bold;\n text-align: right;\n }\n dd {\n width: 60%;\n padding-left: 1em;\n margin-left: 0px;\n }\n dd + dd {\n width: 100%;\n padding-left: calc(30% + 1em);\n }\n dt + dt {\n padding-right: 60%;\n }\n dt + dt + dd {\n margin-top: -1.625em;\n padding-left: calc(30% + 1em);\n }\n}\n",".aim-mantine-extra-styles {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-items: flex-start;\n align-items: flex-start;\n white-space: normal;\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n text-rendering: optimizeLegibility;\n --mantine-spacing-xs: calc(0.625em * var(--mantine-scale));\n --mantine-spacing-sm: calc(0.75em * var(--mantine-scale));\n --mantine-spacing-md: calc(1em * var(--mantine-scale));\n --mantine-spacing-lg: calc(1.25em * var(--mantine-scale));\n --mantine-spacing-xl: calc(2em * var(--mantine-scale));\n --mantine-font-size-xs: calc(0.75em * var(--mantine-scale));\n --mantine-font-size-sm: calc(0.875em * var(--mantine-scale));\n --mantine-font-size-md: calc(1em * var(--mantine-scale));\n --mantine-font-size-lg: calc(1.125em * var(--mantine-scale));\n --mantine-font-size-xl: calc(1.25em * var(--mantine-scale));\n}\n.aim-mantine-extra-styles :first-child {\n margin-top: 0;\n}\n.aim-mantine-extra-styles :last-child {\n margin-bottom: 0;\n}\n.aim-mantine-extra-styles h1,\n.aim-mantine-extra-styles h2,\n.aim-mantine-extra-styles h3,\n.aim-mantine-extra-styles h4,\n.aim-mantine-extra-styles h5,\n.aim-mantine-extra-styles h6 {\n --mantine-h1-font-size: 2.125em;\n --mantine-h2-font-size: 1.625em;\n --mantine-h3-font-size: 1.375em;\n --mantine-h4-font-size: 1.125em;\n --mantine-h5-font-size: 1em;\n --mantine-h6-font-size: 0.875em;\n margin-top: 0;\n}\n.aim-mantine-extra-styles.same-font-size h1, .aim-mantine-extra-styles.same-font-size h2, .aim-mantine-extra-styles.same-font-size h3, .aim-mantine-extra-styles.same-font-size h4, .aim-mantine-extra-styles.same-font-size h5, .aim-mantine-extra-styles.same-font-size h6 {\n --mantine-h1-font-size: 1em;\n --mantine-h2-font-size: 1em;\n --mantine-h3-font-size: 1em;\n --mantine-h4-font-size: 1em;\n --mantine-h5-font-size: 1em;\n --mantine-h6-font-size: 1em;\n}\n.aim-mantine-extra-styles ul,\n.aim-mantine-extra-styles ol {\n list-style-position: outside;\n margin-bottom: 0.55em;\n padding-inline-start: 1.5em;\n}\n.aim-mantine-extra-styles ul li,\n.aim-mantine-extra-styles ol li {\n margin-bottom: 0.275em;\n}\n.aim-mantine-extra-styles hr {\n width: 100%;\n height: 1px;\n background-color: var(--mantine-color-text);\n}\n.aim-mantine-extra-styles ul {\n list-style-type: disc;\n}\n.aim-mantine-extra-styles ul ul {\n list-style-type: circle;\n}\n.aim-mantine-extra-styles ul ul ul {\n list-style-type: square;\n}\n.aim-mantine-extra-styles ol {\n list-style-type: decimal;\n}\n.aim-mantine-extra-styles p {\n --mantine-scale: 0.875;\n margin-bottom: 0.5em;\n}\n.aim-mantine-extra-styles p:last-child {\n margin-bottom: 0;\n}\n.aim-mantine-extra-styles blockquote {\n border-inline-start-width: 0.25rem;\n border-inline-start-color: var(--mantine-color-text);\n}\n.aim-mantine-extra-styles pre {\n font-size: var(--mantine-font-size-md);\n}\n.aim-mantine-extra-styles code {\n font-size: var(--mantine-font-size-md);\n}\n.aim-mantine-extra-styles pre code {\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n}\n.aim-mantine-extra-styles dl {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n max-width: 670px;\n}\n.aim-mantine-extra-styles dl > * {\n padding-top: 0.5em;\n}\n.aim-mantine-extra-styles dt {\n width: 30%;\n font-weight: bold;\n text-align: right;\n}\n.aim-mantine-extra-styles dd {\n width: 60%;\n padding-left: 1em;\n margin-left: 0px;\n}\n.aim-mantine-extra-styles dd + dd {\n width: 100%;\n padding-left: calc(30% + 1em);\n}\n.aim-mantine-extra-styles dt + dt {\n padding-right: 60%;\n}\n.aim-mantine-extra-styles dt + dt + dd {\n margin-top: -1.625em;\n padding-left: calc(30% + 1em);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFNRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7QUFBQTtFQUVFO0VBRUE7RUFDQTs7QUFFQTtBQUFBO0VBQ0U7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFRjtFQUNFOztBQUVGO0VBQ0U7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTs7QUFFRjtFQUNFOztBQUVGO0VBQ0U7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5haW0tbWFudGluZS1leHRyYS1zdHlsZXMge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1pdGVtczogZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuXG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG5cbiAgLS1tYW50aW5lLXNwYWNpbmcteHM6IGNhbGMoMC42MjVlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgLS1tYW50aW5lLXNwYWNpbmctc206IGNhbGMoMC43NWVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAtLW1hbnRpbmUtc3BhY2luZy1tZDogY2FsYygxZW0gKiB2YXIoLS1tYW50aW5lLXNjYWxlKSk7XG4gIC0tbWFudGluZS1zcGFjaW5nLWxnOiBjYWxjKDEuMjVlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgLS1tYW50aW5lLXNwYWNpbmcteGw6IGNhbGMoMmVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAtLW1hbnRpbmUtZm9udC1zaXplLXhzOiBjYWxjKDAuNzVlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgLS1tYW50aW5lLWZvbnQtc2l6ZS1zbTogY2FsYygwLjg3NWVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAtLW1hbnRpbmUtZm9udC1zaXplLW1kOiBjYWxjKDFlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgLS1tYW50aW5lLWZvbnQtc2l6ZS1sZzogY2FsYygxLjEyNWVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAtLW1hbnRpbmUtZm9udC1zaXplLXhsOiBjYWxjKDEuMjVlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcblxuICA6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuICA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYge1xuICAgIC0tbWFudGluZS1oMS1mb250LXNpemU6IDIuMTI1ZW07XG4gICAgLS1tYW50aW5lLWgyLWZvbnQtc2l6ZTogMS42MjVlbTtcbiAgICAtLW1hbnRpbmUtaDMtZm9udC1zaXplOiAxLjM3NWVtO1xuICAgIC0tbWFudGluZS1oNC1mb250LXNpemU6IDEuMTI1ZW07XG4gICAgLS1tYW50aW5lLWg1LWZvbnQtc2l6ZTogMWVtO1xuICAgIC0tbWFudGluZS1oNi1mb250LXNpemU6IDAuODc1ZW07XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG4gICYuc2FtZS1mb250LXNpemUgaDEsXG4gICYuc2FtZS1mb250LXNpemUgaDIsXG4gICYuc2FtZS1mb250LXNpemUgaDMsXG4gICYuc2FtZS1mb250LXNpemUgaDQsXG4gICYuc2FtZS1mb250LXNpemUgaDUsXG4gICYuc2FtZS1mb250LXNpemUgaDYge1xuICAgIC0tbWFudGluZS1oMS1mb250LXNpemU6IDFlbTtcbiAgICAtLW1hbnRpbmUtaDItZm9udC1zaXplOiAxZW07XG4gICAgLS1tYW50aW5lLWgzLWZvbnQtc2l6ZTogMWVtO1xuICAgIC0tbWFudGluZS1oNC1mb250LXNpemU6IDFlbTtcbiAgICAtLW1hbnRpbmUtaDUtZm9udC1zaXplOiAxZW07XG4gICAgLS1tYW50aW5lLWg2LWZvbnQtc2l6ZTogMWVtO1xuICB9XG5cbiAgdWwsXG4gIG9sIHtcbiAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuXG4gICAgbWFyZ2luLWJvdHRvbTogMC41NWVtO1xuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAxLjVlbTtcblxuICAgIGxpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDAuMjc1ZW07XG4gICAgfVxuICB9XG5cbiAgaHIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMXB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1hbnRpbmUtY29sb3ItdGV4dCk7XG4gIH1cblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuICB9XG5cbiAgdWwgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlO1xuICB9XG5cbiAgdWwgdWwgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlO1xuICB9XG5cbiAgb2wge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcbiAgfVxuXG4gIHAge1xuICAgIC0tbWFudGluZS1zY2FsZTogMC44NzU7XG4gICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOiAwLjI1cmVtO1xuICAgIGJvcmRlci1pbmxpbmUtc3RhcnQtY29sb3I6IHZhcigtLW1hbnRpbmUtY29sb3ItdGV4dCk7XG4gIH1cblxuICBwcmUge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tbWFudGluZS1mb250LXNpemUtbWQpO1xuICB9XG5cbiAgY29kZSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1tYW50aW5lLWZvbnQtc2l6ZS1tZCk7XG4gIH1cblxuICBwcmUgY29kZSB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIH1cblxuICBkbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiA2NzBweDtcbiAgfVxuICBkbCA+ICoge1xuICAgIHBhZGRpbmctdG9wOiAwLjVlbTtcbiAgfVxuICBkdCB7XG4gICAgd2lkdGg6IDMwJTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgfVxuICBkZCB7XG4gICAgd2lkdGg6IDYwJTtcbiAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICBtYXJnaW4tbGVmdDogMHB4O1xuICB9XG4gIGRkICsgZGQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmctbGVmdDogY2FsYygzMCUgKyAxZW0pO1xuICB9XG4gIGR0ICsgZHQge1xuICAgIHBhZGRpbmctcmlnaHQ6IDYwJTtcbiAgfVxuICBkdCArIGR0ICsgZGQge1xuICAgIG1hcmdpbi10b3A6IC0xLjYyNWVtO1xuICAgIHBhZGRpbmctbGVmdDogY2FsYygzMCUgKyAxZW0pO1xuICB9XG59XG4iXX0= */",".aim-mantine-mermaid-code {\n width: 100%;\n margin-bottom: 15px;\n background: var(--mantine-color-gray-0);\n border: 1px solid var(--mantine-color-gray-2);\n padding: calc(0.75rem * var(--mantine-scale)) calc(0.625rem * var(--mantine-scale));\n display: flex;\n flex-shrink: 0;\n flex-direction: column;\n justify-content: flex-start;\n align-items: stretch;\n\n .chart-header {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n\n .chart-type-tag {\n padding: calc(0.2125rem * var(--mantine-scale)) calc(0.5625rem * var(--mantine-scale));\n color: black;\n border: 1px solid var(--mantine-color-gray-3);\n background: white;\n border-radius: var(--mantine-radius-default);\n font-size: var(--mantine-font-size-xs);\n font-weight: 700;\n }\n\n .action-icon {\n color: var(--mantine-color-text);\n opacity: 0.5;\n\n &:hover {\n color: var(--mantine-color-bright);\n opacity: 1;\n }\n }\n }\n\n & > pre {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n }\n}\n\n.aim-mantine-mermaid-code.dark {\n background: var(--mantine-color-dark-8);\n border-color: var(--mantine-color-dark-6);\n\n .chart-header {\n .chart-type-tag {\n color: var(--mantine-color-dark-0);\n border-color: var(--mantine-color-dark-6);\n background: var(--mantine-color-dark-8);\n }\n\n .action-icon {\n color: var(--mantine-color-text);\n }\n }\n}\n",".aim-mantine-mermaid-code {\n width: 100%;\n margin-bottom: 15px;\n background: var(--mantine-color-gray-0);\n border: 1px solid var(--mantine-color-gray-2);\n padding: calc(0.75rem * var(--mantine-scale)) calc(0.625rem * var(--mantine-scale));\n display: flex;\n flex-shrink: 0;\n flex-direction: column;\n justify-content: flex-start;\n align-items: stretch;\n}\n.aim-mantine-mermaid-code .chart-header {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n.aim-mantine-mermaid-code .chart-header .chart-type-tag {\n padding: calc(0.2125rem * var(--mantine-scale)) calc(0.5625rem * var(--mantine-scale));\n color: black;\n border: 1px solid var(--mantine-color-gray-3);\n background: white;\n border-radius: var(--mantine-radius-default);\n font-size: var(--mantine-font-size-xs);\n font-weight: 700;\n}\n.aim-mantine-mermaid-code .chart-header .action-icon {\n color: var(--mantine-color-text);\n opacity: 0.5;\n}\n.aim-mantine-mermaid-code .chart-header .action-icon:hover {\n color: var(--mantine-color-bright);\n opacity: 1;\n}\n.aim-mantine-mermaid-code > pre {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n}\n\n.aim-mantine-mermaid-code.dark {\n background: var(--mantine-color-dark-8);\n border-color: var(--mantine-color-dark-6);\n}\n.aim-mantine-mermaid-code.dark .chart-header .chart-type-tag {\n color: var(--mantine-color-dark-0);\n border-color: var(--mantine-color-dark-6);\n background: var(--mantine-color-dark-8);\n}\n.aim-mantine-mermaid-code.dark .chart-header .action-icon {\n color: var(--mantine-color-text);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTtFQUNBOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUo7RUFDRTtFQUNBOztBQUdFO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0UiLCJzb3VyY2VzQ29udGVudCI6WyIuYWltLW1hbnRpbmUtbWVybWFpZC1jb2RlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLW1hbnRpbmUtY29sb3ItZ3JheS0wKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWFudGluZS1jb2xvci1ncmF5LTIpO1xuICBwYWRkaW5nOiBjYWxjKDAuNzVyZW0gKiB2YXIoLS1tYW50aW5lLXNjYWxlKSkgY2FsYygwLjYyNXJlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cbiAgLmNoYXJ0LWhlYWRlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuXG4gICAgLmNoYXJ0LXR5cGUtdGFnIHtcbiAgICAgIHBhZGRpbmc6IGNhbGMoMC4yMTI1cmVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpIGNhbGMoMC41NjI1cmVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWFudGluZS1jb2xvci1ncmF5LTMpO1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tYW50aW5lLXJhZGl1cy1kZWZhdWx0KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbWFudGluZS1mb250LXNpemUteHMpO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICB9XG5cbiAgICAuYWN0aW9uLWljb24ge1xuICAgICAgY29sb3I6IHZhcigtLW1hbnRpbmUtY29sb3ItdGV4dCk7XG4gICAgICBvcGFjaXR5OiAwLjU7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tbWFudGluZS1jb2xvci1icmlnaHQpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYgPiBwcmUge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuXG4uYWltLW1hbnRpbmUtbWVybWFpZC1jb2RlLmRhcmsge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1tYW50aW5lLWNvbG9yLWRhcmstOCk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tbWFudGluZS1jb2xvci1kYXJrLTYpO1xuXG4gIC5jaGFydC1oZWFkZXIge1xuICAgIC5jaGFydC10eXBlLXRhZyB7XG4gICAgICBjb2xvcjogdmFyKC0tbWFudGluZS1jb2xvci1kYXJrLTApO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tYW50aW5lLWNvbG9yLWRhcmstNik7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tYW50aW5lLWNvbG9yLWRhcmstOCk7XG4gICAgfVxuXG4gICAgLmFjdGlvbi1pY29uIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tYW50aW5lLWNvbG9yLXRleHQpO1xuICAgIH1cbiAgfVxufVxuIl19 */"],"mappings":";AAAA,CAAA;AACE,SAAA;AACA,WAAA;AACA,kBAAA;AACA,iBAAA;AACA,eAAA;AAEA,eAAA;AACA,aAAA;AACA,iBAAA;AACA,cAAA;AAEA,kBAAA;AAEA,wBAAA,KAAA,QAAA,EAAA,IAAA;AACA,wBAAA,KAAA,OAAA,EAAA,IAAA;AACA,wBAAA,KAAA,IAAA,EAAA,IAAA;AACA,wBAAA,KAAA,OAAA,EAAA,IAAA;AACA,wBAAA,KAAA,IAAA,EAAA,IAAA;AACA,0BAAA,KAAA,OAAA,EAAA,IAAA;AACA,0BAAA,KAAA,QAAA,EAAA,IAAA;AACA,0BAAA,KAAA,IAAA,EAAA,IAAA;AACA,0BAAA,KAAA,QAAA,EAAA,IAAA;AACA,0BAAA,KAAA,OAAA,EAAA,IAAA;ACFF;ADIE,CAzBF,yBAyBE;AACE,cAAA;ACFJ;ADKE,CA7BF,yBA6BE;AACE,iBAAA;ACHJ;ADME,CAjCF,yBAiCE;CAjCF;CAAA;CAAA;CAAA;CAAA;AAuCI,0BAAA;AACA,0BAAA;AACA,0BAAA;AACA,0BAAA;AACA,0BAAA;AACA,0BAAA;AACA,cAAA;ACJJ;ADOE,CAhDF,wBAgDE,CAAA,eAAA;AAAA,CAhDF,wBAgDE,CAAA,eAAA;AAAA,CAhDF,wBAgDE,CAAA,eAAA;AAAA,CAhDF,wBAgDE,CAAA,eAAA;AAAA,CAhDF,wBAgDE,CAAA,eAAA;AAAA,CAhDF,wBAgDE,CAAA,eAAA;AAME,0BAAA;AACA,0BAAA;AACA,0BAAA;AACA,0BAAA;AACA,0BAAA;AACA,0BAAA;ACVJ;ADaE,CA9DF,yBA8DE;CA9DF;AAgEI,uBAAA;AAEA,iBAAA;AACA,wBAAA;ACZJ;ADcI,CArEJ,yBAqEI,GAAA;CArEJ;AAsEM,iBAAA;ACXN;ADeE,CA1EF,yBA0EE;AACE,SAAA;AACA,UAAA;AACA,oBAAA,IAAA;ACbJ;ADgBE,CAhFF,yBAgFE;AACE,mBAAA;ACdJ;ADiBE,CApFF,yBAoFE,GAAA;AACE,mBAAA;ACfJ;ADkBE,CAxFF,yBAwFE,GAAA,GAAA;AACE,mBAAA;AChBJ;ADmBE,CA5FF,yBA4FE;AACE,mBAAA;ACjBJ;ADoBE,CAhGF,yBAgGE;AACE,mBAAA;AACA,iBAAA;AClBJ;ADoBI,CApGJ,yBAoGI,CAAA;AACE,iBAAA;AClBN;ADsBE,CAzGF,yBAyGE;AACE,6BAAA;AACA,6BAAA,IAAA;ACpBJ;ADuBE,CA9GF,yBA8GE;AACE,aAAA,IAAA;ACrBJ;ADwBE,CAlHF,yBAkHE;AACE,aAAA,IAAA;ACtBJ;ADyBE,CAtHF,yBAsHE,IAAA;AACE,eAAA;AACA,aAAA;AACA,iBAAA;AACA,cAAA;ACvBJ;AD0BE,CA7HF,yBA6HE;AACE,WAAA;AACA,aAAA;AACA,SAAA;AACA,aAAA;ACxBJ;AD0BE,CAnIF,yBAmIE,GAAA,EAAA;AACE,eAAA;ACxBJ;AD0BE,CAtIF,yBAsIE;AACE,SAAA;AACA,eAAA;AACA,cAAA;ACxBJ;AD0BE,CA3IF,yBA2IE;AACE,SAAA;AACA,gBAAA;AACA,eAAA;ACxBJ;AD0BE,CAhJF,yBAgJE,GAAA,EAAA;AACE,SAAA;AACA,gBAAA,KAAA,IAAA,EAAA;ACxBJ;AD0BE,CApJF,yBAoJE,GAAA,EAAA;AACE,iBAAA;ACxBJ;AD0BE,CAvJF,yBAuJE,GAAA,EAAA,GAAA,EAAA;AACE,cAAA;AACA,gBAAA,KAAA,IAAA,EAAA;ACxBJ;;;ACjIA,CAAA;AACE,SAAA;AACA,iBAAA;AACA,cAAA,IAAA;AACA,UAAA,IAAA,MAAA,IAAA;AACA,WAAA,KAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,SAAA,EAAA,IAAA;AACA,WAAA;AACA,eAAA;AACA,kBAAA;AACA,mBAAA;AACA,eAAA;ACCF;ADCE,CAZF,yBAYE,CAAA;AACE,SAAA;AACA,WAAA;AACA,kBAAA;AACA,mBAAA;AACA,eAAA;AACA,eAAA;ACCJ;ADCI,CApBJ,yBAoBI,CARF,aAQE,CAAA;AACE,WAAA,KAAA,UAAA,EAAA,IAAA,kBAAA,KAAA,UAAA,EAAA,IAAA;AACA,SAAA;AACA,UAAA,IAAA,MAAA,IAAA;AACA,cAAA;AACA,iBAAA,IAAA;AACA,aAAA,IAAA;AACA,eAAA;ACCN;ADEI,CA9BJ,yBA8BI,CAlBF,aAkBE,CAAA;AACE,SAAA,IAAA;AACA,WAAA;ACAN;ADEM,CAlCN,yBAkCM,CAtBJ,aAsBI,CAJF,WAIE;AACE,SAAA,IAAA;AACA,WAAA;ACAR;ADKE,CAzCF,yBAyCE,EAAA;AACE,eAAA;AACA,WAAA;AACA,kBAAA;AACA,mBAAA;AACA,eAAA;ACHJ;ADOA,CAlDA,wBAkDA,CAAA;AACE,cAAA,IAAA;AACA,gBAAA,IAAA;ACJF;ADOI,CAvDJ,wBAuDI,CALJ,KAKI,CA3CF,aA2CE,CAnCA;AAoCE,SAAA,IAAA;AACA,gBAAA,IAAA;AACA,cAAA,IAAA;ACLN;ADQI,CA7DJ,wBA6DI,CAXJ,KAWI,CAjDF,aAiDE,CA/BA;AAgCE,SAAA,IAAA;ACNN;","names":[]}
1
+ {"version":3,"sources":["../src/components/extra-styles/DefaultExtraStyles/styles.scss","../src/components/extra-styles/DefaultExtraStyles/%3Cinput css GslzF0%3E","../src/components/customized/MermaidCode/styles.scss","../src/components/customized/MermaidCode/%3Cinput css EIDnxI%3E"],"sourcesContent":[".aim-mantine-extra-styles {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-items: flex-start;\n align-items: flex-start;\n\n white-space: normal;\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n\n text-rendering: optimizeLegibility;\n\n --mantine-spacing-xs: calc(0.625em * var(--mantine-scale));\n --mantine-spacing-sm: calc(0.75em * var(--mantine-scale));\n --mantine-spacing-md: calc(1em * var(--mantine-scale));\n --mantine-spacing-lg: calc(1.25em * var(--mantine-scale));\n --mantine-spacing-xl: calc(2em * var(--mantine-scale));\n --mantine-font-size-xs: calc(0.75em * var(--mantine-scale));\n --mantine-font-size-sm: calc(0.875em * var(--mantine-scale));\n --mantine-font-size-md: calc(1em * var(--mantine-scale));\n --mantine-font-size-lg: calc(1.125em * var(--mantine-scale));\n --mantine-font-size-xl: calc(1.25em * var(--mantine-scale));\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n --mantine-h1-font-size: 2.125em;\n --mantine-h2-font-size: 1.625em;\n --mantine-h3-font-size: 1.375em;\n --mantine-h4-font-size: 1.125em;\n --mantine-h5-font-size: 1em;\n --mantine-h6-font-size: 0.875em;\n margin-top: 0;\n }\n\n &.same-font-size h1,\n &.same-font-size h2,\n &.same-font-size h3,\n &.same-font-size h4,\n &.same-font-size h5,\n &.same-font-size h6 {\n --mantine-h1-font-size: 1em;\n --mantine-h2-font-size: 1em;\n --mantine-h3-font-size: 1em;\n --mantine-h4-font-size: 1em;\n --mantine-h5-font-size: 1em;\n --mantine-h6-font-size: 1em;\n }\n\n ul,\n ol {\n list-style-position: outside;\n\n margin-bottom: 0.55em;\n padding-inline-start: 1.5em;\n\n li {\n margin-bottom: 0.275em;\n }\n }\n\n hr {\n width: 100%;\n height: 1px;\n background-color: var(--mantine-color-text);\n }\n\n ul {\n list-style-type: disc;\n }\n\n ul ul {\n list-style-type: circle;\n }\n\n ul ul ul {\n list-style-type: square;\n }\n\n ol {\n list-style-type: decimal;\n }\n\n p {\n --mantine-scale: 0.875;\n margin-bottom: 0.5em;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n blockquote {\n border-inline-start-width: 0.25rem;\n border-inline-start-color: var(--mantine-color-text);\n }\n\n pre {\n font-size: var(--mantine-font-size-md);\n }\n\n code {\n font-size: var(--mantine-font-size-md);\n }\n\n pre code {\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n }\n\n dl {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n max-width: 670px;\n }\n dl > * {\n padding-top: 0.5em;\n }\n dt {\n width: 30%;\n font-weight: bold;\n text-align: right;\n }\n dd {\n width: 60%;\n padding-left: 1em;\n margin-left: 0px;\n }\n dd + dd {\n width: 100%;\n padding-left: calc(30% + 1em);\n }\n dt + dt {\n padding-right: 60%;\n }\n dt + dt + dd {\n margin-top: -1.625em;\n padding-left: calc(30% + 1em);\n }\n}\n",".aim-mantine-extra-styles {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-items: flex-start;\n align-items: flex-start;\n white-space: normal;\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n text-rendering: optimizeLegibility;\n --mantine-spacing-xs: calc(0.625em * var(--mantine-scale));\n --mantine-spacing-sm: calc(0.75em * var(--mantine-scale));\n --mantine-spacing-md: calc(1em * var(--mantine-scale));\n --mantine-spacing-lg: calc(1.25em * var(--mantine-scale));\n --mantine-spacing-xl: calc(2em * var(--mantine-scale));\n --mantine-font-size-xs: calc(0.75em * var(--mantine-scale));\n --mantine-font-size-sm: calc(0.875em * var(--mantine-scale));\n --mantine-font-size-md: calc(1em * var(--mantine-scale));\n --mantine-font-size-lg: calc(1.125em * var(--mantine-scale));\n --mantine-font-size-xl: calc(1.25em * var(--mantine-scale));\n}\n.aim-mantine-extra-styles :first-child {\n margin-top: 0;\n}\n.aim-mantine-extra-styles :last-child {\n margin-bottom: 0;\n}\n.aim-mantine-extra-styles h1,\n.aim-mantine-extra-styles h2,\n.aim-mantine-extra-styles h3,\n.aim-mantine-extra-styles h4,\n.aim-mantine-extra-styles h5,\n.aim-mantine-extra-styles h6 {\n --mantine-h1-font-size: 2.125em;\n --mantine-h2-font-size: 1.625em;\n --mantine-h3-font-size: 1.375em;\n --mantine-h4-font-size: 1.125em;\n --mantine-h5-font-size: 1em;\n --mantine-h6-font-size: 0.875em;\n margin-top: 0;\n}\n.aim-mantine-extra-styles.same-font-size h1, .aim-mantine-extra-styles.same-font-size h2, .aim-mantine-extra-styles.same-font-size h3, .aim-mantine-extra-styles.same-font-size h4, .aim-mantine-extra-styles.same-font-size h5, .aim-mantine-extra-styles.same-font-size h6 {\n --mantine-h1-font-size: 1em;\n --mantine-h2-font-size: 1em;\n --mantine-h3-font-size: 1em;\n --mantine-h4-font-size: 1em;\n --mantine-h5-font-size: 1em;\n --mantine-h6-font-size: 1em;\n}\n.aim-mantine-extra-styles ul,\n.aim-mantine-extra-styles ol {\n list-style-position: outside;\n margin-bottom: 0.55em;\n padding-inline-start: 1.5em;\n}\n.aim-mantine-extra-styles ul li,\n.aim-mantine-extra-styles ol li {\n margin-bottom: 0.275em;\n}\n.aim-mantine-extra-styles hr {\n width: 100%;\n height: 1px;\n background-color: var(--mantine-color-text);\n}\n.aim-mantine-extra-styles ul {\n list-style-type: disc;\n}\n.aim-mantine-extra-styles ul ul {\n list-style-type: circle;\n}\n.aim-mantine-extra-styles ul ul ul {\n list-style-type: square;\n}\n.aim-mantine-extra-styles ol {\n list-style-type: decimal;\n}\n.aim-mantine-extra-styles p {\n --mantine-scale: 0.875;\n margin-bottom: 0.5em;\n}\n.aim-mantine-extra-styles p:last-child {\n margin-bottom: 0;\n}\n.aim-mantine-extra-styles blockquote {\n border-inline-start-width: 0.25rem;\n border-inline-start-color: var(--mantine-color-text);\n}\n.aim-mantine-extra-styles pre {\n font-size: var(--mantine-font-size-md);\n}\n.aim-mantine-extra-styles code {\n font-size: var(--mantine-font-size-md);\n}\n.aim-mantine-extra-styles pre code {\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n}\n.aim-mantine-extra-styles dl {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n max-width: 670px;\n}\n.aim-mantine-extra-styles dl > * {\n padding-top: 0.5em;\n}\n.aim-mantine-extra-styles dt {\n width: 30%;\n font-weight: bold;\n text-align: right;\n}\n.aim-mantine-extra-styles dd {\n width: 60%;\n padding-left: 1em;\n margin-left: 0px;\n}\n.aim-mantine-extra-styles dd + dd {\n width: 100%;\n padding-left: calc(30% + 1em);\n}\n.aim-mantine-extra-styles dt + dt {\n padding-right: 60%;\n}\n.aim-mantine-extra-styles dt + dt + dd {\n margin-top: -1.625em;\n padding-left: calc(30% + 1em);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFNRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7QUFBQTtFQUVFO0VBRUE7RUFDQTs7QUFFQTtBQUFBO0VBQ0U7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7QUFJSjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFRjtFQUNFOztBQUVGO0VBQ0U7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTs7QUFFRjtFQUNFOztBQUVGO0VBQ0U7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5haW0tbWFudGluZS1leHRyYS1zdHlsZXMge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1pdGVtczogZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuXG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG5cbiAgLS1tYW50aW5lLXNwYWNpbmcteHM6IGNhbGMoMC42MjVlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgLS1tYW50aW5lLXNwYWNpbmctc206IGNhbGMoMC43NWVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAtLW1hbnRpbmUtc3BhY2luZy1tZDogY2FsYygxZW0gKiB2YXIoLS1tYW50aW5lLXNjYWxlKSk7XG4gIC0tbWFudGluZS1zcGFjaW5nLWxnOiBjYWxjKDEuMjVlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgLS1tYW50aW5lLXNwYWNpbmcteGw6IGNhbGMoMmVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAtLW1hbnRpbmUtZm9udC1zaXplLXhzOiBjYWxjKDAuNzVlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgLS1tYW50aW5lLWZvbnQtc2l6ZS1zbTogY2FsYygwLjg3NWVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAtLW1hbnRpbmUtZm9udC1zaXplLW1kOiBjYWxjKDFlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgLS1tYW50aW5lLWZvbnQtc2l6ZS1sZzogY2FsYygxLjEyNWVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAtLW1hbnRpbmUtZm9udC1zaXplLXhsOiBjYWxjKDEuMjVlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcblxuICA6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuICA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYge1xuICAgIC0tbWFudGluZS1oMS1mb250LXNpemU6IDIuMTI1ZW07XG4gICAgLS1tYW50aW5lLWgyLWZvbnQtc2l6ZTogMS42MjVlbTtcbiAgICAtLW1hbnRpbmUtaDMtZm9udC1zaXplOiAxLjM3NWVtO1xuICAgIC0tbWFudGluZS1oNC1mb250LXNpemU6IDEuMTI1ZW07XG4gICAgLS1tYW50aW5lLWg1LWZvbnQtc2l6ZTogMWVtO1xuICAgIC0tbWFudGluZS1oNi1mb250LXNpemU6IDAuODc1ZW07XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG4gICYuc2FtZS1mb250LXNpemUgaDEsXG4gICYuc2FtZS1mb250LXNpemUgaDIsXG4gICYuc2FtZS1mb250LXNpemUgaDMsXG4gICYuc2FtZS1mb250LXNpemUgaDQsXG4gICYuc2FtZS1mb250LXNpemUgaDUsXG4gICYuc2FtZS1mb250LXNpemUgaDYge1xuICAgIC0tbWFudGluZS1oMS1mb250LXNpemU6IDFlbTtcbiAgICAtLW1hbnRpbmUtaDItZm9udC1zaXplOiAxZW07XG4gICAgLS1tYW50aW5lLWgzLWZvbnQtc2l6ZTogMWVtO1xuICAgIC0tbWFudGluZS1oNC1mb250LXNpemU6IDFlbTtcbiAgICAtLW1hbnRpbmUtaDUtZm9udC1zaXplOiAxZW07XG4gICAgLS1tYW50aW5lLWg2LWZvbnQtc2l6ZTogMWVtO1xuICB9XG5cbiAgdWwsXG4gIG9sIHtcbiAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuXG4gICAgbWFyZ2luLWJvdHRvbTogMC41NWVtO1xuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAxLjVlbTtcblxuICAgIGxpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDAuMjc1ZW07XG4gICAgfVxuICB9XG5cbiAgaHIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMXB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1hbnRpbmUtY29sb3ItdGV4dCk7XG4gIH1cblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuICB9XG5cbiAgdWwgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlO1xuICB9XG5cbiAgdWwgdWwgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlO1xuICB9XG5cbiAgb2wge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcbiAgfVxuXG4gIHAge1xuICAgIC0tbWFudGluZS1zY2FsZTogMC44NzU7XG4gICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoOiAwLjI1cmVtO1xuICAgIGJvcmRlci1pbmxpbmUtc3RhcnQtY29sb3I6IHZhcigtLW1hbnRpbmUtY29sb3ItdGV4dCk7XG4gIH1cblxuICBwcmUge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tbWFudGluZS1mb250LXNpemUtbWQpO1xuICB9XG5cbiAgY29kZSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1tYW50aW5lLWZvbnQtc2l6ZS1tZCk7XG4gIH1cblxuICBwcmUgY29kZSB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIH1cblxuICBkbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiA2NzBweDtcbiAgfVxuICBkbCA+ICoge1xuICAgIHBhZGRpbmctdG9wOiAwLjVlbTtcbiAgfVxuICBkdCB7XG4gICAgd2lkdGg6IDMwJTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgfVxuICBkZCB7XG4gICAgd2lkdGg6IDYwJTtcbiAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICBtYXJnaW4tbGVmdDogMHB4O1xuICB9XG4gIGRkICsgZGQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmctbGVmdDogY2FsYygzMCUgKyAxZW0pO1xuICB9XG4gIGR0ICsgZHQge1xuICAgIHBhZGRpbmctcmlnaHQ6IDYwJTtcbiAgfVxuICBkdCArIGR0ICsgZGQge1xuICAgIG1hcmdpbi10b3A6IC0xLjYyNWVtO1xuICAgIHBhZGRpbmctbGVmdDogY2FsYygzMCUgKyAxZW0pO1xuICB9XG59XG4iXX0= */",".aim-mantine-mermaid-code {\n width: 100%;\n margin-bottom: 15px;\n background: var(--mantine-color-gray-0);\n border: 1px solid var(--mantine-color-gray-2);\n padding: calc(0.75rem * var(--mantine-scale)) calc(0.625rem * var(--mantine-scale));\n display: flex;\n flex-shrink: 0;\n flex-direction: column;\n justify-content: flex-start;\n align-items: stretch;\n\n .chart-header {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n\n .chart-type-tag {\n padding: calc(0.2125rem * var(--mantine-scale)) calc(0.5625rem * var(--mantine-scale));\n color: black;\n border: 1px solid var(--mantine-color-gray-3);\n background: white;\n border-radius: var(--mantine-radius-default);\n font-size: var(--mantine-font-size-xs);\n font-weight: 700;\n }\n\n .action-icon {\n color: var(--mantine-color-text);\n opacity: 0.5;\n\n &:hover {\n color: var(--mantine-color-bright);\n opacity: 1;\n }\n }\n }\n\n & > pre {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n }\n}\n\n.aim-mantine-mermaid-code.dark {\n background: var(--mantine-color-dark-8);\n border-color: var(--mantine-color-dark-6);\n\n .chart-header {\n .chart-type-tag {\n color: var(--mantine-color-dark-0);\n border-color: var(--mantine-color-dark-6);\n background: var(--mantine-color-dark-8);\n }\n\n .action-icon {\n color: var(--mantine-color-text);\n }\n }\n}\n",".aim-mantine-mermaid-code {\n width: 100%;\n margin-bottom: 15px;\n background: var(--mantine-color-gray-0);\n border: 1px solid var(--mantine-color-gray-2);\n padding: calc(0.75rem * var(--mantine-scale)) calc(0.625rem * var(--mantine-scale));\n display: flex;\n flex-shrink: 0;\n flex-direction: column;\n justify-content: flex-start;\n align-items: stretch;\n}\n.aim-mantine-mermaid-code .chart-header {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n.aim-mantine-mermaid-code .chart-header .chart-type-tag {\n padding: calc(0.2125rem * var(--mantine-scale)) calc(0.5625rem * var(--mantine-scale));\n color: black;\n border: 1px solid var(--mantine-color-gray-3);\n background: white;\n border-radius: var(--mantine-radius-default);\n font-size: var(--mantine-font-size-xs);\n font-weight: 700;\n}\n.aim-mantine-mermaid-code .chart-header .action-icon {\n color: var(--mantine-color-text);\n opacity: 0.5;\n}\n.aim-mantine-mermaid-code .chart-header .action-icon:hover {\n color: var(--mantine-color-bright);\n opacity: 1;\n}\n.aim-mantine-mermaid-code > pre {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n}\n\n.aim-mantine-mermaid-code.dark {\n background: var(--mantine-color-dark-8);\n border-color: var(--mantine-color-dark-6);\n}\n.aim-mantine-mermaid-code.dark .chart-header .chart-type-tag {\n color: var(--mantine-color-dark-0);\n border-color: var(--mantine-color-dark-6);\n background: var(--mantine-color-dark-8);\n}\n.aim-mantine-mermaid-code.dark .chart-header .action-icon {\n color: var(--mantine-color-text);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTtFQUNBOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUo7RUFDRTtFQUNBOztBQUdFO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0UiLCJzb3VyY2VzQ29udGVudCI6WyIuYWltLW1hbnRpbmUtbWVybWFpZC1jb2RlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLW1hbnRpbmUtY29sb3ItZ3JheS0wKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWFudGluZS1jb2xvci1ncmF5LTIpO1xuICBwYWRkaW5nOiBjYWxjKDAuNzVyZW0gKiB2YXIoLS1tYW50aW5lLXNjYWxlKSkgY2FsYygwLjYyNXJlbSAqIHZhcigtLW1hbnRpbmUtc2NhbGUpKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cbiAgLmNoYXJ0LWhlYWRlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuXG4gICAgLmNoYXJ0LXR5cGUtdGFnIHtcbiAgICAgIHBhZGRpbmc6IGNhbGMoMC4yMTI1cmVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpIGNhbGMoMC41NjI1cmVtICogdmFyKC0tbWFudGluZS1zY2FsZSkpO1xuICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWFudGluZS1jb2xvci1ncmF5LTMpO1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tYW50aW5lLXJhZGl1cy1kZWZhdWx0KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbWFudGluZS1mb250LXNpemUteHMpO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICB9XG5cbiAgICAuYWN0aW9uLWljb24ge1xuICAgICAgY29sb3I6IHZhcigtLW1hbnRpbmUtY29sb3ItdGV4dCk7XG4gICAgICBvcGFjaXR5OiAwLjU7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tbWFudGluZS1jb2xvci1icmlnaHQpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYgPiBwcmUge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuXG4uYWltLW1hbnRpbmUtbWVybWFpZC1jb2RlLmRhcmsge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1tYW50aW5lLWNvbG9yLWRhcmstOCk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tbWFudGluZS1jb2xvci1kYXJrLTYpO1xuXG4gIC5jaGFydC1oZWFkZXIge1xuICAgIC5jaGFydC10eXBlLXRhZyB7XG4gICAgICBjb2xvcjogdmFyKC0tbWFudGluZS1jb2xvci1kYXJrLTApO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tYW50aW5lLWNvbG9yLWRhcmstNik7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tYW50aW5lLWNvbG9yLWRhcmstOCk7XG4gICAgfVxuXG4gICAgLmFjdGlvbi1pY29uIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tYW50aW5lLWNvbG9yLXRleHQpO1xuICAgIH1cbiAgfVxufVxuIl19 */"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -37,7 +37,7 @@ var defaultMantineAIMarkdownRenderConfig = Object.freeze({
37
37
  });
38
38
 
39
39
  // src/components/customized/PreCode.tsx
40
- import { memo as memo3, useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
40
+ import { memo as memo3, useMemo as useMemo2 } from "react";
41
41
  import { CodeHighlight, CodeHighlightTabs as CodeHighlightTabs2 } from "@mantine/code-highlight";
42
42
  import { deepParseJson } from "deep-parse-json";
43
43
  import hljs from "highlight.js";
@@ -70,13 +70,18 @@ var MantineAIMMermaidCode = memo2((props) => {
70
70
  const ref = useRef(null);
71
71
  const [showOriginalCode, setShowOriginalCode] = useState(false);
72
72
  const [renderError, setRenderError] = useState(false);
73
- const [chartType, setChartType] = useState("unkown");
73
+ const [chartType, setChartType] = useState("unknown");
74
74
  const debouncedUpdateRenderError = useMemo(
75
75
  () => debounce((error) => {
76
76
  setRenderError(error);
77
77
  }, 200),
78
78
  []
79
79
  );
80
+ useEffect(() => {
81
+ return () => {
82
+ debouncedUpdateRenderError.cancel();
83
+ };
84
+ }, [debouncedUpdateRenderError]);
80
85
  useEffect(() => {
81
86
  if (props.code && ref.current) {
82
87
  const renderMermaid = async () => {
@@ -108,15 +113,16 @@ var MantineAIMMermaidCode = memo2((props) => {
108
113
  };
109
114
  renderMermaid();
110
115
  }
111
- }, [props.code, isDark, showOriginalCode]);
116
+ }, [props.code, isDark, showOriginalCode, debouncedUpdateRenderError]);
112
117
  const viewSvgInNewWindow = useCallback(() => {
113
118
  handleViewSVGInNewWindow(ref.current?.querySelector("svg"), isDark);
114
- }, []);
119
+ }, [isDark]);
115
120
  return /* @__PURE__ */ jsxs(Fragment, { children: [
116
121
  (showOriginalCode || renderError) && /* @__PURE__ */ jsx3(
117
122
  CodeHighlightTabs,
118
123
  {
119
124
  mb: 15,
125
+ fz: renderState.fontSize,
120
126
  w: "100%",
121
127
  code: [
122
128
  {
@@ -210,20 +216,21 @@ MantineAIMMermaidCode.displayName = "MantineAIMMermaidCode";
210
216
  var MermaidCode_default = MantineAIMMermaidCode;
211
217
 
212
218
  // src/components/customized/PreCode.tsx
213
- import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
219
+ import { jsx as jsx4 } from "react/jsx-runtime";
220
+ var SpecialCodeLanguage = /* @__PURE__ */ ((SpecialCodeLanguage2) => {
221
+ SpecialCodeLanguage2["Mermaid"] = "mermaid";
222
+ return SpecialCodeLanguage2;
223
+ })(SpecialCodeLanguage || {});
224
+ var SPECIAL_LANGUAGES = new Set(Object.values(SpecialCodeLanguage));
214
225
  var MantineAIMPreCode = memo3(
215
226
  (props) => {
216
227
  const renderState = useMantineAIMarkdownRenderState();
217
- const [codeLanguage, setCodeLanguage] = useState2(props.existLanguage || "");
218
- useEffect2(() => {
219
- if (props.existLanguage) {
220
- setCodeLanguage(props.existLanguage);
221
- } else if (renderState.config.codeBlock.autoDetectUnknownLanguage) {
222
- const result = hljs.highlightAuto(props.codeText);
223
- setCodeLanguage(result.language || "");
224
- } else {
225
- setCodeLanguage("");
228
+ const codeLanguage = useMemo2(() => {
229
+ if (props.existLanguage) return props.existLanguage;
230
+ if (renderState.config.codeBlock.autoDetectUnknownLanguage) {
231
+ return hljs.highlightAuto(props.codeText).language || "";
226
232
  }
233
+ return "";
227
234
  }, [props.existLanguage, props.codeText, renderState.config.codeBlock.autoDetectUnknownLanguage]);
228
235
  const [usedCodeLanguage, usedFileName] = useMemo2(() => {
229
236
  if (!codeLanguage) return ["plaintext", "unknown"];
@@ -232,9 +239,9 @@ var MantineAIMPreCode = memo3(
232
239
  }
233
240
  return [codeLanguage, codeLanguage];
234
241
  }, [codeLanguage]);
235
- const isMermaidCodeBlock = codeLanguage === "mermaid";
236
- const isSpecialCodeBlock = isMermaidCodeBlock;
242
+ const isSpecialCodeBlock = SPECIAL_LANGUAGES.has(codeLanguage);
237
243
  const normalCodeBlockContent = useMemo2(() => {
244
+ if (isSpecialCodeBlock) return null;
238
245
  let usedCodeStr = props.codeText;
239
246
  if (usedCodeStr && usedCodeLanguage.toLowerCase() === "json") {
240
247
  const deepParsedResult = deepParseJson(usedCodeStr);
@@ -244,6 +251,7 @@ var MantineAIMPreCode = memo3(
244
251
  CodeHighlight,
245
252
  {
246
253
  mb: 15,
254
+ fz: renderState.fontSize,
247
255
  w: "100%",
248
256
  code: usedCodeStr,
249
257
  withBorder: true,
@@ -255,6 +263,7 @@ var MantineAIMPreCode = memo3(
255
263
  CodeHighlightTabs2,
256
264
  {
257
265
  mb: 15,
266
+ fz: renderState.fontSize,
258
267
  w: "100%",
259
268
  code: [
260
269
  {
@@ -269,11 +278,23 @@ var MantineAIMPreCode = memo3(
269
278
  maxCollapsedHeight: "320px"
270
279
  }
271
280
  );
272
- }, [props.codeText, usedCodeLanguage, usedFileName]);
273
- return /* @__PURE__ */ jsxs2(Fragment2, { children: [
274
- isMermaidCodeBlock && /* @__PURE__ */ jsx4(MermaidCode_default, { code: props.codeText }),
275
- !isSpecialCodeBlock && normalCodeBlockContent
276
- ] });
281
+ }, [
282
+ isSpecialCodeBlock,
283
+ props.codeText,
284
+ usedCodeLanguage,
285
+ usedFileName,
286
+ renderState.fontSize,
287
+ renderState.config.codeBlock.defaultExpanded
288
+ ]);
289
+ const specialCodeBlockContent = useMemo2(() => {
290
+ switch (codeLanguage) {
291
+ case "mermaid" /* Mermaid */:
292
+ return /* @__PURE__ */ jsx4(MermaidCode_default, { code: props.codeText });
293
+ default:
294
+ return null;
295
+ }
296
+ }, [codeLanguage, props.codeText]);
297
+ return isSpecialCodeBlock ? specialCodeBlockContent : normalCodeBlockContent;
277
298
  }
278
299
  );
279
300
  MantineAIMPreCode.displayName = "MantineAIMPreCode";
@@ -283,19 +304,16 @@ var PreCode_default = MantineAIMPreCode;
283
304
  import { useComputedColorScheme } from "@mantine/core";
284
305
  import { jsx as jsx5 } from "react/jsx-runtime";
285
306
  var DefaultCustomComponents = {
286
- pre: memo4(({ node, ...usefulProps }) => {
307
+ pre: ({ node, ...usefulProps }) => {
287
308
  const code = node?.children[0];
288
- const memoizedPreCode = useMemo3(() => {
289
- if (!code || code.type !== "element" || code.tagName !== "code" || !code.position) {
290
- return null;
291
- }
292
- const key = `pre-code-${node.position?.start?.offset || 0}`;
293
- const detectedLanguage = code.properties?.className?.find((className) => className.startsWith("language-"))?.substring("language-".length);
294
- const codeText = code.children.map((child) => "value" in child ? child.value : "").join("\n");
295
- return /* @__PURE__ */ jsx5(PreCode_default, { codeText, existLanguage: detectedLanguage }, key);
296
- }, [code, node?.position?.start?.offset]);
297
- return memoizedPreCode ?? /* @__PURE__ */ jsx5("pre", { ...usefulProps });
298
- })
309
+ if (!code || code.type !== "element" || code.tagName !== "code" || !code.position) {
310
+ return /* @__PURE__ */ jsx5("pre", { ...usefulProps });
311
+ }
312
+ const key = `pre-code-${node?.position?.start?.offset || 0}`;
313
+ const detectedLanguage = code.properties?.className?.find((className) => className.startsWith("language-"))?.substring("language-".length);
314
+ const codeText = code.children.map((child) => child.value ?? "").join("\n");
315
+ return /* @__PURE__ */ jsx5(PreCode_default, { codeText, existLanguage: detectedLanguage }, key);
316
+ }
299
317
  };
300
318
  var MantineAIMarkdownComponent = ({
301
319
  Typography: Typography2 = MantineTypography_default,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MantineAIMarkdown.tsx","../src/components/typography/MantineTypography.tsx","../src/hooks/useMantineAIMarkdownRenderState.ts","../src/components/extra-styles/DefaultExtraStyles/index.tsx","../src/defs.tsx","../src/components/customized/PreCode.tsx","../src/components/customized/MermaidCode/index.tsx","../src/hooks/useMantineAIMarkdownMetadata.ts"],"sourcesContent":["/**\n * Main Mantine integration component for AI markdown rendering.\n *\n * Wraps the core {@link AIMarkdown} component with Mantine-specific defaults:\n * - {@link MantineAIMarkdownTypography} as the typography wrapper\n * - {@link MantineAIMDefaultExtraStyles} as the extra styles wrapper\n * - {@link MantineAIMPreCode} as the default `<pre>` component (with syntax\n * highlighting via Mantine's CodeHighlight and mermaid diagram support)\n * - Automatic color scheme detection via Mantine's `useComputedColorScheme`\n *\n * @module MantineAIMarkdown\n */\n\nimport { memo, useMemo } from 'react';\nimport AIMarkdown from '@ai-react-markdown/core';\nimport { type AIMarkdownProps, type AIMarkdownCustomComponents, useStableValue } from '@ai-react-markdown/core';\nimport MantineAIMarkdownTypography from './components/typography/MantineTypography';\nimport MantineAIMDefaultExtraStyles from './components/extra-styles/DefaultExtraStyles';\nimport { MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata, defaultMantineAIMarkdownRenderConfig } from './defs';\nimport MantineAIMPreCode from './components/customized/PreCode';\nimport { useComputedColorScheme } from '@mantine/core';\n\n/**\n * Props for the {@link MantineAIMarkdown} component.\n *\n * Extends {@link AIMarkdownProps} with Mantine-specific config and metadata generics.\n * All core props (`content`, `streaming`, `fontSize`, `config`, etc.) are inherited.\n *\n * @typeParam TConfig - Render configuration type, defaults to {@link MantineAIMarkdownRenderConfig}.\n * @typeParam TRenderData - Metadata type, defaults to {@link MantineAIMarkdownMetadata}.\n */\nexport interface MantineAIMarkdownProps<\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n TRenderData extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n> extends AIMarkdownProps<TConfig, TRenderData> {}\n\n/**\n * Default custom component overrides applied by the Mantine integration.\n *\n * Overrides the `<pre>` element to extract code blocks and render them via\n * {@link MantineAIMPreCode}, which provides syntax highlighting, expand/collapse,\n * and mermaid diagram support. Falls back to a plain `<pre>` when the child\n * is not a recognized code element.\n */\nconst DefaultCustomComponents: AIMarkdownCustomComponents = {\n pre: memo(({ node, ...usefulProps }) => {\n const code = node?.children[0];\n const memoizedPreCode = useMemo(() => {\n if (!code || code.type !== 'element' || code.tagName !== 'code' || !code.position) {\n return null;\n }\n const key = `pre-code-${node.position?.start?.offset || 0}`;\n const detectedLanguage = (code.properties?.className as string[])\n ?.find((className: string) => className.startsWith('language-'))\n ?.substring('language-'.length);\n const codeText = code.children.map((child) => ('value' in child ? child.value : '')).join('\\n');\n return <MantineAIMPreCode key={key} codeText={codeText} existLanguage={detectedLanguage} />;\n }, [code, node?.position?.start?.offset]);\n return memoizedPreCode ?? <pre {...usefulProps} />;\n }),\n};\n\n/**\n * Inner (non-memoized) implementation of the Mantine AI markdown component.\n *\n * Merges caller-provided `customComponents` with the Mantine defaults (the caller's\n * overrides take precedence). Automatically resolves the color scheme from Mantine's\n * `useComputedColorScheme` when no explicit `colorScheme` prop is provided.\n *\n * @typeParam TConfig - Render configuration type.\n * @typeParam TRenderData - Metadata type.\n */\nconst MantineAIMarkdownComponent = <\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n TRenderData extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n>({\n Typography = MantineAIMarkdownTypography,\n ExtraStyles = MantineAIMDefaultExtraStyles,\n defaultConfig = defaultMantineAIMarkdownRenderConfig as TConfig,\n customComponents,\n colorScheme,\n ...props\n}: MantineAIMarkdownProps<TConfig, TRenderData>) => {\n const stableCustomComponents = useStableValue(customComponents);\n\n const usedComponents = useMemo(() => {\n return stableCustomComponents ? { ...DefaultCustomComponents, ...stableCustomComponents } : DefaultCustomComponents;\n }, [stableCustomComponents]);\n\n const computedColorScheme = useComputedColorScheme('light');\n\n return (\n <AIMarkdown<MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata>\n Typography={Typography}\n ExtraStyles={ExtraStyles}\n defaultConfig={defaultConfig}\n customComponents={usedComponents}\n colorScheme={colorScheme ?? computedColorScheme}\n {...props}\n />\n );\n};\n\n/**\n * Mantine-integrated AI markdown renderer.\n *\n * A memoized wrapper around the core `<AIMarkdown>` component that provides\n * Mantine-themed typography, code highlighting (via `@mantine/code-highlight`),\n * mermaid diagram rendering, and automatic color scheme detection.\n *\n * This is the default export of `@ai-react-markdown/mantine`.\n *\n * @example\n * ```tsx\n * import MantineAIMarkdown from '@ai-react-markdown/mantine';\n *\n * function Chat({ content }: { content: string }) {\n * return <MantineAIMarkdown content={content} />;\n * }\n * ```\n */\nexport const MantineAIMarkdown = memo(MantineAIMarkdownComponent);\n\nMantineAIMarkdown.displayName = 'MantineAIMarkdown';\n\nexport default MantineAIMarkdown as typeof MantineAIMarkdownComponent;\n","import { memo } from 'react';\nimport { Typography } from '@mantine/core';\nimport type { AIMarkdownTypographyProps } from '@ai-react-markdown/core';\n\n/**\n * Mantine-themed typography wrapper for AI markdown content.\n *\n * Replaces the core default typography component with Mantine's `<Typography>`\n * element, applying the configured `fontSize` at full width. This ensures all\n * rendered markdown inherits Mantine's font family, line height, and theming.\n *\n * Used as the default `Typography` prop in {@link MantineAIMarkdown}.\n * Can be replaced by passing a custom `Typography` component.\n *\n * @param props - Standard {@link AIMarkdownTypographyProps} from the core package.\n */\nconst MantineAIMarkdownTypography = memo(({ children, fontSize }: AIMarkdownTypographyProps) => (\n <Typography w=\"100%\" fz={fontSize}>\n {children}\n </Typography>\n));\n\nMantineAIMarkdownTypography.displayName = 'MantineAIMarkdownTypography';\n\nexport default MantineAIMarkdownTypography;\n","import { useAIMarkdownRenderState } from '@ai-react-markdown/core';\nimport { MantineAIMarkdownRenderConfig } from '../defs';\n\n/**\n * Typed wrapper around the core {@link useAIMarkdownRenderState} hook.\n *\n * Returns the current {@link AIMarkdownRenderState} defaulting to\n * {@link MantineAIMarkdownRenderConfig}. Accepts an optional generic parameter\n * for further extension, giving consumers direct access to Mantine-specific\n * config fields (`forceSameFontSize`, `codeBlock`, etc.) without manual annotation.\n *\n * Must be called inside a component rendered within the `<MantineAIMarkdown>` tree.\n * Throws if called outside the provider boundary.\n *\n * @typeParam TConfig - Config type (defaults to {@link MantineAIMarkdownRenderConfig}).\n * @returns The current render state typed with `TConfig`.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { config, streaming, colorScheme } = useMantineAIMarkdownRenderState();\n * const isExpanded = config.codeBlock.defaultExpanded;\n * // ...\n * }\n * ```\n */\nexport const useMantineAIMarkdownRenderState = <\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n>() => {\n return useAIMarkdownRenderState<TConfig>();\n};\n","import { AIMarkdownExtraStylesComponent } from '@ai-react-markdown/core';\nimport { useMantineAIMarkdownRenderState } from '../../../hooks/useMantineAIMarkdownRenderState';\nimport './styles.scss';\n\n/**\n * Default extra styles wrapper for the Mantine integration.\n *\n * Wraps markdown content in a `<div>` with the `aim-mantine-extra-styles` CSS class,\n * which provides Mantine-compatible typography overrides including:\n * - Relative `em`-based Mantine spacing and font-size CSS custom properties\n * - Heading, list, paragraph, blockquote, and code styling\n * - Definition list layout\n *\n * When {@link MantineAIMarkdownRenderConfig.forceSameFontSize} is enabled, the\n * `same-font-size` class is appended, overriding all heading levels to render\n * at the same size as body text.\n *\n * Used as the default `ExtraStyles` prop in {@link MantineAIMarkdown}.\n */\nconst MantineAIMDefaultExtraStyles: AIMarkdownExtraStylesComponent = ({ children }) => {\n const renderState = useMantineAIMarkdownRenderState();\n return (\n <div className={`aim-mantine-extra-styles${renderState.config.forceSameFontSize ? ' same-font-size' : ''}`}>\n {children}\n </div>\n );\n};\n\nexport default MantineAIMDefaultExtraStyles;\n","/**\n * Mantine-specific type definitions and default configuration.\n *\n * Extends the core {@link AIMarkdownRenderConfig} and {@link AIMarkdownMetadata}\n * with Mantine-themed options such as uniform heading sizes and code block behavior.\n *\n * @module defs\n */\n\nimport { AIMarkdownRenderConfig, AIMarkdownMetadata, defaultAIMarkdownRenderConfig } from '@ai-react-markdown/core';\n\n/**\n * Extended render configuration for the Mantine integration.\n *\n * Inherits all core config fields (extra syntax, display optimizations) and adds\n * Mantine-specific options for typography sizing and code block behavior.\n */\nexport interface MantineAIMarkdownRenderConfig extends AIMarkdownRenderConfig {\n /**\n * When `true`, all heading levels (h1-h6) are rendered at the same font size\n * as body text. Useful in compact UI contexts like chat bubbles.\n *\n * @default false\n */\n forceSameFontSize: boolean;\n\n /** Code block rendering options. */\n codeBlock: {\n /**\n * Whether code blocks start in their expanded state.\n * When `false`, long code blocks are collapsed with an expand button.\n *\n * @default true\n */\n defaultExpanded: boolean;\n\n /**\n * When `true`, uses `highlight.js` auto-detection to determine the language\n * of code blocks that lack an explicit language annotation.\n *\n * @default false\n */\n autoDetectUnknownLanguage: boolean;\n };\n}\n\n/**\n * Default Mantine render configuration.\n *\n * Extends {@link defaultAIMarkdownRenderConfig} with Mantine-specific defaults.\n * Frozen to prevent accidental mutation.\n */\nexport const defaultMantineAIMarkdownRenderConfig: MantineAIMarkdownRenderConfig = Object.freeze({\n ...defaultAIMarkdownRenderConfig,\n forceSameFontSize: false,\n codeBlock: Object.freeze({\n defaultExpanded: true,\n autoDetectUnknownLanguage: false,\n }),\n});\n\n/**\n * Metadata type for the Mantine integration.\n *\n * Currently identical to {@link AIMarkdownMetadata}. Exists as an extension point\n * so that consumers can augment metadata in Mantine-specific wrappers without\n * needing to reference the core type directly.\n */\nexport interface MantineAIMarkdownMetadata extends AIMarkdownMetadata {}\n","'use client';\n\nimport { HTMLAttributes, memo, useEffect, useMemo, useState } from 'react';\nimport { CodeHighlight, CodeHighlightTabs } from '@mantine/code-highlight';\nimport { deepParseJson } from 'deep-parse-json';\nimport hljs from 'highlight.js';\nimport { useMantineAIMarkdownRenderState } from '../../hooks/useMantineAIMarkdownRenderState';\nimport MantineAIMMermaidCode from './MermaidCode';\n\n/**\n * Mantine code block renderer for `<pre>` elements.\n *\n * Replaces the default `<pre>` rendering with Mantine's {@link CodeHighlight} or\n * {@link CodeHighlightTabs} components, providing syntax highlighting, expand/collapse\n * behavior, and file-name tabs.\n *\n * Behavior:\n * - If the code block has an explicit language annotation, uses that language.\n * - If no language is specified and `config.codeBlock.autoDetectUnknownLanguage` is\n * enabled, uses `highlight.js` auto-detection.\n * - Mermaid code blocks (`language-mermaid`) are rendered as interactive diagrams\n * via {@link MantineAIMMermaidCode}.\n * - JSON code blocks are deep-parsed and pretty-printed before display.\n * - Unrecognized languages render as plaintext with an \"unknown\" label using\n * {@link CodeHighlight} (no tabs).\n * - Recognized languages render with {@link CodeHighlightTabs} showing the\n * language name as the tab label.\n *\n * @param props.codeText - The raw text content of the code block.\n * @param props.existLanguage - Language identifier extracted from the `language-*` CSS class, if present.\n */\nconst MantineAIMPreCode = memo(\n (\n props: HTMLAttributes<HTMLPreElement> & {\n codeText: string;\n existLanguage?: string;\n }\n ) => {\n const renderState = useMantineAIMarkdownRenderState();\n\n const [codeLanguage, setCodeLanguage] = useState(props.existLanguage || '');\n\n useEffect(() => {\n if (props.existLanguage) {\n setCodeLanguage(props.existLanguage);\n } else if (renderState.config.codeBlock.autoDetectUnknownLanguage) {\n const result = hljs.highlightAuto(props.codeText);\n setCodeLanguage(result.language || '');\n } else {\n setCodeLanguage('');\n }\n }, [props.existLanguage, props.codeText, renderState.config.codeBlock.autoDetectUnknownLanguage]);\n\n const [usedCodeLanguage, usedFileName] = useMemo(() => {\n if (!codeLanguage) return ['plaintext', 'unknown'];\n if (!hljs.getLanguage(codeLanguage)) {\n return ['plaintext', codeLanguage];\n }\n return [codeLanguage, codeLanguage];\n }, [codeLanguage]);\n\n const isMermaidCodeBlock = codeLanguage === 'mermaid';\n const isSpecialCodeBlock = isMermaidCodeBlock;\n\n const normalCodeBlockContent = useMemo(() => {\n let usedCodeStr = props.codeText;\n if (usedCodeStr && usedCodeLanguage.toLowerCase() === 'json') {\n const deepParsedResult = deepParseJson(usedCodeStr);\n usedCodeStr =\n typeof deepParsedResult === 'string' ? deepParsedResult : JSON.stringify(deepParsedResult, null, 2);\n }\n return usedFileName === 'unknown' ? (\n <CodeHighlight\n mb={15}\n w=\"100%\"\n code={usedCodeStr}\n withBorder\n withExpandButton\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n />\n ) : (\n <CodeHighlightTabs\n mb={15}\n w=\"100%\"\n code={[\n {\n fileName: usedFileName,\n code: usedCodeStr,\n language: usedCodeLanguage,\n },\n ]}\n withBorder\n withExpandButton\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n />\n );\n }, [props.codeText, usedCodeLanguage, usedFileName]);\n\n return (\n <>\n {isMermaidCodeBlock && <MantineAIMMermaidCode code={props.codeText} />}\n {!isSpecialCodeBlock && normalCodeBlockContent}\n </>\n );\n }\n);\n\nMantineAIMPreCode.displayName = 'MantineAIMPreCode';\n\nexport default MantineAIMPreCode;\n","'use client';\n\nimport React, { memo, useMemo, useEffect, useRef, useState, useCallback } from 'react';\nimport { CodeHighlightControl, CodeHighlightTabs } from '@mantine/code-highlight';\nimport { ActionIcon, CopyButton, Flex, Tooltip } from '@mantine/core';\nimport debounce from 'lodash-es/debounce';\nimport mermaid from 'mermaid';\nimport { useMantineAIMarkdownRenderState } from '../../../hooks/useMantineAIMarkdownRenderState';\nimport './styles.scss';\n\n/**\n * Generate a unique ID for mermaid SVG rendering.\n * Combines a timestamp with a random suffix to avoid collisions when\n * multiple mermaid diagrams render concurrently.\n *\n * @returns A unique string in the format `mermaid-{timestamp}-{random}`.\n */\nconst generateMermaidUUID = () => {\n return `mermaid-${new Date().getTime()}-${Math.random().toString(36).slice(2, 10)}`;\n};\n\n/**\n * Open the rendered mermaid SVG in a new browser window.\n *\n * Clones the SVG element, applies a background color matching the current\n * color scheme, serializes it to an object URL, and opens it in a new tab.\n * The object URL is revoked after a short delay to free memory.\n *\n * @param svgElement - The rendered SVG element to view, or `null`/`undefined` to no-op.\n * @param isDark - Whether the current color scheme is dark (used for background color).\n */\nconst handleViewSVGInNewWindow = (svgElement: SVGElement | null | undefined, isDark: boolean) => {\n if (!svgElement) return;\n const targetSvg = svgElement.cloneNode(true) as SVGElement;\n targetSvg.style.backgroundColor = isDark ? '#242424' : 'white';\n const text = new XMLSerializer().serializeToString(targetSvg);\n const blob = new Blob([text], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(blob);\n const win = window.open(url);\n if (win) {\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n }\n};\n\n/**\n * Interactive mermaid diagram renderer.\n *\n * Parses and renders mermaid diagram source code into an inline SVG visualization.\n * Automatically adapts to the current Mantine color scheme (light/dark) by\n * re-initializing mermaid with the appropriate theme.\n *\n * Features:\n * - Live SVG rendering with automatic dark/light theme switching\n * - Fallback to raw source code display on parse/render errors\n * - Toggle between rendered diagram and raw mermaid source\n * - Click on the rendered diagram to open the SVG in a new browser window\n * - Copy button for the raw mermaid source code\n * - Chart type label extracted from mermaid's parse result\n * - Debounced error state to avoid flickering during rapid re-renders\n *\n * @param props.code - Raw mermaid diagram source code to render.\n */\nconst MantineAIMMermaidCode = memo((props: { code: string }) => {\n const renderState = useMantineAIMarkdownRenderState();\n const isDark = renderState.colorScheme === 'dark';\n\n const ref = useRef<HTMLPreElement>(null);\n const [showOriginalCode, setShowOriginalCode] = useState(false);\n const [renderError, setRenderError] = useState(false);\n const [chartType, setChartType] = useState('unkown');\n\n const debouncedUpdateRenderError = useMemo(\n () =>\n debounce((error: boolean) => {\n setRenderError(error);\n }, 200),\n []\n );\n\n useEffect(() => {\n if (props.code && ref.current) {\n const renderMermaid = async () => {\n try {\n debouncedUpdateRenderError(false);\n if (ref.current) {\n mermaid.initialize({\n startOnLoad: false,\n securityLevel: 'loose',\n theme: isDark ? 'dark' : 'base',\n darkMode: isDark,\n });\n const parseResult = await mermaid.parse(props.code);\n if (!parseResult) {\n throw new Error('Failed to parse mermaid code');\n }\n const { svg, bindFunctions, diagramType } = await mermaid.render(\n generateMermaidUUID(),\n props.code,\n ref.current\n );\n ref.current.innerHTML = svg;\n bindFunctions?.(ref.current);\n setChartType(diagramType);\n }\n } catch {\n debouncedUpdateRenderError(true);\n }\n };\n\n renderMermaid();\n }\n }, [props.code, isDark, showOriginalCode]);\n\n const viewSvgInNewWindow = useCallback(() => {\n handleViewSVGInNewWindow(ref.current?.querySelector('svg'), isDark);\n }, []);\n\n return (\n <>\n {(showOriginalCode || renderError) && (\n <CodeHighlightTabs\n mb={15}\n w=\"100%\"\n code={[\n {\n fileName: renderError ? 'Mermaid Render Error' : 'mermaid',\n code: props.code,\n language: 'mermaid',\n },\n ]}\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n styles={{\n filesScrollarea: {\n right: '90px',\n },\n }}\n controls={\n renderError\n ? []\n : [\n <CodeHighlightControl\n tooltipLabel=\"Render Mermaid\"\n key=\"gpt\"\n onClick={() => {\n setShowOriginalCode(false);\n }}\n >\n <Flex align=\"center\" justify=\"center\" w={18} h={18}>\n <span className=\"icon-[gravity-ui--logo-mermaid] relative bottom-[1px] text-[16px]\"></span>\n </Flex>\n </CodeHighlightControl>,\n ]\n }\n withBorder\n withExpandButton\n />\n )}\n <div\n className={`aim-mantine-mermaid-code ${isDark ? 'dark' : ''}`}\n style={\n showOriginalCode || renderError\n ? {\n display: 'none',\n }\n : {}\n }\n >\n <div className=\"chart-header\">\n <div className=\"chart-type-tag\">{chartType}</div>\n <Flex align=\"center\" justify=\"flex-end\" gap={0}>\n <Tooltip label=\"Show Mermaid Code\">\n <ActionIcon\n size={28}\n className=\"action-icon\"\n variant=\"transparent\"\n onClick={() => {\n setShowOriginalCode(true);\n }}\n >\n <Flex align=\"center\" justify=\"center\" w={18} h={18}>\n <span className=\"icon-[entypo--code] relative bottom-[0.25px] text-[16px]\"></span>\n </Flex>\n </ActionIcon>\n </Tooltip>\n <CopyButton value={props.code}>\n {({ copied, copy }) => (\n <Tooltip label={copied ? 'Copied' : 'Copy'} withArrow position=\"right\">\n <ActionIcon variant=\"transparent\" size={28} className=\"action-icon\" onClick={copy}>\n {copied ? (\n <span className=\"icon-origin-[lucide--check] text-[18px]\"></span>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"18px\"\n height=\"18px\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n <path d=\"M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z\"></path>\n <path d=\"M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2\"></path>\n </svg>\n )}\n </ActionIcon>\n </Tooltip>\n )}\n </CopyButton>\n </Flex>\n </div>\n <pre\n ref={ref}\n style={{ cursor: 'pointer', overflow: 'auto', width: '100%', padding: '0.5rem' }}\n onClick={() => viewSvgInNewWindow()}\n />\n </div>\n </>\n );\n});\n\nMantineAIMMermaidCode.displayName = 'MantineAIMMermaidCode';\n\nexport default MantineAIMMermaidCode;\n","import { useAIMarkdownMetadata } from '@ai-react-markdown/core';\nimport { MantineAIMarkdownMetadata } from '../defs';\n\n/**\n * Typed wrapper around the core {@link useAIMarkdownMetadata} hook.\n *\n * Returns the current metadata defaulting to {@link MantineAIMarkdownMetadata}.\n * Accepts an optional generic parameter for further extension.\n *\n * Metadata lives in a separate React context from the render state, meaning\n * metadata updates do not trigger re-renders in components that only consume\n * render state.\n *\n * Must be called inside a component rendered within the `<MantineAIMarkdown>` tree.\n *\n * @typeParam TMetadata - Metadata type (defaults to {@link MantineAIMarkdownMetadata}).\n * @returns The current metadata, or `undefined` if none was provided.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const metadata = useMantineAIMarkdownMetadata();\n * // Access Mantine-specific metadata fields\n * }\n * ```\n */\nexport const useMantineAIMarkdownMetadata = <\n TMetadata extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n>() => {\n return useAIMarkdownMetadata<TMetadata>();\n};\n"],"mappings":"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","names":["memo","useMemo","jsx","memo","useEffect","useMemo","useState","CodeHighlightTabs","memo","jsx","memo","Fragment","jsx","jsxs","memo","useState","useEffect","useMemo","CodeHighlightTabs","jsx","memo","useMemo","Typography"]}
1
+ {"version":3,"sources":["../src/MantineAIMarkdown.tsx","../src/components/typography/MantineTypography.tsx","../src/hooks/useMantineAIMarkdownRenderState.ts","../src/components/extra-styles/DefaultExtraStyles/index.tsx","../src/defs.tsx","../src/components/customized/PreCode.tsx","../src/components/customized/MermaidCode/index.tsx","../src/hooks/useMantineAIMarkdownMetadata.ts"],"sourcesContent":["/**\n * Main Mantine integration component for AI markdown rendering.\n *\n * Wraps the core {@link AIMarkdown} component with Mantine-specific defaults:\n * - {@link MantineAIMarkdownTypography} as the typography wrapper\n * - {@link MantineAIMDefaultExtraStyles} as the extra styles wrapper\n * - {@link MantineAIMPreCode} as the default `<pre>` component (with syntax\n * highlighting via Mantine's CodeHighlight and mermaid diagram support)\n * - Automatic color scheme detection via Mantine's `useComputedColorScheme`\n *\n * @module MantineAIMarkdown\n */\n\nimport { memo, useMemo } from 'react';\nimport AIMarkdown from '@ai-react-markdown/core';\nimport { type AIMarkdownProps, type AIMarkdownCustomComponents, useStableValue } from '@ai-react-markdown/core';\nimport MantineAIMarkdownTypography from './components/typography/MantineTypography';\nimport MantineAIMDefaultExtraStyles from './components/extra-styles/DefaultExtraStyles';\nimport { MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata, defaultMantineAIMarkdownRenderConfig } from './defs';\nimport MantineAIMPreCode from './components/customized/PreCode';\nimport { useComputedColorScheme } from '@mantine/core';\n\n/**\n * Props for the {@link MantineAIMarkdown} component.\n *\n * Extends {@link AIMarkdownProps} with Mantine-specific config and metadata generics.\n * All core props (`content`, `streaming`, `fontSize`, `config`, etc.) are inherited.\n *\n * @typeParam TConfig - Render configuration type, defaults to {@link MantineAIMarkdownRenderConfig}.\n * @typeParam TRenderData - Metadata type, defaults to {@link MantineAIMarkdownMetadata}.\n */\nexport interface MantineAIMarkdownProps<\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n TRenderData extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n> extends AIMarkdownProps<TConfig, TRenderData> {}\n\n/**\n * Default custom component overrides applied by the Mantine integration.\n *\n * Overrides the `<pre>` element to extract code blocks and render them via\n * {@link MantineAIMPreCode}, which provides syntax highlighting, expand/collapse,\n * and mermaid diagram support. Falls back to a plain `<pre>` when the child\n * is not a recognized code element.\n */\nconst DefaultCustomComponents: AIMarkdownCustomComponents = {\n pre: ({ node, ...usefulProps }) => {\n const code = node?.children[0] as\n | { type: string; tagName?: string; position?: { start?: { offset?: number } }; properties?: Record<string, unknown>; children: { value?: string }[] }\n | undefined;\n if (!code || code.type !== 'element' || code.tagName !== 'code' || !code.position) {\n return <pre {...usefulProps} />;\n }\n const key = `pre-code-${node?.position?.start?.offset || 0}`;\n const detectedLanguage = (code.properties?.className as string[])\n ?.find((className: string) => className.startsWith('language-'))\n ?.substring('language-'.length);\n const codeText = code.children\n .map((child: { value?: string }) => child.value ?? '')\n .join('\\n');\n return <MantineAIMPreCode key={key} codeText={codeText} existLanguage={detectedLanguage} />;\n },\n};\n\n/**\n * Inner (non-memoized) implementation of the Mantine AI markdown component.\n *\n * Merges caller-provided `customComponents` with the Mantine defaults (the caller's\n * overrides take precedence). Automatically resolves the color scheme from Mantine's\n * `useComputedColorScheme` when no explicit `colorScheme` prop is provided.\n *\n * @typeParam TConfig - Render configuration type.\n * @typeParam TRenderData - Metadata type.\n */\nconst MantineAIMarkdownComponent = <\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n TRenderData extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n>({\n Typography = MantineAIMarkdownTypography,\n ExtraStyles = MantineAIMDefaultExtraStyles,\n defaultConfig = defaultMantineAIMarkdownRenderConfig as TConfig,\n customComponents,\n colorScheme,\n ...props\n}: MantineAIMarkdownProps<TConfig, TRenderData>) => {\n const stableCustomComponents = useStableValue(customComponents);\n\n const usedComponents = useMemo(() => {\n return stableCustomComponents ? { ...DefaultCustomComponents, ...stableCustomComponents } : DefaultCustomComponents;\n }, [stableCustomComponents]);\n\n const computedColorScheme = useComputedColorScheme('light');\n\n return (\n <AIMarkdown<MantineAIMarkdownRenderConfig, MantineAIMarkdownMetadata>\n Typography={Typography}\n ExtraStyles={ExtraStyles}\n defaultConfig={defaultConfig}\n customComponents={usedComponents}\n colorScheme={colorScheme ?? computedColorScheme}\n {...props}\n />\n );\n};\n\n/**\n * Mantine-integrated AI markdown renderer.\n *\n * A memoized wrapper around the core `<AIMarkdown>` component that provides\n * Mantine-themed typography, code highlighting (via `@mantine/code-highlight`),\n * mermaid diagram rendering, and automatic color scheme detection.\n *\n * This is the default export of `@ai-react-markdown/mantine`.\n *\n * @example\n * ```tsx\n * import MantineAIMarkdown from '@ai-react-markdown/mantine';\n *\n * function Chat({ content }: { content: string }) {\n * return <MantineAIMarkdown content={content} />;\n * }\n * ```\n */\nexport const MantineAIMarkdown = memo(MantineAIMarkdownComponent);\n\nMantineAIMarkdown.displayName = 'MantineAIMarkdown';\n\nexport default MantineAIMarkdown as typeof MantineAIMarkdownComponent;\n","import { memo } from 'react';\nimport { Typography } from '@mantine/core';\nimport type { AIMarkdownTypographyProps } from '@ai-react-markdown/core';\n\n/**\n * Mantine-themed typography wrapper for AI markdown content.\n *\n * Replaces the core default typography component with Mantine's `<Typography>`\n * element, applying the configured `fontSize` at full width. This ensures all\n * rendered markdown inherits Mantine's font family, line height, and theming.\n *\n * Used as the default `Typography` prop in {@link MantineAIMarkdown}.\n * Can be replaced by passing a custom `Typography` component.\n *\n * @param props - Standard {@link AIMarkdownTypographyProps} from the core package.\n */\nconst MantineAIMarkdownTypography = memo(({ children, fontSize }: AIMarkdownTypographyProps) => (\n <Typography w=\"100%\" fz={fontSize}>\n {children}\n </Typography>\n));\n\nMantineAIMarkdownTypography.displayName = 'MantineAIMarkdownTypography';\n\nexport default MantineAIMarkdownTypography;\n","import { useAIMarkdownRenderState } from '@ai-react-markdown/core';\nimport { MantineAIMarkdownRenderConfig } from '../defs';\n\n/**\n * Typed wrapper around the core {@link useAIMarkdownRenderState} hook.\n *\n * Returns the current {@link AIMarkdownRenderState} defaulting to\n * {@link MantineAIMarkdownRenderConfig}. Accepts an optional generic parameter\n * for further extension, giving consumers direct access to Mantine-specific\n * config fields (`forceSameFontSize`, `codeBlock`, etc.) without manual annotation.\n *\n * Must be called inside a component rendered within the `<MantineAIMarkdown>` tree.\n * Throws if called outside the provider boundary.\n *\n * @typeParam TConfig - Config type (defaults to {@link MantineAIMarkdownRenderConfig}).\n * @returns The current render state typed with `TConfig`.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { config, streaming, colorScheme } = useMantineAIMarkdownRenderState();\n * const isExpanded = config.codeBlock.defaultExpanded;\n * // ...\n * }\n * ```\n */\nexport const useMantineAIMarkdownRenderState = <\n TConfig extends MantineAIMarkdownRenderConfig = MantineAIMarkdownRenderConfig,\n>() => {\n return useAIMarkdownRenderState<TConfig>();\n};\n","import { AIMarkdownExtraStylesComponent } from '@ai-react-markdown/core';\nimport { useMantineAIMarkdownRenderState } from '../../../hooks/useMantineAIMarkdownRenderState';\nimport './styles.scss';\n\n/**\n * Default extra styles wrapper for the Mantine integration.\n *\n * Wraps markdown content in a `<div>` with the `aim-mantine-extra-styles` CSS class,\n * which provides Mantine-compatible typography overrides including:\n * - Relative `em`-based Mantine spacing and font-size CSS custom properties\n * - Heading, list, paragraph, blockquote, and code styling\n * - Definition list layout\n *\n * When {@link MantineAIMarkdownRenderConfig.forceSameFontSize} is enabled, the\n * `same-font-size` class is appended, overriding all heading levels to render\n * at the same size as body text.\n *\n * Used as the default `ExtraStyles` prop in {@link MantineAIMarkdown}.\n */\nconst MantineAIMDefaultExtraStyles: AIMarkdownExtraStylesComponent = ({ children }) => {\n const renderState = useMantineAIMarkdownRenderState();\n return (\n <div className={`aim-mantine-extra-styles${renderState.config.forceSameFontSize ? ' same-font-size' : ''}`}>\n {children}\n </div>\n );\n};\n\nexport default MantineAIMDefaultExtraStyles;\n","/**\n * Mantine-specific type definitions and default configuration.\n *\n * Extends the core {@link AIMarkdownRenderConfig} and {@link AIMarkdownMetadata}\n * with Mantine-themed options such as uniform heading sizes and code block behavior.\n *\n * @module defs\n */\n\nimport { AIMarkdownRenderConfig, AIMarkdownMetadata, defaultAIMarkdownRenderConfig } from '@ai-react-markdown/core';\n\n/**\n * Extended render configuration for the Mantine integration.\n *\n * Inherits all core config fields (extra syntax, display optimizations) and adds\n * Mantine-specific options for typography sizing and code block behavior.\n */\nexport interface MantineAIMarkdownRenderConfig extends AIMarkdownRenderConfig {\n /**\n * When `true`, all heading levels (h1-h6) are rendered at the same font size\n * as body text. Useful in compact UI contexts like chat bubbles.\n *\n * @default false\n */\n forceSameFontSize: boolean;\n\n /** Code block rendering options. */\n codeBlock: {\n /**\n * Whether code blocks start in their expanded state.\n * When `false`, long code blocks are collapsed with an expand button.\n *\n * @default true\n */\n defaultExpanded: boolean;\n\n /**\n * When `true`, uses `highlight.js` auto-detection to determine the language\n * of code blocks that lack an explicit language annotation.\n *\n * @default false\n */\n autoDetectUnknownLanguage: boolean;\n };\n}\n\n/**\n * Default Mantine render configuration.\n *\n * Extends {@link defaultAIMarkdownRenderConfig} with Mantine-specific defaults.\n * Frozen to prevent accidental mutation.\n */\nexport const defaultMantineAIMarkdownRenderConfig: MantineAIMarkdownRenderConfig = Object.freeze({\n ...defaultAIMarkdownRenderConfig,\n forceSameFontSize: false,\n codeBlock: Object.freeze({\n defaultExpanded: true,\n autoDetectUnknownLanguage: false,\n }),\n});\n\n/**\n * Metadata type for the Mantine integration.\n *\n * Currently identical to {@link AIMarkdownMetadata}. Exists as an extension point\n * so that consumers can augment metadata in Mantine-specific wrappers without\n * needing to reference the core type directly.\n */\nexport interface MantineAIMarkdownMetadata extends AIMarkdownMetadata {}\n","'use client';\n\nimport { HTMLAttributes, memo, useMemo } from 'react';\nimport { CodeHighlight, CodeHighlightTabs } from '@mantine/code-highlight';\nimport { deepParseJson } from 'deep-parse-json';\nimport hljs from 'highlight.js';\nimport { useMantineAIMarkdownRenderState } from '../../hooks/useMantineAIMarkdownRenderState';\nimport MantineAIMMermaidCode from './MermaidCode';\n\n/**\n * Code languages that receive specialized rendering instead of standard\n * syntax-highlighted code blocks. Adding a new member here automatically\n * marks that language as \"special\" — you only need to add the corresponding\n * rendering branch in the component's return.\n */\nenum SpecialCodeLanguage {\n /** Rendered as interactive diagrams via {@link MantineAIMMermaidCode} */\n Mermaid = 'mermaid',\n}\n\n/** O(1) lookup set, derived from {@link SpecialCodeLanguage}. */\nconst SPECIAL_LANGUAGES = new Set<string>(Object.values(SpecialCodeLanguage));\n\n/**\n * Mantine code block renderer for `<pre>` elements.\n *\n * Replaces the default `<pre>` rendering with Mantine's {@link CodeHighlight} or\n * {@link CodeHighlightTabs} components, providing syntax highlighting, expand/collapse\n * behavior, and file-name tabs.\n *\n * Behavior:\n * - If the code block has an explicit language annotation, uses that language.\n * - If no language is specified and `config.codeBlock.autoDetectUnknownLanguage` is\n * enabled, uses `highlight.js` auto-detection.\n * - Mermaid code blocks (`language-mermaid`) are rendered as interactive diagrams\n * via {@link MantineAIMMermaidCode}.\n * - JSON code blocks are deep-parsed and pretty-printed before display.\n * - Unrecognized languages render as plaintext with an \"unknown\" label using\n * {@link CodeHighlight} (no tabs).\n * - Recognized languages render with {@link CodeHighlightTabs} showing the\n * language name as the tab label.\n *\n * @param props.codeText - The raw text content of the code block.\n * @param props.existLanguage - Language identifier extracted from the `language-*` CSS class, if present.\n */\nconst MantineAIMPreCode = memo(\n (\n props: HTMLAttributes<HTMLPreElement> & {\n codeText: string;\n existLanguage?: string;\n }\n ) => {\n const renderState = useMantineAIMarkdownRenderState();\n\n const codeLanguage = useMemo(() => {\n if (props.existLanguage) return props.existLanguage;\n if (renderState.config.codeBlock.autoDetectUnknownLanguage) {\n return hljs.highlightAuto(props.codeText).language || '';\n }\n return '';\n }, [props.existLanguage, props.codeText, renderState.config.codeBlock.autoDetectUnknownLanguage]);\n\n const [usedCodeLanguage, usedFileName] = useMemo(() => {\n if (!codeLanguage) return ['plaintext', 'unknown'];\n if (!hljs.getLanguage(codeLanguage)) {\n return ['plaintext', codeLanguage];\n }\n return [codeLanguage, codeLanguage];\n }, [codeLanguage]);\n\n const isSpecialCodeBlock = SPECIAL_LANGUAGES.has(codeLanguage);\n\n const normalCodeBlockContent = useMemo(() => {\n if (isSpecialCodeBlock) return null;\n let usedCodeStr = props.codeText;\n if (usedCodeStr && usedCodeLanguage.toLowerCase() === 'json') {\n const deepParsedResult = deepParseJson(usedCodeStr);\n usedCodeStr =\n typeof deepParsedResult === 'string' ? deepParsedResult : JSON.stringify(deepParsedResult, null, 2);\n }\n return usedFileName === 'unknown' ? (\n <CodeHighlight\n mb={15}\n fz={renderState.fontSize}\n w=\"100%\"\n code={usedCodeStr}\n withBorder\n withExpandButton\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n />\n ) : (\n <CodeHighlightTabs\n mb={15}\n fz={renderState.fontSize}\n w=\"100%\"\n code={[\n {\n fileName: usedFileName,\n code: usedCodeStr,\n language: usedCodeLanguage,\n },\n ]}\n withBorder\n withExpandButton\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n />\n );\n }, [\n isSpecialCodeBlock,\n props.codeText,\n usedCodeLanguage,\n usedFileName,\n renderState.fontSize,\n renderState.config.codeBlock.defaultExpanded,\n ]);\n\n const specialCodeBlockContent = useMemo(() => {\n switch (codeLanguage) {\n case SpecialCodeLanguage.Mermaid:\n return <MantineAIMMermaidCode code={props.codeText} />;\n default:\n return null;\n }\n }, [codeLanguage, props.codeText]);\n\n return isSpecialCodeBlock ? specialCodeBlockContent : normalCodeBlockContent;\n }\n);\n\nMantineAIMPreCode.displayName = 'MantineAIMPreCode';\n\nexport default MantineAIMPreCode;\n","'use client';\n\nimport React, { memo, useMemo, useEffect, useRef, useState, useCallback } from 'react';\nimport { CodeHighlightControl, CodeHighlightTabs } from '@mantine/code-highlight';\nimport { ActionIcon, CopyButton, Flex, Tooltip } from '@mantine/core';\nimport debounce from 'lodash-es/debounce';\nimport mermaid from 'mermaid';\nimport { useMantineAIMarkdownRenderState } from '../../../hooks/useMantineAIMarkdownRenderState';\nimport './styles.scss';\n\n/**\n * Generate a unique ID for mermaid SVG rendering.\n * Combines a timestamp with a random suffix to avoid collisions when\n * multiple mermaid diagrams render concurrently.\n *\n * @returns A unique string in the format `mermaid-{timestamp}-{random}`.\n */\nconst generateMermaidUUID = () => {\n return `mermaid-${new Date().getTime()}-${Math.random().toString(36).slice(2, 10)}`;\n};\n\n/**\n * Open the rendered mermaid SVG in a new browser window.\n *\n * Clones the SVG element, applies a background color matching the current\n * color scheme, serializes it to an object URL, and opens it in a new tab.\n * The object URL is revoked after a short delay to free memory.\n *\n * @param svgElement - The rendered SVG element to view, or `null`/`undefined` to no-op.\n * @param isDark - Whether the current color scheme is dark (used for background color).\n */\nconst handleViewSVGInNewWindow = (svgElement: SVGElement | null | undefined, isDark: boolean) => {\n if (!svgElement) return;\n const targetSvg = svgElement.cloneNode(true) as SVGElement;\n targetSvg.style.backgroundColor = isDark ? '#242424' : 'white';\n const text = new XMLSerializer().serializeToString(targetSvg);\n const blob = new Blob([text], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(blob);\n const win = window.open(url);\n if (win) {\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n }\n};\n\n/**\n * Interactive mermaid diagram renderer.\n *\n * Parses and renders mermaid diagram source code into an inline SVG visualization.\n * Automatically adapts to the current Mantine color scheme (light/dark) by\n * re-initializing mermaid with the appropriate theme.\n *\n * Features:\n * - Live SVG rendering with automatic dark/light theme switching\n * - Fallback to raw source code display on parse/render errors\n * - Toggle between rendered diagram and raw mermaid source\n * - Click on the rendered diagram to open the SVG in a new browser window\n * - Copy button for the raw mermaid source code\n * - Chart type label extracted from mermaid's parse result\n * - Debounced error state to avoid flickering during rapid re-renders\n *\n * @param props.code - Raw mermaid diagram source code to render.\n */\nconst MantineAIMMermaidCode = memo((props: { code: string }) => {\n const renderState = useMantineAIMarkdownRenderState();\n const isDark = renderState.colorScheme === 'dark';\n\n const ref = useRef<HTMLPreElement>(null);\n const [showOriginalCode, setShowOriginalCode] = useState(false);\n const [renderError, setRenderError] = useState(false);\n const [chartType, setChartType] = useState('unknown');\n\n const debouncedUpdateRenderError = useMemo(\n () =>\n debounce((error: boolean) => {\n setRenderError(error);\n }, 200),\n []\n );\n\n useEffect(() => {\n return () => {\n debouncedUpdateRenderError.cancel();\n };\n }, [debouncedUpdateRenderError]);\n\n useEffect(() => {\n if (props.code && ref.current) {\n const renderMermaid = async () => {\n try {\n debouncedUpdateRenderError(false);\n if (ref.current) {\n mermaid.initialize({\n startOnLoad: false,\n securityLevel: 'loose',\n theme: isDark ? 'dark' : 'base',\n darkMode: isDark,\n });\n const parseResult = await mermaid.parse(props.code);\n if (!parseResult) {\n throw new Error('Failed to parse mermaid code');\n }\n const { svg, bindFunctions, diagramType } = await mermaid.render(\n generateMermaidUUID(),\n props.code,\n ref.current\n );\n ref.current.innerHTML = svg;\n bindFunctions?.(ref.current);\n setChartType(diagramType);\n }\n } catch {\n debouncedUpdateRenderError(true);\n }\n };\n\n renderMermaid();\n }\n }, [props.code, isDark, showOriginalCode, debouncedUpdateRenderError]);\n\n const viewSvgInNewWindow = useCallback(() => {\n handleViewSVGInNewWindow(ref.current?.querySelector('svg'), isDark);\n }, [isDark]);\n\n return (\n <>\n {(showOriginalCode || renderError) && (\n <CodeHighlightTabs\n mb={15}\n fz={renderState.fontSize}\n w=\"100%\"\n code={[\n {\n fileName: renderError ? 'Mermaid Render Error' : 'mermaid',\n code: props.code,\n language: 'mermaid',\n },\n ]}\n defaultExpanded={renderState.config.codeBlock.defaultExpanded}\n maxCollapsedHeight=\"320px\"\n styles={{\n filesScrollarea: {\n right: '90px',\n },\n }}\n controls={\n renderError\n ? []\n : [\n <CodeHighlightControl\n tooltipLabel=\"Render Mermaid\"\n key=\"gpt\"\n onClick={() => {\n setShowOriginalCode(false);\n }}\n >\n <Flex align=\"center\" justify=\"center\" w={18} h={18}>\n <span className=\"icon-[gravity-ui--logo-mermaid] relative bottom-[1px] text-[16px]\"></span>\n </Flex>\n </CodeHighlightControl>,\n ]\n }\n withBorder\n withExpandButton\n />\n )}\n <div\n className={`aim-mantine-mermaid-code ${isDark ? 'dark' : ''}`}\n style={\n showOriginalCode || renderError\n ? {\n display: 'none',\n }\n : {}\n }\n >\n <div className=\"chart-header\">\n <div className=\"chart-type-tag\">{chartType}</div>\n <Flex align=\"center\" justify=\"flex-end\" gap={0}>\n <Tooltip label=\"Show Mermaid Code\">\n <ActionIcon\n size={28}\n className=\"action-icon\"\n variant=\"transparent\"\n onClick={() => {\n setShowOriginalCode(true);\n }}\n >\n <Flex align=\"center\" justify=\"center\" w={18} h={18}>\n <span className=\"icon-[entypo--code] relative bottom-[0.25px] text-[16px]\"></span>\n </Flex>\n </ActionIcon>\n </Tooltip>\n <CopyButton value={props.code}>\n {({ copied, copy }) => (\n <Tooltip label={copied ? 'Copied' : 'Copy'} withArrow position=\"right\">\n <ActionIcon variant=\"transparent\" size={28} className=\"action-icon\" onClick={copy}>\n {copied ? (\n <span className=\"icon-origin-[lucide--check] text-[18px]\"></span>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"18px\"\n height=\"18px\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n <path d=\"M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z\"></path>\n <path d=\"M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2\"></path>\n </svg>\n )}\n </ActionIcon>\n </Tooltip>\n )}\n </CopyButton>\n </Flex>\n </div>\n <pre\n ref={ref}\n style={{ cursor: 'pointer', overflow: 'auto', width: '100%', padding: '0.5rem' }}\n onClick={() => viewSvgInNewWindow()}\n />\n </div>\n </>\n );\n});\n\nMantineAIMMermaidCode.displayName = 'MantineAIMMermaidCode';\n\nexport default MantineAIMMermaidCode;\n","import { useAIMarkdownMetadata } from '@ai-react-markdown/core';\nimport { MantineAIMarkdownMetadata } from '../defs';\n\n/**\n * Typed wrapper around the core {@link useAIMarkdownMetadata} hook.\n *\n * Returns the current metadata defaulting to {@link MantineAIMarkdownMetadata}.\n * Accepts an optional generic parameter for further extension.\n *\n * Metadata lives in a separate React context from the render state, meaning\n * metadata updates do not trigger re-renders in components that only consume\n * render state.\n *\n * Must be called inside a component rendered within the `<MantineAIMarkdown>` tree.\n *\n * @typeParam TMetadata - Metadata type (defaults to {@link MantineAIMarkdownMetadata}).\n * @returns The current metadata, or `undefined` if none was provided.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const metadata = useMantineAIMarkdownMetadata();\n * // Access Mantine-specific metadata fields\n * }\n * ```\n */\nexport const useMantineAIMarkdownMetadata = <\n TMetadata extends MantineAIMarkdownMetadata = MantineAIMarkdownMetadata,\n>() => {\n return useAIMarkdownMetadata<TMetadata>();\n};\n"],"mappings":"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","names":["memo","useMemo","jsx","memo","useMemo","CodeHighlightTabs","memo","jsx","memo","jsx","SpecialCodeLanguage","memo","useMemo","CodeHighlightTabs","jsx","Typography","useMemo","memo"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-react-markdown/mantine",
3
- "version": "1.0.8",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "**/*.css"
@@ -25,7 +25,7 @@
25
25
  "dist"
26
26
  ],
27
27
  "peerDependencies": {
28
- "@ai-react-markdown/core": "^1.0.8",
28
+ "@ai-react-markdown/core": "^1.1.0",
29
29
  "@mantine/code-highlight": "^8.3.17",
30
30
  "@mantine/core": "^8.3.17",
31
31
  "highlight.js": "^11.11.1",
@@ -42,7 +42,7 @@
42
42
  "highlight.js": "^11.11.1",
43
43
  "postcss": "^8.5.8",
44
44
  "tsup": "^8.4.0",
45
- "@ai-react-markdown/core": "1.0.8"
45
+ "@ai-react-markdown/core": "1.1.0"
46
46
  },
47
47
  "dependencies": {
48
48
  "deep-parse-json": "^2.0.0",