@incremark/svelte 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/components/CachedCodeRenderer.svelte +120 -0
  2. package/dist/components/CachedCodeRenderer.svelte.d.ts +10 -0
  3. package/dist/components/CachedCodeRenderer.svelte.d.ts.map +1 -0
  4. package/dist/components/ConfigProvider.svelte +5 -4
  5. package/dist/components/ConfigProvider.svelte.d.ts +1 -1
  6. package/dist/components/ConfigProvider.svelte.d.ts.map +1 -1
  7. package/dist/components/Incremark.svelte +10 -37
  8. package/dist/components/Incremark.svelte.d.ts +1 -1
  9. package/dist/components/Incremark.svelte.d.ts.map +1 -1
  10. package/dist/components/IncremarkCode.svelte +8 -6
  11. package/dist/components/IncremarkCode.svelte.d.ts.map +1 -1
  12. package/dist/components/IncremarkCodeDefault.svelte +60 -31
  13. package/dist/components/IncremarkCodeDefault.svelte.d.ts +2 -0
  14. package/dist/components/IncremarkCodeDefault.svelte.d.ts.map +1 -1
  15. package/dist/components/IncremarkContent.svelte +44 -18
  16. package/dist/components/IncremarkContent.svelte.d.ts.map +1 -1
  17. package/dist/components/IncremarkFootnotes.svelte +3 -6
  18. package/dist/components/IncremarkFootnotes.svelte.d.ts.map +1 -1
  19. package/dist/components/IncremarkInline.svelte +9 -10
  20. package/dist/components/IncremarkInline.svelte.d.ts.map +1 -1
  21. package/dist/components/types.d.ts +1 -1
  22. package/dist/components/types.d.ts.map +1 -1
  23. package/dist/context/{definitionsContext.d.ts → definitionsContext.svelte.d.ts} +13 -11
  24. package/dist/context/definitionsContext.svelte.d.ts.map +1 -0
  25. package/dist/context/{definitionsContext.js → definitionsContext.svelte.js} +18 -15
  26. package/dist/index.d.ts +5 -5
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +5 -5
  29. package/dist/stores/{useBlockTransformer.d.ts → useBlockTransformer.svelte.d.ts} +33 -35
  30. package/dist/stores/useBlockTransformer.svelte.d.ts.map +1 -0
  31. package/dist/stores/useBlockTransformer.svelte.js +106 -0
  32. package/dist/stores/useDevTools.svelte.d.ts +1 -1
  33. package/dist/stores/useDevTools.svelte.d.ts.map +1 -1
  34. package/dist/stores/{useIncremark.d.ts → useIncremark.svelte.d.ts} +35 -36
  35. package/dist/stores/useIncremark.svelte.d.ts.map +1 -0
  36. package/dist/stores/useIncremark.svelte.js +226 -0
  37. package/dist/stores/useLocale.svelte.d.ts.map +1 -1
  38. package/dist/stores/useLocale.svelte.js +3 -2
  39. package/dist/stores/useShiki.svelte.d.ts +26 -0
  40. package/dist/stores/useShiki.svelte.d.ts.map +1 -1
  41. package/dist/stores/useShiki.svelte.js +27 -0
  42. package/dist/stores/useTypewriter.svelte.d.ts +49 -0
  43. package/dist/stores/useTypewriter.svelte.d.ts.map +1 -0
  44. package/dist/stores/useTypewriter.svelte.js +212 -0
  45. package/dist/utils/cursor.d.ts.map +1 -1
  46. package/dist/utils/cursor.js +8 -0
  47. package/package.json +9 -6
  48. package/dist/context/definitionsContext.d.ts.map +0 -1
  49. package/dist/stores/useBlockTransformer.d.ts.map +0 -1
  50. package/dist/stores/useBlockTransformer.js +0 -110
  51. package/dist/stores/useIncremark.d.ts.map +0 -1
  52. package/dist/stores/useIncremark.js +0 -189
  53. package/dist/stores/useTypewriter.d.ts +0 -44
  54. package/dist/stores/useTypewriter.d.ts.map +0 -1
  55. package/dist/stores/useTypewriter.js +0 -163
@@ -12,7 +12,7 @@
12
12
  getStableText,
13
13
  isHtmlNode
14
14
  } from '@incremark/shared'
15
- import { getDefinitionsContext } from '../context/definitionsContext'
15
+ import { getDefinitionsContext } from '../context/definitionsContext.svelte.ts'
16
16
  import IncremarkMath from './IncremarkMath.svelte'
17
17
  import IncremarkHtmlElement from './IncremarkHtmlElement.svelte'
18
18
  import IncremarkInline from './IncremarkInline.svelte'
@@ -71,9 +71,9 @@
71
71
 
72
72
  // 获取 definitions context
73
73
  const context = getDefinitionsContext()
74
- // 解构 store 以便使用 $ 语法订阅
75
- const { definations } = context
76
74
 
75
+ // 使用 getter 获取 definitions
76
+ const definitions = $derived(context.getDefinations())
77
77
 
78
78
  /**
79
79
  * 获取节点的 chunks(类型安全)
@@ -156,12 +156,12 @@
156
156
 
157
157
  <!-- 引用式图片(imageReference) -->
158
158
  {#if isImageReference(node)}
159
- {#if $definations && $definations[node.identifier]}
159
+ {#if definitions && definitions[node.identifier]}
160
160
  <img
161
161
  class="incremark-image incremark-reference-image"
162
- src={$definations[node.identifier].url}
162
+ src={definitions[node.identifier].url}
163
163
  alt={node.alt || ''}
164
- title={$definations[node.identifier].title || undefined}
164
+ title={definitions[node.identifier].title || undefined}
165
165
  loading="lazy"
166
166
  />
167
167
  {:else}
@@ -174,11 +174,11 @@
174
174
 
175
175
  <!-- 引用式链接(linkReference) -->
176
176
  {#if isLinkReference(node)}
177
- {#if $definations && $definations[node.identifier]}
177
+ {#if definitions && definitions[node.identifier]}
178
178
  <a
179
179
  class="incremark-link incremark-reference-link"
180
- href={$definations[node.identifier].url}
181
- title={$definations[node.identifier].title || undefined}
180
+ href={definitions[node.identifier].url}
181
+ title={definitions[node.identifier].title || undefined}
182
182
  target="_blank"
183
183
  rel="noopener noreferrer"
184
184
  >
@@ -213,4 +213,3 @@
213
213
  </del>
214
214
  {/if}
215
215
  {/each}
216
-
@@ -1 +1 @@
1
- {"version":3,"file":"IncremarkInline.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkInline.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAiC,MAAM,OAAO,CAAA;AAW3E,OAAO,eAAe,MAAM,0BAA0B,CAAC;AAGrD;;GAEG;AACH,UAAU,KAAK;IACb,aAAa;IACb,KAAK,EAAE,eAAe,EAAE,CAAA;CACzB;AAwLH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"IncremarkInline.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkInline.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAiC,MAAM,OAAO,CAAA;AAW3E,OAAO,eAAe,MAAM,0BAA0B,CAAC;AAGrD;;GAEG;AACH,UAAU,KAAK;IACb,aAAa;IACb,KAAK,EAAE,eAAe,EAAE,CAAA;CACzB;AAuLH,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { Component } from 'svelte';
6
6
  import type { ParsedBlock } from '@incremark/core';
7
- import type { UseIncremarkOptions } from '../stores/useIncremark';
7
+ import type { UseIncremarkOptions } from '../stores/useIncremark.svelte.ts';
8
8
  /**
9
9
  * 组件映射类型
10
10
  * 使用 any 以支持不同类型的组件
@@ -1 +1 @@
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"}
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,kCAAkC,CAAA;AAE3E;;;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"}
@@ -1,25 +1,25 @@
1
1
  /**
2
2
  * @file Definitions Context - Svelte Context 实现
3
- * @description 管理 definitions 和 footnotes 的共享状态,对应 Vue 版本的 provide/inject
3
+ * @description 管理 definitions 和 footnotes 的共享状态,使用 Svelte 5 runes 语法
4
4
  */
5
- import { type Writable } from 'svelte/store';
6
5
  import type { Definition, FootnoteDefinition } from 'mdast';
7
6
  /**
8
- * Definitions Context 值类型
7
+ * Definitions Context 值类型(使用 getter 函数)
9
8
  */
10
9
  export interface DefinitionsContextValue {
11
- /** Definitions 映射 */
12
- definations: Writable<Record<string, Definition>>;
13
- /** Footnote definitions 映射 */
14
- footnoteDefinitions: Writable<Record<string, FootnoteDefinition>>;
15
- /** Footnote 引用顺序 */
16
- footnoteReferenceOrder: Writable<string[]>;
10
+ /** 获取 Definitions 映射 */
11
+ getDefinations: () => Record<string, Definition>;
12
+ /** 获取 Footnote definitions 映射 */
13
+ getFootnoteDefinitions: () => Record<string, FootnoteDefinition>;
14
+ /** 获取 Footnote 引用顺序 */
15
+ getFootnoteReferenceOrder: () => string[];
17
16
  }
18
17
  /**
19
18
  * 设置 Definitions Context
20
19
  *
21
20
  * @description
22
21
  * 在父组件中调用,为子组件提供 definitions context
22
+ * 使用 $state 实现响应式状态
23
23
  *
24
24
  * @returns 返回设置函数,用于更新 context 值
25
25
  *
@@ -56,9 +56,11 @@ export declare function setDefinitionsContext(): {
56
56
  * <script>
57
57
  * import { getDefinitionsContext } from '@incremark/svelte'
58
58
  *
59
- * const { definations, footnoteDefinitions, footnoteReferenceOrder } = getDefinitionsContext()
59
+ * const context = getDefinitionsContext()
60
+ * // 使用 getter 获取值(在模板或 $derived 中使用会自动追踪依赖)
61
+ * const definitions = $derived(context.getDefinations())
60
62
  * </script>
61
63
  * ```
62
64
  */
63
65
  export declare function getDefinitionsContext(): DefinitionsContextValue;
64
- //# sourceMappingURL=definitionsContext.d.ts.map
66
+ //# sourceMappingURL=definitionsContext.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitionsContext.svelte.d.ts","sourceRoot":"","sources":["../../src/context/definitionsContext.svelte.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAE3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAChD,iCAAiC;IACjC,sBAAsB,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAChE,uBAAuB;IACvB,yBAAyB,EAAE,MAAM,MAAM,EAAE,CAAA;CAC1C;AAOD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB;kCAiBE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;0CAOlB,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC;uCAOrC,MAAM,EAAE;;;;;EA2CnD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,IAAI,uBAAuB,CAQ/D"}
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * @file Definitions Context - Svelte Context 实现
3
- * @description 管理 definitions 和 footnotes 的共享状态,对应 Vue 版本的 provide/inject
3
+ * @description 管理 definitions 和 footnotes 的共享状态,使用 Svelte 5 runes 语法
4
4
  */
5
5
  import { setContext, getContext } from 'svelte';
6
- import { writable } from 'svelte/store';
7
6
  /**
8
7
  * Context key
9
8
  */
@@ -13,6 +12,7 @@ const DEFINITIONS_CONTEXT_KEY = Symbol('definitionsContext');
13
12
  *
14
13
  * @description
15
14
  * 在父组件中调用,为子组件提供 definitions context
15
+ * 使用 $state 实现响应式状态
16
16
  *
17
17
  * @returns 返回设置函数,用于更新 context 值
18
18
  *
@@ -26,50 +26,51 @@ const DEFINITIONS_CONTEXT_KEY = Symbol('definitionsContext');
26
26
  * ```
27
27
  */
28
28
  export function setDefinitionsContext() {
29
- const definations = writable({});
30
- const footnoteDefinitions = writable({});
31
- const footnoteReferenceOrder = writable([]);
29
+ // 使用 $state 实现响应式状态(每个组件实例有独立的状态)
30
+ let definationsState = $state({});
31
+ let footnoteDefinitionsState = $state({});
32
+ let footnoteReferenceOrderState = $state([]);
32
33
  const contextValue = {
33
- definations,
34
- footnoteDefinitions,
35
- footnoteReferenceOrder
34
+ getDefinations: () => definationsState,
35
+ getFootnoteDefinitions: () => footnoteDefinitionsState,
36
+ getFootnoteReferenceOrder: () => footnoteReferenceOrderState
36
37
  };
37
38
  setContext(DEFINITIONS_CONTEXT_KEY, contextValue);
38
39
  /**
39
40
  * 设置 definitions
40
41
  */
41
42
  function setDefinations(definitions) {
42
- definations.set(definitions);
43
+ definationsState = definitions;
43
44
  }
44
45
  /**
45
46
  * 设置 footnote definitions
46
47
  */
47
48
  function setFootnoteDefinitions(definitions) {
48
- footnoteDefinitions.set(definitions);
49
+ footnoteDefinitionsState = definitions;
49
50
  }
50
51
  /**
51
52
  * 设置 footnote 引用顺序
52
53
  */
53
54
  function setFootnoteReferenceOrder(order) {
54
- footnoteReferenceOrder.set(order);
55
+ footnoteReferenceOrderState = order;
55
56
  }
56
57
  /**
57
58
  * 清空 definitions
58
59
  */
59
60
  function clearDefinations() {
60
- definations.set({});
61
+ definationsState = {};
61
62
  }
62
63
  /**
63
64
  * 清空 footnote definitions
64
65
  */
65
66
  function clearFootnoteDefinitions() {
66
- footnoteDefinitions.set({});
67
+ footnoteDefinitionsState = {};
67
68
  }
68
69
  /**
69
70
  * 清空 footnote 引用顺序
70
71
  */
71
72
  function clearFootnoteReferenceOrder() {
72
- footnoteReferenceOrder.set([]);
73
+ footnoteReferenceOrderState = [];
73
74
  }
74
75
  /**
75
76
  * 清空所有 definitions
@@ -104,7 +105,9 @@ export function setDefinitionsContext() {
104
105
  * <script>
105
106
  * import { getDefinitionsContext } from '@incremark/svelte'
106
107
  *
107
- * const { definations, footnoteDefinitions, footnoteReferenceOrder } = getDefinitionsContext()
108
+ * const context = getDefinitionsContext()
109
+ * // 使用 getter 获取值(在模板或 $derived 中使用会自动追踪依赖)
110
+ * const definitions = $derived(context.getDefinations())
108
111
  * </script>
109
112
  * ```
110
113
  */
package/dist/index.d.ts CHANGED
@@ -2,11 +2,11 @@
2
2
  * @file @incremark/svelte 主入口文件
3
3
  * @description Svelte 5 集成库的导出入口
4
4
  */
5
- export { useIncremark, type UseIncremarkOptions, type UseIncremarkReturn, type TypewriterOptions, type TypewriterControls } from './stores/useIncremark';
6
- export { useDevTools, type UseDevToolsOptions } from './stores/useDevTools.svelte';
7
- export { useBlockTransformer, type UseBlockTransformerOptions, type UseBlockTransformerReturn } from './stores/useBlockTransformer';
8
- export { useLocale, type UseLocaleReturn } from './stores/useLocale.svelte';
9
- export { setDefinitionsContext, getDefinitionsContext, type DefinitionsContextValue } from './context/definitionsContext';
5
+ export { useIncremark, type UseIncremarkOptions, type UseIncremarkReturn, type TypewriterOptions, type TypewriterControls } from './stores/useIncremark.svelte.ts';
6
+ export { useDevTools, type UseDevToolsOptions } from './stores/useDevTools.svelte.ts';
7
+ export { useBlockTransformer, type UseBlockTransformerOptions, type UseBlockTransformerReturn } from './stores/useBlockTransformer.svelte.ts';
8
+ export { useLocale, type UseLocaleReturn } from './stores/useLocale.svelte.ts';
9
+ export { setDefinitionsContext, getDefinitionsContext, type DefinitionsContextValue } from './context/definitionsContext.svelte.ts';
10
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';
11
11
  export { default as AutoScrollContainer } from './components/AutoScrollContainer.svelte';
12
12
  export { default as ThemeProvider } from './ThemeProvider.svelte';
@@ -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,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"}
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,iCAAiC,CAAA;AAClK,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACrF,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC/B,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAGnI,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
@@ -3,12 +3,12 @@
3
3
  * @description Svelte 5 集成库的导出入口
4
4
  */
5
5
  // Stores/Utilities
6
- export { useIncremark } from './stores/useIncremark';
7
- export { useDevTools } from './stores/useDevTools.svelte';
8
- export { useBlockTransformer } from './stores/useBlockTransformer';
9
- export { useLocale } from './stores/useLocale.svelte';
6
+ export { useIncremark } from './stores/useIncremark.svelte.ts';
7
+ export { useDevTools } from './stores/useDevTools.svelte.ts';
8
+ export { useBlockTransformer } from './stores/useBlockTransformer.svelte.ts';
9
+ export { useLocale } from './stores/useLocale.svelte.ts';
10
10
  // Context
11
- export { setDefinitionsContext, getDefinitionsContext } from './context/definitionsContext';
11
+ export { setDefinitionsContext, getDefinitionsContext } from './context/definitionsContext.svelte.ts';
12
12
  // Components
13
13
  export { Incremark, IncremarkContent, IncremarkParagraph, IncremarkInline, IncremarkHeading, IncremarkCode, IncremarkList, IncremarkTable, IncremarkBlockquote, IncremarkThematicBreak, IncremarkMath, IncremarkHtmlElement, IncremarkFootnotes, IncremarkDefault, IncremarkRenderer } from './components';
14
14
  // Additional Components
@@ -1,9 +1,8 @@
1
1
  /**
2
- * @file useBlockTransformer Store - 块转换器
3
- * @description 用于控制 blocks 的逐步显示(打字机效果)
2
+ * @file useBlockTransformer - 块转换器
3
+ * @description 用于控制 blocks 的逐步显示(打字机效果),使用 Svelte 5 runes 语法
4
4
  */
5
- import { type Readable } from 'svelte/store';
6
- import { BlockTransformer, type TransformerOptions, type DisplayBlock, type SourceBlock, type AnimationEffect } from '@incremark/core';
5
+ import { type TransformerOptions, type DisplayBlock, type SourceBlock, type AnimationEffect, type BlockTransformer } from '@incremark/core';
7
6
  /**
8
7
  * useBlockTransformer 选项
9
8
  */
@@ -13,14 +12,16 @@ export interface UseBlockTransformerOptions extends Omit<TransformerOptions, 'on
13
12
  * useBlockTransformer 返回值
14
13
  */
15
14
  export interface UseBlockTransformerReturn<T = unknown> {
16
- /** 用于渲染的 display blocks */
17
- displayBlocks: Readable<DisplayBlock<T>[]>;
18
- /** 是否正在处理中 */
19
- isProcessing: Readable<boolean>;
20
- /** 是否已暂停 */
21
- isPaused: Readable<boolean>;
22
- /** 当前动画效果 */
23
- effect: Readable<AnimationEffect>;
15
+ /** 用于渲染的 display blocks(getter) */
16
+ readonly displayBlocks: DisplayBlock<T>[];
17
+ /** 是否正在处理中(getter) */
18
+ readonly isProcessing: boolean;
19
+ /** 是否已暂停(getter) */
20
+ readonly isPaused: boolean;
21
+ /** 当前动画效果(getter) */
22
+ readonly effect: AnimationEffect;
23
+ /** 推入新的 source blocks */
24
+ push: (blocks: SourceBlock<T>[]) => void;
24
25
  /** 跳过所有动画 */
25
26
  skip: () => void;
26
27
  /** 重置状态 */
@@ -35,11 +36,11 @@ export interface UseBlockTransformerReturn<T = unknown> {
35
36
  transformer: BlockTransformer<T>;
36
37
  }
37
38
  /**
38
- * Svelte 5 Store: Block Transformer
39
+ * Svelte 5 Composable: Block Transformer
39
40
  *
40
41
  * @description
41
42
  * 用于控制 blocks 的逐步显示(打字机效果)
42
- * 作为解析器和渲染器之间的中间层
43
+ * 作为解析器和渲染器之间的中间层,使用 Svelte 5 runes 语法
43
44
  *
44
45
  * 特性:
45
46
  * - 使用 requestAnimationFrame 实现流畅动画
@@ -47,7 +48,6 @@ export interface UseBlockTransformerReturn<T = unknown> {
47
48
  * - 支持动画效果 `effect: 'typing'`
48
49
  * - 页面不可见时自动暂停
49
50
  *
50
- * @param sourceBlocks - 源 blocks store
51
51
  * @param options - 转换器选项
52
52
  * @returns 转换器状态和控制对象
53
53
  *
@@ -55,35 +55,33 @@ export interface UseBlockTransformerReturn<T = unknown> {
55
55
  * ```svelte
56
56
  * <script>
57
57
  * import { useIncremark, useBlockTransformer, defaultPlugins } from '@incremark/svelte'
58
- * import { derived } from 'svelte/store'
59
58
  *
60
- * const { completedBlocks, append, finalize } = useIncremark()
61
- *
62
- * // 使用 completedBlocks 作为输入(ID 稳定)
63
- * const sourceBlocks = derived(completedBlocks, ($blocks) =>
64
- * $blocks.map(b => ({
65
- * id: b.id,
66
- * node: b.node,
67
- * status: b.status
68
- * }))
69
- * )
59
+ * const incremark = useIncremark()
70
60
  *
71
61
  * // 添加打字机效果
72
- * const { displayBlocks, isProcessing, skip, effect } = useBlockTransformer(sourceBlocks, {
62
+ * const blockTransformer = useBlockTransformer({
73
63
  * charsPerTick: [1, 3],
74
64
  * tickInterval: 30,
75
65
  * effect: 'typing',
76
66
  * plugins: defaultPlugins
77
67
  * })
68
+ *
69
+ * // 当 blocks 变化时推入
70
+ * $effect(() => {
71
+ * const sourceBlocks = incremark.completedBlocks.map(b => ({
72
+ * id: b.id,
73
+ * node: b.node,
74
+ * status: b.status
75
+ * }))
76
+ * blockTransformer.push(sourceBlocks)
77
+ * })
78
78
  * </script>
79
79
  *
80
- * <template>
81
- * <Incremark blocks={$displayBlocks} class:typing={$effect === 'typing'} />
82
- * {#if $isProcessing}
83
- * <button on:click={skip}>跳过</button>
84
- * {/if}
85
- * </template>
80
+ * <Incremark blocks={blockTransformer.displayBlocks} />
81
+ * {#if blockTransformer.isProcessing}
82
+ * <button onclick={blockTransformer.skip}>跳过</button>
83
+ * {/if}
86
84
  * ```
87
85
  */
88
- export declare function useBlockTransformer<T = unknown>(sourceBlocks: Readable<SourceBlock<T>[]>, options?: UseBlockTransformerOptions): UseBlockTransformerReturn<T>;
89
- //# sourceMappingURL=useBlockTransformer.d.ts.map
86
+ export declare function useBlockTransformer<T = unknown>(options?: UseBlockTransformerOptions): UseBlockTransformerReturn<T>;
87
+ //# sourceMappingURL=useBlockTransformer.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBlockTransformer.svelte.d.ts","sourceRoot":"","sources":["../../src/stores/useBlockTransformer.svelte.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAA;AAExB;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC;CAAG;AAE3F;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,CAAC,GAAG,OAAO;IACpD,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;IACzC,sBAAsB;IACtB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,qBAAqB;IACrB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;IAChC,yBAAyB;IACzB,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAA;IACxC,aAAa;IACb,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,WAAW;IACX,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,WAAW;IACX,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,WAAW;IACX,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,aAAa;IACb,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,GAAG,cAAc,GAAG,QAAQ,GAAG,eAAe,CAAC,CAAC,KAAK,IAAI,CAAA;IAC9H,6BAA6B;IAC7B,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAC7C,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CAAC,CAAC,CAAC,CAwD9B"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * @file useBlockTransformer - 块转换器
3
+ * @description 用于控制 blocks 的逐步显示(打字机效果),使用 Svelte 5 runes 语法
4
+ */
5
+ import { createBlockTransformer } from '@incremark/core';
6
+ /**
7
+ * Svelte 5 Composable: Block Transformer
8
+ *
9
+ * @description
10
+ * 用于控制 blocks 的逐步显示(打字机效果)
11
+ * 作为解析器和渲染器之间的中间层,使用 Svelte 5 runes 语法
12
+ *
13
+ * 特性:
14
+ * - 使用 requestAnimationFrame 实现流畅动画
15
+ * - 支持随机步长 `charsPerTick: [1, 3]`
16
+ * - 支持动画效果 `effect: 'typing'`
17
+ * - 页面不可见时自动暂停
18
+ *
19
+ * @param options - 转换器选项
20
+ * @returns 转换器状态和控制对象
21
+ *
22
+ * @example
23
+ * ```svelte
24
+ * <script>
25
+ * import { useIncremark, useBlockTransformer, defaultPlugins } from '@incremark/svelte'
26
+ *
27
+ * const incremark = useIncremark()
28
+ *
29
+ * // 添加打字机效果
30
+ * const blockTransformer = useBlockTransformer({
31
+ * charsPerTick: [1, 3],
32
+ * tickInterval: 30,
33
+ * effect: 'typing',
34
+ * plugins: defaultPlugins
35
+ * })
36
+ *
37
+ * // 当 blocks 变化时推入
38
+ * $effect(() => {
39
+ * const sourceBlocks = incremark.completedBlocks.map(b => ({
40
+ * id: b.id,
41
+ * node: b.node,
42
+ * status: b.status
43
+ * }))
44
+ * blockTransformer.push(sourceBlocks)
45
+ * })
46
+ * </script>
47
+ *
48
+ * <Incremark blocks={blockTransformer.displayBlocks} />
49
+ * {#if blockTransformer.isProcessing}
50
+ * <button onclick={blockTransformer.skip}>跳过</button>
51
+ * {/if}
52
+ * ```
53
+ */
54
+ export function useBlockTransformer(options = {}) {
55
+ // 使用 $state runes
56
+ let displayBlocksState = $state([]);
57
+ let isProcessingState = $state(false);
58
+ let isPausedState = $state(false);
59
+ let effectState = $state(options.effect ?? 'none');
60
+ const transformer = createBlockTransformer({
61
+ ...options,
62
+ onChange: (blocks) => {
63
+ displayBlocksState = blocks;
64
+ isProcessingState = transformer.isProcessing();
65
+ isPausedState = transformer.isPausedState();
66
+ }
67
+ });
68
+ /**
69
+ * 推入新的 source blocks
70
+ */
71
+ function push(blocks) {
72
+ transformer.push(blocks);
73
+ // 处理正在显示的 block 内容更新
74
+ const currentDisplaying = displayBlocksState.find((b) => !b.isDisplayComplete);
75
+ if (currentDisplaying) {
76
+ const updated = blocks.find((b) => b.id === currentDisplaying.id);
77
+ if (updated) {
78
+ transformer.update(updated);
79
+ }
80
+ }
81
+ }
82
+ return {
83
+ get displayBlocks() { return displayBlocksState; },
84
+ get isProcessing() { return isProcessingState; },
85
+ get isPaused() { return isPausedState; },
86
+ get effect() { return effectState; },
87
+ push,
88
+ skip: () => transformer.skip(),
89
+ reset: () => transformer.reset(),
90
+ pause: () => {
91
+ transformer.pause();
92
+ isPausedState = true;
93
+ },
94
+ resume: () => {
95
+ transformer.resume();
96
+ isPausedState = false;
97
+ },
98
+ setOptions: (opts) => {
99
+ transformer.setOptions(opts);
100
+ if (opts.effect !== undefined) {
101
+ effectState = opts.effect;
102
+ }
103
+ },
104
+ transformer
105
+ };
106
+ }
@@ -3,7 +3,7 @@
3
3
  * @description Svelte 5 DevTools 一行接入
4
4
  */
5
5
  import { type DevToolsOptions } from '@incremark/devtools';
6
- import type { UseIncremarkReturn } from './useIncremark';
6
+ import type { UseIncremarkReturn } from './useIncremark.svelte.ts';
7
7
  /**
8
8
  * useDevTools 选项
9
9
  */
@@ -1 +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"}
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,0BAA0B,CAAA;AAElE;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;CAAG;AAE9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,GAAE,kBAAuB,mDAkCjC"}
@@ -1,9 +1,8 @@
1
1
  /**
2
- * @file useIncremark Store - 核心 Store
3
- * @description Svelte 5 Store: Incremark 流式 Markdown 解析器
2
+ * @file useIncremark - 核心 Composable
3
+ * @description Svelte 5 Composable: Incremark 流式 Markdown 解析器(使用 runes 语法)
4
4
  */
5
- import { type Writable, type Readable } from 'svelte/store';
6
- import { createIncremarkParser, type ParserOptions, type ParsedBlock, type IncrementalUpdate, type Root, type TransformerPlugin, type AnimationEffect } from '@incremark/core';
5
+ import { createIncremarkParser, type IncremarkParserOptions, type ParsedBlock, type IncrementalUpdate, type Root, type TransformerPlugin, type AnimationEffect } from '@incremark/core';
7
6
  /**
8
7
  * 打字机效果配置
9
8
  */
@@ -26,7 +25,7 @@ export interface TypewriterOptions {
26
25
  /**
27
26
  * useIncremark 选项
28
27
  */
29
- export interface UseIncremarkOptions extends ParserOptions {
28
+ export interface UseIncremarkOptions extends IncremarkParserOptions {
30
29
  /** 打字机配置,传入即创建 transformer(可通过 enabled 控制是否启用) */
31
30
  typewriter?: TypewriterOptions;
32
31
  }
@@ -37,16 +36,16 @@ export type RenderableBlock = ParsedBlock & {
37
36
  * 打字机控制对象
38
37
  */
39
38
  export interface TypewriterControls {
40
- /** 是否启用(只读) */
41
- enabled: Readable<boolean>;
39
+ /** 是否启用(只读 getter) */
40
+ readonly enabled: boolean;
42
41
  /** 设置是否启用 */
43
42
  setEnabled: (enabled: boolean) => void;
44
43
  /** 是否正在处理中 */
45
- isProcessing: Readable<boolean>;
44
+ readonly isProcessing: boolean;
46
45
  /** 是否已暂停 */
47
- isPaused: Readable<boolean>;
46
+ readonly isPaused: boolean;
48
47
  /** 当前动画效果 */
49
- effect: Readable<AnimationEffect>;
48
+ readonly effect: AnimationEffect;
50
49
  /** 跳过动画,直接显示全部 */
51
50
  skip: () => void;
52
51
  /** 暂停动画 */
@@ -60,29 +59,29 @@ export interface TypewriterControls {
60
59
  * useIncremark 返回值
61
60
  */
62
61
  export interface UseIncremarkReturn {
63
- /** 已收集的完整 Markdown 字符串 */
64
- markdown: Writable<string>;
65
- /** 已完成的块列表 */
66
- completedBlocks: Writable<ParsedBlock[]>;
67
- /** 待处理的块列表 */
68
- pendingBlocks: Writable<ParsedBlock[]>;
69
- /** 当前完整的 AST */
70
- ast: Readable<Root>;
71
- /** 用于渲染的 blocks(根据打字机设置自动处理) */
72
- blocks: Readable<Array<RenderableBlock>>;
73
- /** 是否正在加载 */
74
- isLoading: Writable<boolean>;
75
- /** 是否已完成(finalize) */
76
- isFinalized: Writable<boolean>;
62
+ /** 已收集的完整 Markdown 字符串(getter) */
63
+ readonly markdown: string;
64
+ /** 已完成的块列表(getter) */
65
+ readonly completedBlocks: ParsedBlock[];
66
+ /** 待处理的块列表(getter) */
67
+ readonly pendingBlocks: ParsedBlock[];
68
+ /** 当前完整的 AST(getter) */
69
+ readonly ast: Root;
70
+ /** 用于渲染的 blocks(getter,根据打字机设置自动处理) */
71
+ readonly blocks: Array<RenderableBlock>;
72
+ /** 是否正在加载(getter) */
73
+ readonly isLoading: boolean;
74
+ /** 是否已完成(finalize)(getter) */
75
+ readonly isFinalized: boolean;
77
76
  /**
78
- * 内容是否完全显示完成
77
+ * 内容是否完全显示完成(getter)
79
78
  * - 无打字机:等于 isFinalized
80
79
  * - 有打字机:isFinalized + 动画播放完成
81
80
  * 适用于控制 footnote 等需要在内容完全显示后才出现的元素
82
81
  */
83
- isDisplayComplete: Readable<boolean>;
84
- /** 脚注引用的出现顺序 */
85
- footnoteReferenceOrder: Writable<string[]>;
82
+ readonly isDisplayComplete: boolean;
83
+ /** 脚注引用的出现顺序(getter) */
84
+ readonly footnoteReferenceOrder: string[];
86
85
  /** 追加内容 */
87
86
  append: (chunk: string) => IncrementalUpdate;
88
87
  /** 完成解析 */
@@ -93,16 +92,18 @@ export interface UseIncremarkReturn {
93
92
  reset: () => void;
94
93
  /** 一次性渲染(reset + append + finalize) */
95
94
  render: (content: string) => IncrementalUpdate;
95
+ /** 更新解析器配置(动态更新,不需要重建 parser 实例) */
96
+ updateOptions: (options: Partial<IncremarkParserOptions>) => void;
96
97
  /** 解析器实例 */
97
98
  parser: ReturnType<typeof createIncremarkParser>;
98
99
  /** 打字机控制 */
99
100
  typewriter: TypewriterControls;
100
101
  }
101
102
  /**
102
- * Svelte 5 Store: Incremark 流式 Markdown 解析器
103
+ * Svelte 5 Composable: Incremark 流式 Markdown 解析器
103
104
  *
104
105
  * @description
105
- * 核心 store,管理解析器状态和操作
106
+ * 核心 composable,管理解析器状态和操作,使用 Svelte 5 runes 语法
106
107
  *
107
108
  * @param options - 解析器选项
108
109
  * @returns 解析器状态和控制对象
@@ -113,10 +114,10 @@ export interface UseIncremarkReturn {
113
114
  * import { useIncremark, Incremark } from '@incremark/svelte'
114
115
  *
115
116
  * // 基础用法
116
- * const { blocks, append, finalize } = useIncremark()
117
+ * const incremark = useIncremark()
117
118
  *
118
119
  * // 启用打字机效果
119
- * const { blocks, append, finalize, typewriter } = useIncremark({
120
+ * const incremark = useIncremark({
120
121
  * typewriter: {
121
122
  * enabled: true,
122
123
  * charsPerTick: [1, 3],
@@ -127,10 +128,8 @@ export interface UseIncremarkReturn {
127
128
  * })
128
129
  * </script>
129
130
  *
130
- * <template>
131
- * <Incremark blocks={$blocks} />
132
- * </template>
131
+ * <Incremark blocks={incremark.blocks} />
133
132
  * ```
134
133
  */
135
134
  export declare function useIncremark(options?: UseIncremarkOptions): UseIncremarkReturn;
136
- //# sourceMappingURL=useIncremark.d.ts.map
135
+ //# sourceMappingURL=useIncremark.svelte.d.ts.map