@ai-matrx/office 0.8.59 → 0.8.61
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/CHANGELOG.md +6 -2
- package/dist/{chunk-NSU6EVJK.cjs → chunk-6TUFBQLH.cjs} +3 -3
- package/dist/chunk-6TUFBQLH.cjs.map +1 -0
- package/dist/{chunk-DY5TGHBI.js → chunk-JVEJ5XLX.js} +3 -3
- package/dist/chunk-JVEJ5XLX.js.map +1 -0
- package/dist/collab-sheets-transform.cjs +1 -6
- package/dist/collab-sheets-transform.cjs.map +1 -1
- package/dist/collab-sheets-transform.d.cts +1 -1
- package/dist/collab-sheets-transform.d.ts +1 -1
- package/dist/collab-sheets-transform.js +1 -6
- package/dist/collab-sheets-transform.js.map +1 -1
- package/dist/docs-io.cjs +2 -1
- package/dist/docs-io.cjs.map +1 -1
- package/dist/docs-io.js +2 -1
- package/dist/docs-io.js.map +1 -1
- package/dist/docs-tools.cjs +6 -6
- package/dist/docs-tools.js +1 -1
- package/dist/docs.cjs +2 -2
- package/dist/docs.js +1 -1
- package/dist/pdf.cjs +57 -54
- package/dist/pdf.cjs.map +1 -1
- package/dist/pdf.js +60 -57
- package/dist/pdf.js.map +1 -1
- package/dist/univer-collab.cjs +1 -6
- package/dist/univer-collab.cjs.map +1 -1
- package/dist/univer-collab.js +1 -6
- package/dist/univer-collab.js.map +1 -1
- package/package.json +9 -5
- package/dist/chunk-DY5TGHBI.js.map +0 -1
- package/dist/chunk-NSU6EVJK.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.61
|
|
4
|
+
|
|
5
|
+
- Update the sheet mutation census to the installed Univer 1.2.0 presets. Workbook calculation settings remain a named collaboration barrier until their concurrent transform is defined; retired SDK thread-comment mutations are no longer listed because those presets no longer emit them. Matrx comment anchors are unchanged. Consumer action: none.
|
|
6
|
+
|
|
3
7
|
## 0.8.59
|
|
4
8
|
|
|
5
|
-
|
|
6
|
-
|
|
9
|
+
Automatic changed-only republish (docs/metadata drift since the last published version; verified: `git diff c271beb42b 838e7ca49b -- apps/shared/office/src`
|
|
10
|
+
has no shipped-source changes outside tests, fixtures and docs). No consumer action required.
|
|
7
11
|
|
|
8
12
|
## 0.8.58
|
|
9
13
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
var _chunkXAIKXHHJcjs = require('./chunk-XAIKXHHJ.cjs');
|
|
5
5
|
|
|
6
6
|
// src/docs/doc-tools-core.ts
|
|
7
|
+
var _source = require('@ai-matrx/content-ir/source');
|
|
7
8
|
var BUILDING_BLOCKS = [
|
|
8
9
|
{ id: "meeting-notes", label: "Meeting notes", description: "Date, attendees, agenda, decisions and action items.", markdown: "## Meeting notes\n\nDate: \nAttendees: \n\n### Agenda\n\n1. \n\n### Discussion\n\n### Decisions\n\n### Action items\n\n\u2610 Owner: Task, due date\n" },
|
|
9
10
|
{ id: "project-tracker", label: "Project tracker", description: "Goal, milestones, owners, risks and status.", markdown: "## Project tracker\n\nGoal: \nOwner: \nStatus: On track\n\n### Milestones\n\n\u2610 Milestone, owner, due date\n\n### Risks\n\n### Next steps\n" },
|
|
@@ -30,14 +31,13 @@ function markdownFragment(markdown) {
|
|
|
30
31
|
function looksLikeMarkdown(text) {
|
|
31
32
|
if (!text) return false;
|
|
32
33
|
const lines = text.split(/\r?\n/);
|
|
33
|
-
const delimiter = /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)+\|?\s*$/;
|
|
34
34
|
for (let i = 0; i < lines.length; i++) {
|
|
35
35
|
const line = lines[i];
|
|
36
36
|
if (/^\s{0,3}#{1,6}\s+\S/.test(line)) return true;
|
|
37
37
|
if (/^\s*([-*+]|\d+[.)])\s+\S/.test(line)) return true;
|
|
38
38
|
if (/^\s{0,3}(```|~~~)/.test(line)) return true;
|
|
39
39
|
if (/^\s*>\s?\S/.test(line)) return true;
|
|
40
|
-
if (
|
|
40
|
+
if (_source.tableStartsAt.call(void 0, lines, i)) return true;
|
|
41
41
|
}
|
|
42
42
|
return /\*\*[^*\s][^*]*\*\*|\[[^\]\n]+\]\([^)\s]+\)/.test(text);
|
|
43
43
|
}
|
|
@@ -145,4 +145,4 @@ function readDocumentLanguage(documentStyle) {
|
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
exports.BUILDING_BLOCKS = BUILDING_BLOCKS; exports.markdownFragment = markdownFragment; exports.looksLikeMarkdown = looksLikeMarkdown; exports.blockInsertPlan = blockInsertPlan; exports.BOOKMARK_RANGE_TYPE = BOOKMARK_RANGE_TYPE; exports.BOOKMARK_ANCHOR = BOOKMARK_ANCHOR; exports.collectBookmarks = collectBookmarks; exports.bookmarkBody = bookmarkBody; exports.cleanBookmarkName = cleanBookmarkName; exports.bookmarkFromHash = bookmarkFromHash; exports.bookmarkHash = bookmarkHash; exports.paragraphBorderParams = paragraphBorderParams; exports.rulerGeometry = rulerGeometry; exports.DOCUMENT_LANGUAGE_KEY = DOCUMENT_LANGUAGE_KEY; exports.DOCUMENT_LANGUAGES = DOCUMENT_LANGUAGES; exports.readDocumentLanguage = readDocumentLanguage;
|
|
148
|
-
//# sourceMappingURL=chunk-
|
|
148
|
+
//# sourceMappingURL=chunk-6TUFBQLH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/aidream/aidream/apps/shared/office/dist/chunk-6TUFBQLH.cjs","../src/docs/doc-tools-core.ts"],"names":[],"mappings":"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","file":"/home/runner/work/aidream/aidream/apps/shared/office/dist/chunk-6TUFBQLH.cjs","sourcesContent":[null,"/**\n * The pure half of the Docs tools: building blocks, bookmarks, paragraph borders, the ruler's\n * geometry and the document language. No Univer import, so each is proven on plain snapshots.\n */\n\nimport { PX_PER_INCH } from \"../core\";\nimport { tableStartsAt } from \"@ai-matrx/content-ir/source\";\nimport { markdownToUniverDoc } from \"./markdown-to-univer-doc\";\n\nexport interface BuildingBlock {\n id: string;\n label: string;\n description: string;\n markdown: string;\n}\n\nexport const BUILDING_BLOCKS: BuildingBlock[] = [\n { id: \"meeting-notes\", label: \"Meeting notes\", description: \"Date, attendees, agenda, decisions and action items.\", markdown: \"## Meeting notes\\n\\nDate: \\nAttendees: \\n\\n### Agenda\\n\\n1. \\n\\n### Discussion\\n\\n### Decisions\\n\\n### Action items\\n\\n☐ Owner: Task, due date\\n\" },\n { id: \"project-tracker\", label: \"Project tracker\", description: \"Goal, milestones, owners, risks and status.\", markdown: \"## Project tracker\\n\\nGoal: \\nOwner: \\nStatus: On track\\n\\n### Milestones\\n\\n☐ Milestone, owner, due date\\n\\n### Risks\\n\\n### Next steps\\n\" },\n { id: \"email-draft\", label: \"Email draft\", description: \"To, subject and a three-part message ready to fill in.\", markdown: \"## Email draft\\n\\nTo: \\nSubject: \\n\\nHi ,\\n\\nI am writing about .\\n\\nThe next step is .\\n\\nThanks,\\n\" },\n { id: \"weekly-status\", label: \"Weekly status\", description: \"Done, next, and blocked, for one week.\", markdown: \"## Weekly status\\n\\nWeek of: \\n\\n### Done this week\\n\\n### Next week\\n\\n### Blocked\\n\" },\n { id: \"decision-log\", label: \"Decision record\", description: \"Context, options, decision and consequences.\", markdown: \"## Decision record\\n\\nDate: \\nDecider: \\n\\n### Context\\n\\n### Options considered\\n\\n### Decision\\n\\n### Consequences\\n\" },\n { id: \"pros-cons\", label: \"Pros and cons\", description: \"A side-by-side weighing of one choice.\", markdown: \"## Pros and cons\\n\\nChoice: \\n\\n### Pros\\n\\n### Cons\\n\\n### Verdict\\n\" },\n];\n\n/** What Univer's paste command takes as `doc`: a body (no document-closing `\\n`) plus the table sources its `tables` name. */\nexport interface MarkdownFragment {\n body: Record<string, unknown> & { dataStream: string };\n tableSource?: Record<string, unknown>;\n drawings?: Record<string, unknown>;\n}\n\n/**\n * Markdown to a fragment Univer can insert at the caret (`doc.command.inner-paste`): headings, lists,\n * bold, links and REAL tables, from THE one writer (`markdownToUniverDoc`). The document-closing `\\n`\n * and its section break are dropped; every other body part (tables, links, runs) is kept.\n */\nexport function markdownFragment(markdown: string): MarkdownFragment {\n const doc = markdownToUniverDoc(markdown) as unknown as {\n body?: Record<string, unknown> & { dataStream: string };\n tableSource?: Record<string, unknown>;\n drawings?: Record<string, unknown>;\n };\n const whole = doc.body ?? { dataStream: \"\" };\n let stream = whole.dataStream;\n if (stream.endsWith(\"\\n\")) stream = stream.slice(0, -1);\n const { sectionBreaks: _sectionBreaks, ...rest } = whole;\n void _sectionBreaks;\n const paragraphs = ((whole.paragraphs as Array<{ startIndex: number }> | undefined) ?? []).filter((p) => p.startIndex < stream.length);\n const textRuns = ((whole.textRuns as Array<{ st: number; ed: number }> | undefined) ?? [])\n .filter((r) => r.st < stream.length)\n .map((r) => ({ ...r, ed: Math.min(r.ed, stream.length) }));\n return {\n body: { ...rest, dataStream: stream, paragraphs, textRuns },\n ...(doc.tableSource ? { tableSource: doc.tableSource } : {}),\n ...(doc.drawings ? { drawings: doc.drawings } : {}),\n };\n}\n\n/**\n * True when text carries markdown STRUCTURE a document should draw: a table, a heading, a list, a\n * fence, a quote, a link, or bold. Plain prose (and a stray `*` or `_`) is false, so ordinary\n * typing and paste stay plain text. Every door that takes agent- or clipboard-supplied text asks\n * this one question, then converts through `markdownFragment`.\n */\nexport function looksLikeMarkdown(text: string): boolean {\n if (!text) return false;\n const lines = text.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (/^\\s{0,3}#{1,6}\\s+\\S/.test(line)) return true;\n if (/^\\s*([-*+]|\\d+[.)])\\s+\\S/.test(line)) return true;\n if (/^\\s{0,3}(```|~~~)/.test(line)) return true;\n if (/^\\s*>\\s?\\S/.test(line)) return true;\n if (tableStartsAt(lines, i)) return true;\n }\n return /\\*\\*[^*\\s][^*]*\\*\\*|\\[[^\\]\\n]+\\]\\([^)\\s]+\\)/.test(text);\n}\n\n/**\n * Where a BLOCK (table of contents, building block) goes for a caret: never inside a paragraph's\n * text, so a heading is never split. Caret at the start of a paragraph (or in an empty one) →\n * insert right there; anywhere else → end the caret's paragraph with a new line and insert at the\n * start of that new paragraph. `dataStream` is Univer's body stream (paragraphs end in `\\r`).\n */\nexport function blockInsertPlan(dataStream: string, caret: number): { at: number; breakAt: number | null } {\n const c = Math.max(0, Math.min(caret, dataStream.length));\n const start = Math.max(dataStream.lastIndexOf(\"\\r\", c - 1), dataStream.lastIndexOf(\"\\n\", c - 1)) + 1;\n let end = dataStream.indexOf(\"\\r\", c);\n if (end < 0) end = dataStream.length;\n // Field marks and anchors are zero-width: a paragraph holding only them is empty.\n const text = dataStream.slice(start, end).replace(/[\\u0000-\\u001f\\u200b]/g, \"\").trim();\n if (c === start || text === \"\") return { at: start, breakAt: null };\n return { at: end + 1, breakAt: end };\n}\n\n/** Univer's CustomRangeType.BOOKMARK. */\nexport const BOOKMARK_RANGE_TYPE = 3;\n/** A bookmark is an invisible anchor: one zero-width character the custom range wraps. */\nexport const BOOKMARK_ANCHOR = \"\";\n\nexport interface Bookmark {\n id: string;\n name: string;\n offset: number;\n}\n\ninterface BodyWithRanges {\n customRanges?: Array<{ rangeId: string; rangeType: number; startIndex: number; properties?: { name?: unknown } }>;\n}\n\nexport function collectBookmarks(snapshot: unknown): Bookmark[] {\n const body = (snapshot as { body?: BodyWithRanges } | null)?.body;\n const out: Bookmark[] = [];\n for (const r of body?.customRanges ?? []) {\n if (r.rangeType !== BOOKMARK_RANGE_TYPE) continue;\n out.push({ id: r.rangeId, name: typeof r.properties?.name === \"string\" ? r.properties.name : \"\", offset: r.startIndex });\n }\n return out.sort((a, b) => a.offset - b.offset);\n}\n\nexport function bookmarkBody(id: string, name: string) {\n return {\n dataStream: BOOKMARK_ANCHOR,\n customRanges: [{ startIndex: 0, endIndex: 0, rangeId: id, rangeType: BOOKMARK_RANGE_TYPE, properties: { name }, wholeEntity: true }],\n };\n}\n\nexport function cleanBookmarkName(raw: string, existing: readonly Bookmark[]): { ok: true; name: string } | { ok: false; why: string } {\n const name = raw.replace(/\\s+/g, \" \").trim().slice(0, 80);\n if (!name) return { ok: false, why: \"Give the bookmark a name.\" };\n if (existing.some((b) => b.name.toLowerCase() === name.toLowerCase())) return { ok: false, why: `A bookmark named \"${name}\" already exists.` };\n return { ok: true, name };\n}\n\n/** `#bookmark=<name>` in the page address names a bookmark to jump to on open. */\nexport function bookmarkFromHash(hash: string): string | null {\n const m = /^#bookmark=(.+)$/.exec(hash);\n if (!m) return null;\n try {\n return decodeURIComponent(m[1]!);\n } catch {\n return null;\n }\n}\nexport const bookmarkHash = (name: string) => `#bookmark=${encodeURIComponent(name)}`;\n\nexport type BorderSide = \"top\" | \"bottom\" | \"both\" | \"none\";\nexport type BorderDash = \"solid\" | \"dashed\" | \"dotted\";\n/** Univer's DashStyleType values. */\nconst DASH: Record<BorderDash, number> = { solid: 1, dotted: 2, dashed: 3 };\n\nexport interface BorderChoice {\n side: BorderSide;\n color: string;\n width: number;\n dash: BorderDash;\n padding: number;\n}\n\n/** The `paragraph` argument of `doc-paragraph-setting.command` for a choice (Univer draws top and bottom paragraph borders). */\nexport function paragraphBorderParams(c: BorderChoice): Record<string, unknown> {\n const line = { color: { rgb: c.color }, width: c.width, dashStyle: DASH[c.dash], padding: c.padding };\n return {\n borderTop: c.side === \"top\" || c.side === \"both\" ? line : null,\n borderBottom: c.side === \"bottom\" || c.side === \"both\" ? line : null,\n };\n}\n\nexport interface RulerGeometry {\n pageLeft: number;\n pageWidth: number;\n marginLeft: number;\n marginRight: number;\n ticks: Array<{ x: number; kind: \"inch\" | \"half\" | \"eighth\"; label?: string }>;\n}\n\n/** The ruler above the page: inch ticks from the page's left edge (margins shaded), at the current zoom. */\nexport function rulerGeometry(a: { containerWidth: number; zoom: number; pageWidthPx: number; marginLeftPx: number; marginRightPx: number }): RulerGeometry {\n const pageWidth = a.pageWidthPx * a.zoom;\n const pageLeft = Math.max(0, (a.containerWidth - pageWidth) / 2);\n const ticks: RulerGeometry[\"ticks\"] = [];\n const inches = a.pageWidthPx / PX_PER_INCH;\n for (let eighth = 0; eighth <= Math.floor(inches * 8); eighth++) {\n const x = pageLeft + (eighth * PX_PER_INCH * a.zoom) / 8;\n if (eighth % 8 === 0) {\n const marginInches = a.marginLeftPx / PX_PER_INCH;\n ticks.push({ x, kind: \"inch\", ...(eighth / 8 !== marginInches ? { label: String(Math.round(Math.abs(eighth / 8 - marginInches))) } : {}) });\n } else ticks.push({ x, kind: eighth % 4 === 0 ? \"half\" : \"eighth\" });\n }\n return { pageLeft, pageWidth, marginLeft: a.marginLeftPx * a.zoom, marginRight: a.marginRightPx * a.zoom, ticks };\n}\n\n/** The key on the document style that carries the language (the slot the paper color also uses). */\nexport const DOCUMENT_LANGUAGE_KEY = \"matrxLanguage\";\nexport const DOCUMENT_LANGUAGES: Array<{ code: string; label: string }> = [\n { code: \"en-US\", label: \"English (United States)\" },\n { code: \"en-GB\", label: \"English (United Kingdom)\" },\n { code: \"es\", label: \"Spanish\" },\n { code: \"fr\", label: \"French\" },\n { code: \"de\", label: \"German\" },\n { code: \"it\", label: \"Italian\" },\n { code: \"pt-BR\", label: \"Portuguese (Brazil)\" },\n { code: \"nl\", label: \"Dutch\" },\n { code: \"ja\", label: \"Japanese\" },\n { code: \"ko\", label: \"Korean\" },\n { code: \"zh-CN\", label: \"Chinese (Simplified)\" },\n { code: \"ar\", label: \"Arabic\" },\n { code: \"hi\", label: \"Hindi\" },\n { code: \"ru\", label: \"Russian\" },\n];\n\nexport function readDocumentLanguage(documentStyle: unknown): string {\n const v = (documentStyle as Record<string, unknown> | undefined)?.[DOCUMENT_LANGUAGE_KEY];\n return typeof v === \"string\" && DOCUMENT_LANGUAGES.some((l) => l.code === v) ? v : \"en-US\";\n}\n"]}
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-Y24EYKSD.js";
|
|
5
5
|
|
|
6
6
|
// src/docs/doc-tools-core.ts
|
|
7
|
+
import { tableStartsAt } from "@ai-matrx/content-ir/source";
|
|
7
8
|
var BUILDING_BLOCKS = [
|
|
8
9
|
{ id: "meeting-notes", label: "Meeting notes", description: "Date, attendees, agenda, decisions and action items.", markdown: "## Meeting notes\n\nDate: \nAttendees: \n\n### Agenda\n\n1. \n\n### Discussion\n\n### Decisions\n\n### Action items\n\n\u2610 Owner: Task, due date\n" },
|
|
9
10
|
{ id: "project-tracker", label: "Project tracker", description: "Goal, milestones, owners, risks and status.", markdown: "## Project tracker\n\nGoal: \nOwner: \nStatus: On track\n\n### Milestones\n\n\u2610 Milestone, owner, due date\n\n### Risks\n\n### Next steps\n" },
|
|
@@ -30,14 +31,13 @@ function markdownFragment(markdown) {
|
|
|
30
31
|
function looksLikeMarkdown(text) {
|
|
31
32
|
if (!text) return false;
|
|
32
33
|
const lines = text.split(/\r?\n/);
|
|
33
|
-
const delimiter = /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)+\|?\s*$/;
|
|
34
34
|
for (let i = 0; i < lines.length; i++) {
|
|
35
35
|
const line = lines[i];
|
|
36
36
|
if (/^\s{0,3}#{1,6}\s+\S/.test(line)) return true;
|
|
37
37
|
if (/^\s*([-*+]|\d+[.)])\s+\S/.test(line)) return true;
|
|
38
38
|
if (/^\s{0,3}(```|~~~)/.test(line)) return true;
|
|
39
39
|
if (/^\s*>\s?\S/.test(line)) return true;
|
|
40
|
-
if (
|
|
40
|
+
if (tableStartsAt(lines, i)) return true;
|
|
41
41
|
}
|
|
42
42
|
return /\*\*[^*\s][^*]*\*\*|\[[^\]\n]+\]\([^)\s]+\)/.test(text);
|
|
43
43
|
}
|
|
@@ -145,4 +145,4 @@ export {
|
|
|
145
145
|
DOCUMENT_LANGUAGES,
|
|
146
146
|
readDocumentLanguage
|
|
147
147
|
};
|
|
148
|
-
//# sourceMappingURL=chunk-
|
|
148
|
+
//# sourceMappingURL=chunk-JVEJ5XLX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/docs/doc-tools-core.ts"],"sourcesContent":["/**\n * The pure half of the Docs tools: building blocks, bookmarks, paragraph borders, the ruler's\n * geometry and the document language. No Univer import, so each is proven on plain snapshots.\n */\n\nimport { PX_PER_INCH } from \"../core\";\nimport { tableStartsAt } from \"@ai-matrx/content-ir/source\";\nimport { markdownToUniverDoc } from \"./markdown-to-univer-doc\";\n\nexport interface BuildingBlock {\n id: string;\n label: string;\n description: string;\n markdown: string;\n}\n\nexport const BUILDING_BLOCKS: BuildingBlock[] = [\n { id: \"meeting-notes\", label: \"Meeting notes\", description: \"Date, attendees, agenda, decisions and action items.\", markdown: \"## Meeting notes\\n\\nDate: \\nAttendees: \\n\\n### Agenda\\n\\n1. \\n\\n### Discussion\\n\\n### Decisions\\n\\n### Action items\\n\\n☐ Owner: Task, due date\\n\" },\n { id: \"project-tracker\", label: \"Project tracker\", description: \"Goal, milestones, owners, risks and status.\", markdown: \"## Project tracker\\n\\nGoal: \\nOwner: \\nStatus: On track\\n\\n### Milestones\\n\\n☐ Milestone, owner, due date\\n\\n### Risks\\n\\n### Next steps\\n\" },\n { id: \"email-draft\", label: \"Email draft\", description: \"To, subject and a three-part message ready to fill in.\", markdown: \"## Email draft\\n\\nTo: \\nSubject: \\n\\nHi ,\\n\\nI am writing about .\\n\\nThe next step is .\\n\\nThanks,\\n\" },\n { id: \"weekly-status\", label: \"Weekly status\", description: \"Done, next, and blocked, for one week.\", markdown: \"## Weekly status\\n\\nWeek of: \\n\\n### Done this week\\n\\n### Next week\\n\\n### Blocked\\n\" },\n { id: \"decision-log\", label: \"Decision record\", description: \"Context, options, decision and consequences.\", markdown: \"## Decision record\\n\\nDate: \\nDecider: \\n\\n### Context\\n\\n### Options considered\\n\\n### Decision\\n\\n### Consequences\\n\" },\n { id: \"pros-cons\", label: \"Pros and cons\", description: \"A side-by-side weighing of one choice.\", markdown: \"## Pros and cons\\n\\nChoice: \\n\\n### Pros\\n\\n### Cons\\n\\n### Verdict\\n\" },\n];\n\n/** What Univer's paste command takes as `doc`: a body (no document-closing `\\n`) plus the table sources its `tables` name. */\nexport interface MarkdownFragment {\n body: Record<string, unknown> & { dataStream: string };\n tableSource?: Record<string, unknown>;\n drawings?: Record<string, unknown>;\n}\n\n/**\n * Markdown to a fragment Univer can insert at the caret (`doc.command.inner-paste`): headings, lists,\n * bold, links and REAL tables, from THE one writer (`markdownToUniverDoc`). The document-closing `\\n`\n * and its section break are dropped; every other body part (tables, links, runs) is kept.\n */\nexport function markdownFragment(markdown: string): MarkdownFragment {\n const doc = markdownToUniverDoc(markdown) as unknown as {\n body?: Record<string, unknown> & { dataStream: string };\n tableSource?: Record<string, unknown>;\n drawings?: Record<string, unknown>;\n };\n const whole = doc.body ?? { dataStream: \"\" };\n let stream = whole.dataStream;\n if (stream.endsWith(\"\\n\")) stream = stream.slice(0, -1);\n const { sectionBreaks: _sectionBreaks, ...rest } = whole;\n void _sectionBreaks;\n const paragraphs = ((whole.paragraphs as Array<{ startIndex: number }> | undefined) ?? []).filter((p) => p.startIndex < stream.length);\n const textRuns = ((whole.textRuns as Array<{ st: number; ed: number }> | undefined) ?? [])\n .filter((r) => r.st < stream.length)\n .map((r) => ({ ...r, ed: Math.min(r.ed, stream.length) }));\n return {\n body: { ...rest, dataStream: stream, paragraphs, textRuns },\n ...(doc.tableSource ? { tableSource: doc.tableSource } : {}),\n ...(doc.drawings ? { drawings: doc.drawings } : {}),\n };\n}\n\n/**\n * True when text carries markdown STRUCTURE a document should draw: a table, a heading, a list, a\n * fence, a quote, a link, or bold. Plain prose (and a stray `*` or `_`) is false, so ordinary\n * typing and paste stay plain text. Every door that takes agent- or clipboard-supplied text asks\n * this one question, then converts through `markdownFragment`.\n */\nexport function looksLikeMarkdown(text: string): boolean {\n if (!text) return false;\n const lines = text.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (/^\\s{0,3}#{1,6}\\s+\\S/.test(line)) return true;\n if (/^\\s*([-*+]|\\d+[.)])\\s+\\S/.test(line)) return true;\n if (/^\\s{0,3}(```|~~~)/.test(line)) return true;\n if (/^\\s*>\\s?\\S/.test(line)) return true;\n if (tableStartsAt(lines, i)) return true;\n }\n return /\\*\\*[^*\\s][^*]*\\*\\*|\\[[^\\]\\n]+\\]\\([^)\\s]+\\)/.test(text);\n}\n\n/**\n * Where a BLOCK (table of contents, building block) goes for a caret: never inside a paragraph's\n * text, so a heading is never split. Caret at the start of a paragraph (or in an empty one) →\n * insert right there; anywhere else → end the caret's paragraph with a new line and insert at the\n * start of that new paragraph. `dataStream` is Univer's body stream (paragraphs end in `\\r`).\n */\nexport function blockInsertPlan(dataStream: string, caret: number): { at: number; breakAt: number | null } {\n const c = Math.max(0, Math.min(caret, dataStream.length));\n const start = Math.max(dataStream.lastIndexOf(\"\\r\", c - 1), dataStream.lastIndexOf(\"\\n\", c - 1)) + 1;\n let end = dataStream.indexOf(\"\\r\", c);\n if (end < 0) end = dataStream.length;\n // Field marks and anchors are zero-width: a paragraph holding only them is empty.\n const text = dataStream.slice(start, end).replace(/[\\u0000-\\u001f\\u200b]/g, \"\").trim();\n if (c === start || text === \"\") return { at: start, breakAt: null };\n return { at: end + 1, breakAt: end };\n}\n\n/** Univer's CustomRangeType.BOOKMARK. */\nexport const BOOKMARK_RANGE_TYPE = 3;\n/** A bookmark is an invisible anchor: one zero-width character the custom range wraps. */\nexport const BOOKMARK_ANCHOR = \"\";\n\nexport interface Bookmark {\n id: string;\n name: string;\n offset: number;\n}\n\ninterface BodyWithRanges {\n customRanges?: Array<{ rangeId: string; rangeType: number; startIndex: number; properties?: { name?: unknown } }>;\n}\n\nexport function collectBookmarks(snapshot: unknown): Bookmark[] {\n const body = (snapshot as { body?: BodyWithRanges } | null)?.body;\n const out: Bookmark[] = [];\n for (const r of body?.customRanges ?? []) {\n if (r.rangeType !== BOOKMARK_RANGE_TYPE) continue;\n out.push({ id: r.rangeId, name: typeof r.properties?.name === \"string\" ? r.properties.name : \"\", offset: r.startIndex });\n }\n return out.sort((a, b) => a.offset - b.offset);\n}\n\nexport function bookmarkBody(id: string, name: string) {\n return {\n dataStream: BOOKMARK_ANCHOR,\n customRanges: [{ startIndex: 0, endIndex: 0, rangeId: id, rangeType: BOOKMARK_RANGE_TYPE, properties: { name }, wholeEntity: true }],\n };\n}\n\nexport function cleanBookmarkName(raw: string, existing: readonly Bookmark[]): { ok: true; name: string } | { ok: false; why: string } {\n const name = raw.replace(/\\s+/g, \" \").trim().slice(0, 80);\n if (!name) return { ok: false, why: \"Give the bookmark a name.\" };\n if (existing.some((b) => b.name.toLowerCase() === name.toLowerCase())) return { ok: false, why: `A bookmark named \"${name}\" already exists.` };\n return { ok: true, name };\n}\n\n/** `#bookmark=<name>` in the page address names a bookmark to jump to on open. */\nexport function bookmarkFromHash(hash: string): string | null {\n const m = /^#bookmark=(.+)$/.exec(hash);\n if (!m) return null;\n try {\n return decodeURIComponent(m[1]!);\n } catch {\n return null;\n }\n}\nexport const bookmarkHash = (name: string) => `#bookmark=${encodeURIComponent(name)}`;\n\nexport type BorderSide = \"top\" | \"bottom\" | \"both\" | \"none\";\nexport type BorderDash = \"solid\" | \"dashed\" | \"dotted\";\n/** Univer's DashStyleType values. */\nconst DASH: Record<BorderDash, number> = { solid: 1, dotted: 2, dashed: 3 };\n\nexport interface BorderChoice {\n side: BorderSide;\n color: string;\n width: number;\n dash: BorderDash;\n padding: number;\n}\n\n/** The `paragraph` argument of `doc-paragraph-setting.command` for a choice (Univer draws top and bottom paragraph borders). */\nexport function paragraphBorderParams(c: BorderChoice): Record<string, unknown> {\n const line = { color: { rgb: c.color }, width: c.width, dashStyle: DASH[c.dash], padding: c.padding };\n return {\n borderTop: c.side === \"top\" || c.side === \"both\" ? line : null,\n borderBottom: c.side === \"bottom\" || c.side === \"both\" ? line : null,\n };\n}\n\nexport interface RulerGeometry {\n pageLeft: number;\n pageWidth: number;\n marginLeft: number;\n marginRight: number;\n ticks: Array<{ x: number; kind: \"inch\" | \"half\" | \"eighth\"; label?: string }>;\n}\n\n/** The ruler above the page: inch ticks from the page's left edge (margins shaded), at the current zoom. */\nexport function rulerGeometry(a: { containerWidth: number; zoom: number; pageWidthPx: number; marginLeftPx: number; marginRightPx: number }): RulerGeometry {\n const pageWidth = a.pageWidthPx * a.zoom;\n const pageLeft = Math.max(0, (a.containerWidth - pageWidth) / 2);\n const ticks: RulerGeometry[\"ticks\"] = [];\n const inches = a.pageWidthPx / PX_PER_INCH;\n for (let eighth = 0; eighth <= Math.floor(inches * 8); eighth++) {\n const x = pageLeft + (eighth * PX_PER_INCH * a.zoom) / 8;\n if (eighth % 8 === 0) {\n const marginInches = a.marginLeftPx / PX_PER_INCH;\n ticks.push({ x, kind: \"inch\", ...(eighth / 8 !== marginInches ? { label: String(Math.round(Math.abs(eighth / 8 - marginInches))) } : {}) });\n } else ticks.push({ x, kind: eighth % 4 === 0 ? \"half\" : \"eighth\" });\n }\n return { pageLeft, pageWidth, marginLeft: a.marginLeftPx * a.zoom, marginRight: a.marginRightPx * a.zoom, ticks };\n}\n\n/** The key on the document style that carries the language (the slot the paper color also uses). */\nexport const DOCUMENT_LANGUAGE_KEY = \"matrxLanguage\";\nexport const DOCUMENT_LANGUAGES: Array<{ code: string; label: string }> = [\n { code: \"en-US\", label: \"English (United States)\" },\n { code: \"en-GB\", label: \"English (United Kingdom)\" },\n { code: \"es\", label: \"Spanish\" },\n { code: \"fr\", label: \"French\" },\n { code: \"de\", label: \"German\" },\n { code: \"it\", label: \"Italian\" },\n { code: \"pt-BR\", label: \"Portuguese (Brazil)\" },\n { code: \"nl\", label: \"Dutch\" },\n { code: \"ja\", label: \"Japanese\" },\n { code: \"ko\", label: \"Korean\" },\n { code: \"zh-CN\", label: \"Chinese (Simplified)\" },\n { code: \"ar\", label: \"Arabic\" },\n { code: \"hi\", label: \"Hindi\" },\n { code: \"ru\", label: \"Russian\" },\n];\n\nexport function readDocumentLanguage(documentStyle: unknown): string {\n const v = (documentStyle as Record<string, unknown> | undefined)?.[DOCUMENT_LANGUAGE_KEY];\n return typeof v === \"string\" && DOCUMENT_LANGUAGES.some((l) => l.code === v) ? v : \"en-US\";\n}\n"],"mappings":"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","names":[]}
|
|
@@ -61,7 +61,6 @@ var never = (reason) => ({ kind: "never-travels", reason });
|
|
|
61
61
|
var barrier = (until, reason) => ({ kind: "barrier", until, reason });
|
|
62
62
|
var FORMULA_RESULT = "formula engine output; every seat computes it (dropped at capture)";
|
|
63
63
|
var RESOURCE = "ranged resource keyed by id; C5c";
|
|
64
|
-
var UNIVER_COMMENTS = "Univer's own thread-comment store; our comments anchor elsewhere (design \xA78)";
|
|
65
64
|
var SHEET_MUTATIONS = {
|
|
66
65
|
// ── covered (C5a) ────────────────────────────────────────────────────────────────────────────────
|
|
67
66
|
"sheet.mutation.set-range-values": covered("cell", "cellValue", "refSheets", "derived"),
|
|
@@ -122,16 +121,12 @@ var SHEET_MUTATIONS = {
|
|
|
122
121
|
"sheet.operation.clear-drawing-transformer": never("drawing selection handles (declared as a mutation)"),
|
|
123
122
|
"sheet.mutation.copy-worksheet-end": never("end marker of a copy; the copy travels as insert-sheet"),
|
|
124
123
|
"sheet.mutation.empty": never("no content"),
|
|
125
|
-
"thread-comment.mutation.add-comment": never(UNIVER_COMMENTS),
|
|
126
|
-
"thread-comment.mutation.update-comment": never(UNIVER_COMMENTS),
|
|
127
|
-
"thread-comment.mutation.update-comment-ref": never(UNIVER_COMMENTS),
|
|
128
|
-
"thread-comment.mutation.resolve-comment": never(UNIVER_COMMENTS),
|
|
129
|
-
"thread-comment.mutation.delete-comment": never(UNIVER_COMMENTS),
|
|
130
124
|
// ── barriers: X (no transform yet, design §10) ───────────────────────────────────────────────────
|
|
131
125
|
"sheet.mutation.move-range": barrier("X", "cut-paste carries the sender's cell matrices"),
|
|
132
126
|
"sheet.mutation.set-worksheet-hidden": barrier("X", "sheet-level setting: not in C5a"),
|
|
133
127
|
"sheet.mutation.set-tab-color": barrier("X", "sheet-level setting: not in C5a"),
|
|
134
128
|
"sheet.mutation.set-workbook-name": barrier("X", "workbook-level setting: not in C5a"),
|
|
129
|
+
"sheet.mutation.set-workbook-calculation-settings": barrier("X", "workbook calculation settings affect every formula; no concurrent settings transform is defined"),
|
|
135
130
|
"sheet.mutation.set-worksheet-right-to-left": barrier("X", "sheet-level setting: not in C5a"),
|
|
136
131
|
"sheet.mutation.toggle-gridlines": barrier("X", "sheet-level setting: not in C5a"),
|
|
137
132
|
"sheet.mutation.set-gridlines-color": barrier("X", "sheet-level setting: not in C5a"),
|