@dongfangw/study-kit 0.1.2 → 0.2.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.
Files changed (50) hide show
  1. package/README.md +47 -3
  2. package/ext/adoc-convert/index.mjs +62 -62
  3. package/lib/client.js +1858 -160
  4. package/lib/client.js.map +1 -1
  5. package/lib/index.d.ts.map +1 -1
  6. package/lib/index.js +32 -16
  7. package/lib/index.js.map +1 -1
  8. package/lib/libPath.d.ts +28 -0
  9. package/lib/libPath.d.ts.map +1 -0
  10. package/lib/libPath.js +36 -0
  11. package/lib/libPath.js.map +1 -0
  12. package/lib/pdf.d.ts +31 -0
  13. package/lib/pdf.d.ts.map +1 -0
  14. package/lib/pdf.js +174 -0
  15. package/lib/pdf.js.map +1 -0
  16. package/lib/render.d.ts.map +1 -1
  17. package/lib/render.js +58 -1
  18. package/lib/render.js.map +1 -1
  19. package/lib/slidev.d.ts.map +1 -1
  20. package/lib/slidev.js +50 -13
  21. package/lib/slidev.js.map +1 -1
  22. package/lib/slidevEnv.d.ts.map +1 -1
  23. package/lib/slidevEnv.js +30 -1
  24. package/lib/slidevEnv.js.map +1 -1
  25. package/lib/tools.d.ts.map +1 -1
  26. package/lib/tools.js +8 -0
  27. package/lib/tools.js.map +1 -1
  28. package/lib/types/client/LibraryWorkspace.d.ts.map +1 -1
  29. package/lib/types/client/PdfViewer.d.ts +15 -0
  30. package/lib/types/client/PdfViewer.d.ts.map +1 -0
  31. package/lib/types/client/annotations.d.ts +26 -2
  32. package/lib/types/client/annotations.d.ts.map +1 -1
  33. package/lib/types/client/docEnhance.d.ts.map +1 -1
  34. package/lib/types/client/docKey.d.ts +8 -0
  35. package/lib/types/client/docKey.d.ts.map +1 -1
  36. package/lib/types/client/pdfAnno.d.ts +44 -0
  37. package/lib/types/client/pdfAnno.d.ts.map +1 -0
  38. package/lib/types/client/pdfPos.d.ts +27 -0
  39. package/lib/types/client/pdfPos.d.ts.map +1 -0
  40. package/lib/types/client/pdfjs.d.ts +87 -0
  41. package/lib/types/client/pdfjs.d.ts.map +1 -0
  42. package/lib/types/client/styles.module.css.gen.d.ts.map +1 -1
  43. package/package.json +140 -138
  44. package/skills/aero-concept-qa/SKILL.md +59 -59
  45. package/skills/aero-learning-path/SKILL.md +55 -55
  46. package/skills/aero-study-guide/SKILL.md +47 -47
  47. package/skills/aero-think/SKILL.md +59 -59
  48. package/skills/make-mindmap/SKILL.md +237 -0
  49. package/skills/make-mindmap/example//347/244/272/344/276/213.mmd +45 -0
  50. package/skills/make-mindmap/render.mjs +855 -0
@@ -0,0 +1,15 @@
1
+ import type { ReadingContext } from './prose.js';
2
+ interface Props {
3
+ /** 库内相对路径(`<库id>/<rel>`),也是标注与阅读位置的键。 */
4
+ relPath: string;
5
+ /** 目录树里展示的名字(面板标题用)。 */
6
+ title: string;
7
+ /** 形如 `&cwd=…` 的查询串(可为空串)。 */
8
+ cwdParam: string;
9
+ onReadingChange: (ctx: ReadingContext) => void;
10
+ /** 「问 AI」出口(与 DocViewer 同一约定):不传则不显示问 AI 按钮。 */
11
+ onAsk?: (text: string) => void;
12
+ }
13
+ export declare function PdfViewer({ relPath, title, cwdParam, onReadingChange, onAsk }: Props): JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=PdfViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewer.d.ts","sourceRoot":"","sources":["../../../src/client/PdfViewer.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAehD,UAAU,KAAK;IACb,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAA;IAC9C,gDAAgD;IAChD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAgPD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAqxBlG"}
@@ -64,8 +64,8 @@ export interface AnnotationPatch {
64
64
  }
65
65
  /** 单条标注最长可标注字数(超过基本是误选整篇)。 */
66
66
  export declare const MAX_QUOTE_CHARS = 2400;
67
- import { deckKeyOf, docKeyOf, labelOfKey } from './docKey.js';
68
- export { deckKeyOf, docKeyOf, labelOfKey };
67
+ import { deckKeyOf, docKeyOf, labelOfKey, pdfKeyOf } from './docKey.js';
68
+ export { deckKeyOf, docKeyOf, labelOfKey, pdfKeyOf };
69
69
  /** 某文档的全部标注(按正文位置排序)。 */
70
70
  export declare function annotationsOf(doc: string): readonly Annotation[];
71
71
  /** 订阅某文档的标注(组件内使用)。 */
@@ -83,6 +83,30 @@ export declare function paintAnnotation(doc: string, anchor: AnnoAnchor, color:
83
83
  * 定位完全靠 `page` 与 `quote`(见 SlidevDeckViewer 的 findQuoteRects)。
84
84
  */
85
85
  export declare function addPageAnnotation(doc: string, page: number, quote: string, color: AnnoColor, style: AnnoStyle, note: string): Annotation;
86
+ /** 空白归一(PDF 文字层/课件 DOM 的换行与断行差异不影响「这是同一段原文」的判断)。 */
87
+ export declare function normalizeSpace(s: string): string;
88
+ /**
89
+ * PDF 页锚点:页码(1 起)+ **该页文字层内**的字符偏移。
90
+ *
91
+ * 与文档标注的区别只在坐标系范围:md/adoc 的偏移从整篇正文开头算,PDF 从这一页的
92
+ * 文字层开头算(翻页/缩放都不会改变页内文字顺序,因此偏移稳定)。页码 + 偏移 + 原文
93
+ * 三者一起,才既能"偏移命中即落笔",又能在 pdf.js 升级导致文字节点重排后按原文找回。
94
+ */
95
+ export interface PageTextAnchor {
96
+ readonly page: number;
97
+ readonly start: number;
98
+ readonly end: number;
99
+ readonly quote: string;
100
+ readonly prefix: string;
101
+ readonly suffix: string;
102
+ }
103
+ /**
104
+ * 落一条 PDF 标注(页 + 页内偏移)。
105
+ *
106
+ * 去重规则(同一处只留一条):同页同起止,或同页同原文(空白归一后相等)都算同一条——
107
+ * 后者用于「缩放/换版本后偏移变了、原文没变」的情形,否则同一段文字会越标越多条。
108
+ */
109
+ export declare function paintPageTextAnnotation(doc: string, anchor: PageTextAnchor, color: AnnoColor, style: AnnoStyle, note: string): Annotation;
86
110
  /** 修改一条标注(改色 / 切换形态 / 改便签)。 */
87
111
  export declare function updateAnnotation(doc: string, id: string, patch: AnnotationPatch): void;
88
112
  /** 删除一条标注。 */
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/client/annotations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/client/annotations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"docEnhance.d.ts","sourceRoot":"","sources":["../../../src/client/docEnhance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAuKH,iDAAiD;AACjD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAEtF;AASD,6BAA6B;AAC7B,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAYvF;AA4ED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAQhG;AAOD,oDAAoD;AACpD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACjD;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAwBvD"}
1
+ {"version":3,"file":"docEnhance.d.ts","sourceRoot":"","sources":["../../../src/client/docEnhance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAuKH,iDAAiD;AACjD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAEtF;AASD,6BAA6B;AAC7B,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAYvF;AA4ED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAUhG;AAoMD,oDAAoD;AACpD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACjD;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAwBvD"}
@@ -17,6 +17,14 @@
17
17
  export declare function docKeyOf(relPath: string, seg: number): string;
18
18
  /** 课件键:与文档区分开,避免和同名 md 撞车。 */
19
19
  export declare function deckKeyOf(relPath: string): string;
20
+ /**
21
+ * PDF 键:与文档/课件都区分开。
22
+ *
23
+ * 为什么不能直接用 relPath:PDF 的标注锚点是「第几页 + 页内文字偏移」,
24
+ * 与 md/adoc 的「整篇文字偏移」不是同一个坐标系;键分开后,同一个文件名的
25
+ * `x.md` 与 `x.pdf` 也不会互相污染标注与阅读位置。
26
+ */
27
+ export declare function pdfKeyOf(relPath: string): string;
20
28
  /** 键 → 人类可读标签(导出与面板标题用)。 */
21
29
  export declare function labelOfKey(key: string): string;
22
30
  //# sourceMappingURL=docKey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"docKey.d.ts","sourceRoot":"","sources":["../../../src/client/docKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,8BAA8B;AAC9B,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,4BAA4B;AAC5B,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK9C"}
1
+ {"version":3,"file":"docKey.d.ts","sourceRoot":"","sources":["../../../src/client/docKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,8BAA8B;AAC9B,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,4BAA4B;AAC5B,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * PDF 页内锚定与绘制:把「一次选区」变成「页 + 页内文字偏移」,再把标注画回页面上。
3
+ *
4
+ * 坐标系(与 `annotations.ts` 的文档标注刻意分开):
5
+ * · 文档标注的偏移从**整篇正文**开头算;
6
+ * · PDF 的偏移从**这一页的文字层根节点**开头算 —— pdf.js 的文字层是一片按视口坐标
7
+ * 绝对定位的 `<span>`,页内文字顺序与缩放无关,因此「页号 + 页内偏移」稳定。
8
+ *
9
+ * 为什么画色块而不是像 md 那样往文字里插 `<mark>`:文字层的每个 span 都带
10
+ * `font-size: calc(… * var(--scale-factor))` 与 `transform` 定位,往里插元素会改变断行、
11
+ * 让文字与底图(canvas)错位。因此标注只画在**叠加层**上:量出选区的每一行矩形,
12
+ * 把半透明色块贴上去(与课件播放器同一手法,见 SlidevDeckViewer 的 paintDeck)。
13
+ */
14
+ import { type Annotation, type PageTextAnchor, type TextIndex } from './annotations.js';
15
+ /** 页内矩形(相对页面左上角,CSS px)。用普通对象而不是 DOMRect:跨渲染可缓存、易比较。 */
16
+ export interface PdfRect {
17
+ readonly left: number;
18
+ readonly top: number;
19
+ readonly width: number;
20
+ readonly height: number;
21
+ }
22
+ /** 页内纯文本索引(坐标系 = 该页文字层内所有文本节点按文档序拼接)。 */
23
+ export declare function pageIndex(layer: HTMLElement): TextIndex;
24
+ /** 该页是否有文字层(扫描件没有:这时取色标注无从落笔,阅读器要给明确说明)。 */
25
+ export declare function pageHasText(layer: HTMLElement): boolean;
26
+ /** 一次 DOM 选区(已裁到单页内)→ 页内锚点;空选区 / 过长 / 全是空白返回 null。 */
27
+ export declare function anchorInPage(layer: HTMLElement, range: Range, page: number): PageTextAnchor | null;
28
+ /**
29
+ * 把本页的标注画成色块(幂等:先清空叠加层再重画)。
30
+ *
31
+ * 返回真正落上笔的标注 id:调用方用它判断「这条标注在这一页上还找得到吗」。
32
+ */
33
+ export declare function paintPageAnnotations(overlay: HTMLElement, layer: HTMLElement, annos: readonly Annotation[]): string[];
34
+ /** 某条标注在本页的**第一个**色块矩形(页内坐标;弹层定位用)。 */
35
+ export declare function firstAnnoRect(overlay: HTMLElement, id: string): PdfRect | null;
36
+ /**
37
+ * 点在某条色块上吗?(返回该标注 id,否则 null)
38
+ *
39
+ * 色块本身 `pointer-events: none`——它压在文字层下面/上面的中间层,只要能接收鼠标就会把
40
+ * 拖选拦住(学生选不中高亮过的字)。所以点击靠**矩形反查**:绘制时把每块的位置记在
41
+ * WeakMap 里,点击时用页内坐标命中测试。
42
+ */
43
+ export declare function hitTestAnnotations(overlay: HTMLElement, x: number, y: number): string | null;
44
+ //# sourceMappingURL=pdfAnno.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfAnno.d.ts","sourceRoot":"","sources":["../../../src/client/pdfAnno.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AAEzB,wDAAwD;AACxD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,yCAAyC;AACzC,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAEvD;AAED,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAwBlG;AAiID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,SAAS,UAAU,EAAE,GAC3B,MAAM,EAAE,CA4BV;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAS9E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW5F"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * PDF「上次读到哪里」:页码 + 页内比例。
3
+ *
4
+ * 为什么不复用 `readingPos.ts`:那里的坐标是「顶部可见标题 id + 像素」,而 PDF 没有
5
+ * 宿主渲染出来的标题锚点(页内标题是画在底图上的图形 + 文字层碎句),标题 id 无从谈起。
6
+ * PDF 天然有稳定的页号,于是位置就记「第几页 + 页内比例」——改缩放、改窗口宽度后依然
7
+ * 指向同一处(比例换算在阅读器里做,见 PdfViewer 的 restore/save)。
8
+ *
9
+ * 存储:`localStorage['aero.pos.pdf.v1']`,一个键存整库;与标注库同一策略——
10
+ * **按浏览器/机器独立,不跨设备同步**。
11
+ */
12
+ /** 落库的 PDF 位置。 */
13
+ export interface PdfPos {
14
+ /** 1 起的页号。 */
15
+ readonly page: number;
16
+ /** 页内比例(0..1):0 = 该页顶端,0.5 = 该页中部。 */
17
+ readonly frac: number;
18
+ /** 保存时间(ms)。 */
19
+ readonly at: number;
20
+ }
21
+ /** 取某份 PDF 上次的位置;没读过返回 null。 */
22
+ export declare function loadPdfPos(key: string): PdfPos | null;
23
+ /** 记下某份 PDF 的位置。 */
24
+ export declare function savePdfPos(key: string, pos: PdfPos): void;
25
+ /** 忘掉某份 PDF 的位置(「从头读」)。 */
26
+ export declare function clearPdfPos(key: string): void;
27
+ //# sourceMappingURL=pdfPos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfPos.d.ts","sourceRoot":"","sources":["../../../src/client/pdfPos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,kBAAkB;AAClB,MAAM,WAAW,MAAM;IACrB,cAAc;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAyED,gCAAgC;AAChC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErD;AAED,oBAAoB;AACpB,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAGzD;AAED,2BAA2B;AAC3B,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAM7C"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * pdf.js 运行时的按需加载(客户端)。
3
+ *
4
+ * 为什么不在 bundle 里 `import 'pdfjs-dist'`:
5
+ * · pdf.js 需要**独立的 worker 文件**(`new Worker(url)`),打包进客户端 bundle 反而拿不到;
6
+ * · 主库 350KB + worker 1.4MB,而 PDF 只占学习资料的一小部分——不该让不用 PDF 的人付这份体积;
7
+ * · 资源 URL 必须带版本号(升级后不能命中旧 worker),版本号由宿主注入(见宿主 `src/pdf.ts`)。
8
+ *
9
+ * 因此这里只做一件事:注入宿主的 loader 脚本(`/aero-kb/pdfjs/loader.js`),等它把
10
+ * `window.__aeroPdfjs` 挂好;失败时把**具体原因**抛给阅读器展示(404 / CSP / 协议不支持)。
11
+ *
12
+ * 说明:本文件的类型是**本地最小声明**,不从 `pdfjs-dist` 引类型——该包的 `.d.ts` 内部
13
+ * 交叉引用(`./display/api` 等)在 npm 包里并不齐全,`skipLibCheck` 下宁可自己声明用到的
14
+ * 那几个成员,也不让构建依赖它的类型解析运气。
15
+ */
16
+ /** pdf.js 运行时目录(宿主 `/kb/pdfjs` 的别名前缀,见宿主 `src/pdf.ts`)。 */
17
+ export declare const PDFJS_BASE = "/aero-kb/pdfjs/";
18
+ /** 页面视口(`getViewport({scale})` 的返回值,只取用到的字段)。 */
19
+ export interface PdfViewport {
20
+ readonly width: number;
21
+ readonly height: number;
22
+ readonly scale: number;
23
+ readonly rotation: number;
24
+ readonly rawDims: {
25
+ readonly pageWidth: number;
26
+ readonly pageHeight: number;
27
+ };
28
+ }
29
+ /** 渲染任务(`render()` 的返回值)。 */
30
+ export interface PdfRenderTask {
31
+ readonly promise: Promise<void>;
32
+ cancel(): void;
33
+ }
34
+ /** `getTextContent()` 的结果(原样转交给 TextLayer)。 */
35
+ export interface PdfTextContent {
36
+ readonly items: readonly unknown[];
37
+ readonly styles: Record<string, unknown>;
38
+ }
39
+ export interface PdfPageProxy {
40
+ getViewport(params: {
41
+ scale: number;
42
+ rotation?: number;
43
+ }): PdfViewport;
44
+ render(params: {
45
+ canvasContext: CanvasRenderingContext2D;
46
+ viewport: PdfViewport;
47
+ transform?: number[];
48
+ }): PdfRenderTask;
49
+ getTextContent(): Promise<PdfTextContent>;
50
+ cleanup(): void;
51
+ }
52
+ export interface PdfDocumentProxy {
53
+ readonly numPages: number;
54
+ getPage(pageNumber: number): Promise<PdfPageProxy>;
55
+ getOutline(): Promise<readonly unknown[] | null>;
56
+ destroy(): Promise<void>;
57
+ }
58
+ /** pdf.js 的文字层:把某一页的文字按视口坐标铺成可选的 span。 */
59
+ export interface PdfTextLayerInstance {
60
+ render(): Promise<void>;
61
+ cancel(): void;
62
+ }
63
+ export interface PdfjsApi {
64
+ getDocument(params: Record<string, unknown>): {
65
+ promise: Promise<PdfDocumentProxy>;
66
+ destroy(): void;
67
+ };
68
+ TextLayer: new (params: {
69
+ textContentSource: PdfTextContent;
70
+ container: HTMLElement;
71
+ viewport: PdfViewport;
72
+ }) => PdfTextLayerInstance;
73
+ GlobalWorkerOptions: {
74
+ workerSrc: string;
75
+ };
76
+ version?: string;
77
+ }
78
+ /**
79
+ * 取(必要时加载)pdf.js 运行时。
80
+ *
81
+ * 幂等:并发调用共用同一个 Promise;已加载过直接返回。失败后**允许重试**(清掉 pending,
82
+ * 下次调用重新注入 loader),因为失败往往是一次性的(服务刚重启、脚本被临时拦)。
83
+ */
84
+ export declare function loadPdfjs(): Promise<PdfjsApi>;
85
+ /** 版本号(宿主在 loader 里写下;加载后才有值,用于展示/排障)。 */
86
+ export declare function pdfjsVersion(): string;
87
+ //# sourceMappingURL=pdfjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdfjs.d.ts","sourceRoot":"","sources":["../../../src/client/pdfjs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,2DAA2D;AAC3D,eAAO,MAAM,UAAU,oBAAoB,CAAA;AAE3C,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9E;AAED,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,IAAI,IAAI,CAAA;CACf;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,CAAA;IACtE,MAAM,CAAC,MAAM,EAAE;QAAE,aAAa,EAAE,wBAAwB,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,aAAa,CAAA;IACvH,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,CAAA;IACzC,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAClD,UAAU,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,MAAM,IAAI,IAAI,CAAA;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAAC,OAAO,IAAI,IAAI,CAAA;KAAE,CAAA;IACrG,SAAS,EAAE,KAAK,MAAM,EAAE;QACtB,iBAAiB,EAAE,cAAc,CAAA;QACjC,SAAS,EAAE,WAAW,CAAA;QACtB,QAAQ,EAAE,WAAW,CAAA;KACtB,KAAK,oBAAoB,CAAA;IAC1B,mBAAmB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAmBD;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAuD7C;AAED,0CAA0C;AAC1C,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.module.css.gen.d.ts","sourceRoot":"","sources":["../../../src/client/styles.module.css.gen.ts"],"names":[],"mappings":"AAaA,QAAA,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0NnC,CAAA;AACD,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"styles.module.css.gen.d.ts","sourceRoot":"","sources":["../../../src/client/styles.module.css.gen.ts"],"names":[],"mappings":"AAaA,QAAA,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+OnC,CAAA;AACD,eAAe,OAAO,CAAA"}
package/package.json CHANGED
@@ -1,138 +1,140 @@
1
- {
2
- "name": "@dongfangw/study-kit",
3
- "version": "0.1.2",
4
- "description": "AI 学伴:把任意「带清单的内容库」变成可读、可搜、可标注、可问的学习台;支持多库与私人库隔离",
5
- "type": "module",
6
- "license": "AGPL-3.0-or-later",
7
- "main": "lib/index.js",
8
- "types": "lib/index.d.ts",
9
- "dsh": {
10
- "bundle": {
11
- "patch": "./cordis.patch.yml"
12
- },
13
- "client": {
14
- "platform": "web",
15
- "inject": [
16
- "@deepseek-ai/dsh-api-session-controller",
17
- "@deepseek-ai/dsh-client-ui-conversation",
18
- "@deepseek-ai/dsh-client-ui-renderer",
19
- "@deepseek-ai/dsh-client-ui-session",
20
- "@deepseek-ai/dsh-client-ui-workspace"
21
- ]
22
- }
23
- },
24
- "exports": {
25
- ".": {
26
- "types": "./lib/index.d.ts",
27
- "default": "./lib/index.js"
28
- },
29
- "./client": {
30
- "types": "./lib/types/client/index.d.ts",
31
- "default": "./lib/client.js"
32
- },
33
- "./package.json": "./package.json"
34
- },
35
- "files": [
36
- "lib",
37
- "ext",
38
- "skills",
39
- "cordis.patch.yml",
40
- "README.md"
41
- ],
42
- "scripts": {
43
- "build": "node scripts/gen-css-modules.mjs \u0026\u0026 tsc -p tsconfig.json \u0026\u0026 tsc -p tsconfig.client.json \u0026\u0026 node node_modules/tsdown/dist/run.mjs",
44
- "typecheck": "tsc -p tsconfig.json --noEmit",
45
- "typecheck:client": "tsc -p tsconfig.client.json --noEmit",
46
- "test": "node test/run-all.mjs",
47
- "audit": "node scripts/audit.mjs",
48
- "gen:css": "node scripts/gen-css-modules.mjs",
49
- "check:css": "node scripts/gen-css-modules.mjs --check",
50
- "smoke": "node test/plugin-smoke.mjs"
51
- },
52
- "dependencies": {
53
- "@dongfangw/library-core": "^0.1.0",
54
- "@asciidoctor/core": "^3.0.4",
55
- "katex": "^0.16.22",
56
- "markdown-it": "^14.1.0",
57
- "yaml": "^2.9.0"
58
- },
59
- "peerDependencies": {
60
- "@deepseek-ai/cordis": "~4.0.4",
61
- "@deepseek-ai/dsh-agent": "\u003e=0.2.0-rc.2",
62
- "@deepseek-ai/dsh-api-session-controller": "\u003e=0.2.0-rc.2",
63
- "@deepseek-ai/dsh-client-ui-conversation": "\u003e=0.2.0-rc.2",
64
- "@deepseek-ai/dsh-client-ui-renderer": "\u003e=0.2.0-rc.2",
65
- "@deepseek-ai/dsh-client-ui-session": "\u003e=0.2.0-rc.2",
66
- "@deepseek-ai/dsh-client-ui-slots": "\u003e=0.2.0-rc.2",
67
- "@deepseek-ai/dsh-client-ui-workspace": "\u003e=0.2.0-rc.2",
68
- "@deepseek-ai/dsh-host-webserver": "\u003e=0.2.0-rc.2",
69
- "@deepseek-ai/dsh-session": "\u003e=0.2.0-rc.2",
70
- "@deepseek-ai/dsh-tools": "\u003e=0.2.0-rc.2",
71
- "react": "\u003e=18.2.0"
72
- },
73
- "devDependencies": {
74
- "@deepseek-ai/cordis": "4.0.4",
75
- "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
76
- "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
77
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
78
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
79
- "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2",
80
- "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
81
- "@deepseek-ai/dsh-client-ui-workspace": "0.2.0-rc.2",
82
- "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.2",
83
- "@deepseek-ai/dsh-session": "0.2.0-rc.2",
84
- "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
85
- "@types/markdown-it": "^14.1.2",
86
- "@types/node": "^22.20.0",
87
- "@types/react": "^18.3.1",
88
- "@types/react-dom": "^18.3.7",
89
- "lightningcss": "^1.33.0",
90
- "react": "18.3.1",
91
- "react-dom": "^18.3.1",
92
- "tsdown": "^0.22.14",
93
- "typescript": "^6.0.3"
94
- },
95
- "repository": {
96
- "type": "git",
97
- "url": "git+https://gitee.com/dongfangW/aero-study-kit.git"
98
- },
99
- "homepage": "https://gitee.com/dongfangW/aero-study-kit",
100
- "peerDependenciesMeta": {
101
- "@deepseek-ai/cordis": {
102
- "optional": true
103
- },
104
- "@deepseek-ai/dsh-agent": {
105
- "optional": true
106
- },
107
- "@deepseek-ai/dsh-api-session-controller": {
108
- "optional": true
109
- },
110
- "@deepseek-ai/dsh-client-ui-conversation": {
111
- "optional": true
112
- },
113
- "@deepseek-ai/dsh-client-ui-renderer": {
114
- "optional": true
115
- },
116
- "@deepseek-ai/dsh-client-ui-session": {
117
- "optional": true
118
- },
119
- "@deepseek-ai/dsh-client-ui-slots": {
120
- "optional": true
121
- },
122
- "@deepseek-ai/dsh-client-ui-workspace": {
123
- "optional": true
124
- },
125
- "@deepseek-ai/dsh-host-webserver": {
126
- "optional": true
127
- },
128
- "@deepseek-ai/dsh-session": {
129
- "optional": true
130
- },
131
- "@deepseek-ai/dsh-tools": {
132
- "optional": true
133
- },
134
- "react": {
135
- "optional": true
136
- }
137
- }
138
- }
1
+ {
2
+ "name": "@dongfangw/study-kit",
3
+ "version": "0.2.0",
4
+ "description": "AI 学伴:把任意「带清单的内容库」变成可读、可搜、可标注、可问的学习台;支持多库与私人库隔离",
5
+ "type": "module",
6
+ "license": "AGPL-3.0-or-later",
7
+ "main": "lib/index.js",
8
+ "types": "lib/index.d.ts",
9
+ "dsh": {
10
+ "bundle": {
11
+ "patch": "./cordis.patch.yml"
12
+ },
13
+ "client": {
14
+ "platform": "web",
15
+ "inject": [
16
+ "@deepseek-ai/dsh-api-session-controller",
17
+ "@deepseek-ai/dsh-client-ui-conversation",
18
+ "@deepseek-ai/dsh-client-ui-renderer",
19
+ "@deepseek-ai/dsh-client-ui-session",
20
+ "@deepseek-ai/dsh-client-ui-workspace"
21
+ ]
22
+ }
23
+ },
24
+ "exports": {
25
+ ".": {
26
+ "types": "./lib/index.d.ts",
27
+ "default": "./lib/index.js"
28
+ },
29
+ "./client": {
30
+ "types": "./lib/types/client/index.d.ts",
31
+ "default": "./lib/client.js"
32
+ },
33
+ "./package.json": "./package.json"
34
+ },
35
+ "files": [
36
+ "lib",
37
+ "ext",
38
+ "skills",
39
+ "cordis.patch.yml",
40
+ "README.md"
41
+ ],
42
+ "scripts": {
43
+ "build": "node scripts/gen-css-modules.mjs && tsc -p tsconfig.json && tsc -p tsconfig.client.json && node node_modules/tsdown/dist/run.mjs",
44
+ "typecheck": "tsc -p tsconfig.json --noEmit",
45
+ "typecheck:client": "tsc -p tsconfig.client.json --noEmit",
46
+ "test": "node test/run-all.mjs",
47
+ "audit": "node scripts/audit.mjs",
48
+ "gen:css": "node scripts/gen-css-modules.mjs",
49
+ "check:css": "node scripts/gen-css-modules.mjs --check",
50
+ "smoke": "node test/plugin-smoke.mjs",
51
+ "probe:pdf": "node scripts/pdf-harness.mjs"
52
+ },
53
+ "dependencies": {
54
+ "@dongfangw/library-core": "^0.1.0",
55
+ "@asciidoctor/core": "^3.0.4",
56
+ "katex": "^0.16.22",
57
+ "markdown-it": "^14.1.0",
58
+ "pdfjs-dist": "^4.10.38",
59
+ "yaml": "^2.9.0"
60
+ },
61
+ "peerDependencies": {
62
+ "@deepseek-ai/cordis": "~4.0.4",
63
+ "@deepseek-ai/dsh-agent": ">=0.2.0-rc.2",
64
+ "@deepseek-ai/dsh-api-session-controller": ">=0.2.0-rc.2",
65
+ "@deepseek-ai/dsh-client-ui-conversation": ">=0.2.0-rc.2",
66
+ "@deepseek-ai/dsh-client-ui-renderer": ">=0.2.0-rc.2",
67
+ "@deepseek-ai/dsh-client-ui-session": ">=0.2.0-rc.2",
68
+ "@deepseek-ai/dsh-client-ui-slots": ">=0.2.0-rc.2",
69
+ "@deepseek-ai/dsh-client-ui-workspace": ">=0.2.0-rc.2",
70
+ "@deepseek-ai/dsh-host-webserver": ">=0.2.0-rc.2",
71
+ "@deepseek-ai/dsh-session": ">=0.2.0-rc.2",
72
+ "@deepseek-ai/dsh-tools": ">=0.2.0-rc.2",
73
+ "react": ">=18.2.0"
74
+ },
75
+ "devDependencies": {
76
+ "@deepseek-ai/cordis": "4.0.4",
77
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
78
+ "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
79
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
80
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
81
+ "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2",
82
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
83
+ "@deepseek-ai/dsh-client-ui-workspace": "0.2.0-rc.2",
84
+ "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.2",
85
+ "@deepseek-ai/dsh-session": "0.2.0-rc.2",
86
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
87
+ "@types/markdown-it": "^14.1.2",
88
+ "@types/node": "^22.20.0",
89
+ "@types/react": "^18.3.1",
90
+ "@types/react-dom": "^18.3.7",
91
+ "lightningcss": "^1.33.0",
92
+ "react": "18.3.1",
93
+ "react-dom": "^18.3.1",
94
+ "tsdown": "^0.22.14",
95
+ "typescript": "^6.0.3"
96
+ },
97
+ "repository": {
98
+ "type": "git",
99
+ "url": "git+https://gitee.com/dongfangW/aero-study-kit.git"
100
+ },
101
+ "homepage": "https://gitee.com/dongfangW/aero-study-kit",
102
+ "peerDependenciesMeta": {
103
+ "@deepseek-ai/cordis": {
104
+ "optional": true
105
+ },
106
+ "@deepseek-ai/dsh-agent": {
107
+ "optional": true
108
+ },
109
+ "@deepseek-ai/dsh-api-session-controller": {
110
+ "optional": true
111
+ },
112
+ "@deepseek-ai/dsh-client-ui-conversation": {
113
+ "optional": true
114
+ },
115
+ "@deepseek-ai/dsh-client-ui-renderer": {
116
+ "optional": true
117
+ },
118
+ "@deepseek-ai/dsh-client-ui-session": {
119
+ "optional": true
120
+ },
121
+ "@deepseek-ai/dsh-client-ui-slots": {
122
+ "optional": true
123
+ },
124
+ "@deepseek-ai/dsh-client-ui-workspace": {
125
+ "optional": true
126
+ },
127
+ "@deepseek-ai/dsh-host-webserver": {
128
+ "optional": true
129
+ },
130
+ "@deepseek-ai/dsh-session": {
131
+ "optional": true
132
+ },
133
+ "@deepseek-ai/dsh-tools": {
134
+ "optional": true
135
+ },
136
+ "react": {
137
+ "optional": true
138
+ }
139
+ }
140
+ }