@incremark/svelte 0.2.6 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +274 -0
- package/dist/ThemeProvider.svelte +4 -1
- package/dist/ThemeProvider.svelte.d.ts.map +1 -1
- package/dist/components/AutoScrollContainer.svelte +18 -18
- package/dist/components/ConfigProvider.svelte +18 -0
- package/dist/components/ConfigProvider.svelte.d.ts +9 -0
- package/dist/components/ConfigProvider.svelte.d.ts.map +1 -0
- package/dist/components/Incremark.svelte +63 -72
- package/dist/components/Incremark.svelte.d.ts +5 -7
- package/dist/components/Incremark.svelte.d.ts.map +1 -1
- package/dist/components/IncremarkCode.svelte +28 -251
- package/dist/components/IncremarkCode.svelte.d.ts +4 -1
- package/dist/components/IncremarkCode.svelte.d.ts.map +1 -1
- package/dist/components/IncremarkCodeDefault.svelte +115 -0
- package/dist/components/IncremarkCodeDefault.svelte.d.ts +18 -0
- package/dist/components/IncremarkCodeDefault.svelte.d.ts.map +1 -0
- package/dist/components/IncremarkCodeMermaid.svelte +148 -0
- package/dist/components/IncremarkCodeMermaid.svelte.d.ts +14 -0
- package/dist/components/IncremarkCodeMermaid.svelte.d.ts.map +1 -0
- package/dist/components/IncremarkContent.svelte +115 -0
- package/dist/components/IncremarkContent.svelte.d.ts +5 -0
- package/dist/components/IncremarkContent.svelte.d.ts.map +1 -0
- package/dist/components/IncremarkFootnotes.svelte +4 -8
- package/dist/components/IncremarkFootnotes.svelte.d.ts.map +1 -1
- package/dist/components/IncremarkInline.svelte +3 -3
- package/dist/components/IncremarkList.svelte +1 -0
- package/dist/components/IncremarkRenderer.svelte +4 -0
- package/dist/components/IncremarkRenderer.svelte.d.ts +2 -0
- package/dist/components/IncremarkRenderer.svelte.d.ts.map +1 -1
- package/dist/components/IncremarkTable.svelte +6 -9
- package/dist/components/IncremarkTable.svelte.d.ts.map +1 -1
- package/dist/components/SvgIcon.svelte +25 -0
- package/dist/components/SvgIcon.svelte.d.ts +12 -0
- package/dist/components/SvgIcon.svelte.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/types.d.ts +29 -3
- package/dist/components/types.d.ts.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/stores/{useDevTools.d.ts → useDevTools.svelte.d.ts} +1 -1
- package/dist/stores/useDevTools.svelte.d.ts.map +1 -0
- package/dist/stores/{useDevTools.js → useDevTools.svelte.js} +10 -9
- package/dist/stores/useIncremark.d.ts +4 -4
- package/dist/stores/useIncremark.d.ts.map +1 -1
- package/dist/stores/useLocale.svelte.d.ts +29 -0
- package/dist/stores/useLocale.svelte.d.ts.map +1 -0
- package/dist/stores/useLocale.svelte.js +32 -0
- package/dist/stores/useShiki.svelte.d.ts +9 -0
- package/dist/stores/useShiki.svelte.d.ts.map +1 -0
- package/dist/stores/useShiki.svelte.js +110 -0
- package/dist/stores/useTypewriter.d.ts +0 -1
- package/dist/stores/useTypewriter.d.ts.map +1 -1
- package/dist/stores/useTypewriter.js +1 -3
- package/package.json +13 -7
- package/dist/stores/useDevTools.d.ts.map +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@file IncremarkContent.svelte - 开箱即用的 Markdown 渲染组件
|
|
3
|
+
@description 自动处理流式内容和普通内容的高级组件
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import { useIncremark, type UseIncremarkOptions } from '../stores/useIncremark'
|
|
8
|
+
import type { IncremarkContentProps } from './types'
|
|
9
|
+
import Incremark from './Incremark.svelte'
|
|
10
|
+
import { get } from 'svelte/store'
|
|
11
|
+
import { untrack } from 'svelte'
|
|
12
|
+
|
|
13
|
+
let {
|
|
14
|
+
stream,
|
|
15
|
+
content,
|
|
16
|
+
components = {},
|
|
17
|
+
customContainers = {},
|
|
18
|
+
customCodeBlocks = {},
|
|
19
|
+
codeBlockConfigs = {},
|
|
20
|
+
isFinished = false,
|
|
21
|
+
incremarkOptions,
|
|
22
|
+
pendingClass = 'incremark-pending',
|
|
23
|
+
showBlockStatus = false
|
|
24
|
+
}: IncremarkContentProps = $props()
|
|
25
|
+
|
|
26
|
+
// 创建稳定的 incremark 实例
|
|
27
|
+
// 使用 untrack 读取初始值,因为 useIncremark 只需初始化一次
|
|
28
|
+
// 后续的配置更新通过 typewriter.setOptions 在 $effect 中处理
|
|
29
|
+
const incremarkInstance = untrack(() => useIncremark({
|
|
30
|
+
gfm: incremarkOptions?.gfm ?? true,
|
|
31
|
+
htmlTree: incremarkOptions?.htmlTree ?? true,
|
|
32
|
+
containers: incremarkOptions?.containers ?? true,
|
|
33
|
+
math: incremarkOptions?.math ?? true,
|
|
34
|
+
typewriter: incremarkOptions?.typewriter
|
|
35
|
+
}))
|
|
36
|
+
const { blocks, append, finalize, render, reset, isDisplayComplete, markdown, typewriter } = incremarkInstance
|
|
37
|
+
|
|
38
|
+
// 监听 incremarkOptions 的变化,更新 typewriter 配置
|
|
39
|
+
$effect(() => {
|
|
40
|
+
if (incremarkOptions?.typewriter) {
|
|
41
|
+
typewriter.setOptions(incremarkOptions.typewriter)
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
// 派生状态
|
|
46
|
+
const isStreamMode = $derived(typeof stream === 'function')
|
|
47
|
+
|
|
48
|
+
// 保存前一个 content 值用于增量更新
|
|
49
|
+
let prevContent: string | undefined = $state(undefined)
|
|
50
|
+
let isStreaming = $state(false)
|
|
51
|
+
|
|
52
|
+
async function handleStreamInput() {
|
|
53
|
+
if (!stream || isStreaming) return
|
|
54
|
+
|
|
55
|
+
isStreaming = true
|
|
56
|
+
try {
|
|
57
|
+
const streamGen = stream()
|
|
58
|
+
|
|
59
|
+
for await (const chunk of streamGen) {
|
|
60
|
+
append(chunk)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
finalize()
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error('Stream error: ', error)
|
|
66
|
+
finalize()
|
|
67
|
+
} finally {
|
|
68
|
+
isStreaming = false
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function handleContentInput(newContent?: string, oldContent?: string) {
|
|
73
|
+
if (!newContent) {
|
|
74
|
+
if (oldContent) {
|
|
75
|
+
reset()
|
|
76
|
+
}
|
|
77
|
+
return
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (newContent?.startsWith(oldContent ?? '')) {
|
|
81
|
+
const delta = newContent.slice((oldContent || '').length)
|
|
82
|
+
append(delta)
|
|
83
|
+
} else {
|
|
84
|
+
render(newContent)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 监听 content 变化
|
|
89
|
+
$effect(() => {
|
|
90
|
+
if (isStreamMode) {
|
|
91
|
+
handleStreamInput()
|
|
92
|
+
} else {
|
|
93
|
+
handleContentInput(content, prevContent)
|
|
94
|
+
}
|
|
95
|
+
prevContent = content
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
// 监听 isFinished 变化
|
|
99
|
+
$effect(() => {
|
|
100
|
+
if (isFinished && content === get(markdown)) {
|
|
101
|
+
finalize()
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
</script>
|
|
105
|
+
|
|
106
|
+
<Incremark
|
|
107
|
+
blocks={$blocks}
|
|
108
|
+
isDisplayComplete={$isDisplayComplete}
|
|
109
|
+
{pendingClass}
|
|
110
|
+
{showBlockStatus}
|
|
111
|
+
{components}
|
|
112
|
+
{customContainers}
|
|
113
|
+
{customCodeBlocks}
|
|
114
|
+
{codeBlockConfigs}
|
|
115
|
+
/>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IncremarkContentProps } from './types';
|
|
2
|
+
declare const IncremarkContent: import("svelte").Component<IncremarkContentProps, {}, "">;
|
|
3
|
+
type IncremarkContent = ReturnType<typeof IncremarkContent>;
|
|
4
|
+
export default IncremarkContent;
|
|
5
|
+
//# sourceMappingURL=IncremarkContent.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IncremarkContent.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkContent.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AA+GpD,QAAA,MAAM,gBAAgB,2DAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
|
|
@@ -4,26 +4,22 @@
|
|
|
4
4
|
-->
|
|
5
5
|
|
|
6
6
|
<script lang="ts">
|
|
7
|
-
import type {
|
|
8
|
-
import type { FootnoteDefinition, RootContent } from 'mdast'
|
|
7
|
+
import type { RootContent } from 'mdast'
|
|
9
8
|
import { getDefinitionsContext } from '../context/definitionsContext'
|
|
10
9
|
import IncremarkRenderer from './IncremarkRenderer.svelte'
|
|
11
10
|
|
|
12
|
-
|
|
13
11
|
const context = getDefinitionsContext()
|
|
14
|
-
|
|
15
|
-
const footnoteReferenceOrder =
|
|
12
|
+
// 解构 store 以便使用 $ 语法订阅
|
|
13
|
+
const { footnoteDefinitions, footnoteReferenceOrder } = context
|
|
16
14
|
|
|
17
15
|
/**
|
|
18
16
|
* 按引用顺序排列的脚注列表
|
|
19
17
|
* 只显示已有定义的脚注
|
|
20
18
|
*/
|
|
21
19
|
const orderedFootnotes = $derived.by(() => {
|
|
22
|
-
if (!footnoteReferenceOrder || !footnoteDefinitions) {
|
|
23
|
-
return []
|
|
24
|
-
}
|
|
25
20
|
const order = $footnoteReferenceOrder
|
|
26
21
|
const definitions = $footnoteDefinitions
|
|
22
|
+
|
|
27
23
|
return order
|
|
28
24
|
.map(identifier => ({
|
|
29
25
|
identifier,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncremarkFootnotes.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkFootnotes.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"IncremarkFootnotes.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkFootnotes.svelte.ts"],"names":[],"mappings":"AAuEA,QAAA,MAAM,kBAAkB,2DAAwC,CAAC;AACjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAChE,eAAe,kBAAkB,CAAC"}
|
|
@@ -69,10 +69,10 @@
|
|
|
69
69
|
return (node as unknown as MathNode).type === 'inlineMath'
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
// 获取 definitions context
|
|
73
|
-
// 使用 $derived 来确保响应式
|
|
72
|
+
// 获取 definitions context
|
|
74
73
|
const context = getDefinitionsContext()
|
|
75
|
-
|
|
74
|
+
// 解构 store 以便使用 $ 语法订阅
|
|
75
|
+
const { definations } = context
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
/**
|
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
interface Props {
|
|
24
24
|
/** 要渲染的节点 */
|
|
25
25
|
node: RootContent | ContainerNode
|
|
26
|
+
/** 自定义组件映射,key 为节点类型 */
|
|
27
|
+
components?: Record<string, any>
|
|
26
28
|
customContainers?: Record<string, any>
|
|
27
29
|
customCodeBlocks?: Record<string, any>
|
|
28
30
|
codeBlockConfigs?: Record<string, { takeOver?: boolean }>
|
|
@@ -31,6 +33,7 @@
|
|
|
31
33
|
|
|
32
34
|
let {
|
|
33
35
|
node,
|
|
36
|
+
components,
|
|
34
37
|
customContainers,
|
|
35
38
|
customCodeBlocks,
|
|
36
39
|
codeBlockConfigs,
|
|
@@ -95,6 +98,7 @@
|
|
|
95
98
|
customCodeBlocks={customCodeBlocks}
|
|
96
99
|
codeBlockConfigs={codeBlockConfigs}
|
|
97
100
|
blockStatus={blockStatus}
|
|
101
|
+
defaultCodeComponent={components?.['code']}
|
|
98
102
|
/>
|
|
99
103
|
{:else}
|
|
100
104
|
<!-- 其他节点:使用对应组件 -->
|
|
@@ -6,6 +6,8 @@ import { type ContainerNode } from './IncremarkContainer.svelte';
|
|
|
6
6
|
interface Props {
|
|
7
7
|
/** 要渲染的节点 */
|
|
8
8
|
node: RootContent | ContainerNode;
|
|
9
|
+
/** 自定义组件映射,key 为节点类型 */
|
|
10
|
+
components?: Record<string, any>;
|
|
9
11
|
customContainers?: Record<string, any>;
|
|
10
12
|
customCodeBlocks?: Record<string, any>;
|
|
11
13
|
codeBlockConfigs?: Record<string, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncremarkRenderer.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkRenderer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAQ,MAAM,OAAO,CAAA;AAW9C,OAA2B,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGnF;;GAEG;AACH,UAAU,KAAK;IACb,aAAa;IACb,IAAI,EAAE,WAAW,GAAG,aAAa,CAAA;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACzD,WAAW,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAA;CACjD;
|
|
1
|
+
{"version":3,"file":"IncremarkRenderer.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkRenderer.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAQ,MAAM,OAAO,CAAA;AAW9C,OAA2B,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGnF;;GAEG;AACH,UAAU,KAAK;IACb,aAAa;IACb,IAAI,EAAE,WAAW,GAAG,aAAa,CAAA;IACjC,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACzD,WAAW,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAA;CACjD;AAyFH,QAAA,MAAM,iBAAiB,2CAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
|
|
@@ -28,15 +28,13 @@
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* 获取单元格对齐类名
|
|
32
32
|
*
|
|
33
33
|
* @param cellIndex - 单元格索引
|
|
34
|
-
* @returns
|
|
34
|
+
* @returns 对齐方式类名
|
|
35
35
|
*/
|
|
36
|
-
function
|
|
37
|
-
return {
|
|
38
|
-
textAlign: node.align?.[cellIndex] || 'left'
|
|
39
|
-
}
|
|
36
|
+
function getCellAlignClass(cellIndex: number): string {
|
|
37
|
+
return `incremark-table-align-${node.align?.[cellIndex] || 'left'}`
|
|
40
38
|
}
|
|
41
39
|
|
|
42
40
|
/**
|
|
@@ -56,7 +54,7 @@
|
|
|
56
54
|
{#if headerRow}
|
|
57
55
|
<tr>
|
|
58
56
|
{#each headerRow.children as cell, cellIndex (cellIndex)}
|
|
59
|
-
<th
|
|
57
|
+
<th class={getCellAlignClass(cellIndex)}>
|
|
60
58
|
<IncremarkInline nodes={getCellContent(cell)} />
|
|
61
59
|
</th>
|
|
62
60
|
{/each}
|
|
@@ -67,7 +65,7 @@
|
|
|
67
65
|
{#each bodyRows as row, rowIndex (rowIndex)}
|
|
68
66
|
<tr>
|
|
69
67
|
{#each row.children as cell, cellIndex (cellIndex)}
|
|
70
|
-
<td
|
|
68
|
+
<td class={getCellAlignClass(cellIndex)}>
|
|
71
69
|
<IncremarkInline nodes={getCellContent(cell)} />
|
|
72
70
|
</td>
|
|
73
71
|
{/each}
|
|
@@ -76,4 +74,3 @@
|
|
|
76
74
|
</tbody>
|
|
77
75
|
</table>
|
|
78
76
|
</div>
|
|
79
|
-
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncremarkTable.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkTable.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAA8B,MAAM,OAAO,CAAA;AAI5D;;GAEG;AACH,UAAU,KAAK;IACb,WAAW;IACX,IAAI,EAAE,KAAK,CAAA;CACZ;
|
|
1
|
+
{"version":3,"file":"IncremarkTable.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkTable.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAA8B,MAAM,OAAO,CAAA;AAI5D;;GAEG;AACH,UAAU,KAAK;IACb,WAAW;IACX,IAAI,EAAE,KAAK,CAAA;CACZ;AAsEH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SvgIcon 组件
|
|
3
|
+
|
|
4
|
+
直接渲染 SVG 字符串
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
interface Props {
|
|
8
|
+
/** SVG 字符串内容 */
|
|
9
|
+
svg: string
|
|
10
|
+
/** 图标大小 class,如 incremark-icon--sm, incremark-icon--md 等 */
|
|
11
|
+
sizeClass?: string
|
|
12
|
+
/** 自定义类名 */
|
|
13
|
+
class?: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
svg,
|
|
18
|
+
sizeClass,
|
|
19
|
+
class: className
|
|
20
|
+
}: Props = $props()
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<span class="incremark-icon {sizeClass || ''} {className || ''}" aria-hidden="true">
|
|
24
|
+
{@html svg}
|
|
25
|
+
</span>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
/** SVG 字符串内容 */
|
|
3
|
+
svg: string;
|
|
4
|
+
/** 图标大小 class,如 incremark-icon--sm, incremark-icon--md 等 */
|
|
5
|
+
sizeClass?: string;
|
|
6
|
+
/** 自定义类名 */
|
|
7
|
+
class?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const SvgIcon: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type SvgIcon = ReturnType<typeof SvgIcon>;
|
|
11
|
+
export default SvgIcon;
|
|
12
|
+
//# sourceMappingURL=SvgIcon.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SvgIcon.svelte.d.ts","sourceRoot":"","sources":["../../src/components/SvgIcon.svelte.ts"],"names":[],"mappings":"AAGE,UAAU,KAAK;IACb,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAkBH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @description 导出所有组件
|
|
4
4
|
*/
|
|
5
5
|
export { default as Incremark } from './Incremark.svelte';
|
|
6
|
+
export { default as IncremarkContent } from './IncremarkContent.svelte';
|
|
6
7
|
export { default as IncremarkParagraph } from './IncremarkParagraph.svelte';
|
|
7
8
|
export { default as IncremarkInline } from './IncremarkInline.svelte';
|
|
8
9
|
export { default as IncremarkHeading } from './IncremarkHeading.svelte';
|
|
@@ -17,5 +18,5 @@ export { default as IncremarkFootnotes } from './IncremarkFootnotes.svelte';
|
|
|
17
18
|
export { default as IncremarkDefault } from './IncremarkDefault.svelte';
|
|
18
19
|
export { default as IncremarkRenderer } from './IncremarkRenderer.svelte';
|
|
19
20
|
export { default as AutoScrollContainer } from './AutoScrollContainer.svelte';
|
|
20
|
-
export type { ComponentMap,
|
|
21
|
+
export type { ComponentMap, RenderableBlock, IncremarkContentProps, CodeBlockConfig } from './types';
|
|
21
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAC7E,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACnF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAC/E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAE7E,YAAY,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAC7E,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACnF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAC/E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAE7E,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/components/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @description 导出所有组件
|
|
4
4
|
*/
|
|
5
5
|
export { default as Incremark } from './Incremark.svelte';
|
|
6
|
+
export { default as IncremarkContent } from './IncremarkContent.svelte';
|
|
6
7
|
export { default as IncremarkParagraph } from './IncremarkParagraph.svelte';
|
|
7
8
|
export { default as IncremarkInline } from './IncremarkInline.svelte';
|
|
8
9
|
export { default as IncremarkHeading } from './IncremarkHeading.svelte';
|
|
@@ -2,17 +2,43 @@
|
|
|
2
2
|
* @file Component Types - 组件类型定义
|
|
3
3
|
* @description 定义组件相关的类型
|
|
4
4
|
*/
|
|
5
|
+
import type { Component } from 'svelte';
|
|
5
6
|
import type { ParsedBlock } from '@incremark/core';
|
|
7
|
+
import type { UseIncremarkOptions } from '../stores/useIncremark';
|
|
6
8
|
/**
|
|
7
9
|
* 组件映射类型
|
|
8
10
|
* 使用 any 以支持不同类型的组件
|
|
9
11
|
*/
|
|
10
12
|
export type ComponentMap = Partial<Record<string, any>>;
|
|
11
13
|
/**
|
|
12
|
-
*
|
|
14
|
+
* 可渲染的块类型(带 isLastPending 字段用于打字机光标)
|
|
13
15
|
*/
|
|
14
|
-
export
|
|
15
|
-
stableId: string;
|
|
16
|
+
export type RenderableBlock = ParsedBlock & {
|
|
16
17
|
isLastPending?: boolean;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 代码块配置
|
|
21
|
+
*/
|
|
22
|
+
export interface CodeBlockConfig {
|
|
23
|
+
/** 是否从一开始就接管渲染,而不是等到 completed 状态 */
|
|
24
|
+
takeOver?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* IncremarkContent 组件 Props
|
|
28
|
+
*/
|
|
29
|
+
export interface IncremarkContentProps {
|
|
30
|
+
stream?: () => AsyncGenerator<string>;
|
|
31
|
+
content?: string;
|
|
32
|
+
components?: ComponentMap;
|
|
33
|
+
/** 自定义容器组件映射,key 为容器名称(如 'warning', 'info') */
|
|
34
|
+
customContainers?: Record<string, Component<any>>;
|
|
35
|
+
/** 自定义代码块组件映射,key 为代码语言名称(如 'echart', 'mermaid') */
|
|
36
|
+
customCodeBlocks?: Record<string, Component<any>>;
|
|
37
|
+
/** 代码块配置映射,key 为代码语言名称 */
|
|
38
|
+
codeBlockConfigs?: Record<string, CodeBlockConfig>;
|
|
39
|
+
isFinished?: boolean;
|
|
40
|
+
incremarkOptions?: UseIncremarkOptions;
|
|
41
|
+
pendingClass?: string;
|
|
42
|
+
showBlockStatus?: boolean;
|
|
17
43
|
}
|
|
18
44
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/components/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/components/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAEjE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;AAEvD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEvE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,cAAc,CAAC,MAAM,CAAC,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,YAAY,CAAA;IACzB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IACjD,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IACjD,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAClD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gBAAgB,CAAC,EAAE,mBAAmB,CAAA;IACtC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,13 +3,19 @@
|
|
|
3
3
|
* @description Svelte 5 集成库的导出入口
|
|
4
4
|
*/
|
|
5
5
|
export { useIncremark, type UseIncremarkOptions, type UseIncremarkReturn, type TypewriterOptions, type TypewriterControls } from './stores/useIncremark';
|
|
6
|
-
export { useDevTools, type UseDevToolsOptions } from './stores/useDevTools';
|
|
6
|
+
export { useDevTools, type UseDevToolsOptions } from './stores/useDevTools.svelte';
|
|
7
7
|
export { useBlockTransformer, type UseBlockTransformerOptions, type UseBlockTransformerReturn } from './stores/useBlockTransformer';
|
|
8
|
+
export { useLocale, type UseLocaleReturn } from './stores/useLocale.svelte';
|
|
8
9
|
export { setDefinitionsContext, getDefinitionsContext, type DefinitionsContextValue } from './context/definitionsContext';
|
|
9
|
-
export { Incremark, IncremarkParagraph, IncremarkInline, IncremarkHeading, IncremarkCode, IncremarkList, IncremarkTable, IncremarkBlockquote, IncremarkThematicBreak, IncremarkMath, IncremarkHtmlElement, IncremarkFootnotes, IncremarkDefault, IncremarkRenderer, type ComponentMap, type
|
|
10
|
+
export { Incremark, IncremarkContent, IncremarkParagraph, IncremarkInline, IncremarkHeading, IncremarkCode, IncremarkList, IncremarkTable, IncremarkBlockquote, IncremarkThematicBreak, IncremarkMath, IncremarkHtmlElement, IncremarkFootnotes, IncremarkDefault, IncremarkRenderer, type ComponentMap, type RenderableBlock, type IncremarkContentProps, type CodeBlockConfig } from './components';
|
|
10
11
|
export { default as AutoScrollContainer } from './components/AutoScrollContainer.svelte';
|
|
11
12
|
export { default as ThemeProvider } from './ThemeProvider.svelte';
|
|
13
|
+
export { default as ConfigProvider } from './components/ConfigProvider.svelte';
|
|
12
14
|
export type { ParsedBlock, IncrementalUpdate, ParserOptions, BlockStatus, Root, RootContent, SourceBlock, DisplayBlock, TransformerPlugin, TransformerOptions, TransformerState, AnimationEffect } from '@incremark/core';
|
|
13
15
|
export { BlockTransformer, createBlockTransformer, countChars, sliceAst, cloneNode, codeBlockPlugin, mermaidPlugin, imagePlugin, mathPlugin, thematicBreakPlugin, defaultPlugins, allPlugins, createPlugin } from '@incremark/core';
|
|
14
16
|
export { type DesignTokens, defaultTheme, darkTheme, generateCSSVars, mergeTheme, applyTheme } from '@incremark/theme';
|
|
17
|
+
import { en as enShared, zhCN as zhCNShared } from '@incremark/shared';
|
|
18
|
+
import type { IncremarkLocale } from '@incremark/shared';
|
|
19
|
+
export { enShared as en, zhCNShared as zhCN };
|
|
20
|
+
export type { IncremarkLocale };
|
|
15
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACxJ,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACxJ,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC/B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAG3E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAGzH,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACrB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AACxF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAG9E,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,IAAI,EACJ,WAAW,EAEX,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EAChB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,QAAQ,EACR,SAAS,EACT,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,YAAY,EACb,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,KAAK,YAAY,EACjB,YAAY,EACZ,SAAS,EACT,eAAe,EACf,UAAU,EACV,UAAU,EACX,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,EAAE,IAAI,QAAQ,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,UAAU,IAAI,IAAI,EAAE,CAAA;AAC7C,YAAY,EAAE,eAAe,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,16 +4,21 @@
|
|
|
4
4
|
*/
|
|
5
5
|
// Stores/Utilities
|
|
6
6
|
export { useIncremark } from './stores/useIncremark';
|
|
7
|
-
export { useDevTools } from './stores/useDevTools';
|
|
7
|
+
export { useDevTools } from './stores/useDevTools.svelte';
|
|
8
8
|
export { useBlockTransformer } from './stores/useBlockTransformer';
|
|
9
|
+
export { useLocale } from './stores/useLocale.svelte';
|
|
9
10
|
// Context
|
|
10
11
|
export { setDefinitionsContext, getDefinitionsContext } from './context/definitionsContext';
|
|
11
12
|
// Components
|
|
12
|
-
export { Incremark, IncremarkParagraph, IncremarkInline, IncremarkHeading, IncremarkCode, IncremarkList, IncremarkTable, IncremarkBlockquote, IncremarkThematicBreak, IncremarkMath, IncremarkHtmlElement, IncremarkFootnotes, IncremarkDefault, IncremarkRenderer } from './components';
|
|
13
|
+
export { Incremark, IncremarkContent, IncremarkParagraph, IncremarkInline, IncremarkHeading, IncremarkCode, IncremarkList, IncremarkTable, IncremarkBlockquote, IncremarkThematicBreak, IncremarkMath, IncremarkHtmlElement, IncremarkFootnotes, IncremarkDefault, IncremarkRenderer } from './components';
|
|
13
14
|
// Additional Components
|
|
14
15
|
export { default as AutoScrollContainer } from './components/AutoScrollContainer.svelte';
|
|
15
16
|
export { default as ThemeProvider } from './ThemeProvider.svelte';
|
|
17
|
+
export { default as ConfigProvider } from './components/ConfigProvider.svelte';
|
|
16
18
|
// Re-export transformer utilities and plugins
|
|
17
19
|
export { BlockTransformer, createBlockTransformer, countChars, sliceAst, cloneNode, codeBlockPlugin, mermaidPlugin, imagePlugin, mathPlugin, thematicBreakPlugin, defaultPlugins, allPlugins, createPlugin } from '@incremark/core';
|
|
18
20
|
// Re-export theme utilities
|
|
19
21
|
export { defaultTheme, darkTheme, generateCSSVars, mergeTheme, applyTheme } from '@incremark/theme';
|
|
22
|
+
// Re-export i18n utilities
|
|
23
|
+
import { en as enShared, zhCN as zhCNShared } from '@incremark/shared';
|
|
24
|
+
export { enShared as en, zhCNShared as zhCN };
|
|
@@ -30,4 +30,4 @@ export interface UseDevToolsOptions extends DevToolsOptions {
|
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
export declare function useDevTools(incremark: UseIncremarkReturn, options?: UseDevToolsOptions): import("@incremark/devtools").IncremarkDevTools;
|
|
33
|
-
//# sourceMappingURL=useDevTools.d.ts.map
|
|
33
|
+
//# sourceMappingURL=useDevTools.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDevTools.svelte.d.ts","sourceRoot":"","sources":["../../src/stores/useDevTools.svelte.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;CAAG;AAE9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,GAAE,kBAAuB,mDAkCjC"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* @file useDevTools Store - DevTools 集成
|
|
3
3
|
* @description Svelte 5 DevTools 一行接入
|
|
4
4
|
*/
|
|
5
|
-
import { onMount, onDestroy } from 'svelte';
|
|
6
5
|
import { createDevTools } from '@incremark/devtools';
|
|
7
6
|
/**
|
|
8
7
|
* Svelte 5 DevTools 一行接入
|
|
@@ -29,8 +28,8 @@ export function useDevTools(incremark, options = {}) {
|
|
|
29
28
|
// 设置 parser 的 onChange 回调
|
|
30
29
|
incremark.parser.setOnChange((state) => {
|
|
31
30
|
const blocks = [
|
|
32
|
-
...state.completedBlocks
|
|
33
|
-
...state.pendingBlocks
|
|
31
|
+
...state.completedBlocks,
|
|
32
|
+
...state.pendingBlocks
|
|
34
33
|
];
|
|
35
34
|
devtools.update({
|
|
36
35
|
blocks,
|
|
@@ -41,13 +40,15 @@ export function useDevTools(incremark, options = {}) {
|
|
|
41
40
|
isLoading: state.pendingBlocks.length > 0
|
|
42
41
|
});
|
|
43
42
|
});
|
|
44
|
-
|
|
43
|
+
// 使用 $effect 处理挂载和卸载
|
|
44
|
+
$effect(() => {
|
|
45
45
|
devtools.mount();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
// 返回清理函数
|
|
47
|
+
return () => {
|
|
48
|
+
devtools.unmount();
|
|
49
|
+
// 清理回调
|
|
50
|
+
incremark.parser.setOnChange(undefined);
|
|
51
|
+
};
|
|
51
52
|
});
|
|
52
53
|
return devtools;
|
|
53
54
|
}
|
|
@@ -30,6 +30,9 @@ export interface UseIncremarkOptions extends ParserOptions {
|
|
|
30
30
|
/** 打字机配置,传入即创建 transformer(可通过 enabled 控制是否启用) */
|
|
31
31
|
typewriter?: TypewriterOptions;
|
|
32
32
|
}
|
|
33
|
+
export type RenderableBlock = ParsedBlock & {
|
|
34
|
+
isLastPending?: boolean;
|
|
35
|
+
};
|
|
33
36
|
/**
|
|
34
37
|
* 打字机控制对象
|
|
35
38
|
*/
|
|
@@ -66,10 +69,7 @@ export interface UseIncremarkReturn {
|
|
|
66
69
|
/** 当前完整的 AST */
|
|
67
70
|
ast: Readable<Root>;
|
|
68
71
|
/** 用于渲染的 blocks(根据打字机设置自动处理) */
|
|
69
|
-
blocks: Readable<Array<
|
|
70
|
-
stableId: string;
|
|
71
|
-
isLastPending?: boolean;
|
|
72
|
-
}>>;
|
|
72
|
+
blocks: Readable<Array<RenderableBlock>>;
|
|
73
73
|
/** 是否正在加载 */
|
|
74
74
|
isLoading: Writable<boolean>;
|
|
75
75
|
/** 是否已完成(finalize) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIncremark.d.ts","sourceRoot":"","sources":["../../src/stores/useIncremark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAqB,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,IAAI,EACT,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAA;AAIxB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,gBAAgB;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY;IACZ,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,kDAAkD;IAClD,UAAU,CAAC,EAAE,iBAAiB,CAAA;CAC/B;
|
|
1
|
+
{"version":3,"file":"useIncremark.d.ts","sourceRoot":"","sources":["../../src/stores/useIncremark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IncremarkLocale } from '@incremark/shared';
|
|
2
|
+
/**
|
|
3
|
+
* Locale Context 值类型
|
|
4
|
+
* 使用函数返回 locale,以支持响应式更新
|
|
5
|
+
*/
|
|
6
|
+
export interface LocaleContextValue {
|
|
7
|
+
/** 获取当前 locale 的函数(支持响应式) */
|
|
8
|
+
getLocale: () => IncremarkLocale;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Svelte 国际化 Composable
|
|
12
|
+
*/
|
|
13
|
+
export interface UseLocaleReturn {
|
|
14
|
+
/** 翻译函数 */
|
|
15
|
+
t: (key: string) => string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 提供 locale context
|
|
19
|
+
* 必须在组件初始化时同步调用(script 顶层)
|
|
20
|
+
*
|
|
21
|
+
* @param getLocale - 获取 locale 的函数,支持响应式
|
|
22
|
+
*/
|
|
23
|
+
export declare function provideLocale(getLocale: () => IncremarkLocale): void;
|
|
24
|
+
/**
|
|
25
|
+
* 使用 locale
|
|
26
|
+
* 在子组件中调用以获取翻译函数
|
|
27
|
+
*/
|
|
28
|
+
export declare function useLocale(): UseLocaleReturn;
|
|
29
|
+
//# sourceMappingURL=useLocale.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLocale.svelte.d.ts","sourceRoot":"","sources":["../../src/stores/useLocale.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAKxD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,SAAS,EAAE,MAAM,eAAe,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW;IACX,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,eAAe,QAG7D;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,eAAe,CAiB3C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { setContext, getContext } from 'svelte';
|
|
2
|
+
import { en } from '../index';
|
|
3
|
+
const LOCALE_KEY = Symbol('incremark-locale');
|
|
4
|
+
/**
|
|
5
|
+
* 提供 locale context
|
|
6
|
+
* 必须在组件初始化时同步调用(script 顶层)
|
|
7
|
+
*
|
|
8
|
+
* @param getLocale - 获取 locale 的函数,支持响应式
|
|
9
|
+
*/
|
|
10
|
+
export function provideLocale(getLocale) {
|
|
11
|
+
const contextValue = { getLocale };
|
|
12
|
+
setContext(LOCALE_KEY, contextValue);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 使用 locale
|
|
16
|
+
* 在子组件中调用以获取翻译函数
|
|
17
|
+
*/
|
|
18
|
+
export function useLocale() {
|
|
19
|
+
const context = getContext(LOCALE_KEY);
|
|
20
|
+
// 获取当前 locale(支持响应式更新)
|
|
21
|
+
const getLocale = context?.getLocale ?? (() => en);
|
|
22
|
+
const t = (key) => {
|
|
23
|
+
const locale = getLocale();
|
|
24
|
+
const keys = key.split('.');
|
|
25
|
+
let value = locale;
|
|
26
|
+
for (const k of keys) {
|
|
27
|
+
value = value?.[k];
|
|
28
|
+
}
|
|
29
|
+
return value || key;
|
|
30
|
+
};
|
|
31
|
+
return { t };
|
|
32
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 使用 Shiki Highlighter
|
|
3
|
+
* @param themeGetter 传入一个返回主题字符串的函数,例如 () => theme
|
|
4
|
+
*/
|
|
5
|
+
export declare function useShiki(themeGetter: () => string): {
|
|
6
|
+
readonly isHighlighting: boolean;
|
|
7
|
+
highlight: (code: string, lang: string, fallbackTheme: string) => Promise<string>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useShiki.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useShiki.svelte.d.ts","sourceRoot":"","sources":["../../src/stores/useShiki.svelte.ts"],"names":[],"mappings":"AA+FA;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM;;sBAOjB,MAAM,QAAQ,MAAM,iBAAiB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;EAgC7F"}
|