= ({
className={contentOpacity}
/>
{images.length > 0 && }
+ {
+ summary && (
+
+ )
+ }
{isGeneralMode && (
{keywords?.map(keyword => )}
diff --git a/web/app/components/datasets/documents/detail/completed/segment-detail.spec.tsx b/web/app/components/datasets/documents/detail/completed/segment-detail.spec.tsx
index 491620d351f017..479958ea2d4452 100644
--- a/web/app/components/datasets/documents/detail/completed/segment-detail.spec.tsx
+++ b/web/app/components/datasets/documents/detail/completed/segment-detail.spec.tsx
@@ -356,6 +356,8 @@ describe('SegmentDetail', () => {
expect.any(String),
expect.any(Array),
expect.any(Array),
+ expect.any(String),
+ expect.any(Boolean),
)
})
@@ -545,6 +547,8 @@ describe('SegmentDetail', () => {
expect.any(String),
expect.any(Array),
expect.arrayContaining([expect.objectContaining({ id: 'new-attachment' })]),
+ expect.any(String),
+ expect.any(Boolean),
)
})
@@ -585,6 +589,7 @@ describe('SegmentDetail', () => {
expect.any(String),
expect.any(Array),
expect.any(Array),
+ expect.any(String),
true,
)
})
diff --git a/web/app/components/datasets/documents/detail/completed/segment-detail.tsx b/web/app/components/datasets/documents/detail/completed/segment-detail.tsx
index dada6f2fe76197..e35e7ebef12426 100644
--- a/web/app/components/datasets/documents/detail/completed/segment-detail.tsx
+++ b/web/app/components/datasets/documents/detail/completed/segment-detail.tsx
@@ -25,6 +25,7 @@ import Dot from './common/dot'
import Keywords from './common/keywords'
import RegenerationModal from './common/regeneration-modal'
import { SegmentIndexTag } from './common/segment-index-tag'
+import SummaryText from './common/summary-text'
import { useSegmentListContext } from './index'
type ISegmentDetailProps = {
@@ -35,6 +36,7 @@ type ISegmentDetailProps = {
a: string,
k: string[],
attachments: FileEntity[],
+ summary?: string,
needRegenerate?: boolean,
) => void
onCancel: () => void
@@ -57,6 +59,7 @@ const SegmentDetail: FC = ({
const { t } = useTranslation()
const [question, setQuestion] = useState(isEditMode ? segInfo?.content || '' : segInfo?.sign_content || '')
const [answer, setAnswer] = useState(segInfo?.answer || '')
+ const [summary, setSummary] = useState(segInfo?.summary || '')
const [attachments, setAttachments] = useState(() => {
return segInfo?.attachments?.map(item => ({
id: uuid4(),
@@ -91,8 +94,8 @@ const SegmentDetail: FC = ({
}, [onCancel])
const handleSave = useCallback(() => {
- onUpdate(segInfo?.id || '', question, answer, keywords, attachments)
- }, [onUpdate, segInfo?.id, question, answer, keywords, attachments])
+ onUpdate(segInfo?.id || '', question, answer, keywords, attachments, summary, false)
+ }, [onUpdate, segInfo?.id, question, answer, keywords, attachments, summary])
const handleRegeneration = useCallback(() => {
setShowRegenerationModal(true)
@@ -111,8 +114,8 @@ const SegmentDetail: FC = ({
}, [onCancel, onModalStateChange])
const onConfirmRegeneration = useCallback(() => {
- onUpdate(segInfo?.id || '', question, answer, keywords, attachments, true)
- }, [onUpdate, segInfo?.id, question, answer, keywords, attachments])
+ onUpdate(segInfo?.id || '', question, answer, keywords, attachments, summary, true)
+ }, [onUpdate, segInfo?.id, question, answer, keywords, attachments, summary])
const onAttachmentsChange = useCallback((attachments: FileEntity[]) => {
setAttachments(attachments)
@@ -197,6 +200,11 @@ const SegmentDetail: FC = ({
value={attachments}
onChange={onAttachmentsChange}
/>
+ setSummary(summary)}
+ disabled={!isEditMode}
+ />
{isECOIndexing && (
{
const { t } = useTranslation()
- const { segment, score, child_chunks, files } = payload
+ const { segment, score, child_chunks, files, summary } = payload
const { position, content, sign_content, keywords, document, answer } = segment
const isParentChildRetrieval = !!(child_chunks && child_chunks.length > 0)
const extension = document.name.split('.').slice(-1)[0] as FileAppearanceTypeEnum
@@ -104,11 +105,14 @@ const ChunkDetailModal = ({
{/* Mask */}
- {(showImages || showKeywords) && (
+ {(showImages || showKeywords || !!summary) && (
{showImages && (
)}
+ {!!summary && (
+
+ )}
{showKeywords && (
{t(`${i18nPrefix}keyword`, { ns: 'datasetHitTesting' })}
diff --git a/web/app/components/datasets/hit-testing/components/result-item.tsx b/web/app/components/datasets/hit-testing/components/result-item.tsx
index 41c77e3cb97bf8..bb3ac8453d6620 100644
--- a/web/app/components/datasets/hit-testing/components/result-item.tsx
+++ b/web/app/components/datasets/hit-testing/components/result-item.tsx
@@ -7,6 +7,7 @@ import * as React from 'react'
import { useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { Markdown } from '@/app/components/base/markdown'
+import SummaryLabel from '@/app/components/datasets/documents/detail/completed/common/summary-label'
import Tag from '@/app/components/datasets/documents/detail/completed/common/tag'
import { extensionToFileType } from '@/app/components/datasets/hit-testing/utils/extension-to-file-type'
import { cn } from '@/utils/classnames'
@@ -25,7 +26,7 @@ const ResultItem = ({
payload,
}: ResultItemProps) => {
const { t } = useTranslation()
- const { segment, score, child_chunks, files } = payload
+ const { segment, score, child_chunks, files, summary } = payload
const data = segment
const { position, word_count, content, sign_content, keywords, document } = data
const isParentChildRetrieval = !!(child_chunks && child_chunks.length > 0)
@@ -98,6 +99,9 @@ const ResultItem = ({
))}
)}
+ {summary && (
+
+ )}
{/* Foot */}
diff --git a/web/app/components/datasets/settings/form/index.tsx b/web/app/components/datasets/settings/form/index.tsx
index a25d7705182263..1993c9fd8d3ada 100644
--- a/web/app/components/datasets/settings/form/index.tsx
+++ b/web/app/components/datasets/settings/form/index.tsx
@@ -2,7 +2,7 @@
import type { AppIconSelection } from '@/app/components/base/app-icon-picker'
import type { DefaultModel } from '@/app/components/header/account-setting/model-provider-page/declarations'
import type { Member } from '@/models/common'
-import type { IconInfo } from '@/models/datasets'
+import type { IconInfo, SummaryIndexSetting as SummaryIndexSettingType } from '@/models/datasets'
import type { AppIconType, RetrievalConfig } from '@/types/app'
import { RiAlertFill } from '@remixicon/react'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
@@ -33,6 +33,7 @@ import RetrievalSettings from '../../external-knowledge-base/create/RetrievalSet
import ChunkStructure from '../chunk-structure'
import IndexMethod from '../index-method'
import PermissionSelector from '../permission-selector'
+import SummaryIndexSetting from '../summary-index-setting'
import { checkShowMultiModalTip } from '../utils'
const rowClass = 'flex gap-x-1'
@@ -76,6 +77,12 @@ const Form = () => {
model: '',
},
)
+ const [summaryIndexSetting, setSummaryIndexSetting] = useState(currentDataset?.summary_index_setting)
+ const handleSummaryIndexSettingChange = useCallback((payload: SummaryIndexSettingType) => {
+ setSummaryIndexSetting((prev) => {
+ return { ...prev, ...payload }
+ })
+ }, [])
const { data: rerankModelList } = useModelList(ModelTypeEnum.rerank)
const { data: embeddingModelList } = useModelList(ModelTypeEnum.textEmbedding)
const { data: membersData } = useMembers()
@@ -167,6 +174,7 @@ const Form = () => {
},
}),
keyword_number: keywordNumber,
+ summary_index_setting: summaryIndexSetting,
},
} as any
if (permission === DatasetPermission.partialMembers) {
@@ -348,6 +356,23 @@ const Form = () => {
)}
+ {
+ indexMethod === IndexingType.QUALIFIED
+ && [ChunkingMode.text, ChunkingMode.parentChild].includes(currentDataset?.doc_form as ChunkingMode)
+ && (
+ <>
+
+
+ >
+ )
+ }
{/* Retrieval Method Config */}
{currentDataset?.provider === 'external'
? (
diff --git a/web/app/components/datasets/settings/summary-index-setting.tsx b/web/app/components/datasets/settings/summary-index-setting.tsx
new file mode 100644
index 00000000000000..b79f8ffe0c4b39
--- /dev/null
+++ b/web/app/components/datasets/settings/summary-index-setting.tsx
@@ -0,0 +1,228 @@
+import type { ChangeEvent } from 'react'
+import type { DefaultModel } from '@/app/components/header/account-setting/model-provider-page/declarations'
+import type { SummaryIndexSetting as SummaryIndexSettingType } from '@/models/datasets'
+import {
+ memo,
+ useCallback,
+ useMemo,
+} from 'react'
+import { useTranslation } from 'react-i18next'
+import Switch from '@/app/components/base/switch'
+import Textarea from '@/app/components/base/textarea'
+import Tooltip from '@/app/components/base/tooltip'
+import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
+import { useModelList } from '@/app/components/header/account-setting/model-provider-page/hooks'
+import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector'
+
+type SummaryIndexSettingProps = {
+ entry?: 'knowledge-base' | 'dataset-settings' | 'create-document'
+ summaryIndexSetting?: SummaryIndexSettingType
+ onSummaryIndexSettingChange?: (payload: SummaryIndexSettingType) => void
+ readonly?: boolean
+}
+const SummaryIndexSetting = ({
+ entry = 'knowledge-base',
+ summaryIndexSetting,
+ onSummaryIndexSettingChange,
+ readonly = false,
+}: SummaryIndexSettingProps) => {
+ const { t } = useTranslation()
+ const {
+ data: textGenerationModelList,
+ } = useModelList(ModelTypeEnum.textGeneration)
+ const summaryIndexModelConfig = useMemo(() => {
+ if (!summaryIndexSetting?.model_name || !summaryIndexSetting?.model_provider_name)
+ return undefined
+
+ return {
+ providerName: summaryIndexSetting?.model_provider_name,
+ modelName: summaryIndexSetting?.model_name,
+ }
+ }, [summaryIndexSetting?.model_name, summaryIndexSetting?.model_provider_name])
+
+ const handleSummaryIndexEnableChange = useCallback((value: boolean) => {
+ onSummaryIndexSettingChange?.({
+ enable: value,
+ })
+ }, [onSummaryIndexSettingChange])
+
+ const handleSummaryIndexModelChange = useCallback((model: DefaultModel) => {
+ onSummaryIndexSettingChange?.({
+ model_provider_name: model.provider,
+ model_name: model.model,
+ })
+ }, [onSummaryIndexSettingChange])
+
+ const handleSummaryIndexPromptChange = useCallback((e: ChangeEvent) => {
+ onSummaryIndexSettingChange?.({
+ summary_prompt: e.target.value,
+ })
+ }, [onSummaryIndexSettingChange])
+
+ if (entry === 'knowledge-base') {
+ return (
+
+
+
+ {t('form.summaryAutoGen', { ns: 'datasetSettings' })}
+
+
+
+
+
+ {
+ summaryIndexSetting?.enable && (
+
+
+ {t('form.summaryModel', { ns: 'datasetSettings' })}
+
+
+
+ {t('form.summaryInstructions', { ns: 'datasetSettings' })}
+
+
+
+ )
+ }
+
+ )
+ }
+
+ if (entry === 'dataset-settings') {
+ return (
+
+
+
+
+ {t('form.summaryAutoGen', { ns: 'datasetSettings' })}
+
+
+
+
+
+ {
+ summaryIndexSetting?.enable ? t('list.status.enabled', { ns: 'datasetDocuments' }) : t('list.status.disabled', { ns: 'datasetDocuments' })
+ }
+
+
+ {
+ summaryIndexSetting?.enable && t('form.summaryAutoGenTip', { ns: 'datasetSettings' })
+ }
+ {
+ !summaryIndexSetting?.enable && t('form.summaryAutoGenEnableTip', { ns: 'datasetSettings' })
+ }
+
+
+
+ {
+ summaryIndexSetting?.enable && (
+ <>
+
+
+
+ {t('form.summaryModel', { ns: 'datasetSettings' })}
+
+
+
+
+
+
+
+
+
+ {t('form.summaryInstructions', { ns: 'datasetSettings' })}
+
+
+
+
+
+
+ >
+ )
+ }
+
+ )
+ }
+
+ return (
+
+
+
+
+ {t('form.summaryAutoGen', { ns: 'datasetSettings' })}
+
+
+ {
+ summaryIndexSetting?.enable && (
+ <>
+
+
+ {t('form.summaryModel', { ns: 'datasetSettings' })}
+
+
+
+
+
+ {t('form.summaryInstructions', { ns: 'datasetSettings' })}
+
+
+
+ >
+ )
+ }
+
+ )
+}
+export default memo(SummaryIndexSetting)
diff --git a/web/app/components/rag-pipeline/components/chunk-card-list/chunk-card.tsx b/web/app/components/rag-pipeline/components/chunk-card-list/chunk-card.tsx
index 9891fd9a471120..756417d1636f75 100644
--- a/web/app/components/rag-pipeline/components/chunk-card-list/chunk-card.tsx
+++ b/web/app/components/rag-pipeline/components/chunk-card-list/chunk-card.tsx
@@ -1,10 +1,11 @@
-import type { QAChunk } from './types'
+import type { GeneralChunk, ParentChildChunk, QAChunk } from './types'
import type { ParentMode } from '@/models/datasets'
import * as React from 'react'
import { useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import Dot from '@/app/components/datasets/documents/detail/completed/common/dot'
import SegmentIndexTag from '@/app/components/datasets/documents/detail/completed/common/segment-index-tag'
+import SummaryLabel from '@/app/components/datasets/documents/detail/completed/common/summary-label'
import { PreviewSlice } from '@/app/components/datasets/formatted-text/flavours/preview-slice'
import { ChunkingMode } from '@/models/datasets'
import { formatNumber } from '@/utils/format'
@@ -14,7 +15,7 @@ import { QAItemType } from './types'
type ChunkCardProps = {
chunkType: ChunkingMode
parentMode?: ParentMode
- content: string | string[] | QAChunk
+ content: ParentChildChunk | QAChunk | GeneralChunk
positionId?: string | number
wordCount: number
}
@@ -33,7 +34,7 @@ const ChunkCard = (props: ChunkCardProps) => {
const contentElement = useMemo(() => {
if (chunkType === ChunkingMode.parentChild) {
- return (content as string[]).map((child, index) => {
+ return (content as ParentChildChunk).child_contents.map((child, index) => {
const indexForLabel = index + 1
return (
{
)
}
- return content as string
+ return (content as GeneralChunk).content
+ }, [content, chunkType])
+
+ const summaryElement = useMemo(() => {
+ if (chunkType === ChunkingMode.parentChild) {
+ return (content as ParentChildChunk).parent_summary
+ }
+ if (chunkType === ChunkingMode.text) {
+ return (content as GeneralChunk).summary
+ }
+ return null
}, [content, chunkType])
return (
@@ -73,6 +84,7 @@ const ChunkCard = (props: ChunkCardProps) => {
)}
{contentElement}
+ {summaryElement && }
)
}
diff --git a/web/app/components/rag-pipeline/components/chunk-card-list/index.spec.tsx b/web/app/components/rag-pipeline/components/chunk-card-list/index.spec.tsx
index e665cf134e51c8..ca5fae25c72d73 100644
--- a/web/app/components/rag-pipeline/components/chunk-card-list/index.spec.tsx
+++ b/web/app/components/rag-pipeline/components/chunk-card-list/index.spec.tsx
@@ -10,13 +10,13 @@ import { QAItemType } from './types'
// Test Data Factories
// =============================================================================
-const createGeneralChunks = (overrides: string[] = []): GeneralChunks => {
+const createGeneralChunks = (overrides: GeneralChunks = []): GeneralChunks => {
if (overrides.length > 0)
return overrides
return [
- 'This is the first chunk of text content.',
- 'This is the second chunk with different content.',
- 'Third chunk here with more text.',
+ { content: 'This is the first chunk of text content.' },
+ { content: 'This is the second chunk with different content.' },
+ { content: 'Third chunk here with more text.' },
]
}
@@ -152,14 +152,14 @@ describe('ChunkCard', () => {
render(
,
)
// Assert
- expect(screen.getByText('This is plain text content.')).toBeInTheDocument()
+ expect(screen.getByText('This is the first chunk of text content.')).toBeInTheDocument()
expect(screen.getByText(/Chunk-01/)).toBeInTheDocument()
})
@@ -196,7 +196,7 @@ describe('ChunkCard', () => {
,
@@ -218,7 +218,7 @@ describe('ChunkCard', () => {
,
@@ -234,7 +234,7 @@ describe('ChunkCard', () => {
,
@@ -250,7 +250,7 @@ describe('ChunkCard', () => {
render(
,
@@ -268,7 +268,7 @@ describe('ChunkCard', () => {
render(
,
@@ -283,7 +283,7 @@ describe('ChunkCard', () => {
render(
,
@@ -299,7 +299,7 @@ describe('ChunkCard', () => {
,
@@ -317,7 +317,7 @@ describe('ChunkCard', () => {
render(
,
@@ -332,7 +332,7 @@ describe('ChunkCard', () => {
render(
,
@@ -347,7 +347,7 @@ describe('ChunkCard', () => {
render(
,
@@ -366,7 +366,7 @@ describe('ChunkCard', () => {
,
@@ -380,7 +380,7 @@ describe('ChunkCard', () => {
,
@@ -392,10 +392,13 @@ describe('ChunkCard', () => {
it('should update contentElement memo when content changes', () => {
// Arrange
+ const initialContent = { content: 'Initial content' }
+ const updatedContent = { content: 'Updated content' }
+
const { rerender } = render(
,
@@ -408,7 +411,7 @@ describe('ChunkCard', () => {
rerender(
,
@@ -421,10 +424,11 @@ describe('ChunkCard', () => {
it('should update contentElement memo when chunkType changes', () => {
// Arrange
+ const textContent = { content: 'Text content' }
const { rerender } = render(
,
@@ -458,7 +462,7 @@ describe('ChunkCard', () => {
,
@@ -490,12 +494,13 @@ describe('ChunkCard', () => {
it('should handle very long content', () => {
// Arrange
const longContent = 'A'.repeat(10000)
+ const longContentChunk = { content: longContent }
// Act
render(
,
@@ -510,7 +515,7 @@ describe('ChunkCard', () => {
render(
,
@@ -546,9 +551,9 @@ describe('ChunkCardList', () => {
)
// Assert
- expect(screen.getByText(chunks[0])).toBeInTheDocument()
- expect(screen.getByText(chunks[1])).toBeInTheDocument()
- expect(screen.getByText(chunks[2])).toBeInTheDocument()
+ expect(screen.getByText(chunks[0].content)).toBeInTheDocument()
+ expect(screen.getByText(chunks[1].content)).toBeInTheDocument()
+ expect(screen.getByText(chunks[2].content)).toBeInTheDocument()
})
it('should render parent-child chunks correctly', () => {
@@ -594,7 +599,10 @@ describe('ChunkCardList', () => {
describe('Memoization - chunkList', () => {
it('should extract chunks from GeneralChunks for text mode', () => {
// Arrange
- const chunks: GeneralChunks = ['Chunk 1', 'Chunk 2']
+ const chunks: GeneralChunks = [
+ { content: 'Chunk 1' },
+ { content: 'Chunk 2' },
+ ]
// Act
render(
@@ -653,7 +661,7 @@ describe('ChunkCardList', () => {
it('should update chunkList when chunkInfo changes', () => {
// Arrange
- const initialChunks = createGeneralChunks(['Initial chunk'])
+ const initialChunks = createGeneralChunks([{ content: 'Initial chunk' }])
const { rerender } = render(
{
expect(screen.getByText('Initial chunk')).toBeInTheDocument()
// Act - update chunks
- const updatedChunks = createGeneralChunks(['Updated chunk'])
+ const updatedChunks = createGeneralChunks([{ content: 'Updated chunk' }])
rerender(
{
describe('Word Count Calculation', () => {
it('should calculate word count for text chunks using string length', () => {
// Arrange - "Hello" has 5 characters
- const chunks = createGeneralChunks(['Hello'])
+ const chunks = createGeneralChunks([{ content: 'Hello' }])
// Act
render(
@@ -747,7 +755,11 @@ describe('ChunkCardList', () => {
describe('Position ID', () => {
it('should assign 1-based position IDs to chunks', () => {
// Arrange
- const chunks = createGeneralChunks(['First', 'Second', 'Third'])
+ const chunks = createGeneralChunks([
+ { content: 'First' },
+ { content: 'Second' },
+ { content: 'Third' },
+ ])
// Act
render(
@@ -768,7 +780,7 @@ describe('ChunkCardList', () => {
describe('Custom className', () => {
it('should apply custom className to container', () => {
// Arrange
- const chunks = createGeneralChunks(['Test'])
+ const chunks = createGeneralChunks([{ content: 'Test' }])
// Act
const { container } = render(
@@ -785,7 +797,7 @@ describe('ChunkCardList', () => {
it('should merge custom className with default classes', () => {
// Arrange
- const chunks = createGeneralChunks(['Test'])
+ const chunks = createGeneralChunks([{ content: 'Test' }])
// Act
const { container } = render(
@@ -805,7 +817,7 @@ describe('ChunkCardList', () => {
it('should render without className prop', () => {
// Arrange
- const chunks = createGeneralChunks(['Test'])
+ const chunks = createGeneralChunks([{ content: 'Test' }])
// Act
const { container } = render(
@@ -860,7 +872,7 @@ describe('ChunkCardList', () => {
it('should not use parentMode for text type', () => {
// Arrange
- const chunks = createGeneralChunks(['Text'])
+ const chunks = createGeneralChunks([{ content: 'Text' }])
// Act
render(
@@ -937,7 +949,7 @@ describe('ChunkCardList', () => {
it('should handle single item in chunks', () => {
// Arrange
- const chunks = createGeneralChunks(['Single chunk'])
+ const chunks = createGeneralChunks([{ content: 'Single chunk' }])
// Act
render(
@@ -954,7 +966,7 @@ describe('ChunkCardList', () => {
it('should handle large number of chunks', () => {
// Arrange
- const chunks = Array.from({ length: 100 }, (_, i) => `Chunk number ${i + 1}`)
+ const chunks = Array.from({ length: 100 }, (_, i) => ({ content: `Chunk number ${i + 1}` }))
// Act
render(
@@ -975,8 +987,11 @@ describe('ChunkCardList', () => {
describe('Key Generation', () => {
it('should generate unique keys for chunks', () => {
// Arrange - chunks with same content
- const chunks = createGeneralChunks(['Same content', 'Same content', 'Same content'])
-
+ const chunks = createGeneralChunks([
+ { content: 'Same content' },
+ { content: 'Same content' },
+ { content: 'Same content' },
+ ])
// Act
const { container } = render(
{
it('should render complete text chunking workflow', () => {
// Arrange
const textChunks = createGeneralChunks([
- 'First paragraph of the document.',
- 'Second paragraph with more information.',
- 'Final paragraph concluding the content.',
+ { content: 'First paragraph of the document.' },
+ { content: 'Second paragraph with more information.' },
+ { content: 'Final paragraph concluding the content.' },
])
// Act
@@ -1104,7 +1119,7 @@ describe('ChunkCardList Integration', () => {
describe('Type Switching', () => {
it('should handle switching from text to QA type', () => {
// Arrange
- const textChunks = createGeneralChunks(['Text content'])
+ const textChunks = createGeneralChunks([{ content: 'Text content' }])
const qaChunks = createQAChunks()
const { rerender } = render(
@@ -1132,7 +1147,7 @@ describe('ChunkCardList Integration', () => {
it('should handle switching from text to parent-child type', () => {
// Arrange
- const textChunks = createGeneralChunks(['Simple text'])
+ const textChunks = createGeneralChunks([{ content: 'Simple text' }])
const parentChildChunks = createParentChildChunks()
const { rerender } = render(
diff --git a/web/app/components/rag-pipeline/components/chunk-card-list/index.tsx b/web/app/components/rag-pipeline/components/chunk-card-list/index.tsx
index 3b1f2533b4f3cb..176298b2e8a6e4 100644
--- a/web/app/components/rag-pipeline/components/chunk-card-list/index.tsx
+++ b/web/app/components/rag-pipeline/components/chunk-card-list/index.tsx
@@ -1,4 +1,4 @@
-import type { ChunkInfo, GeneralChunks, ParentChildChunk, ParentChildChunks, QAChunk, QAChunks } from './types'
+import type { ChunkInfo, GeneralChunk, GeneralChunks, ParentChildChunk, ParentChildChunks, QAChunk, QAChunks } from './types'
import type { ParentMode } from '@/models/datasets'
import { useMemo } from 'react'
import { ChunkingMode } from '@/models/datasets'
@@ -21,13 +21,13 @@ export const ChunkCardList = (props: ChunkCardListProps) => {
if (chunkType === ChunkingMode.parentChild)
return (chunkInfo as ParentChildChunks).parent_child_chunks
return (chunkInfo as QAChunks).qa_chunks
- }, [chunkInfo])
+ }, [chunkInfo, chunkType])
- const getWordCount = (seg: string | ParentChildChunk | QAChunk) => {
+ const getWordCount = (seg: GeneralChunk | ParentChildChunk | QAChunk) => {
if (chunkType === ChunkingMode.parentChild)
- return (seg as ParentChildChunk).parent_content.length
+ return (seg as ParentChildChunk).parent_content?.length
if (chunkType === ChunkingMode.text)
- return (seg as string).length
+ return (seg as GeneralChunk).content.length
return (seg as QAChunk).question.length + (seg as QAChunk).answer.length
}
@@ -41,7 +41,7 @@ export const ChunkCardList = (props: ChunkCardListProps) => {
key={`${chunkType}-${index}`}
chunkType={chunkType}
parentMode={parentMode}
- content={chunkType === ChunkingMode.parentChild ? (seg as ParentChildChunk).child_contents : (seg as string | QAChunk)}
+ content={seg}
wordCount={wordCount}
positionId={index + 1}
/>
diff --git a/web/app/components/rag-pipeline/components/chunk-card-list/types.ts b/web/app/components/rag-pipeline/components/chunk-card-list/types.ts
index 0a5e594b477527..6117855b3b8dc0 100644
--- a/web/app/components/rag-pipeline/components/chunk-card-list/types.ts
+++ b/web/app/components/rag-pipeline/components/chunk-card-list/types.ts
@@ -1,8 +1,12 @@
-export type GeneralChunks = string[]
-
+export type GeneralChunk = {
+ content: string
+ summary?: string
+}
+export type GeneralChunks = GeneralChunk[]
export type ParentChildChunk = {
child_contents: string[]
parent_content: string
+ parent_summary?: string
parent_mode: string
}
diff --git a/web/app/components/rag-pipeline/components/panel/test-run/index.spec.tsx b/web/app/components/rag-pipeline/components/panel/test-run/index.spec.tsx
index 93423f9e1002a5..7ead398ac10a4e 100644
--- a/web/app/components/rag-pipeline/components/panel/test-run/index.spec.tsx
+++ b/web/app/components/rag-pipeline/components/panel/test-run/index.spec.tsx
@@ -1,8 +1,8 @@
+import type { GeneralChunks } from '@/app/components/rag-pipeline/components/chunk-card-list/types'
import type { WorkflowRunningData } from '@/app/components/workflow/types'
import { fireEvent, render, screen, waitFor } from '@testing-library/react'
import { WorkflowRunningStatus } from '@/app/components/workflow/types'
import { ChunkingMode } from '@/models/datasets'
-
import Header from './header'
// Import components after mocks
import TestRunPanel from './index'
@@ -830,17 +830,27 @@ describe('formatPreviewChunks', () => {
const outputs = createMockGeneralOutputs(['content1', 'content2', 'content3'])
const result = formatPreviewChunks(outputs)
- expect(result).toEqual(['content1', 'content2', 'content3'])
+ expect(result).toEqual([
+ { content: 'content1', summary: undefined },
+ { content: 'content2', summary: undefined },
+ { content: 'content3', summary: undefined },
+ ])
})
it('should limit to RAG_PIPELINE_PREVIEW_CHUNK_NUM chunks', () => {
const manyChunks = Array.from({ length: 10 }, (_, i) => `chunk${i}`)
const outputs = createMockGeneralOutputs(manyChunks)
- const result = formatPreviewChunks(outputs) as string[]
+ const result = formatPreviewChunks(outputs) as GeneralChunks
// RAG_PIPELINE_PREVIEW_CHUNK_NUM is mocked to 5
expect(result).toHaveLength(5)
- expect(result).toEqual(['chunk0', 'chunk1', 'chunk2', 'chunk3', 'chunk4'])
+ expect(result).toEqual([
+ { content: 'chunk0', summary: undefined },
+ { content: 'chunk1', summary: undefined },
+ { content: 'chunk2', summary: undefined },
+ { content: 'chunk3', summary: undefined },
+ { content: 'chunk4', summary: undefined },
+ ])
})
it('should handle empty preview array', () => {
diff --git a/web/app/components/rag-pipeline/components/panel/test-run/result/index.spec.tsx b/web/app/components/rag-pipeline/components/panel/test-run/result/index.spec.tsx
index 5d5f6d74430d52..d3204ae29a8dbf 100644
--- a/web/app/components/rag-pipeline/components/panel/test-run/result/index.spec.tsx
+++ b/web/app/components/rag-pipeline/components/panel/test-run/result/index.spec.tsx
@@ -590,9 +590,9 @@ describe('formatPreviewChunks', () => {
const result = formatPreviewChunks(outputs) as GeneralChunks
expect(result).toHaveLength(3)
- expect(result[0]).toBe('General chunk content 1')
- expect(result[1]).toBe('General chunk content 2')
- expect(result[2]).toBe('General chunk content 3')
+ expect((result as GeneralChunks)[0].content).toBe('General chunk content 1')
+ expect((result as GeneralChunks)[1].content).toBe('General chunk content 2')
+ expect((result as GeneralChunks)[2].content).toBe('General chunk content 3')
})
it('should limit chunks to RAG_PIPELINE_PREVIEW_CHUNK_NUM', () => {
diff --git a/web/app/components/rag-pipeline/components/panel/test-run/result/result-preview/index.spec.tsx b/web/app/components/rag-pipeline/components/panel/test-run/result/result-preview/index.spec.tsx
index 2fa311413a6a01..8dd0bf759fa789 100644
--- a/web/app/components/rag-pipeline/components/panel/test-run/result/result-preview/index.spec.tsx
+++ b/web/app/components/rag-pipeline/components/panel/test-run/result/result-preview/index.spec.tsx
@@ -145,9 +145,9 @@ describe('formatPreviewChunks', () => {
// Assert
expect(result).toEqual([
- 'First chunk content',
- 'Second chunk content',
- 'Third chunk content',
+ { content: 'First chunk content', summary: undefined },
+ { content: 'Second chunk content', summary: undefined },
+ { content: 'Third chunk content', summary: undefined },
])
})
@@ -160,8 +160,8 @@ describe('formatPreviewChunks', () => {
// Assert
expect(result).toHaveLength(20)
- expect(result[0]).toBe('Chunk content 1')
- expect(result[19]).toBe('Chunk content 20')
+ expect((result as GeneralChunks)[0].content).toBe('Chunk content 1')
+ expect((result as GeneralChunks)[19].content).toBe('Chunk content 20')
})
it('should handle empty preview array for general chunks', () => {
@@ -186,7 +186,10 @@ describe('formatPreviewChunks', () => {
const result = formatPreviewChunks(outputs) as GeneralChunks
// Assert
- expect(result).toEqual(['', 'Valid content'])
+ expect(result).toEqual([
+ { content: '', summary: undefined },
+ { content: 'Valid content', summary: undefined },
+ ])
})
it('should handle general chunks with special characters', () => {
@@ -202,9 +205,9 @@ describe('formatPreviewChunks', () => {
// Assert
expect(result).toEqual([
- '',
- '中文内容 🎉',
- 'Line1\nLine2\tTab',
+ { content: '', summary: undefined },
+ { content: '中文内容 🎉', summary: undefined },
+ { content: 'Line1\nLine2\tTab', summary: undefined },
])
})
@@ -217,7 +220,7 @@ describe('formatPreviewChunks', () => {
const result = formatPreviewChunks(outputs) as GeneralChunks
// Assert
- expect(result[0]).toHaveLength(10000)
+ expect((result as GeneralChunks)[0].content).toHaveLength(10000)
})
})
@@ -501,7 +504,7 @@ describe('formatPreviewChunks', () => {
const result = formatPreviewChunks(outputs) as GeneralChunks
// Assert
- expect(result).toEqual(['Test'])
+ expect(result).toEqual([{ content: 'Test', summary: undefined }])
})
})
})
@@ -667,7 +670,10 @@ describe('ResultPreview', () => {
// Assert
const chunkList = screen.getByTestId('chunk-card-list')
const chunkInfo = JSON.parse(chunkList.getAttribute('data-chunk-info') || '[]')
- expect(chunkInfo).toEqual(['Chunk 1', 'Chunk 2'])
+ expect(chunkInfo).toEqual([
+ { content: 'Chunk 1' },
+ { content: 'Chunk 2' },
+ ])
})
it('should handle parent-child outputs', () => {
@@ -792,7 +798,7 @@ describe('ResultPreview', () => {
// Assert
const chunkList = screen.getByTestId('chunk-card-list')
const chunkInfo = JSON.parse(chunkList.getAttribute('data-chunk-info') || '[]')
- expect(chunkInfo).toEqual(['Second'])
+ expect(chunkInfo).toEqual([{ content: 'Second' }])
})
})
@@ -820,7 +826,7 @@ describe('ResultPreview', () => {
let chunkList = screen.getByTestId('chunk-card-list')
let chunkInfo = JSON.parse(chunkList.getAttribute('data-chunk-info') || '[]')
- expect(chunkInfo).toEqual(['Original'])
+ expect(chunkInfo).toEqual([{ content: 'Original' }])
// Act - Change outputs
const outputs2 = createGeneralChunkOutputs([{ content: 'Updated' }])
@@ -829,7 +835,7 @@ describe('ResultPreview', () => {
// Assert
chunkList = screen.getByTestId('chunk-card-list')
chunkInfo = JSON.parse(chunkList.getAttribute('data-chunk-info') || '[]')
- expect(chunkInfo).toEqual(['Updated'])
+ expect(chunkInfo).toEqual([{ content: 'Updated' }])
})
it('should handle undefined outputs in useMemo', () => {
diff --git a/web/app/components/rag-pipeline/components/panel/test-run/result/result-preview/utils.ts b/web/app/components/rag-pipeline/components/panel/test-run/result/result-preview/utils.ts
index 9ac0de4d48626d..de3666224f0794 100644
--- a/web/app/components/rag-pipeline/components/panel/test-run/result/result-preview/utils.ts
+++ b/web/app/components/rag-pipeline/components/panel/test-run/result/result-preview/utils.ts
@@ -5,13 +5,17 @@ import { ChunkingMode } from '@/models/datasets'
type GeneralChunkPreview = {
content: string
+ summary?: string
}
const formatGeneralChunks = (outputs: any) => {
const chunkInfo: GeneralChunks = []
const chunks = outputs.preview as GeneralChunkPreview[]
chunks.slice(0, RAG_PIPELINE_PREVIEW_CHUNK_NUM).forEach((chunk) => {
- chunkInfo.push(chunk.content)
+ chunkInfo.push({
+ content: chunk.content,
+ summary: chunk.summary,
+ })
})
return chunkInfo
@@ -20,6 +24,7 @@ const formatGeneralChunks = (outputs: any) => {
type ParentChildChunkPreview = {
content: string
child_chunks: string[]
+ summary?: string
}
const formatParentChildChunks = (outputs: any, parentMode: ParentMode) => {
@@ -32,6 +37,7 @@ const formatParentChildChunks = (outputs: any, parentMode: ParentMode) => {
chunks.slice(0, RAG_PIPELINE_PREVIEW_CHUNK_NUM).forEach((chunk) => {
chunkInfo.parent_child_chunks?.push({
parent_content: chunk.content,
+ parent_summary: chunk.summary,
child_contents: chunk.child_chunks,
parent_mode: parentMode,
})
diff --git a/web/app/components/workflow/nodes/knowledge-base/hooks/use-config.ts b/web/app/components/workflow/nodes/knowledge-base/hooks/use-config.ts
index f2a27d338e2fc9..f26df2c3ee4a9b 100644
--- a/web/app/components/workflow/nodes/knowledge-base/hooks/use-config.ts
+++ b/web/app/components/workflow/nodes/knowledge-base/hooks/use-config.ts
@@ -1,6 +1,7 @@
import type {
KnowledgeBaseNodeType,
RerankingModel,
+ SummaryIndexSetting,
} from '../types'
import type { ValueSelector } from '@/app/components/workflow/types'
import { produce } from 'immer'
@@ -246,6 +247,16 @@ export const useConfig = (id: string) => {
})
}, [handleNodeDataUpdate])
+ const handleSummaryIndexSettingChange = useCallback((summaryIndexSetting: SummaryIndexSetting) => {
+ const nodeData = getNodeData()
+ handleNodeDataUpdate({
+ summary_index_setting: {
+ ...nodeData?.data.summary_index_setting,
+ ...summaryIndexSetting,
+ },
+ })
+ }, [handleNodeDataUpdate, getNodeData])
+
return {
handleChunkStructureChange,
handleIndexMethodChange,
@@ -260,5 +271,6 @@ export const useConfig = (id: string) => {
handleScoreThresholdChange,
handleScoreThresholdEnabledChange,
handleInputVariableChange,
+ handleSummaryIndexSettingChange,
}
}
diff --git a/web/app/components/workflow/nodes/knowledge-base/panel.tsx b/web/app/components/workflow/nodes/knowledge-base/panel.tsx
index ec99145d860985..0a275645a8a449 100644
--- a/web/app/components/workflow/nodes/knowledge-base/panel.tsx
+++ b/web/app/components/workflow/nodes/knowledge-base/panel.tsx
@@ -7,6 +7,7 @@ import {
useMemo,
} from 'react'
import { useTranslation } from 'react-i18next'
+import SummaryIndexSetting from '@/app/components/datasets/settings/summary-index-setting'
import { checkShowMultiModalTip } from '@/app/components/datasets/settings/utils'
import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
import { useModelList } from '@/app/components/header/account-setting/model-provider-page/hooks'
@@ -51,6 +52,7 @@ const Panel: FC> = ({
handleScoreThresholdChange,
handleScoreThresholdEnabledChange,
handleInputVariableChange,
+ handleSummaryIndexSettingChange,
} = useConfig(id)
const filterVar = useCallback((variable: Var) => {
@@ -167,6 +169,22 @@ const Panel: FC> = ({
+ {
+ data.indexing_technique === IndexMethodEnum.QUALIFIED
+ && [ChunkStructureEnum.general, ChunkStructureEnum.parent_child].includes(data.chunk_structure)
+ && (
+ <>
+
+
+
+
+ >
+ )
+ }
+ preview: Array<{ content: string, child_chunks: string[], summary?: string }>
qa_preview?: QA[]
}
@@ -262,6 +270,7 @@ export type ProcessRuleResponse = {
mode: ProcessMode
rules: Rules
limits: Limits
+ summary_index_setting?: SummaryIndexSetting
}
export type Rules = {
@@ -392,6 +401,7 @@ export type InitialDocumentDetail = {
total_segments?: number
doc_form: ChunkingMode
doc_language: string
+ summary_index_status?: string
}
export type SimpleDocumentDetail = InitialDocumentDetail & {
@@ -425,6 +435,7 @@ export type DocumentReq = {
doc_form: ChunkingMode
doc_language: string
process_rule: ProcessRule
+ summary_index_setting?: SummaryIndexSetting
}
export type CreateDocumentReq = DocumentReq & {
@@ -467,6 +478,7 @@ export type NotionPage = {
export type ProcessRule = {
mode: ProcessMode
rules: Rules
+ summary_index_setting?: SummaryIndexSetting
}
export type createDocumentResponse = {
@@ -575,6 +587,7 @@ export type SegmentDetailModel = {
error: string | null
stopped_at: number
answer?: string
+ summary?: string
child_chunks?: ChildChunkDetail[]
updated_at: number
attachments: Attachment[]
@@ -618,6 +631,7 @@ export type HitTesting = {
tsne_position: TsnePosition
child_chunks: HitTestingChildChunk[] | null
files: Attachment[]
+ summary?: string
}
export type ExternalKnowledgeBaseHitTesting = {
@@ -697,6 +711,7 @@ export type RelatedAppResponse = {
export type SegmentUpdater = {
content: string
answer?: string
+ summary?: string
keywords?: string[]
regenerate_child_chunks?: boolean
attachment_ids?: string[]
@@ -778,6 +793,7 @@ export enum DocumentActionType {
archive = 'archive',
unArchive = 'un_archive',
delete = 'delete',
+ summary = 'summary',
}
export type UpdateDocumentBatchParams = {
diff --git a/web/package.json b/web/package.json
index b8f8e3499f2fed..bf5ca101d0e971 100644
--- a/web/package.json
+++ b/web/package.json
@@ -161,6 +161,7 @@
},
"devDependencies": {
"@antfu/eslint-config": "7.0.1",
+ "@canyonjs/report": "1.0.3",
"@chromatic-com/storybook": "5.0.0",
"@eslint-react/eslint-plugin": "2.7.0",
"@mdx-js/loader": "3.1.1",
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index e79dee6936988f..679472f92f5d70 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -369,6 +369,9 @@ importers:
'@antfu/eslint-config':
specifier: 7.0.1
version: 7.0.1(@eslint-react/eslint-plugin@2.7.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@16.1.5)(@vue/compiler-sfc@3.5.27)(eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17)
+ '@canyonjs/report':
+ specifier: 1.0.3
+ version: 1.0.3(luxon@3.7.2)
'@chromatic-com/storybook':
specifier: 5.0.0
version: 5.0.0(storybook@10.2.0(@testing-library/dom@10.4.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))
@@ -672,6 +675,41 @@ packages:
'@amplitude/targeting@0.2.0':
resolution: {integrity: sha512-/50ywTrC4hfcfJVBbh5DFbqMPPfaIOivZeb5Gb+OGM03QrA+lsUqdvtnKLNuWtceD4H6QQ2KFzPJ5aAJLyzVDA==}
+ '@ant-design/colors@8.0.1':
+ resolution: {integrity: sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==}
+
+ '@ant-design/cssinjs-utils@2.0.2':
+ resolution: {integrity: sha512-Mq3Hm6fJuQeFNKSp3+yT4bjuhVbdrsyXE2RyfpJFL0xiYNZdaJ6oFaE3zFrzmHbmvTd2Wp3HCbRtkD4fU+v2ZA==}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+
+ '@ant-design/cssinjs@2.0.3':
+ resolution: {integrity: sha512-HAo8SZ3a6G8v6jT0suCz1270na6EA3obeJWM4uzRijBhdwdoMAXWK2f4WWkwB28yUufsfk3CAhN1coGPQq4kNQ==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@ant-design/fast-color@3.0.1':
+ resolution: {integrity: sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==}
+ engines: {node: '>=8.x'}
+
+ '@ant-design/icons-svg@4.4.2':
+ resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
+
+ '@ant-design/icons@6.1.0':
+ resolution: {integrity: sha512-KrWMu1fIg3w/1F2zfn+JlfNDU8dDqILfA5Tg85iqs1lf8ooyGlbkA+TkwfOKKgqpUmAiRY1PTFpuOU2DAIgSUg==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@ant-design/react-slick@2.0.0':
+ resolution: {integrity: sha512-HMS9sRoEmZey8LsE/Yo6+klhlzU12PisjrVcydW3So7RdklyEd2qehyU6a7Yp+OYN72mgsYs3NFCyP2lCPFVqg==}
+ peerDependencies:
+ react: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
'@antfu/eslint-config@7.0.1':
resolution: {integrity: sha512-QbCDrLPo2Bpn9/W5PnpGvUuD/EIKhiCmLBuIj9ylxeMvl47XSkXy3MZyinqUVsBJzk196B7BcJQByDZRr5TbZQ==}
hasBin: true
@@ -833,6 +871,15 @@ packages:
'@braintree/sanitize-url@7.1.1':
resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
+ '@canyonjs/report-component@0.0.10':
+ resolution: {integrity: sha512-pUCYnw7lBybl8k/ox7BVfajEmTovMsUeOUAJHczS6nwCNpWdJq2C0BGIBsPEQCuFsj/qHtfJh/KfMET16FSFbA==}
+
+ '@canyonjs/report-html@1.0.12':
+ resolution: {integrity: sha512-YrW2G+eX6eVVAPw8tLHclBjcipdTS/iuRmVy0opvZStWXEEnc0CMsn1NIjNVgL7aoBnzF4dDe16FGoeZLJtOuA==}
+
+ '@canyonjs/report@1.0.3':
+ resolution: {integrity: sha512-nr+MAifwtHURILO8eAM54NfJnldCb9IUbkLPdi41iIjefbc6dVudVj/EMS7jF6aO+vwC/SQrhn1jVxGMkYRWVg==}
+
'@chevrotain/cst-dts-gen@11.0.3':
resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
@@ -931,6 +978,12 @@ packages:
'@emoji-mart/data@1.2.1':
resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==}
+ '@emotion/hash@0.8.0':
+ resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
+
+ '@emotion/unitless@0.7.5':
+ resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
+
'@epic-web/invariant@1.0.0':
resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==}
@@ -1292,6 +1345,13 @@ packages:
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
+ '@ibm/plex-mono@1.1.0':
+ resolution: {integrity: sha512-hpsdRxR3BRJkC6wGM4MZcUFD6C8M+mmK76RtAy/hlsfPro9FzpXVdIWC+G3jeQOXof109dxlUvmeKxpeKUG68A==}
+
+ '@ibm/telemetry-js@1.11.0':
+ resolution: {integrity: sha512-RO/9j+URJnSfseWg9ZkEX9p+a3Ousd33DBU7rOafoZB08RqdzxFVYJ2/iM50dkBuD0o7WX7GYt1sLbNgCoE+pA==}
+ hasBin: true
+
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -2281,6 +2341,289 @@ packages:
'@types/react':
optional: true
+ '@rc-component/async-validator@5.1.0':
+ resolution: {integrity: sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==}
+ engines: {node: '>=14.x'}
+
+ '@rc-component/cascader@1.9.0':
+ resolution: {integrity: sha512-2jbthe1QZrMBgtCvNKkJFjZYC3uKl4N/aYm5SsMvO3T+F+qRT1CGsSM9bXnh1rLj7jDk/GK0natShWF/jinhWQ==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/checkbox@1.0.1':
+ resolution: {integrity: sha512-08yTH8m+bSm8TOqbybbJ9KiAuIATti6bDs2mVeSfu4QfEnyeF6X0enHVvD1NEAyuBWEAo56QtLe++MYs2D9XiQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/collapse@1.1.2':
+ resolution: {integrity: sha512-ilBYk1dLLJHu5Q74dF28vwtKUYQ42ZXIIDmqTuVy4rD8JQVvkXOs+KixVNbweyuIEtJYJ7+t+9GVD9dPc6N02w==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/color-picker@3.0.3':
+ resolution: {integrity: sha512-V7gFF9O7o5XwIWafdbOtqI4BUUkEUkgdBwp6favy3xajMX/2dDqytFaiXlcwrpq6aRyPLp5dKLAG5RFKLXMeGA==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/context@2.0.1':
+ resolution: {integrity: sha512-HyZbYm47s/YqtP6pKXNMjPEMaukyg7P0qVfgMLzr7YiFNMHbK2fKTAGzms9ykfGHSfyf75nBbgWw+hHkp+VImw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/dialog@1.5.1':
+ resolution: {integrity: sha512-by4Sf/a3azcb89WayWuwG19/Y312xtu8N81HoVQQtnsBDylfs+dog98fTAvLinnpeoWG52m/M7QLRW6fXR3l1g==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/drawer@1.3.0':
+ resolution: {integrity: sha512-rE+sdXEmv2W25VBQ9daGbnb4J4hBIEKmdbj0b3xpY+K7TUmLXDIlSnoXraIbFZdGyek9WxxGKK887uRnFgI+pQ==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/dropdown@1.0.2':
+ resolution: {integrity: sha512-6PY2ecUSYhDPhkNHHb4wfeAya04WhpmUSKzdR60G+kMNVUCX2vjT/AgTS0Lz0I/K6xrPMJ3enQbwVpeN3sHCgg==}
+ peerDependencies:
+ react: '>=16.11.0'
+ react-dom: '>=16.11.0'
+
+ '@rc-component/form@1.4.0':
+ resolution: {integrity: sha512-C8MN/2wIaW9hSrCCtJmcgCkWTQNIspN7ARXLFA4F8PGr8Qxk39U5pS3kRK51/bUJNhb/fEtdFnaViLlISGKI2A==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/image@1.5.3':
+ resolution: {integrity: sha512-/NR7QW9uCN8Ugar+xsHZOPvzPySfEhcW2/vLcr7VPRM+THZMrllMRv7LAUgW7ikR+Z67Ab67cgPp5K5YftpJsQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/input-number@1.6.2':
+ resolution: {integrity: sha512-Gjcq7meZlCOiWN1t1xCC+7/s85humHVokTBI7PJgTfoyw5OWF74y3e6P8PHX104g9+b54jsodFIzyaj6p8LI9w==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/input@1.1.2':
+ resolution: {integrity: sha512-Q61IMR47piUBudgixJ30CciKIy9b1H95qe7GgEKOmSJVJXvFRWJllJfQry9tif+MX2cWFXWJf/RXz4kaCeq/Fg==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@rc-component/mentions@1.6.0':
+ resolution: {integrity: sha512-KIkQNP6habNuTsLhUv0UGEOwG67tlmE7KNIJoQZZNggEZl5lQJTytFDb69sl5CK3TDdISCTjKP3nGEBKgT61CQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/menu@1.2.0':
+ resolution: {integrity: sha512-VWwDuhvYHSnTGj4n6bV3ISrLACcPAzdPOq3d0BzkeiM5cve8BEYfvkEhNoM0PLzv51jpcejeyrLXeMVIJ+QJlg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/mini-decimal@1.1.0':
+ resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==}
+ engines: {node: '>=8.x'}
+
+ '@rc-component/motion@1.1.6':
+ resolution: {integrity: sha512-aEQobs/YA0kqRvHIPjQvOytdtdRVyhf/uXAal4chBjxDu6odHckExJzjn2D+Ju1aKK6hx3pAs6BXdV9+86xkgQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/mutate-observer@2.0.1':
+ resolution: {integrity: sha512-AyarjoLU5YlxuValRi+w8JRH2Z84TBbFO2RoGWz9d8bSu0FqT8DtugH3xC3BV7mUwlmROFauyWuXFuq4IFbH+w==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/notification@1.2.0':
+ resolution: {integrity: sha512-OX3J+zVU7rvoJCikjrfW7qOUp7zlDeFBK2eA3SFbGSkDqo63Sl4Ss8A04kFP+fxHSxMDIS9jYVEZtU1FNCFuBA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/overflow@1.0.0':
+ resolution: {integrity: sha512-GSlBeoE0XTBi5cf3zl8Qh7Uqhn7v8RrlJ8ajeVpEkNe94HWy5l5BQ0Mwn2TVUq9gdgbfEMUmTX7tJFAg7mz0Rw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/pagination@1.2.0':
+ resolution: {integrity: sha512-YcpUFE8dMLfSo6OARJlK6DbHHvrxz7pMGPGmC/caZSJJz6HRKHC1RPP001PRHCvG9Z/veD039uOQmazVuLJzlw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/picker@1.8.0':
+ resolution: {integrity: sha512-ek4efrIy+peC8WFJg6Lg7c+WNkykr+wUGQGBNoKmlF0K752aIJuaPcBj6p8CceT9vSJ9gOeeclQCBQIFWVDk1A==}
+ engines: {node: '>=12.x'}
+ peerDependencies:
+ date-fns: '>= 2.x'
+ dayjs: '>= 1.x'
+ luxon: '>= 3.x'
+ moment: '>= 2.x'
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ peerDependenciesMeta:
+ date-fns:
+ optional: true
+ dayjs:
+ optional: true
+ luxon:
+ optional: true
+ moment:
+ optional: true
+
+ '@rc-component/portal@2.2.0':
+ resolution: {integrity: sha512-oc6FlA+uXCMiwArHsJyHcIkX4q6uKyndrPol2eWX8YPkAnztHOPsFIRtmWG4BMlGE5h7YIRE3NiaJ5VS8Lb1QQ==}
+ engines: {node: '>=12.x'}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/progress@1.0.2':
+ resolution: {integrity: sha512-WZUnH9eGxH1+xodZKqdrHke59uyGZSWgj5HBM5Kwk5BrTMuAORO7VJ2IP5Qbm9aH3n9x3IcesqHHR0NWPBC7fQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/qrcode@1.1.1':
+ resolution: {integrity: sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/rate@1.0.1':
+ resolution: {integrity: sha512-bkXxeBqDpl5IOC7yL7GcSYjQx9G8H+6kLYQnNZWeBYq2OYIv1MONd6mqKTjnnJYpV0cQIU2z3atdW0j1kttpTw==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/resize-observer@1.1.1':
+ resolution: {integrity: sha512-NfXXMmiR+SmUuKE1NwJESzEUYUFWIDUn2uXpxCTOLwiRUUakd62DRNFjRJArgzyFW8S5rsL4aX5XlyIXyC/vRA==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/segmented@1.2.3':
+ resolution: {integrity: sha512-L7G4S6zUpqHclOXK0wKKN2/VyqHa9tfDNxkoFjWOTPtQ0ROFaBwZhbf1+9sdZfIFkxJkpcShAmDOMEIBaFFqkw==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@rc-component/select@1.3.6':
+ resolution: {integrity: sha512-CzbJ9TwmWcF5asvTMZ9BMiTE9CkkrigeOGRPpzCNmeZP7KBwwmYrmOIiKh9tMG7d6DyGAEAQ75LBxzPx+pGTHA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ '@rc-component/slider@1.0.1':
+ resolution: {integrity: sha512-uDhEPU1z3WDfCJhaL9jfd2ha/Eqpdfxsn0Zb0Xcq1NGQAman0TWaR37OWp2vVXEOdV2y0njSILTMpTfPV1454g==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/steps@1.2.2':
+ resolution: {integrity: sha512-/yVIZ00gDYYPHSY0JP+M+s3ZvuXLu2f9rEjQqiUDs7EcYsUYrpJ/1bLj9aI9R7MBR3fu/NGh6RM9u2qGfqp+Nw==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/switch@1.0.3':
+ resolution: {integrity: sha512-Jgi+EbOBquje/XNdofr7xbJQZPYJP+BlPfR0h+WN4zFkdtB2EWqEfvkXJWeipflwjWip0/17rNbxEAqs8hVHfw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/table@1.9.1':
+ resolution: {integrity: sha512-FVI5ZS/GdB3BcgexfCYKi3iHhZS3Fr59EtsxORszYGrfpH1eWr33eDNSYkVfLI6tfJ7vftJDd9D5apfFWqkdJg==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/tabs@1.7.0':
+ resolution: {integrity: sha512-J48cs2iBi7Ho3nptBxxIqizEliUC+ExE23faspUQKGQ550vaBlv3aGF8Epv/UB1vFWeoJDTW/dNzgIU0Qj5i/w==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/textarea@1.1.2':
+ resolution: {integrity: sha512-9rMUEODWZDMovfScIEHXWlVZuPljZ2pd1LKNjslJVitn4SldEzq5vO1CL3yy3Dnib6zZal2r2DPtjy84VVpF6A==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/tooltip@1.4.0':
+ resolution: {integrity: sha512-8Rx5DCctIlLI4raR0I0xHjVTf1aF48+gKCNeAAo5bmF5VoR5YED+A/XEqzXv9KKqrJDRcd3Wndpxh2hyzrTtSg==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/tour@2.2.1':
+ resolution: {integrity: sha512-BUCrVikGJsXli38qlJ+h2WyDD6dYxzDA9dV3o0ij6gYhAq6ooT08SUMWOikva9v4KZ2BEuluGl5bPcsjrSoBgQ==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/tree-select@1.4.0':
+ resolution: {integrity: sha512-I3UAlO2hNqy9CSKc8EBaESgnmKk2QaRzuZ2XHZGFCgsSMkGl06mdF97sVfROM02YIb64ocgLKefsjE0Ch4ocwQ==}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ '@rc-component/tree@1.1.0':
+ resolution: {integrity: sha512-HZs3aOlvFgQdgrmURRc/f4IujiNBf4DdEeXUlkS0lPoLlx9RoqsZcF0caXIAMVb+NaWqKtGQDnrH8hqLCN5zlA==}
+ engines: {node: '>=10.x'}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ '@rc-component/trigger@3.9.0':
+ resolution: {integrity: sha512-X8btpwfrT27AgrZVOz4swclhEHTZcqaHeQMXXBgveagOiakTa36uObXbdwerXffgV8G9dH1fAAE0DHtVQs8EHg==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/upload@1.1.0':
+ resolution: {integrity: sha512-LIBV90mAnUE6VK5N4QvForoxZc4XqEYZimcp7fk+lkE4XwHHyJWxpIXQQwMU8hJM+YwBbsoZkGksL1sISWHQxw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/util@1.7.0':
+ resolution: {integrity: sha512-tIvIGj4Vl6fsZFvWSkYw9sAfiCKUXMyhVz6kpKyZbwyZyRPqv2vxYZROdaO1VB4gqTNvUZFXh6i3APUiterw5g==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
+ '@rc-component/virtual-list@1.0.2':
+ resolution: {integrity: sha512-uvTol/mH74FYsn5loDGJxo+7kjkO4i+y4j87Re1pxJBs0FaeuMuLRzQRGaXwnMcV1CxpZLi2Z56Rerj2M00fjQ==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
'@react-aria/focus@3.21.3':
resolution: {integrity: sha512-FsquWvjSCwC2/sBk4b+OqJyONETUIXQ2vM0YdPAuC+QFQh2DT6TIBo6dOZVSezlhudDla69xFBd6JvCFq1AbUw==}
peerDependencies:
@@ -3601,6 +3944,12 @@ packages:
resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
engines: {node: '>=14'}
+ antd@6.1.0:
+ resolution: {integrity: sha512-RIe4W5saaL9SWgvqCcvz6LZta/KwT50B0YF7xYiWVZh0Gqfw2rJAsOMcp202Hxgm+YiyoSp4QqqvexKhuGGarw==}
+ peerDependencies:
+ react: '>=18.0.0'
+ react-dom: '>=18.0.0'
+
any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
@@ -3751,6 +4100,9 @@ packages:
resolution: {integrity: sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg==}
engines: {node: ^18.12.0 || >= 20.9.0}
+ canyon-data@2.0.0-beta.36:
+ resolution: {integrity: sha512-ctkQ4QQaUjsbPyAU887ibLYLgTLvfqueL24WKH2q9s8BDW1mo8xmTS/fr3aydZNVBNxTcZAzSApu7rwSjb+bAQ==}
+
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -3942,6 +4294,9 @@ packages:
compare-versions@6.1.1:
resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
+ compute-scroll-into-view@3.1.1:
+ resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
+
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
@@ -4952,6 +5307,9 @@ packages:
hermes-parser@0.25.1:
resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
+ highlight-words-core@1.2.3:
+ resolution: {integrity: sha512-m1O9HW3/GNHxzSIXWw1wCNXXsgLlxrP0OI6+ycGUhiUHkikqW3OrwVHz+lxeNBe5yqLESdIcj8PowHQ2zLvUvQ==}
+
highlight.js@10.7.3:
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
@@ -5153,6 +5511,9 @@ packages:
engines: {node: '>=14.16'}
hasBin: true
+ is-mobile@5.0.0:
+ resolution: {integrity: sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==}
+
is-node-process@1.2.0:
resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
@@ -5193,6 +5554,10 @@ packages:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines: {node: '>=10'}
+ istanbul-lib-source-maps@5.0.6:
+ resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
+ engines: {node: '>=10'}
+
istanbul-reports@3.2.0:
resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
engines: {node: '>=8'}
@@ -5302,6 +5667,9 @@ packages:
json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+ json2mq@0.2.0:
+ resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==}
+
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
@@ -5549,6 +5917,9 @@ packages:
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+ memoize-one@4.0.3:
+ resolution: {integrity: sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==}
+
memoize-one@5.2.1:
resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
@@ -5922,6 +6293,9 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
+ parse-diff@0.11.1:
+ resolution: {integrity: sha512-Oq4j8LAOPOcssanQkIjxosjATBIEJhCxMCxPhMu+Ci4wdNmAEdx0O+a7gzbR2PyKXgKPvRLIN5g224+dJAsKHA==}
+
parse-entities@2.0.0:
resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
@@ -6205,6 +6579,11 @@ packages:
resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==}
engines: {node: ^20.9.0 || >=22}
+ react-dom@19.2.3:
+ resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==}
+ peerDependencies:
+ react: ^19.2.3
+
react-dom@19.2.4:
resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
peerDependencies:
@@ -6230,6 +6609,11 @@ packages:
react-fast-compare@3.2.2:
resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
+ react-highlight-words@0.21.0:
+ resolution: {integrity: sha512-SdWEeU9fIINArEPO1rO5OxPyuhdEKZQhHzZZP1ie6UeXQf+CjycT1kWaB+9bwGcVbR0NowuHK3RqgqNg6bgBDQ==}
+ peerDependencies:
+ react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 || ^19.0.0-0
+
react-hotkeys-hook@4.6.2:
resolution: {integrity: sha512-FmP+ZriY3EG59Ug/lxNfrObCnW9xQShgk7Nb83+CkpfkcCpfS95ydv+E9JuXA5cp8KtskU7LGlIARpkc92X22Q==}
peerDependencies:
@@ -6258,6 +6642,9 @@ packages:
react-is@17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
react-markdown@9.1.0:
resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==}
peerDependencies:
@@ -6371,6 +6758,10 @@ packages:
react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react@19.2.3:
+ resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
+ engines: {node: '>=0.10.0'}
+
react@19.2.4:
resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
engines: {node: '>=0.10.0'}
@@ -6548,6 +6939,9 @@ packages:
resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==}
engines: {node: '>=0.10.0'}
+ scroll-into-view-if-needed@3.1.0:
+ resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
+
scslre@0.3.0:
resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
engines: {node: ^14.0.0 || >=16.0.0}
@@ -6714,6 +7108,9 @@ packages:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
+ string-convert@0.2.1:
+ resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==}
+
string-ts@2.3.1:
resolution: {integrity: sha512-xSJq+BS52SaFFAVxuStmx6n5aYZU571uYUnUrPXkPFCfdHyZMMlbP2v2Wx5sNBnAVzq/2+0+mcBLBa3Xa5ubYw==}
@@ -6863,6 +7260,10 @@ packages:
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+ throttle-debounce@5.0.2:
+ resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
+ engines: {node: '>=12.22'}
+
tiny-invariant@1.2.0:
resolution: {integrity: sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==}
@@ -7656,6 +8057,52 @@ snapshots:
idb: 8.0.3
tslib: 2.8.1
+ '@ant-design/colors@8.0.1':
+ dependencies:
+ '@ant-design/fast-color': 3.0.1
+
+ '@ant-design/cssinjs-utils@2.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@ant-design/cssinjs': 2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@babel/runtime': 7.28.6
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ '@emotion/hash': 0.8.0
+ '@emotion/unitless': 0.7.5
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ csstype: 3.2.3
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ stylis: 4.3.6
+
+ '@ant-design/fast-color@3.0.1': {}
+
+ '@ant-design/icons-svg@4.4.2': {}
+
+ '@ant-design/icons@6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@ant-design/colors': 8.0.1
+ '@ant-design/icons-svg': 4.4.2
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@ant-design/react-slick@2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ clsx: 2.1.1
+ json2mq: 0.2.0
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ throttle-debounce: 5.0.2
+
'@antfu/eslint-config@7.0.1(@eslint-react/eslint-plugin@2.7.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(@next/eslint-plugin-next@16.1.5)(@vue/compiler-sfc@3.5.27)(eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.7)))(eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@1.21.7)))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)(vitest@4.0.17)':
dependencies:
'@antfu/install-pkg': 1.1.0
@@ -7848,6 +8295,51 @@ snapshots:
'@braintree/sanitize-url@7.1.1': {}
+ '@canyonjs/report-component@0.0.10(luxon@3.7.2)':
+ dependencies:
+ '@ant-design/icons': 6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@ibm/plex-mono': 1.1.0
+ antd: 6.1.0(luxon@3.7.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ canyon-data: 2.0.0-beta.36
+ monaco-editor: 0.55.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ react-highlight-words: 0.21.0(react@19.2.3)
+ transitivePeerDependencies:
+ - date-fns
+ - luxon
+ - moment
+ - supports-color
+
+ '@canyonjs/report-html@1.0.12(luxon@3.7.2)':
+ dependencies:
+ '@canyonjs/report-component': 0.0.10(luxon@3.7.2)
+ '@ibm/plex-mono': 1.1.0
+ canyon-data: 2.0.0-beta.36
+ debug: 4.4.3
+ istanbul-lib-report: 3.0.1
+ monaco-editor: 0.55.1
+ parse-diff: 0.11.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ transitivePeerDependencies:
+ - date-fns
+ - luxon
+ - moment
+ - supports-color
+
+ '@canyonjs/report@1.0.3(luxon@3.7.2)':
+ dependencies:
+ '@canyonjs/report-html': 1.0.12(luxon@3.7.2)
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ parse-diff: 0.11.1
+ transitivePeerDependencies:
+ - date-fns
+ - luxon
+ - moment
+ - supports-color
+
'@chevrotain/cst-dts-gen@11.0.3':
dependencies:
'@chevrotain/gast': 11.0.3
@@ -7983,6 +8475,10 @@ snapshots:
'@emoji-mart/data@1.2.1': {}
+ '@emotion/hash@0.8.0': {}
+
+ '@emotion/unitless@0.7.5': {}
+
'@epic-web/invariant@1.0.0': {}
'@es-joy/jsdoccomment@0.78.0':
@@ -8328,6 +8824,12 @@ snapshots:
'@humanwhocodes/retry@0.4.3': {}
+ '@ibm/plex-mono@1.1.0':
+ dependencies:
+ '@ibm/telemetry-js': 1.11.0
+
+ '@ibm/telemetry-js@1.11.0': {}
+
'@iconify/types@2.0.0': {}
'@iconify/utils@3.1.0':
@@ -9315,6 +9817,353 @@ snapshots:
optionalDependencies:
'@types/react': 19.2.9
+ '@rc-component/async-validator@5.1.0':
+ dependencies:
+ '@babel/runtime': 7.28.6
+
+ '@rc-component/cascader@1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/select': 1.3.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/tree': 1.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/checkbox@1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/collapse@1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/color-picker@3.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@ant-design/fast-color': 3.0.1
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/context@2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/dialog@1.5.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/drawer@1.3.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/dropdown@1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/form@1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/async-validator': 5.1.0
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/image@1.5.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/input-number@1.6.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/mini-decimal': 1.1.0
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/input@1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/mentions@1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/input': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/menu': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/textarea': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/menu@1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/overflow': 1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/mini-decimal@1.1.0':
+ dependencies:
+ '@babel/runtime': 7.28.6
+
+ '@rc-component/motion@1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/mutate-observer@2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/notification@1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/overflow@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/pagination@1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/picker@1.8.0(dayjs@1.11.19)(luxon@3.7.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/overflow': 1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ optionalDependencies:
+ dayjs: 1.11.19
+ luxon: 3.7.2
+
+ '@rc-component/portal@2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/progress@1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/qrcode@1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/rate@1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/resize-observer@1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/segmented@1.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/select@1.3.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/overflow': 1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/slider@1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/steps@1.2.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/switch@1.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/table@1.9.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/context': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/tabs@1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/dropdown': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/menu': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/textarea@1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/input': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/tooltip@1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/tour@2.2.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/tree-select@1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/select': 1.3.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/tree': 1.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/tree@1.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/virtual-list': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/trigger@3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/portal': 2.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/upload@1.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
+ '@rc-component/util@1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ is-mobile: 5.0.0
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ react-is: 18.3.1
+
+ '@rc-component/virtual-list@1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@babel/runtime': 7.28.6
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+
'@react-aria/focus@3.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
'@react-aria/interactions': 3.26.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -10885,6 +11734,63 @@ snapshots:
ansis@4.2.0: {}
+ antd@6.1.0(luxon@3.7.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ dependencies:
+ '@ant-design/colors': 8.0.1
+ '@ant-design/cssinjs': 2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@ant-design/cssinjs-utils': 2.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@ant-design/fast-color': 3.0.1
+ '@ant-design/icons': 6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@ant-design/react-slick': 2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@babel/runtime': 7.28.6
+ '@rc-component/cascader': 1.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/checkbox': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/collapse': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/color-picker': 3.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/dialog': 1.5.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/drawer': 1.3.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/dropdown': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/form': 1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/image': 1.5.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/input': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/input-number': 1.6.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/mentions': 1.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/menu': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/motion': 1.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/mutate-observer': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/notification': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/pagination': 1.2.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/picker': 1.8.0(dayjs@1.11.19)(luxon@3.7.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/progress': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/qrcode': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/rate': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/resize-observer': 1.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/segmented': 1.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/select': 1.3.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/slider': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/steps': 1.2.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/switch': 1.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/table': 1.9.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/tabs': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/textarea': 1.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/tooltip': 1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/tour': 2.2.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/tree': 1.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/tree-select': 1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/trigger': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/upload': 1.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ clsx: 2.1.1
+ dayjs: 1.11.19
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ scroll-into-view-if-needed: 3.1.0
+ throttle-debounce: 5.0.2
+ transitivePeerDependencies:
+ - date-fns
+ - luxon
+ - moment
+
any-promise@1.3.0: {}
anymatch@3.1.3:
@@ -11022,6 +11928,13 @@ snapshots:
prebuild-install: 7.1.3
optional: true
+ canyon-data@2.0.0-beta.36:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-source-maps: 5.0.6
+ transitivePeerDependencies:
+ - supports-color
+
ccount@2.0.1: {}
chai@5.3.3:
@@ -11198,6 +12111,8 @@ snapshots:
compare-versions@6.1.1: {}
+ compute-scroll-into-view@3.1.1: {}
+
confbox@0.1.8: {}
confbox@0.2.2: {}
@@ -12491,6 +13406,8 @@ snapshots:
dependencies:
hermes-estree: 0.25.1
+ highlight-words-core@1.2.3: {}
+
highlight.js@10.7.3: {}
highlightjs-vue@1.0.0: {}
@@ -12655,6 +13572,8 @@ snapshots:
dependencies:
is-docker: 3.0.0
+ is-mobile@5.0.0: {}
+
is-node-process@1.2.0: {}
is-number@7.0.0: {}
@@ -12683,6 +13602,14 @@ snapshots:
make-dir: 4.0.0
supports-color: 7.2.0
+ istanbul-lib-source-maps@5.0.6:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ debug: 4.4.3
+ istanbul-lib-coverage: 3.2.2
+ transitivePeerDependencies:
+ - supports-color
+
istanbul-reports@3.2.0:
dependencies:
html-escaper: 2.0.2
@@ -12786,6 +13713,10 @@ snapshots:
json-stringify-safe@5.0.1: {}
+ json2mq@0.2.0:
+ dependencies:
+ string-convert: 0.2.1
+
json5@2.2.3: {}
jsonc-eslint-parser@2.4.2:
@@ -13173,6 +14104,8 @@ snapshots:
mdn-data@2.12.2: {}
+ memoize-one@4.0.3: {}
+
memoize-one@5.2.1: {}
merge-stream@2.0.0: {}
@@ -13719,6 +14652,8 @@ snapshots:
dependencies:
callsites: 3.1.0
+ parse-diff@0.11.1: {}
+
parse-entities@2.0.0:
dependencies:
character-entities: 1.2.4
@@ -14013,6 +14948,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ react-dom@19.2.3(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ scheduler: 0.27.0
+
react-dom@19.2.4(react@19.2.4):
dependencies:
react: 19.2.4
@@ -14038,6 +14978,12 @@ snapshots:
react-fast-compare@3.2.2: {}
+ react-highlight-words@0.21.0(react@19.2.3):
+ dependencies:
+ highlight-words-core: 1.2.3
+ memoize-one: 4.0.3
+ react: 19.2.3
+
react-hotkeys-hook@4.6.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
@@ -14058,6 +15004,8 @@ snapshots:
react-is@17.0.2: {}
+ react-is@18.3.1: {}
+
react-markdown@9.1.0(@types/react@19.2.9)(react@19.2.4):
dependencies:
'@types/hast': 3.0.4
@@ -14200,6 +15148,8 @@ snapshots:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
+ react@19.2.3: {}
+
react@19.2.4: {}
reactflow@11.11.4(@types/react@19.2.9)(immer@11.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
@@ -14480,6 +15430,10 @@ snapshots:
screenfull@5.2.0: {}
+ scroll-into-view-if-needed@3.1.0:
+ dependencies:
+ compute-scroll-into-view: 3.1.1
+
scslre@0.3.0:
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -14691,6 +15645,8 @@ snapshots:
string-argv@0.3.2: {}
+ string-convert@0.2.1: {}
+
string-ts@2.3.1: {}
string-width@4.2.3:
@@ -14860,6 +15816,8 @@ snapshots:
dependencies:
any-promise: 1.3.0
+ throttle-debounce@5.0.2: {}
+
tiny-invariant@1.2.0: {}
tiny-invariant@1.3.3: {}
diff --git a/web/service/knowledge/use-document.ts b/web/service/knowledge/use-document.ts
index 1f1fc7a21922e4..74c9a77bcf5e03 100644
--- a/web/service/knowledge/use-document.ts
+++ b/web/service/knowledge/use-document.ts
@@ -107,6 +107,18 @@ export const useSyncDocument = () => {
})
}
+export const useDocumentSummary = () => {
+ return useMutation({
+ mutationFn: ({ datasetId, documentIds, documentId }: UpdateDocumentBatchParams) => {
+ return post(`/datasets/${datasetId}/documents/generate-summary`, {
+ body: {
+ document_list: documentId ? [documentId] : documentIds!,
+ },
+ })
+ },
+ })
+}
+
export const useSyncWebsite = () => {
return useMutation({
mutationFn: ({ datasetId, documentId }: UpdateDocumentBatchParams) => {
diff --git a/web/vitest.config.ts b/web/vitest.config.ts
index c58a92f217af0a..0818f3b8d7e5f9 100644
--- a/web/vitest.config.ts
+++ b/web/vitest.config.ts
@@ -8,7 +8,7 @@ export default mergeConfig(viteConfig, defineConfig({
setupFiles: ['./vitest.setup.ts'],
coverage: {
provider: 'v8',
- reporter: ['text', 'json', 'json-summary'],
+ reporter: ['text', 'json', 'json-summary','@canyonjs/report'],
},
},
}))