@a3s-lab/office 0.43.0 → 0.45.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 +30 -1
- package/dist/0~1403.js +1 -1
- package/dist/0~2330.js +2 -2
- package/dist/0~3539.js +2 -2
- package/dist/0~3557.js +1 -1
- package/dist/{0~5024.js → 0~4042.js} +111 -3
- package/dist/0~4980.js +1 -1
- package/dist/0~7828.js +1 -1
- package/dist/{0~7048.js → 0~7831.js} +2 -547
- package/dist/0~document-editor.js +154 -5
- package/dist/{0~3635.js → 0~office-color-picker.js} +1 -12
- package/dist/0~pdf-viewer.js +22 -8
- package/dist/0~presentation-editor.js +4 -3
- package/dist/0~spreadsheet-editor.js +200 -3669
- package/dist/0~work-docx-export.js +11 -8
- package/dist/0~work-docx-import.js +11 -5
- package/dist/0~work-office-diagnostics.js +14 -3
- package/dist/0~work-pptx-export.js +1 -1
- package/dist/0~work-pptx-import.js +1 -1
- package/dist/0~work-presentation-charts.js +1 -1
- package/dist/3818.js +1 -1
- package/dist/4166.js +1 -1
- package/dist/4174.js +112 -4
- package/dist/4560.js +2 -2
- package/dist/{5416.js → 610.js} +4335 -410
- package/dist/{4121.js → 6968.js} +622 -13
- package/dist/7060.js +1 -1
- package/dist/{4650.js → 816.js} +12 -1
- package/dist/8715.js +1 -1
- package/dist/9333.js +17 -17
- package/dist/core.js +7 -5
- package/dist/index.js +2 -2
- package/dist/internal/features/work/editors/document-picture-properties-dialog-model.d.ts +4 -1
- package/dist/internal/features/work/editors/spreadsheet-data-validation-list.d.ts +44 -0
- package/dist/internal/features/work/editors/spreadsheet-data-validation.d.ts +2 -1
- package/dist/internal/features/work/editors/spreadsheet-editor-support.d.ts +1 -1
- package/dist/internal/features/work/work-document-image-layout.d.ts +14 -0
- package/dist/internal/features/work/work-docx-export-image.d.ts +2 -1
- package/dist/internal/features/work/work-docx-image-layout-import.d.ts +2 -1
- package/dist/internal/features/work/work-docx-image-transform.d.ts +17 -0
- package/dist/internal/features/work/work-types.d.ts +4 -0
- package/dist/office-kernel.wasm +0 -0
- package/dist/styles.css +51 -3
- package/docs/latest/en/browser-editor-architecture.md +7 -3
- package/package.json +1 -1
package/dist/7060.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { workOfficeCollaborationJsonEqual, isWorkOfficeCollaborationRecord, cloneWorkOfficeCollaborationJson } from "./
|
|
1
|
+
import { workOfficeCollaborationJsonEqual, isWorkOfficeCollaborationRecord, cloneWorkOfficeCollaborationJson } from "./816.js";
|
|
2
2
|
import { OfficeCollaborationError as WorkOfficeCollaborationError } from "./9787.js";
|
|
3
3
|
import * as __rspack_external_yjs from "yjs";
|
|
4
4
|
function patchWorkOfficeCollaborationFlatJsonMap(target, previous, next, label) {
|
package/dist/{4650.js → 816.js}
RENAMED
|
@@ -67,4 +67,15 @@ function isUnsafeJsonKey(key) {
|
|
|
67
67
|
function invalidCollaborationJson(expected) {
|
|
68
68
|
throw new WorkOfficeCollaborationError('office.collaboration.content_invalid', `Office collaboration requires ${expected}.`);
|
|
69
69
|
}
|
|
70
|
-
|
|
70
|
+
const MODAL_DIALOG_SELECTOR = '[role="dialog"][aria-modal="true"]';
|
|
71
|
+
const OFFICE_SHORTCUT_IGNORE_SELECTOR = '[data-office-shortcuts="ignore"]';
|
|
72
|
+
function isOfficeCompositionKeyboardEvent(event) {
|
|
73
|
+
return event.isComposing || 'Process' === event.key || 229 === event.keyCode;
|
|
74
|
+
}
|
|
75
|
+
function isOfficeShortcutBlocked(target) {
|
|
76
|
+
if ("u" < typeof document) return false;
|
|
77
|
+
if (target instanceof Element && (target.closest(MODAL_DIALOG_SELECTOR) || target.closest(OFFICE_SHORTCUT_IGNORE_SELECTOR))) return true;
|
|
78
|
+
if (document.activeElement instanceof Element && (document.activeElement.closest(MODAL_DIALOG_SELECTOR) || document.activeElement.closest(OFFICE_SHORTCUT_IGNORE_SELECTOR))) return true;
|
|
79
|
+
return null !== document.querySelector(MODAL_DIALOG_SELECTOR);
|
|
80
|
+
}
|
|
81
|
+
export { canonicalWorkOfficeCollaborationJson, cloneWorkOfficeCollaborationJson, isOfficeCompositionKeyboardEvent, isOfficeShortcutBlocked, isWorkOfficeCollaborationRecord, workOfficeCollaborationJsonEqual };
|
package/dist/8715.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createOfficeId as createWorkId, directChild, attribute } from "./
|
|
1
|
+
import { createOfficeId as createWorkId, directChild, attribute } from "./6968.js";
|
|
2
2
|
function sparseArrayIndexes(values) {
|
|
3
3
|
if (!values) return [];
|
|
4
4
|
return Object.keys(values).flatMap((key)=>{
|
package/dist/9333.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { directChild, directChildren, attribute, firstDescendant } from "./
|
|
1
|
+
import { directChild, directChildren, attribute, firstDescendant } from "./6968.js";
|
|
2
2
|
import { sparseMatrixColumnCount, cloneSparseMatrix, sparseArrayIndexes, sparseArrayEntries as spreadsheet_sparse_sparseArrayEntries, formatSpreadsheetCellRanges, parseSpreadsheetCellRanges as work_spreadsheet_ranges_parseSpreadsheetCellRanges } from "./8715.js";
|
|
3
3
|
function* xlsxWorksheetCellEntries(worksheet) {
|
|
4
4
|
if (Array.isArray(worksheet)) {
|
|
@@ -1353,22 +1353,6 @@ function stringRecord(value) {
|
|
|
1353
1353
|
const entries = Object.entries(value).filter((entry)=>'string' == typeof entry[1]);
|
|
1354
1354
|
return entries.length ? Object.fromEntries(entries) : void 0;
|
|
1355
1355
|
}
|
|
1356
|
-
const SPREADSHEET_CONDITIONAL_COMPARISON_OPERATORS = [
|
|
1357
|
-
'greaterThan',
|
|
1358
|
-
'greaterThanOrEqual',
|
|
1359
|
-
'lessThan',
|
|
1360
|
-
'lessThanOrEqual',
|
|
1361
|
-
'equal',
|
|
1362
|
-
'notEqual',
|
|
1363
|
-
'between',
|
|
1364
|
-
'notBetween'
|
|
1365
|
-
];
|
|
1366
|
-
function isSpreadsheetConditionalComparisonOperator(value) {
|
|
1367
|
-
return SPREADSHEET_CONDITIONAL_COMPARISON_OPERATORS.some((operator)=>operator === value);
|
|
1368
|
-
}
|
|
1369
|
-
function spreadsheetConditionalComparisonNeedsUpperValue(operator) {
|
|
1370
|
-
return 'between' === operator || 'notBetween' === operator;
|
|
1371
|
-
}
|
|
1372
1356
|
const DEFAULT_DATA_BAR_MIN_LENGTH = 10;
|
|
1373
1357
|
const DEFAULT_DATA_BAR_MAX_LENGTH = 90;
|
|
1374
1358
|
function defaultSpreadsheetColorScaleThresholds(colorCount) {
|
|
@@ -1758,6 +1742,22 @@ function work_spreadsheet_conditional_icons_palette(count) {
|
|
|
1758
1742
|
if (4 === count) return COLOR_4;
|
|
1759
1743
|
return COLOR_5;
|
|
1760
1744
|
}
|
|
1745
|
+
const SPREADSHEET_CONDITIONAL_COMPARISON_OPERATORS = [
|
|
1746
|
+
'greaterThan',
|
|
1747
|
+
'greaterThanOrEqual',
|
|
1748
|
+
'lessThan',
|
|
1749
|
+
'lessThanOrEqual',
|
|
1750
|
+
'equal',
|
|
1751
|
+
'notEqual',
|
|
1752
|
+
'between',
|
|
1753
|
+
'notBetween'
|
|
1754
|
+
];
|
|
1755
|
+
function isSpreadsheetConditionalComparisonOperator(value) {
|
|
1756
|
+
return SPREADSHEET_CONDITIONAL_COMPARISON_OPERATORS.some((operator)=>operator === value);
|
|
1757
|
+
}
|
|
1758
|
+
function spreadsheetConditionalComparisonNeedsUpperValue(operator) {
|
|
1759
|
+
return 'between' === operator || 'notBetween' === operator;
|
|
1760
|
+
}
|
|
1761
1761
|
function effectiveSpreadsheetHeaderFooterSections(sections) {
|
|
1762
1762
|
return {
|
|
1763
1763
|
left: sections?.left ?? '',
|
package/dist/core.js
CHANGED
|
@@ -2,10 +2,10 @@ import jszip from "jszip";
|
|
|
2
2
|
import { MarkdownManager } from "@tiptap/markdown";
|
|
3
3
|
import { getSchema } from "@tiptap/core";
|
|
4
4
|
import { OFFICE_COLLABORATION_PROTOCOL as WORK_OFFICE_COLLABORATION_PROTOCOL, OfficeCollaborationError as WorkOfficeCollaborationError, assertWorkOfficeCollaborationOrigin } from "./9787.js";
|
|
5
|
-
import { directChildren, OoxmlPackage as work_ooxml_package_OoxmlPackage, parseXml, firstDescendant, directChild, descendants, createArtifact as createWorkArtifact, xmlContainsAnyElement, createOfficeId as createWorkId, attribute as work_ooxml_package_attribute } from "./
|
|
5
|
+
import { directChildren, OoxmlPackage as work_ooxml_package_OoxmlPackage, parseXml, firstDescendant, directChild, descendants, createArtifact as createWorkArtifact, xmlContainsAnyElement, createOfficeId as createWorkId, attribute as work_ooxml_package_attribute } from "./6968.js";
|
|
6
6
|
import { fileNameWithoutExtension, work_file_download_downloadBlob, mountWorkLiveDocumentCapture, importWorkDocumentFile, moveWorkSourceBlob, materializeWorkDocumentContent as work_document_model_codec_materializeWorkDocumentContent, createWorkDocumentModel, work_file_download_safeFileName, documentPageSurfaceGeometryForElement, registerSourceBlob as rememberWorkSourceBlob, documentModelForContent, readSourceBlob as readWorkSourceBlob, createWorkDocumentExtensions, positionWorkLiveDocumentCapture, createWorkDocumentBlob } from "./4174.js";
|
|
7
7
|
import { normalizeSpreadsheetPrintTitleRows, sparseMatrixColumnCount, normalizeSpreadsheetPrintArea, parseSpreadsheetPrintTitles, isValidSpreadsheetDefinedName, formatSpreadsheetCellRanges, stripSpreadsheetSheetQualifier, editableSpreadsheetFormula, sparseArrayEntries, qualifySpreadsheetRange, refreshSpreadsheetPivotTables, parseSpreadsheetCellRanges, normalizeSpreadsheetPrintTitleColumns } from "./8715.js";
|
|
8
|
-
import { xlsxColorMatches, xlsxRichTextCellText, spreadsheetCellValueWithDiagonalBorder, xlsxRichTextStyleOrigins, normalizeSpreadsheetDataValidationErrorStyle, workSpreadsheetAutoFilterCriteriaEntries, directXlsxAlignment, spreadsheetTableTotalsFunctionToOoxml, spreadsheetTextOrientationFromXlsx, directXlsxFontStyle, hasXlsxDirectFontStyle, applyImportedXlsxRichText, xlsxStyleCollectionIndex, sheetHasXlsxRichTextCells, spreadsheetExplicitTextOrientationFromCell, activeXlsxNativeFill, workSpreadsheetHasUnescapedWildcard, readXlsxRichTextCells, createXlsxRichTextReadContext, normalizeSpreadsheetDateValidationBoundary, boundedSpreadsheetDataValidationText, xlsxNativeFillKey, xlsxBooleanAttribute, xlsxAlignmentMatches, xlsxBorderLineMatches, spreadsheetTextOrientationCellStyle, spreadsheetTableTotalsFunctionFromOoxml, spreadsheetDateValidationFormula, spreadsheetDiagonalBorderFromCellValue, workSpreadsheetSheetWithImportedAutoFilterCriteria, xlsxUnderlineStyle, spreadsheetUnderlineCellValueFromXlsx, xlsxToggleEnabled, normalizeSpreadsheetTableTotalsLabel, activeXlsxSemanticColorOrigin, writeXlsxRichTextCells, xlsxNativeFillSemanticColors, normalizeSpreadsheetTableCalculatedFormula, normalizeSpreadsheetTableTotalsFormula, spreadsheetUnderlineCellValueFromSheetJs } from "./
|
|
8
|
+
import { xlsxColorMatches, xlsxRichTextCellText, spreadsheetCellValueWithDiagonalBorder, xlsxRichTextStyleOrigins, normalizeSpreadsheetDataValidationErrorStyle, workSpreadsheetAutoFilterCriteriaEntries, directXlsxAlignment, spreadsheetTableTotalsFunctionToOoxml, spreadsheetTextOrientationFromXlsx, directXlsxFontStyle, hasXlsxDirectFontStyle, applyImportedXlsxRichText, xlsxStyleCollectionIndex, sheetHasXlsxRichTextCells, spreadsheetExplicitTextOrientationFromCell, activeXlsxNativeFill, workSpreadsheetHasUnescapedWildcard, readXlsxRichTextCells, createXlsxRichTextReadContext, normalizeSpreadsheetDateValidationBoundary, boundedSpreadsheetDataValidationText, xlsxNativeFillKey, xlsxBooleanAttribute, xlsxAlignmentMatches, xlsxBorderLineMatches, spreadsheetTextOrientationCellStyle, spreadsheetTableTotalsFunctionFromOoxml, spreadsheetDateValidationFormula, isSpreadsheetDependentListFormula, spreadsheetDiagonalBorderFromCellValue, workSpreadsheetSheetWithImportedAutoFilterCriteria, xlsxUnderlineStyle, spreadsheetUnderlineCellValueFromXlsx, xlsxToggleEnabled, normalizeSpreadsheetTableTotalsLabel, activeXlsxSemanticColorOrigin, writeXlsxRichTextCells, xlsxNativeFillSemanticColors, normalizeSpreadsheetTableCalculatedFormula, normalizeSpreadsheetTableTotalsFormula, spreadsheetUnderlineCellValueFromSheetJs } from "./610.js";
|
|
9
9
|
import { freezeImportedSpreadsheetCell, readXlsxGradientFill, withXlsxPatternFill, xlsxCellStyleOriginSemanticColors, setXlsxToggleChild, withXlsxCellStyleOrigin, normalizeSpreadsheetConditionalVisualOptions, xlsxColorElementMatchesOrigin, withXlsxGradientFill, ensureXlsxStyleCollection, xlsxCellStyleOrigin, xlsxSemanticColorOriginKey, readXlsxPatternFill, isSpreadsheetConditionalComparisonOperator, registerImportedSpreadsheetMatrix, defaultSpreadsheetConditionalIconThresholds, readXlsxSemanticColorOrigin, setXlsxUnderlineChild, xlsxGradientFillFallbackColor, setXlsxColorChild, createXlsxColorResolver, resolveXlsxColor, setXlsxBorderLine, normalizeSpreadsheetConditionalIconSetFormat, defaultSpreadsheetDataBarOptions, defaultXlsxBorder, prepareXlsxSemanticPalette, importedSheetProtectionAuthority, defaultSpreadsheetColorScaleThresholds, xlsxRgbColor, writeXlsxAlignment, xlsxGradientFillKey, applyXlsxSemanticColorOrigin, spreadsheetConditionalComparisonNeedsUpperValue, sheetHasProtectionState, xlsxWorksheetCellEntries, isSpreadsheetConditionalIconSetName, setXlsxValueChild, defaultXlsxFill, spreadsheetConditionalThresholdsEqual, spreadsheetConditionalIconSetCount } from "./9333.js";
|
|
10
10
|
import { updateSpreadsheetWorksheetCompatibilitySummary, inspectXlsxPivotTables, readXlsxWorksheetCharts, createXlsxFormulaCell, patchXlsxWorksheetDrawings, readXlsxWorksheetImages, writeXlsxProtection, xlsxWorksheetChartsToSheet, readXlsxFormulaFeaturesFromPackage, emptySpreadsheetWorksheetCompatibilitySummary, createSpreadsheetFormulaMetadata, createXlsxErrorCell, xlsxWorksheetImagesToSheet, readXlsxProtection, patchXlsxFormulaFeatures, patchXlsxPivotTables, writeXlsxPageSetup, XlsxCellProtectionWriter, applyImportedXlsxPivotTables, readXlsxPageSetup } from "./4166.js";
|
|
11
11
|
import { WorkFileImportController, materializeWorkFileSource } from "./9356.js";
|
|
@@ -3316,12 +3316,14 @@ function xlsxValidationFormula(item, source, namedListSources) {
|
|
|
3316
3316
|
if ('date' === item.type) return spreadsheetDateValidationFormula(value);
|
|
3317
3317
|
if ('dropdown' !== item.type) return value;
|
|
3318
3318
|
const formula = value.replace(/^=/, '');
|
|
3319
|
+
if (isSpreadsheetDependentListFormula(value)) return formula;
|
|
3319
3320
|
if (/^=?[^,]+![A-Z]+\d+(?::[A-Z]+\d+)?$/i.test(value) || /^=?\$?[A-Z]+\$?\d+(?::\$?[A-Z]+\$?\d+)?$/i.test(value) || namedListSources.has(formula.toLocaleLowerCase())) return formula;
|
|
3320
3321
|
return `"${value.replaceAll('"', '""')}"`;
|
|
3321
3322
|
}
|
|
3322
3323
|
function parseListFormula(value) {
|
|
3323
3324
|
if (value.startsWith('"') && value.endsWith('"')) return value.slice(1, -1).replaceAll('""', '"');
|
|
3324
|
-
|
|
3325
|
+
const formula = value.replace(/^=/, '');
|
|
3326
|
+
return isSpreadsheetDependentListFormula(formula) ? `=${formula}` : formula;
|
|
3325
3327
|
}
|
|
3326
3328
|
function fortuneValidationType(value) {
|
|
3327
3329
|
const types = {
|
|
@@ -5427,10 +5429,10 @@ function work_pdf_export_safeFileName(value) {
|
|
|
5427
5429
|
}
|
|
5428
5430
|
var core_OFFICE_COLLABORATION_VERSION = 1;
|
|
5429
5431
|
export { AGENT_PROPOSAL_PROTOCOL, OFFICE_NOTIFICATION_EVENT, createAgentProposalInstruction, createAgentProposalRequest, getAgentProposalStatus, subscribeOfficeNotifications } from "./6489.js";
|
|
5430
|
-
export { DEFAULT_SPREADSHEET_SORT_CUSTOM_LIST_STORAGE_KEY, LocalStorageSpreadsheetSortCustomListStore, createOfficeSpreadsheetCollaborationBinding, initializeOfficeSpreadsheetCollaboration, readOfficeSpreadsheetCollaboration, replaceOfficeSpreadsheetCollaboration } from "./
|
|
5432
|
+
export { DEFAULT_SPREADSHEET_SORT_CUSTOM_LIST_STORAGE_KEY, LocalStorageSpreadsheetSortCustomListStore, createOfficeSpreadsheetCollaborationBinding, initializeOfficeSpreadsheetCollaboration, readOfficeSpreadsheetCollaboration, replaceOfficeSpreadsheetCollaboration } from "./610.js";
|
|
5431
5433
|
export { OFFICE_COLLABORATION_NAMESPACE, OFFICE_COLLABORATION_PROTOCOL, OfficeCollaborationError, createOfficeCollaborationSession, readOfficeCollaborationMetadata } from "./9787.js";
|
|
5432
5434
|
export { assertPdfCollaborationSource, createOfficePdfCollaborationBinding, initializeOfficePdfCollaboration, readOfficePdfCollaboration, readOfficePdfCollaborationSource, replaceOfficePdfCollaboration } from "./3818.js";
|
|
5433
|
-
export { createArtifact, createOfficeId, officeTemplates } from "./
|
|
5435
|
+
export { createArtifact, createOfficeId, officeTemplates } from "./6968.js";
|
|
5434
5436
|
export { createOfficeDocumentCollaborationBinding, forgetSourceBlob, initializeOfficeDocumentCollaboration, officeDocumentCollaborationFragment, readOfficeDocumentCollaboration, readSourceBlob, registerSourceBlob } from "./4174.js";
|
|
5435
5437
|
export { createOfficeMarkdownCollaborationBinding, initializeOfficeMarkdownCollaboration, readOfficeMarkdownCollaboration, replaceOfficeMarkdownCollaboration } from "./2591.js";
|
|
5436
5438
|
export { createOfficePresentationCollaborationBinding, initializeOfficePresentationCollaboration, readOfficePresentationCollaboration, replaceOfficePresentationCollaboration } from "./4560.js";
|
package/dist/index.js
CHANGED
|
@@ -2,12 +2,12 @@ var src_DOCUMENT_SNAPSHOT_VERSION = 1;
|
|
|
2
2
|
var src_DOCUMENT_SOURCE_VERSION = 1;
|
|
3
3
|
var src_OFFICE_COLLABORATION_VERSION = 1;
|
|
4
4
|
export { AGENT_PROPOSAL_PROTOCOL, OFFICE_NOTIFICATION_EVENT, createAgentProposalInstruction, createAgentProposalRequest, getAgentProposalStatus, subscribeOfficeNotifications } from "./6489.js";
|
|
5
|
-
export { DEFAULT_SPREADSHEET_SORT_CUSTOM_LIST_STORAGE_KEY, LocalStorageSpreadsheetSortCustomListStore, createOfficeSpreadsheetCollaborationBinding, initializeOfficeSpreadsheetCollaboration, readOfficeSpreadsheetCollaboration, replaceOfficeSpreadsheetCollaboration } from "./
|
|
5
|
+
export { DEFAULT_SPREADSHEET_SORT_CUSTOM_LIST_STORAGE_KEY, LocalStorageSpreadsheetSortCustomListStore, createOfficeSpreadsheetCollaborationBinding, initializeOfficeSpreadsheetCollaboration, readOfficeSpreadsheetCollaboration, replaceOfficeSpreadsheetCollaboration } from "./610.js";
|
|
6
6
|
export { DOCUMENT_SNAPSHOT_MEDIA_TYPE, DOCUMENT_SNAPSHOT_SCHEMA, DOCUMENT_SOURCE_MEDIA_TYPE, DOCUMENT_SOURCE_SCHEMA, OFFICE_COLLABORATION_DEFAULT_MAX_TRANSPORT_PAYLOAD_BYTES, OFFICE_COLLABORATION_MAX_TRANSPORT_PAYLOAD_BYTES, OFFICE_COLLABORATION_PRESENCE_FIELD, OFFICE_FILE_ACCEPT, applyDocumentSource, artifactExtension, artifactExtension as workArtifactExtension, artifactKindLabel, artifactKindLabel as workArtifactKindLabel, createArtifactBlob, createOfficeCollaborationPresence, createOfficeCollaborationTransportBinding, createPdfCollaborationContent, decodeDocumentSnapshot, defaultPptxRuntimeUrl, downloadArtifact, downloadArtifactPdf, encodeDocumentSnapshot, importOfficeFile, officeKindForFile, pdfPagesForExport, projectDocumentSource } from "./core.js";
|
|
7
7
|
export { DocumentEditor, MarkdownEditor, PDF_EVIDENCE_COORDINATE_BASIS, PdfViewer, PresentationEditor, SpreadsheetEditor, defaultDocumentArabicLayoutFontUrl, defaultDocumentHebrewLayoutFontUrl, defaultDocumentLatinLayoutFontUrl, defaultDocumentLayoutFontUrl, defaultDocumentLayoutFonts, defaultOfficeKernelWasmUrl, defaultPdfiumWasmUrl, preloadOfficeEditor } from "./432.js";
|
|
8
8
|
export { OFFICE_COLLABORATION_NAMESPACE, OFFICE_COLLABORATION_PROTOCOL, OfficeCollaborationError, createOfficeCollaborationSession, readOfficeCollaborationMetadata } from "./9787.js";
|
|
9
9
|
export { assertPdfCollaborationSource, createOfficePdfCollaborationBinding, initializeOfficePdfCollaboration, readOfficePdfCollaboration, readOfficePdfCollaborationSource, replaceOfficePdfCollaboration } from "./3818.js";
|
|
10
|
-
export { createArtifact, createOfficeId, officeTemplates } from "./
|
|
10
|
+
export { createArtifact, createOfficeId, officeTemplates } from "./6968.js";
|
|
11
11
|
export { createOfficeDocumentCollaborationBinding, forgetSourceBlob, initializeOfficeDocumentCollaboration, officeDocumentCollaborationFragment, readOfficeDocumentCollaboration, readSourceBlob, registerSourceBlob } from "./4174.js";
|
|
12
12
|
export { createOfficeMarkdownCollaborationBinding, initializeOfficeMarkdownCollaboration, readOfficeMarkdownCollaboration, replaceOfficeMarkdownCollaboration } from "./2591.js";
|
|
13
13
|
export { createOfficePresentationCollaborationBinding, initializeOfficePresentationCollaboration, readOfficePresentationCollaboration, replaceOfficePresentationCollaboration } from "./4560.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WorkDocumentImageAlignment, WorkDocumentImageHorizontalReference, WorkDocumentImageLayout, WorkDocumentImageProperties,
|
|
1
|
+
import type { WorkDocumentImageAlignment, WorkDocumentImageHorizontalReference, WorkDocumentImageLayout, WorkDocumentImageProperties, WorkDocumentImageRotation, WorkDocumentImageVerticalReference, WorkDocumentImageWrapSide } from '../work-document-image-layout';
|
|
2
2
|
export declare const IMAGE_PIXELS_PER_CENTIMETER: number;
|
|
3
3
|
export interface DocumentPicturePropertiesSource {
|
|
4
4
|
properties: WorkDocumentImageProperties;
|
|
@@ -24,6 +24,9 @@ export interface DocumentPicturePropertiesDraft {
|
|
|
24
24
|
cropRight: string;
|
|
25
25
|
cropBottom: string;
|
|
26
26
|
cropLeft: string;
|
|
27
|
+
rotation: WorkDocumentImageRotation;
|
|
28
|
+
flipHorizontal: boolean;
|
|
29
|
+
flipVertical: boolean;
|
|
27
30
|
relativeHeight: string;
|
|
28
31
|
behindDocument: boolean;
|
|
29
32
|
allowOverlap: boolean;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { WorkSpreadsheetContent, WorkSpreadsheetSheet } from '../work-types';
|
|
2
|
+
/** Keep dependent-list parsing synchronous and bounded at the editor boundary. */
|
|
3
|
+
export declare const MAX_SPREADSHEET_DEPENDENT_LIST_FORMULA_LENGTH = 255;
|
|
4
|
+
export declare const MAX_SPREADSHEET_DEPENDENT_LIST_REFERENCE_CELLS = 1024;
|
|
5
|
+
export declare const MAX_SPREADSHEET_DEPENDENT_LIST_MATERIALIZED_CELLS = 10000;
|
|
6
|
+
export interface SpreadsheetDependentListFormulaResult {
|
|
7
|
+
ok: boolean;
|
|
8
|
+
formula?: string;
|
|
9
|
+
message?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SpreadsheetDependentListReferenceResult {
|
|
12
|
+
ok: boolean;
|
|
13
|
+
empty?: boolean;
|
|
14
|
+
displayReference?: string;
|
|
15
|
+
message?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns true for the deliberately small, local dependent-list grammar.
|
|
19
|
+
*
|
|
20
|
+
* The leading `=` is optional when reading an existing workbook, but authoring
|
|
21
|
+
* always writes it back so a formula cannot be confused with a literal list.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isSpreadsheetDependentListFormula(value: unknown): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Normalize an INDIRECT list source without evaluating workbook state.
|
|
26
|
+
* Supported arguments are quoted text, a single-cell reference, or a bounded
|
|
27
|
+
* `&` concatenation of those terms. Nested functions and external books are
|
|
28
|
+
* intentionally rejected at the local editor boundary.
|
|
29
|
+
*/
|
|
30
|
+
export declare function normalizeSpreadsheetDependentListFormula(value: string): SpreadsheetDependentListFormulaResult;
|
|
31
|
+
/**
|
|
32
|
+
* Resolve one dependent list for a target cell. An empty driver cell is a
|
|
33
|
+
* valid state and produces an empty list; malformed non-empty references fail
|
|
34
|
+
* closed so the editor never silently offers the wrong options.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveSpreadsheetDependentListReference(content: WorkSpreadsheetContent, sheetId: string, row: number, column: number, anchorRow: number, anchorColumn: number, formula: string): SpreadsheetDependentListReferenceResult;
|
|
37
|
+
/**
|
|
38
|
+
* Materialize only the runtime view Fortune needs. The controlled model keeps
|
|
39
|
+
* the INDIRECT formula; each generated item carries a private marker so the
|
|
40
|
+
* projection cleanup can restore it after Fortune emits a cell operation.
|
|
41
|
+
*/
|
|
42
|
+
export declare function materializeSpreadsheetDependentListsForFortune(sheets: readonly WorkSpreadsheetSheet[], namedRanges?: WorkSpreadsheetContent['namedRanges']): WorkSpreadsheetSheet[];
|
|
43
|
+
/** Restore controlled formulas and remove generated compact-cell overrides. */
|
|
44
|
+
export declare function restoreSpreadsheetDependentListProjections(sheets: readonly WorkSpreadsheetSheet[]): WorkSpreadsheetSheet[];
|
|
@@ -46,7 +46,7 @@ export type SpreadsheetDataValidationResult = {
|
|
|
46
46
|
message: string;
|
|
47
47
|
ok: false;
|
|
48
48
|
};
|
|
49
|
-
export type SpreadsheetDataValidationErrorCode = 'invalid-custom-formula' | 'invalid-date' | 'invalid-list-source' | 'invalid-number' | 'invalid-operator' | 'invalid-range' | 'invalid-text-length' | 'missing-value' | 'multiple-list-columns' | 'out-of-bounds' | 'protected-range' | 'range-too-large' | 'sheet-not-found' | 'value-order';
|
|
49
|
+
export type SpreadsheetDataValidationErrorCode = 'invalid-custom-formula' | 'invalid-date' | 'invalid-list-formula' | 'invalid-list-source' | 'invalid-number' | 'invalid-operator' | 'invalid-range' | 'invalid-text-length' | 'missing-value' | 'multiple-list-columns' | 'out-of-bounds' | 'protected-range' | 'range-too-large' | 'sheet-not-found' | 'value-order';
|
|
50
50
|
export declare function spreadsheetDataValidationOperators(type: SpreadsheetDataValidationType): readonly SpreadsheetDataValidationOperator[];
|
|
51
51
|
export declare function createSpreadsheetDataValidationDialogSource(content: WorkSpreadsheetContent, target: SpreadsheetDataValidationTarget): SpreadsheetDataValidationDialogSource | null;
|
|
52
52
|
export declare function validateSpreadsheetDataValidationRequest(content: WorkSpreadsheetContent, request: SpreadsheetDataValidationRequest): SpreadsheetDataValidationResult;
|
|
@@ -54,3 +54,4 @@ export declare function applySpreadsheetDataValidation(content: WorkSpreadsheetC
|
|
|
54
54
|
export declare function removeSpreadsheetDataValidation(content: WorkSpreadsheetContent, target: SpreadsheetDataValidationTarget): WorkSpreadsheetContent | null;
|
|
55
55
|
export declare function canRemoveSpreadsheetDataValidation(content: WorkSpreadsheetContent, target: SpreadsheetDataValidationTarget): boolean;
|
|
56
56
|
export declare function spreadsheetDataValidationFailureMessage(content: WorkSpreadsheetContent, request: SpreadsheetDataValidationRequest): string | null;
|
|
57
|
+
export declare function spreadsheetDataValidationItemAt(sheet: WorkSpreadsheetSheet, row: number, column: number): WorkSpreadsheetDataValidationItem | null;
|
|
@@ -20,7 +20,7 @@ export declare function spreadsheetFontSizeOptions(current: number | undefined):
|
|
|
20
20
|
}[];
|
|
21
21
|
export declare function spreadsheetFontFamilyOptions(current: string | undefined): OfficeSelectOption[];
|
|
22
22
|
export declare function spreadsheetSheetsWithFiniteSelections(sheets: WorkSpreadsheetContent['sheets']): WorkSpreadsheetContent['sheets'];
|
|
23
|
-
export declare function spreadsheetSheetsForFortune(sheets: WorkSpreadsheetContent['sheets']): WorkSpreadsheetContent['sheets'];
|
|
23
|
+
export declare function spreadsheetSheetsForFortune(sheets: WorkSpreadsheetContent['sheets'], namedRanges?: WorkSpreadsheetContent['namedRanges']): WorkSpreadsheetContent['sheets'];
|
|
24
24
|
export declare function spreadsheetSheetsFromFortune(sheets: WorkSpreadsheetContent['sheets'], sourceSheets: WorkSpreadsheetContent['sheets'], operations?: readonly Op[], dateSystem?: WorkSpreadsheetDateSystem): WorkSpreadsheetContent['sheets'];
|
|
25
25
|
export declare function finiteSpreadsheetSelection(selection: Selection | undefined): Selection;
|
|
26
26
|
export declare function sameSpreadsheetWorkbookState(changed: WorkSpreadsheetContent['sheets'], rendered: WorkSpreadsheetContent['sheets']): boolean;
|
|
@@ -16,6 +16,12 @@ export interface WorkDocumentImageCrop {
|
|
|
16
16
|
bottom: number;
|
|
17
17
|
left: number;
|
|
18
18
|
}
|
|
19
|
+
export type WorkDocumentImageRotation = 0 | 90 | 180 | 270;
|
|
20
|
+
export interface WorkDocumentImageTransform {
|
|
21
|
+
rotation: WorkDocumentImageRotation;
|
|
22
|
+
flipHorizontal: boolean;
|
|
23
|
+
flipVertical: boolean;
|
|
24
|
+
}
|
|
19
25
|
export interface WorkDocumentImageLayer {
|
|
20
26
|
relativeHeight: number;
|
|
21
27
|
behindDocument: boolean;
|
|
@@ -36,6 +42,7 @@ export interface WorkDocumentImageProperties extends WorkDocumentImageLayoutOpti
|
|
|
36
42
|
alternativeText: string;
|
|
37
43
|
position?: WorkDocumentImagePosition | null;
|
|
38
44
|
crop?: WorkDocumentImageCrop | null;
|
|
45
|
+
transform?: WorkDocumentImageTransform | null;
|
|
39
46
|
contour?: WorkDocumentImageWrapContour | null;
|
|
40
47
|
layer?: WorkDocumentImageLayer | null;
|
|
41
48
|
}
|
|
@@ -63,6 +70,7 @@ export declare function documentImageAlternativeText(editor: Editor): string;
|
|
|
63
70
|
export declare function documentImageLayoutFromElement(element: Element): WorkDocumentImageLayoutOptions;
|
|
64
71
|
export declare function documentImagePositionFromElement(element: Element): WorkDocumentImagePosition | null;
|
|
65
72
|
export declare function documentImageCropFromElement(element: Element): WorkDocumentImageCrop | null;
|
|
73
|
+
export declare function documentImageTransformFromElement(element: Element): WorkDocumentImageTransform | null;
|
|
66
74
|
export declare function documentImageLayerFromElement(element: Element): WorkDocumentImageLayer;
|
|
67
75
|
export declare function normalizeDocumentImageLayoutOptions(value: Partial<Record<keyof WorkDocumentImageLayoutOptions, unknown>>): WorkDocumentImageLayoutOptions;
|
|
68
76
|
export declare function normalizeDocumentImageLayout(value: unknown): WorkDocumentImageLayout;
|
|
@@ -76,6 +84,12 @@ export declare function normalizeDocumentImageHorizontalReference(value: unknown
|
|
|
76
84
|
export declare function normalizeDocumentImageVerticalReference(value: unknown): WorkDocumentImageVerticalReference;
|
|
77
85
|
export declare function normalizeDocumentImageCrop(value: Partial<Record<'cropBottom' | 'cropLeft' | 'cropRight' | 'cropTop', unknown>>): WorkDocumentImageCrop | null;
|
|
78
86
|
export declare function normalizeDocumentImageCropEdge(value: unknown): number;
|
|
87
|
+
export declare function defaultDocumentImageTransform(): WorkDocumentImageTransform;
|
|
88
|
+
export declare function normalizeDocumentImageTransform(value: Partial<Record<keyof WorkDocumentImageTransform, unknown>>): WorkDocumentImageTransform;
|
|
89
|
+
export declare function normalizeDocumentImageRotation(value: unknown): WorkDocumentImageRotation;
|
|
90
|
+
export declare function documentImageTransformIsDefault(transform: WorkDocumentImageTransform): boolean;
|
|
91
|
+
export declare function documentImageTransformCss(transform: WorkDocumentImageTransform): string;
|
|
92
|
+
export declare function applyDocumentImageTransformToElement(element: HTMLElement, transform: WorkDocumentImageTransform | null): void;
|
|
79
93
|
export declare function normalizeDocumentImageLayer(value: Partial<Record<keyof WorkDocumentImageLayer, unknown>>): WorkDocumentImageLayer;
|
|
80
94
|
export declare function normalizeDocumentImageRelativeHeight(value: unknown): number;
|
|
81
95
|
export declare function documentImageLayerCssZIndex(layer: WorkDocumentImageLayer): number;
|
|
@@ -2,5 +2,6 @@ import type { ParagraphChild } from 'docx';
|
|
|
2
2
|
import type { DocxImageCropPatchCollector } from './work-docx-image-crop';
|
|
3
3
|
import type { DocxImageIdentityPatchCollector } from './work-docx-image-identity';
|
|
4
4
|
import type { DocxImageLayerPatchCollector } from './work-docx-image-layer';
|
|
5
|
+
import type { DocxImageTransformPatchCollector } from './work-docx-image-transform';
|
|
5
6
|
import type { DocxImageWrapPatchCollector } from './work-docx-image-wrap';
|
|
6
|
-
export declare function imageToDocx(element: HTMLImageElement, docx: typeof import('docx'), cropPatches?: DocxImageCropPatchCollector, wrapPatches?: DocxImageWrapPatchCollector, layerPatches?: DocxImageLayerPatchCollector, identityPatches?: DocxImageIdentityPatchCollector): Promise<ParagraphChild>;
|
|
7
|
+
export declare function imageToDocx(element: HTMLImageElement, docx: typeof import('docx'), cropPatches?: DocxImageCropPatchCollector, wrapPatches?: DocxImageWrapPatchCollector, layerPatches?: DocxImageLayerPatchCollector, identityPatches?: DocxImageIdentityPatchCollector, transformPatches?: DocxImageTransformPatchCollector): Promise<ParagraphChild>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type WorkDocumentImageIdentity, type WorkDocumentImageIdentityRegistry } from './work-document-image-identity';
|
|
2
|
-
import { type WorkDocumentImageCrop, type WorkDocumentImageLayer, type WorkDocumentImageLayoutOptions, type WorkDocumentImagePosition } from './work-document-image-layout';
|
|
2
|
+
import { type WorkDocumentImageCrop, type WorkDocumentImageLayer, type WorkDocumentImageLayoutOptions, type WorkDocumentImagePosition, type WorkDocumentImageTransform } from './work-document-image-layout';
|
|
3
3
|
import { type WorkDocumentImageWrapContour } from './work-document-image-wrap-contour';
|
|
4
4
|
export interface ImportedDocxImageLayoutMarker {
|
|
5
5
|
startMarker: string;
|
|
@@ -7,6 +7,7 @@ export interface ImportedDocxImageLayoutMarker {
|
|
|
7
7
|
options: WorkDocumentImageLayoutOptions;
|
|
8
8
|
position: WorkDocumentImagePosition | null;
|
|
9
9
|
crop: WorkDocumentImageCrop | null;
|
|
10
|
+
transform: WorkDocumentImageTransform | null;
|
|
10
11
|
contour: WorkDocumentImageWrapContour | null;
|
|
11
12
|
layer: WorkDocumentImageLayer | null;
|
|
12
13
|
identity: WorkDocumentImageIdentity;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type WorkDocumentImageTransform } from './work-document-image-layout';
|
|
2
|
+
interface DocxImageTransformPatch {
|
|
3
|
+
marker: string;
|
|
4
|
+
transform: WorkDocumentImageTransform;
|
|
5
|
+
}
|
|
6
|
+
export interface DocxImageTransformReadResult {
|
|
7
|
+
transform: WorkDocumentImageTransform | null;
|
|
8
|
+
supported: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function readDocxImageTransform(drawing: Element): DocxImageTransformReadResult;
|
|
11
|
+
export declare class DocxImageTransformPatchCollector {
|
|
12
|
+
readonly patches: DocxImageTransformPatch[];
|
|
13
|
+
private nextMarker;
|
|
14
|
+
marker(transform: WorkDocumentImageTransform | null): string;
|
|
15
|
+
}
|
|
16
|
+
export declare function patchDocxImageTransforms(buffer: ArrayBuffer, patches: readonly DocxImageTransformPatch[]): Promise<ArrayBuffer>;
|
|
17
|
+
export {};
|
|
@@ -204,6 +204,10 @@ export interface WorkSpreadsheetDataValidationItem {
|
|
|
204
204
|
type: string;
|
|
205
205
|
type2: string;
|
|
206
206
|
rangeTxt: string;
|
|
207
|
+
/**
|
|
208
|
+
* List values, a bounded range/name reference, or a local `=INDIRECT(...)`
|
|
209
|
+
* source formula for dependent dropdowns.
|
|
210
|
+
*/
|
|
207
211
|
value1: string;
|
|
208
212
|
value2: string;
|
|
209
213
|
validity: string;
|
package/dist/office-kernel.wasm
CHANGED
|
Binary file
|
package/dist/styles.css
CHANGED
|
@@ -8383,7 +8383,7 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
8383
8383
|
display: grid;
|
|
8384
8384
|
}
|
|
8385
8385
|
|
|
8386
|
-
.work-document-picture-properties-section.position, .work-document-picture-properties-section.layer, .work-document-picture-properties-section.crop, .work-document-picture-properties-alt-text {
|
|
8386
|
+
.work-document-picture-properties-section.position, .work-document-picture-properties-section.layer, .work-document-picture-properties-section.crop, .work-document-picture-properties-section.transform, .work-document-picture-properties-alt-text {
|
|
8387
8387
|
grid-column: 1 / -1;
|
|
8388
8388
|
}
|
|
8389
8389
|
|
|
@@ -8448,6 +8448,34 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
8448
8448
|
display: grid;
|
|
8449
8449
|
}
|
|
8450
8450
|
|
|
8451
|
+
.work-document-picture-properties-transform-row {
|
|
8452
|
+
min-height: 34px;
|
|
8453
|
+
color: var(--a3s-muted);
|
|
8454
|
+
grid-template-columns: 64px minmax(0, 1fr);
|
|
8455
|
+
align-items: center;
|
|
8456
|
+
gap: 8px;
|
|
8457
|
+
font-size: 11px;
|
|
8458
|
+
display: grid;
|
|
8459
|
+
}
|
|
8460
|
+
|
|
8461
|
+
.work-document-picture-properties-transform-options {
|
|
8462
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
8463
|
+
gap: 6px 12px;
|
|
8464
|
+
display: grid;
|
|
8465
|
+
}
|
|
8466
|
+
|
|
8467
|
+
.work-document-picture-properties-transform-options .work-office-checkbox {
|
|
8468
|
+
border-radius: 6px;
|
|
8469
|
+
min-height: 34px;
|
|
8470
|
+
padding: 5px 6px;
|
|
8471
|
+
}
|
|
8472
|
+
|
|
8473
|
+
.work-document-picture-properties-transform-help {
|
|
8474
|
+
color: var(--a3s-faint);
|
|
8475
|
+
font-size: 10px;
|
|
8476
|
+
line-height: 1.4;
|
|
8477
|
+
}
|
|
8478
|
+
|
|
8451
8479
|
.work-document-picture-properties-layer-options {
|
|
8452
8480
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
8453
8481
|
gap: 6px 12px;
|
|
@@ -11762,6 +11790,10 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
|
|
|
11762
11790
|
.work-document-page .tiptap [data-resize-container][data-node="image"] {
|
|
11763
11791
|
width: fit-content;
|
|
11764
11792
|
max-width: 100%;
|
|
11793
|
+
rotate: var(--work-document-image-rotation, 0deg);
|
|
11794
|
+
scale: var(--work-document-image-flip-x, 1)
|
|
11795
|
+
var(--work-document-image-flip-y, 1);
|
|
11796
|
+
transform-origin: center;
|
|
11765
11797
|
margin-block: 18px;
|
|
11766
11798
|
display: block !important;
|
|
11767
11799
|
}
|
|
@@ -12601,8 +12633,12 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
|
|
|
12601
12633
|
}
|
|
12602
12634
|
|
|
12603
12635
|
:is(.work-document-preview-page, .work-pdf-export-page.document) img[data-office-image-layout] {
|
|
12604
|
-
border-radius: 4px;
|
|
12605
12636
|
height: auto;
|
|
12637
|
+
rotate: var(--work-document-image-rotation, 0deg);
|
|
12638
|
+
scale: var(--work-document-image-flip-x, 1)
|
|
12639
|
+
var(--work-document-image-flip-y, 1);
|
|
12640
|
+
transform-origin: center;
|
|
12641
|
+
border-radius: 4px;
|
|
12606
12642
|
margin-block: 18px;
|
|
12607
12643
|
display: block;
|
|
12608
12644
|
}
|
|
@@ -17939,7 +17975,7 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
|
|
|
17939
17975
|
display: grid;
|
|
17940
17976
|
}
|
|
17941
17977
|
|
|
17942
|
-
.work-spreadsheet-data-validation-custom-formula {
|
|
17978
|
+
.work-spreadsheet-data-validation-list-source, .work-spreadsheet-data-validation-custom-formula {
|
|
17943
17979
|
gap: 8px;
|
|
17944
17980
|
display: grid;
|
|
17945
17981
|
}
|
|
@@ -18003,6 +18039,18 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
|
|
|
18003
18039
|
margin-right: auto;
|
|
18004
18040
|
}
|
|
18005
18041
|
|
|
18042
|
+
@media (width <= 900px) {
|
|
18043
|
+
.work-spreadsheet-canvas #luckysheet-dataVerification-dropdown-btn {
|
|
18044
|
+
left: calc(100% - 24px) !important;
|
|
18045
|
+
}
|
|
18046
|
+
|
|
18047
|
+
.work-spreadsheet-canvas #luckysheet-dataVerification-dropdown-List {
|
|
18048
|
+
max-width: calc(100% - 8px);
|
|
18049
|
+
left: auto !important;
|
|
18050
|
+
right: 4px !important;
|
|
18051
|
+
}
|
|
18052
|
+
}
|
|
18053
|
+
|
|
18006
18054
|
@media (width <= 560px) {
|
|
18007
18055
|
.work-spreadsheet-data-validation-condition-grid, .work-spreadsheet-data-validation-values.two, .work-spreadsheet-data-validation-behavior, .work-spreadsheet-data-validation-message-grid {
|
|
18008
18056
|
grid-template-columns: minmax(0, 1fr);
|
|
@@ -836,12 +836,13 @@ stable ProseMirror position, and distribute list-container height without
|
|
|
836
836
|
double-counting nested content.
|
|
837
837
|
|
|
838
838
|
Document image nodes carry typed layout, alignment, wrap-distance, alternative
|
|
839
|
-
text, size,
|
|
839
|
+
text, size, per-image aspect-ratio-lock, and bounded transform attributes. The contextual Picture
|
|
840
840
|
ribbon keeps fast layout actions and opens one responsive Picture Properties
|
|
841
841
|
dialog for centimeter width and height, aspect-ratio locking, wrapping,
|
|
842
842
|
alignment, text distance, signed horizontal and vertical offsets, their column,
|
|
843
843
|
paragraph, margin, or page reference frames, four-edge percentage cropping,
|
|
844
|
-
|
|
844
|
+
quarter-turn rotation, horizontal/vertical reflection, relative drawing order,
|
|
845
|
+
behind-text placement, overlap and cell-layout policy,
|
|
845
846
|
anchor locking, and alternative text. Applying the complete draft
|
|
846
847
|
updates only changed attributes in one separated TipTap history entry; cancel
|
|
847
848
|
and Escape preserve the node and return focus to the exact invoker. Dimensions
|
|
@@ -865,7 +866,10 @@ and ordered `wrapPolygon` vertices. Aligned anchors remain aligned,
|
|
|
865
866
|
while precise offsets preserve `positionH` and `positionV` reference frames
|
|
866
867
|
through edit, preview, and regenerated DOCX. Four-edge crop geometry remains
|
|
867
868
|
typed in the controlled model and round-trips as DrawingML `a:srcRect` for
|
|
868
|
-
inline and floating pictures.
|
|
869
|
+
inline and floating pictures. Quarter-turn rotation and reflection round-trip
|
|
870
|
+
as DrawingML `a:xfrm` `rot`, `flipH`, and `flipV` values for inline and floating
|
|
871
|
+
pictures. Arbitrary-angle or malformed transform values are diagnosed and
|
|
872
|
+
normalized to the bounded model. Supported floating pictures also preserve
|
|
869
873
|
drawing-layer relationships through unsigned `relativeHeight`,
|
|
870
874
|
`behindDoc`, `allowOverlap`, `layoutInCell`, and `locked` anchor attributes.
|
|
871
875
|
The browser maps the unsigned drawing order into bounded foreground and
|