@ant-design/agentic-ui 2.30.7 → 2.30.8

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.
@@ -98,7 +98,6 @@ function _unsupported_iterable_to_array(o, minLen) {
98
98
  if (n === "Map" || n === "Set") return Array.from(n);
99
99
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
100
100
  }
101
- import { preprocessProtectTimeFromDirective } from "./constants";
102
101
  import { applyContextPropsAndConfig } from "./parse/applyContextPropsAndConfig";
103
102
  import { handleBlockquote, handleContainerDirective, handleFootnoteDefinition, handleHeading, handleList, handleListItem, handleParagraph, handleTextAndInlineElements } from "./parse/parseBlockElements";
104
103
  import { handleCode, handleYaml } from "./parse/parseCode";
@@ -236,8 +235,7 @@ var removeAnswerTags = function removeAnswerTags(text) {
236
235
  {
237
236
  key: "preprocessMarkdown",
238
237
  value: function preprocessMarkdown(md) {
239
- var timeProtected = preprocessProtectTimeFromDirective(md || '');
240
- var thinkProcessed = removeAnswerTags(preprocessThinkTags(timeProtected));
238
+ var thinkProcessed = removeAnswerTags(preprocessThinkTags(md || ''));
241
239
  var nonStandardProcessed = removeAnswerTags(preprocessNonStandardHtmlTags(thinkProcessed));
242
240
  return preprocessMarkdownTableNewlines(nonStandardProcessed);
243
241
  }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 仅启用 remark-directive 的 **容器** 语法(`:::name` … `:::`),不解析行内 `:foo` 与块级 `::foo`。
3
+ * 避免普通文本中的 `:15`(时间)或 `:icon[...]` 被误解析为指令。
4
+ *
5
+ * 依赖与 `remark-directive` 相同:`micromark-extension-directive` + `mdast-util-directive`。
6
+ */
7
+ import type { Root } from 'mdast';
8
+ import type { Plugin } from 'unified';
9
+ /**
10
+ * @returns {undefined}
11
+ * Nothing.
12
+ */
13
+ declare const remarkDirectiveContainersOnly: Plugin<[], Root>;
14
+ export default remarkDirectiveContainersOnly;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 仅启用 remark-directive 的 **容器** 语法(`:::name` … `:::`),不解析行内 `:foo` 与块级 `::foo`。
3
+ * 避免普通文本中的 `:15`(时间)或 `:icon[...]` 被误解析为指令。
4
+ *
5
+ * 依赖与 `remark-directive` 相同:`micromark-extension-directive` + `mdast-util-directive`。
6
+ */ import { directiveFromMarkdown, directiveToMarkdown } from "mdast-util-directive";
7
+ import { directiveContainer } from "micromark-extension-directive/lib/directive-container.js";
8
+ /**
9
+ * @returns {undefined}
10
+ * Nothing.
11
+ */ var remarkDirectiveContainersOnly = function remarkDirectiveContainersOnly() {
12
+ var data = this.data();
13
+ var micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []);
14
+ var fromMarkdownExtensions = data.fromMarkdownExtensions || (data.fromMarkdownExtensions = []);
15
+ var toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);
16
+ micromarkExtensions.push({
17
+ flow: {
18
+ 58: [
19
+ directiveContainer
20
+ ]
21
+ }
22
+ });
23
+ fromMarkdownExtensions.push(directiveFromMarkdown());
24
+ toMarkdownExtensions.push(directiveToMarkdown());
25
+ };
26
+ export default remarkDirectiveContainersOnly;
@@ -20,5 +20,5 @@ export declare function fixStrongWithSpecialChars(): (tree: any) => void;
20
20
  * 须在 remark-math 之前运行
21
21
  */
22
22
  export declare function protectJinjaDollarInText(): (tree: any) => void;
23
- declare const markdownParser: import("unified").Processor<import("mdast").Root, undefined, undefined, import("mdast").Root, string>;
23
+ declare const markdownParser: import("unified").Processor<import("mdast").Root, import("mdast").Root, import("mdast").Root, import("mdast").Root, string>;
24
24
  export default markdownParser;
@@ -23,7 +23,6 @@ function _unsupported_iterable_to_array(o, minLen) {
23
23
  if (n === "Map" || n === "Set") return Array.from(n);
24
24
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
25
25
  }
26
- import remarkDirective from "remark-directive";
27
26
  import remarkFrontmatter from "remark-frontmatter";
28
27
  import remarkGfm from "remark-gfm";
29
28
  import remarkHtml from "remark-html";
@@ -32,6 +31,7 @@ import remarkParse from "remark-parse";
32
31
  import { unified } from "unified";
33
32
  import { visit } from "unist-util-visit";
34
33
  import { JINJA_DOLLAR_PLACEHOLDER } from "./constants";
34
+ import remarkDirectiveContainersOnly from "./remarkDirectiveContainersOnly";
35
35
  /**
36
36
  * 提取段落节点的文本内容
37
37
  * @param paragraphNode - 段落节点
@@ -363,7 +363,7 @@ import { JINJA_DOLLAR_PLACEHOLDER } from "./constants";
363
363
  // Markdown 解析器(用于解析 Markdown 为 mdast AST)
364
364
  // 注意:这个解析器只用于解析,不包含 HTML 渲染相关的插件
365
365
  var markdownParser = unified().use(remarkParse) // 解析 Markdown
366
- .use(remarkDirective) // 解析 ::: 容器指令(info / warning / success / error / tip{title="..."}
366
+ .use(remarkDirectiveContainersOnly) // 仅解析 ::: 容器(不解析行内 :foo
367
367
  .use(remarkHtml).use(remarkFrontmatter, [
368
368
  'yaml'
369
369
  ]) // 处理前置元数据
@@ -380,10 +380,9 @@ var genStyle = function genStyle(token) {
380
380
  }), _define_property(_obj, 'li + li', {
381
381
  marginTop: '0.25em'
382
382
  }), _define_property(_obj, "blockquote", {
383
- display: 'flex',
383
+ display: 'block',
384
+ boxSizing: 'border-box',
384
385
  padding: '8px 12px',
385
- gap: '10px',
386
- flexGrow: 1,
387
386
  zIndex: 1,
388
387
  fontSize: 'var(--font-size-base)',
389
388
  fontWeight: 'normal',
@@ -392,6 +391,10 @@ var genStyle = function genStyle(token) {
392
391
  position: 'relative',
393
392
  color: 'var(--color-gray-text-secondary)',
394
393
  margin: '0 !important',
394
+ // 原 flex + gap 在子节点之间的间距(::before 为 absolute,不参与 flex)
395
+ '& > * + *': {
396
+ marginTop: '10px'
397
+ },
395
398
  '&:before': {
396
399
  content: "''",
397
400
  left: '0',
@@ -400,8 +403,7 @@ var genStyle = function genStyle(token) {
400
403
  height: 'calc(100% - 22px)',
401
404
  borderRadius: '4px',
402
405
  width: '3px',
403
- display: 'flex',
404
- alignSelf: 'stretch',
406
+ display: 'block',
405
407
  zIndex: 0,
406
408
  backgroundColor: 'var(--color-gray-control-fill-secondary)'
407
409
  }
@@ -167,7 +167,6 @@ function _ts_generator(thisArg, body) {
167
167
  import rehypeKatex from "rehype-katex";
168
168
  import rehypeRaw from "rehype-raw";
169
169
  import rehypeStringify from "rehype-stringify";
170
- import remarkDirective from "remark-directive";
171
170
  import remarkFrontmatter from "remark-frontmatter";
172
171
  import remarkGfm from "remark-gfm";
173
172
  import remarkMath from "remark-math";
@@ -177,6 +176,7 @@ import { unified } from "unified";
177
176
  import { visit } from "unist-util-visit";
178
177
  import { JINJA_DOLLAR_PLACEHOLDER } from "../parser/constants";
179
178
  import { remarkDirectiveContainer } from "../parser/remarkDirectiveContainer";
179
+ import remarkDirectiveContainersOnly from "../parser/remarkDirectiveContainersOnly";
180
180
  import { convertParagraphToImage, fixStrongWithSpecialChars, protectJinjaDollarInText } from "../parser/remarkParse";
181
181
  // HTML 转义相关的正则表达式和工具
182
182
  var ESCAPE_TEST_NO_ENCODE = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/;
@@ -373,7 +373,7 @@ export var DEFAULT_MARKDOWN_REMARK_PLUGINS = [
373
373
  remarkFrontmatter,
374
374
  FRONTMATTER_LANGUAGES
375
375
  ],
376
- remarkDirective,
376
+ remarkDirectiveContainersOnly,
377
377
  [
378
378
  remarkDirectiveContainer,
379
379
  REMARK_DIRECTIVE_CONTAINER_OPTIONS
@@ -117,6 +117,55 @@ import { isFileMetaPlaceholderState, kbToSize } from "../AttachmentButton/utils"
117
117
  var lastDotIndex = fileName.lastIndexOf('.');
118
118
  var displayName = lastDotIndex > 0 ? fileName.slice(0, lastDotIndex) : fileName;
119
119
  var displayExtension = lastDotIndex > 0 && lastDotIndex < fileName.length - 1 ? fileName.slice(lastDotIndex + 1) : '';
120
+ var showSize = typeof file.size === 'number' && file.size > 0;
121
+ var fileSize = showSize ? kbToSize(file.size / 1024) : '';
122
+ var lastModifiedTime = (file === null || file === void 0 ? void 0 : file.lastModified) ? dayjs(file.lastModified).format('HH:mm') : '';
123
+ var renderExtensionContainer = function renderExtensionContainer() {
124
+ if (file.status === 'error' && file.errorMessage) {
125
+ return /*#__PURE__*/ React.createElement("div", {
126
+ "data-testid": "file-item-extension-container",
127
+ className: classNames("".concat(props.prefixCls, "-file-name-extension-container"), props.hashId)
128
+ }, /*#__PURE__*/ React.createElement("span", {
129
+ className: classNames("".concat(props.prefixCls, "-file-error-msg"), props.hashId),
130
+ "data-testid": "file-item-error-msg",
131
+ style: {
132
+ color: 'var(--color-red-text-secondary)'
133
+ }
134
+ }, file.errorMessage));
135
+ }
136
+ var items = [];
137
+ if (displayExtension) {
138
+ items.push(/*#__PURE__*/ React.createElement("span", {
139
+ key: "ext",
140
+ "data-testid": "file-item-extension",
141
+ className: classNames("".concat(props.prefixCls, "-file-name-extension"), props.hashId)
142
+ }, displayExtension));
143
+ }
144
+ if (fileSize) {
145
+ items.push(/*#__PURE__*/ React.createElement("div", {
146
+ key: "size",
147
+ "data-testid": "file-item-size",
148
+ className: classNames("".concat(props.prefixCls, "-file-size"), props.hashId)
149
+ }, fileSize));
150
+ }
151
+ if (lastModifiedTime) {
152
+ items.push(/*#__PURE__*/ React.createElement("div", {
153
+ key: "time",
154
+ "data-testid": "file-item-time"
155
+ }, lastModifiedTime));
156
+ }
157
+ if (items.length === 0) return null;
158
+ return /*#__PURE__*/ React.createElement("div", {
159
+ "data-testid": "file-item-extension-container",
160
+ className: classNames("".concat(props.prefixCls, "-file-name-extension-container"), props.hashId)
161
+ }, items.map(function(item, index) {
162
+ return /*#__PURE__*/ React.createElement(React.Fragment, {
163
+ key: index
164
+ }, index > 0 && /*#__PURE__*/ React.createElement("span", {
165
+ className: classNames("".concat(props.prefixCls, "-separator"), props.hashId)
166
+ }, "|"), item);
167
+ }));
168
+ };
120
169
  // 有 status 但无 url/previewUrl:文件内容未拿到,展示大小与格式占位块(loading 状态除外)
121
170
  if (isFileMetaPlaceholderState(file)) {
122
171
  return /*#__PURE__*/ React.createElement(FileMetaPlaceholder, {
@@ -162,33 +211,22 @@ import { isFileMetaPlaceholderState, kbToSize } from "../AttachmentButton/utils"
162
211
  className: classNames(props.className, _define_property({}, "".concat(props.prefixCls, "-meta-placeholder"), isFileMetaPlaceholderState(file))),
163
212
  "data-testid": "file-item"
164
213
  }, /*#__PURE__*/ React.createElement("div", {
214
+ "data-testid": "file-item-icon",
165
215
  className: classNames("".concat(props.prefixCls, "-file-icon"), props.hashId)
166
216
  }, /*#__PURE__*/ React.createElement(AttachmentFileIcon, {
167
217
  file: file,
168
218
  className: classNames("".concat(props.prefixCls, "-file-icon-img"), props.hashId)
169
219
  })), /*#__PURE__*/ React.createElement("div", {
220
+ "data-testid": "file-item-info",
170
221
  className: classNames("".concat(props.prefixCls, "-file-info"), props.hashId)
171
222
  }, /*#__PURE__*/ React.createElement("div", {
172
223
  className: classNames("".concat(props.prefixCls, "-file-name"), props.hashId)
173
224
  }, /*#__PURE__*/ React.createElement("span", {
225
+ "data-testid": "file-item-name",
174
226
  className: classNames("".concat(props.prefixCls, "-file-name-text"), props.hashId),
175
227
  title: file === null || file === void 0 ? void 0 : file.name
176
- }, displayName)), /*#__PURE__*/ React.createElement("div", {
177
- className: classNames("".concat(props.prefixCls, "-file-name-extension-container"), props.hashId)
178
- }, file.status === 'error' && file.errorMessage ? /*#__PURE__*/ React.createElement("span", {
179
- className: classNames("".concat(props.prefixCls, "-file-error-msg"), props.hashId),
180
- style: {
181
- color: 'var(--color-red-text-secondary)'
182
- }
183
- }, file.errorMessage) : /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("span", {
184
- className: classNames("".concat(props.prefixCls, "-file-name-extension"), props.hashId)
185
- }, displayExtension), /*#__PURE__*/ React.createElement("span", {
186
- className: classNames("".concat(props.prefixCls, "-separator"), props.hashId)
187
- }, "|"), /*#__PURE__*/ React.createElement("div", {
188
- className: classNames("".concat(props.prefixCls, "-file-size"), props.hashId)
189
- }, kbToSize(file.size / 1024)), /*#__PURE__*/ React.createElement("span", {
190
- className: classNames("".concat(props.prefixCls, "-separator"), props.hashId)
191
- }, "|"), /*#__PURE__*/ React.createElement("div", null, (file === null || file === void 0 ? void 0 : file.lastModified) ? dayjs(file === null || file === void 0 ? void 0 : file.lastModified).format('HH:mm') : '')))), hovered ? /*#__PURE__*/ React.createElement("div", {
228
+ }, displayName)), renderExtensionContainer()), hovered ? /*#__PURE__*/ React.createElement("div", {
229
+ "data-testid": "file-item-action-bar",
192
230
  className: classNames("".concat(props.prefixCls, "-action-bar"), props.hashId)
193
231
  }, props.customSlot ? /*#__PURE__*/ React.createElement(ActionIconBox, {
194
232
  title: '更多',
@@ -335,6 +335,7 @@ import { useStyle } from "./style";
335
335
  };
336
336
  var _obj;
337
337
  return wrapSSR(/*#__PURE__*/ React.createElement("div", {
338
+ "data-testid": "file-view-list",
338
339
  style: {
339
340
  display: 'flex',
340
341
  flexDirection: 'column',
@@ -344,7 +345,7 @@ import { useStyle } from "./style";
344
345
  alignItems: placement === 'left' ? 'flex-start' : 'flex-end',
345
346
  width: 'max-content'
346
347
  }
347
- }, /*#__PURE__*/ React.createElement(motion.div, {
348
+ }, imgList.length > 0 && /*#__PURE__*/ React.createElement(motion.div, {
348
349
  variants: {
349
350
  visible: {
350
351
  opacity: 1,
@@ -364,6 +365,7 @@ import { useStyle } from "./style";
364
365
  initial: "hidden",
365
366
  animate: 'visible',
366
367
  style: props.style,
368
+ "data-testid": "file-view-image-list",
367
369
  className: classNames(prefix, hashId, props.className, "".concat(prefix, "-").concat(placement), (_obj = {}, _define_property(_obj, "".concat(prefix, "-image-list-view"), imgList.length > 1), _define_property(_obj, "".concat(prefix, "-image-list-view-").concat(placement), imgList.length > 1), _obj))
368
370
  }, /*#__PURE__*/ React.createElement(Image.PreviewGroup, null, imgList.map(function(file, index) {
369
371
  if (file.status !== undefined && file.status !== null && !file.url && !file.previewUrl) {
@@ -391,6 +393,7 @@ import { useStyle } from "./style";
391
393
  whileInView: "visible",
392
394
  initial: "hidden",
393
395
  animate: "visible",
396
+ "data-testid": "file-view-video-list",
394
397
  className: classNames("".concat(prefix, "-video-row"), "".concat(prefix, "-video-row-").concat(placement), hashId),
395
398
  style: props.style
396
399
  }, videoList.map(function(file, index) {
@@ -424,6 +427,7 @@ import { useStyle } from "./style";
424
427
  }
425
428
  },
426
429
  "aria-label": "播放视频:".concat(file.name),
430
+ "data-testid": "file-view-video-thumb",
427
431
  style: thumbSize
428
432
  }, /*#__PURE__*/ React.createElement("video", {
429
433
  src: videoUrl,
@@ -459,7 +463,7 @@ import { useStyle } from "./style";
459
463
  maxWidth: '80vw',
460
464
  maxHeight: '80vh'
461
465
  }
462
- })), /*#__PURE__*/ React.createElement(motion.div, {
466
+ })), allNoMediaFiles.length > 0 && /*#__PURE__*/ React.createElement(motion.div, {
463
467
  variants: {
464
468
  visible: {
465
469
  opacity: 1,
@@ -478,6 +482,7 @@ import { useStyle } from "./style";
478
482
  whileInView: "visible",
479
483
  initial: "hidden",
480
484
  animate: 'visible',
485
+ "data-testid": "file-view-file-list",
481
486
  className: classNames(prefix, hashId, props.className, "".concat(prefix, "-").concat(placement), "".concat(prefix, "-vertical")),
482
487
  style: props.style
483
488
  }, noMediaFileList.map(function(file, index) {
@@ -503,6 +508,7 @@ import { useStyle } from "./style";
503
508
  file: file
504
509
  });
505
510
  }), props.maxDisplayCount !== undefined && allNoMediaFiles.length > props.maxDisplayCount && !showAllFiles ? /*#__PURE__*/ React.createElement("div", {
511
+ "data-testid": "file-view-view-all",
506
512
  style: {
507
513
  width: (_props_style = props.style) === null || _props_style === void 0 ? void 0 : _props_style.width
508
514
  },
@@ -77,7 +77,11 @@ var genStyle = function genStyle(token) {
77
77
  flexWrap: 'wrap',
78
78
  alignItems: 'flex-start',
79
79
  gap: 4,
80
- maxWidth: 'calc(285px * 3 + 4px * 2)'
80
+ padding: 0,
81
+ maxWidth: 'calc(285px * 3 + 4px * 2)',
82
+ '& > :only-child': {
83
+ marginTop: 8
84
+ }
81
85
  },
82
86
  '&::-webkit-scrollbar': {
83
87
  width: 6
@@ -90,4 +90,4 @@ export interface UseMarkdownToReactOptions {
90
90
  */
91
91
  contentRevisionSource?: string;
92
92
  }
93
- export { createHastProcessor, buildEditorAlignedComponents, markLastParagraphStreamingTail, renderMarkdownBlock, splitMarkdownBlocks, };
93
+ export { buildEditorAlignedComponents, createHastProcessor, markLastParagraphStreamingTail, renderMarkdownBlock, splitMarkdownBlocks, };
@@ -126,7 +126,6 @@ import React, { useContext } from "react";
126
126
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
127
127
  import rehypeKatex from "rehype-katex";
128
128
  import rehypeRaw from "rehype-raw";
129
- import remarkDirective from "remark-directive";
130
129
  import remarkFrontmatter from "remark-frontmatter";
131
130
  import remarkGfm from "remark-gfm";
132
131
  import remarkMath from "remark-math";
@@ -135,6 +134,7 @@ import remarkRehype from "remark-rehype";
135
134
  import { unified } from "unified";
136
135
  import { visit } from "unist-util-visit";
137
136
  import { remarkDirectiveContainer } from "../MarkdownEditor/editor/parser/remarkDirectiveContainer";
137
+ import remarkDirectiveContainersOnly from "../MarkdownEditor/editor/parser/remarkDirectiveContainersOnly";
138
138
  import { convertParagraphToImage, fixStrongWithSpecialChars, protectJinjaDollarInText } from "../MarkdownEditor/editor/parser/remarkParse";
139
139
  import { REMARK_REHYPE_DIRECTIVE_HANDLERS } from "../MarkdownEditor/editor/utils/markdownToHtml";
140
140
  import { parseChineseCurrencyToNumber } from "../Plugins/chart/utils";
@@ -330,7 +330,7 @@ var createHastProcessor = function createHastProcessor(extraRemarkPlugins, confi
330
330
  var processor = unified();
331
331
  processor.use(remarkParse).use(remarkGfm, {
332
332
  singleTilde: false
333
- }).use(fixStrongWithSpecialChars).use(convertParagraphToImage).use(protectJinjaDollarInText).use(remarkMath, INLINE_MATH_WITH_SINGLE_DOLLAR).use(remarkFrontmatter, FRONTMATTER_LANGUAGES).use(remarkDirective).use(remarkDirectiveContainer, REMARK_DIRECTIVE_CONTAINER_OPTIONS).use(remarkChartFromComment).use(remarkRehypePlugin, {
333
+ }).use(fixStrongWithSpecialChars).use(convertParagraphToImage).use(protectJinjaDollarInText).use(remarkMath, INLINE_MATH_WITH_SINGLE_DOLLAR).use(remarkFrontmatter, FRONTMATTER_LANGUAGES).use(remarkDirectiveContainersOnly).use(remarkDirectiveContainer, REMARK_DIRECTIVE_CONTAINER_OPTIONS).use(remarkChartFromComment).use(remarkRehypePlugin, {
334
334
  allowDangerousHtml: true,
335
335
  handlers: REMARK_REHYPE_DIRECTIVE_HANDLERS
336
336
  }).use(rehypeRaw).use(rehypeKatex, {
@@ -1156,4 +1156,4 @@ var extractLanguageFromClassName = function extractLanguageFromClassName(classNa
1156
1156
  }
1157
1157
  return blocks;
1158
1158
  };
1159
- export { createHastProcessor, buildEditorAlignedComponents, markLastParagraphStreamingTail, renderMarkdownBlock, splitMarkdownBlocks };
1159
+ export { buildEditorAlignedComponents, createHastProcessor, markLastParagraphStreamingTail, renderMarkdownBlock, splitMarkdownBlocks };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * micromark-extension-directive 未在 package exports 中声明子路径;运行时由 bundler 解析至 lib/
3
+ */
4
+ declare module 'micromark-extension-directive/lib/directive-container.js' {
5
+ import type { Construct } from 'micromark-util-types';
6
+
7
+ export const directiveContainer: Construct;
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ant-design/agentic-ui",
3
- "version": "2.30.7",
3
+ "version": "2.30.8",
4
4
  "description": "面向智能体的 UI 组件库,提供多步推理可视化、工具调用展示、任务执行协同等 Agentic UI 能力",
5
5
  "repository": "git@github.com:ant-design/agentic-ui.git",
6
6
  "license": "MIT",
@@ -91,6 +91,8 @@
91
91
  "lodash-es": "^4.17.23",
92
92
  "lottie-react": "^2.4.1",
93
93
  "markdown-it": "^14.1.1",
94
+ "mdast-util-directive": "^3.1.0",
95
+ "micromark-extension-directive": "^4.0.0",
94
96
  "markdown-it-container": "^4.0.0",
95
97
  "mermaid": "^11.12.2",
96
98
  "mustache": "^4.2.0",
@@ -109,7 +111,6 @@
109
111
  "rehype-raw": "^7.0.0",
110
112
  "rehype-stringify": "^10.0.1",
111
113
  "remark": "^15.0.1",
112
- "remark-directive": "^4.0.0",
113
114
  "remark-frontmatter": "^5.0.0",
114
115
  "remark-gfm": "^4.0.1",
115
116
  "remark-html": "^16.0.1",