@4399ywkf/editor 0.6.0 → 0.8.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.md +161 -2
- package/dist/{DocView-XQMJUUVK.js → DocView-WEKRSKRU.js} +6 -4
- package/dist/DocView-WEKRSKRU.js.map +1 -0
- package/dist/SheetView-SDBRSTVS.js +3 -0
- package/dist/{SheetView-DSADIZNS.js.map → SheetView-SDBRSTVS.js.map} +1 -1
- package/dist/chunk-5HMKRNIH.js +27 -0
- package/dist/chunk-5HMKRNIH.js.map +1 -0
- package/dist/chunk-DGUNVCOM.js +711 -0
- package/dist/chunk-DGUNVCOM.js.map +1 -0
- package/dist/chunk-HPSPOM2O.js +128 -0
- package/dist/chunk-HPSPOM2O.js.map +1 -0
- package/dist/chunk-KRP5V7VF.js +130 -0
- package/dist/chunk-KRP5V7VF.js.map +1 -0
- package/dist/chunk-SBTKDJAL.js +107 -0
- package/dist/chunk-SBTKDJAL.js.map +1 -0
- package/dist/{chunk-IUDLMN53.js → chunk-SGLNT6Z2.js} +2416 -176
- package/dist/chunk-SGLNT6Z2.js.map +1 -0
- package/dist/{chunk-L6ZR5HHW.js → chunk-SYCK6Y5F.js} +15 -10
- package/dist/chunk-SYCK6Y5F.js.map +1 -0
- package/dist/chunk-WF7PIIFR.js +21 -0
- package/dist/chunk-WF7PIIFR.js.map +1 -0
- package/dist/chunk-ZY5KLA7T.js +258 -0
- package/dist/chunk-ZY5KLA7T.js.map +1 -0
- package/dist/code-types-Dqmit3xx.d.ts +65 -0
- package/dist/{types-C37MAt8o.d.ts → csv-parse-D0zTBvDB.d.ts} +39 -1
- package/dist/csv.d.ts +6 -3
- package/dist/csv.js +6 -125
- package/dist/csv.js.map +1 -1
- package/dist/doc-runtime.d.ts +1 -1
- package/dist/doc-runtime.js +7 -1
- package/dist/doc-runtime.js.map +1 -1
- package/dist/doc.d.ts +113 -6
- package/dist/doc.js +2 -1
- package/dist/doc.js.map +1 -1
- package/dist/docx.d.ts +15 -0
- package/dist/docx.js +116 -8
- package/dist/docx.js.map +1 -1
- package/dist/import-GVZDLWA2.js +6 -0
- package/dist/import-GVZDLWA2.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/pdf.d.ts +3 -1
- package/dist/pptx.d.ts +3 -1
- package/dist/{registry-BBL8yeIT.d.ts → registry-CYKivRDh.d.ts} +13 -1
- package/dist/sheet-runtime.d.ts +212 -0
- package/dist/sheet-runtime.js +416 -0
- package/dist/sheet-runtime.js.map +1 -0
- package/dist/sheet.d.ts +9 -5
- package/dist/sheet.js +1 -1
- package/dist/style.css +421 -111
- package/dist/xlsx.d.ts +118 -7
- package/dist/xlsx.js +7 -78
- package/dist/xlsx.js.map +1 -1
- package/package.json +11 -5
- package/dist/DocView-XQMJUUVK.js.map +0 -1
- package/dist/SheetView-DSADIZNS.js +0 -3
- package/dist/chunk-32WQX3NR.js +0 -37
- package/dist/chunk-32WQX3NR.js.map +0 -1
- package/dist/chunk-IUDLMN53.js.map +0 -1
- package/dist/chunk-L6ZR5HHW.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@4399ywkf/editor",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "4399 多格式文档编辑器:doc(tiptap) / sheet(univer) / pdf,含 docx
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "4399 多格式文档编辑器:doc(tiptap) / sheet(univer) / pdf / pptx,含 docx·xlsx·csv 双向导入导出与 AI 可驱动的结构化编辑面(./doc-runtime、./sheet-runtime)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -42,6 +42,10 @@
|
|
|
42
42
|
"types": "./dist/doc-runtime.d.ts",
|
|
43
43
|
"import": "./dist/doc-runtime.js"
|
|
44
44
|
},
|
|
45
|
+
"./sheet-runtime": {
|
|
46
|
+
"types": "./dist/sheet-runtime.d.ts",
|
|
47
|
+
"import": "./dist/sheet-runtime.js"
|
|
48
|
+
},
|
|
45
49
|
"./plugins/ai": {
|
|
46
50
|
"types": "./dist/plugins/ai.d.ts",
|
|
47
51
|
"import": "./dist/plugins/ai.js"
|
|
@@ -62,7 +66,7 @@
|
|
|
62
66
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
63
67
|
"@radix-ui/react-popover": "^1.1.15",
|
|
64
68
|
"@tiptap/core": "^3.23.5",
|
|
65
|
-
"@tiptap/extension-code-block
|
|
69
|
+
"@tiptap/extension-code-block": "^3.30.0",
|
|
66
70
|
"@tiptap/extension-collaboration": "^3.23.5",
|
|
67
71
|
"@tiptap/extension-collaboration-caret": "^3.23.5",
|
|
68
72
|
"@tiptap/extension-color": "^3.23.5",
|
|
@@ -83,6 +87,7 @@
|
|
|
83
87
|
"@tiptap/extension-typography": "^3.23.5",
|
|
84
88
|
"@tiptap/extension-unique-id": "^3.23.5",
|
|
85
89
|
"@tiptap/extensions": "^3.23.5",
|
|
90
|
+
"@tiptap/markdown": "^3.30.0",
|
|
86
91
|
"@tiptap/pm": "^3.23.5",
|
|
87
92
|
"@tiptap/react": "^3.23.5",
|
|
88
93
|
"@tiptap/starter-kit": "^3.23.5",
|
|
@@ -91,9 +96,10 @@
|
|
|
91
96
|
"fflate": "^0.8.2",
|
|
92
97
|
"is-hotkey": "^0.2.0",
|
|
93
98
|
"lodash.throttle": "^4.1.1",
|
|
94
|
-
"
|
|
99
|
+
"marked": "^17.0.6",
|
|
95
100
|
"react-hotkeys-hook": "^5.3.2",
|
|
96
101
|
"react-textarea-autosize": "^8.5.9",
|
|
102
|
+
"shiki": "^4.4.3",
|
|
97
103
|
"yjs": "^13.6.30"
|
|
98
104
|
},
|
|
99
105
|
"peerDependencies": {
|
|
@@ -143,7 +149,7 @@
|
|
|
143
149
|
"scripts": {
|
|
144
150
|
"build": "tsup && node scripts/build-styles.mjs",
|
|
145
151
|
"dev": "tsup --watch",
|
|
146
|
-
"test": "node --experimental-strip-types --test src/docx/*.test.ts src/doc-runtime/*.test.ts src/xlsx/*.test.ts src/*.test.ts src/plugins/**/*.test.ts",
|
|
152
|
+
"test": "node --experimental-strip-types --test src/docx/*.test.ts src/doc-runtime/*.test.ts src/sheet-runtime/*.test.ts src/xlsx/*.test.ts src/*.test.ts src/plugins/**/*.test.ts src/components/tiptap-node/code-block-node/*.test.ts src/components/tiptap-templates/notion-like/*.test.ts src/components/tiptap-node/collapsible-node/*.test.ts",
|
|
147
153
|
"typecheck": "tsc --noEmit"
|
|
148
154
|
}
|
|
149
155
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/views/DocView.tsx"],"names":[],"mappings":";;;;AAMe,SAAR,QAAyB,EAAE,OAAA,EAAS,UAAU,IAAA,EAAM,SAAA,EAAW,SAAQ,EAAsB;AAClG,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EACH,8BAAC,oBAAA,EAAA,EAAqB,MAAA,EAAQ,EAAC,EAC7B,QAAA,kBAAA,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,MAAM,IAAA,IAAQ,SAAA;AAAA,MACd,OAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA,EAAe,CAAC,MAAA,KAAmB,OAAA,GAAU,MAAM;AAAA;AAAA,KAEvD,CAAA,EACF,CAAA;AAEJ","file":"DocView-XQMJUUVK.js","sourcesContent":["import type { Editor } from \"@tiptap/react\"\nimport { EditorConfigProvider } from \"../contexts/editor-config-context\"\nimport { NotionEditor } from \"../components/tiptap-templates/notion-like/notion-like-editor\"\nimport type { DocumentViewProps } from \"../registry\"\n\n/** doc 通道:云文档与本地 doc 是同一套 tiptap,不做区分 */\nexport default function DocView({ content, readOnly, room, className, onReady }: DocumentViewProps) {\n return (\n <div className={className}>\n <EditorConfigProvider config={{}}>\n <NotionEditor\n room={room ?? \"default\"}\n content={content as string}\n readOnly={readOnly}\n onEditorReady={(editor: Editor) => onReady?.(editor)}\n />\n </EditorConfigProvider>\n </div>\n )\n}\n"]}
|
package/dist/chunk-32WQX3NR.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// src/xlsx/snapshot.ts
|
|
2
|
-
function snapshotFromUniver(univerAPI) {
|
|
3
|
-
const api = univerAPI;
|
|
4
|
-
const book = api?.getActiveWorkbook?.();
|
|
5
|
-
if (!book) throw new Error("拿不到当前工作簿:univerAPI 无效,或表格尚未就绪");
|
|
6
|
-
const snapshot = book.getSnapshot?.() ?? book.save?.();
|
|
7
|
-
if (!snapshot || typeof snapshot !== "object") {
|
|
8
|
-
throw new Error("当前 Univer 版本没有 getSnapshot() / save(),无法取快照");
|
|
9
|
-
}
|
|
10
|
-
return snapshot;
|
|
11
|
-
}
|
|
12
|
-
function toSnapshot(source) {
|
|
13
|
-
const maybe = source;
|
|
14
|
-
if (maybe && typeof maybe === "object" && ("sheets" in maybe || "sheetOrder" in maybe))
|
|
15
|
-
return maybe;
|
|
16
|
-
return snapshotFromUniver(source);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// src/xlsx/cell.ts
|
|
20
|
-
function numericKeys(o) {
|
|
21
|
-
if (!o) return [];
|
|
22
|
-
return Object.keys(o).map(Number).filter((n) => Number.isInteger(n) && n >= 0).sort((a, b) => a - b);
|
|
23
|
-
}
|
|
24
|
-
function richTextToPlain(cell) {
|
|
25
|
-
const stream = cell.p?.body?.dataStream;
|
|
26
|
-
if (typeof stream !== "string") return void 0;
|
|
27
|
-
return stream.replace(/\r\n$/, "").replace(/\r/g, "\n");
|
|
28
|
-
}
|
|
29
|
-
function looksLikeDateFormat(pattern) {
|
|
30
|
-
if (!pattern) return false;
|
|
31
|
-
const bare = pattern.replace(/"[^"]*"/g, "").replace(/\\./g, "");
|
|
32
|
-
return /[yYdD]/.test(bare) || /h/i.test(bare) || /\[\$-/.test(pattern);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export { looksLikeDateFormat, numericKeys, richTextToPlain, snapshotFromUniver, toSnapshot };
|
|
36
|
-
//# sourceMappingURL=chunk-32WQX3NR.js.map
|
|
37
|
-
//# sourceMappingURL=chunk-32WQX3NR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/xlsx/snapshot.ts","../src/xlsx/cell.ts"],"names":[],"mappings":";AASO,SAAS,mBAAmB,SAAA,EAAkC;AACnE,EAAA,MAAM,GAAA,GAAM,SAAA;AAGZ,EAAA,MAAM,IAAA,GAAO,KAAK,iBAAA,IAAoB;AACtC,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAC1D,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,IAAc,IAAK,KAAK,IAAA,IAAO;AACrD,EAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC7C,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,WAAW,MAAA,EAA8C;AACvE,EAAA,MAAM,KAAA,GAAQ,MAAA;AACd,EAAA,IAAI,SAAS,OAAO,KAAA,KAAU,QAAA,KAAa,QAAA,IAAY,SAAS,YAAA,IAAgB,KAAA,CAAA;AAC9E,IAAA,OAAO,KAAA;AACT,EAAA,OAAO,mBAAmB,MAAM,CAAA;AAClC;;;ACjBO,SAAS,YAAY,CAAA,EAAkD;AAC5E,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAChB,EAAA,OAAO,MAAA,CAAO,KAAK,CAAC,CAAA,CACjB,IAAI,MAAM,CAAA,CACV,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,CAAO,UAAU,CAAC,CAAA,IAAK,KAAK,CAAC,CAAA,CAC3C,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACzB;AAGO,SAAS,gBAAgB,IAAA,EAAoC;AAClE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,CAAA,EAAG,IAAA,EAAM,UAAA;AAC7B,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,EAAU,OAAO,MAAA;AACvC,EAAA,OAAO,OAAO,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CAAE,OAAA,CAAQ,OAAO,IAAI,CAAA;AACxD;AASO,SAAS,oBAAoB,OAAA,EAA6C;AAC/E,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,EAAA,MAAM,IAAA,GAAO,QAAQ,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC/D,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA,CAAK,KAAK,IAAI,CAAA,IAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA;AACvE","file":"chunk-32WQX3NR.js","sourcesContent":["/** 从 Univer 实例取快照。xlsx 与 csv 两条导出路径共用。 */\n\nimport type { WorkbookData } from \"./types.ts\"\n\n/**\n * 参数类型是 `unknown` 而不是 `FUniver`:`@univerjs/presets` 是可选 peer,\n * 写成具体类型会让没装它的项目 typecheck 直接红。运行时按 facade 的两个\n * 方法名依次试探(`getSnapshot` 是新名字,`save` 是旧的)。\n */\nexport function snapshotFromUniver(univerAPI: unknown): WorkbookData {\n const api = univerAPI as {\n getActiveWorkbook?: () => { getSnapshot?: () => unknown; save?: () => unknown } | null\n } | null\n const book = api?.getActiveWorkbook?.()\n if (!book) throw new Error(\"拿不到当前工作簿:univerAPI 无效,或表格尚未就绪\")\n const snapshot = book.getSnapshot?.() ?? book.save?.()\n if (!snapshot || typeof snapshot !== \"object\") {\n throw new Error(\"当前 Univer 版本没有 getSnapshot() / save(),无法取快照\")\n }\n return snapshot as WorkbookData\n}\n\n/** 快照或 Univer 实例都收 —— 调用方不必自己判断手里是什么 */\nexport function toSnapshot(source: WorkbookData | unknown): WorkbookData {\n const maybe = source as WorkbookData\n if (maybe && typeof maybe === \"object\" && (\"sheets\" in maybe || \"sheetOrder\" in maybe))\n return maybe\n return snapshotFromUniver(source)\n}\n","/** 读 Univer 快照时 xlsx 与 csv 两条导出路径共用的小工具。 */\n\nimport type { CellData } from \"./types.ts\"\n\n/**\n * 稀疏矩阵的行号/列号。\n *\n * Univer 的 `cellData` 是 `{ [row]: { [col]: cell } }` 的普通对象,键是字符串。\n * 直接 `Object.keys()` 会得到 `[\"10\", \"2\"]` 这种字典序,必须转数字再排 ——\n * 否则导出的行序就是乱的。\n */\nexport function numericKeys(o: Record<number, unknown> | undefined): number[] {\n if (!o) return []\n return Object.keys(o)\n .map(Number)\n .filter((n) => Number.isInteger(n) && n >= 0)\n .sort((a, b) => a - b)\n}\n\n/** 富文本只取纯文本。Univer 的 dataStream 用 \\r 断段、结尾还带一个 \\r\\n */\nexport function richTextToPlain(cell: CellData): string | undefined {\n const stream = cell.p?.body?.dataStream\n if (typeof stream !== \"string\") return undefined\n return stream.replace(/\\r\\n$/, \"\").replace(/\\r/g, \"\\n\")\n}\n\n/**\n * 这个单元格的数字格式是不是日期/时间。\n *\n * 只做**粗判**,用来给 csv 提示「这里会导出成序列号」,不用来做转换 ——\n * Excel 的格式码有转义(`\\d`、`\"年\"`)、有区域前缀(`[$-409]`)、\n * 还有和 `mm` 同形的分钟,真解析是个坑。猜错日期比原样给出序列号更糟。\n */\nexport function looksLikeDateFormat(pattern: string | undefined | null): boolean {\n if (!pattern) return false\n // 去掉引号里的字面量和反斜杠转义,剩下的才是真正的格式符\n const bare = pattern.replace(/\"[^\"]*\"/g, \"\").replace(/\\\\./g, \"\")\n return /[yYdD]/.test(bare) || /h/i.test(bare) || /\\[\\$-/.test(pattern)\n}\n"]}
|