superdoc 2.27.0-next.2 → 2.27.0-next.4

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 (31) hide show
  1. package/dist/chunks/{create-super-doc-ui-DK14sCrT.cjs → create-super-doc-ui-BWoeA7So.cjs} +34 -2
  2. package/dist/chunks/{create-super-doc-ui-BCQ5RHxy.es.js → create-super-doc-ui-DqZk5WpX.es.js} +29 -3
  3. package/dist/collaboration-upgrade-engine.cjs +1 -1
  4. package/dist/collaboration-upgrade-engine.es.js +1 -1
  5. package/dist/document-api/src/history/history.types.d.ts +0 -6
  6. package/dist/document-api/src/index.d.ts +1 -1
  7. package/dist/document-api/src/lists/lists.types.d.ts +3 -0
  8. package/dist/layout-engine/contracts/src/direction-context.d.ts +1 -2
  9. package/dist/layout-engine/contracts/src/resolved-layout.d.ts +0 -34
  10. package/dist/layout-engine/layout-bridge/src/neutral-hit.d.ts +0 -7
  11. package/dist/layout-engine/layout-engine/src/index.d.ts +0 -1
  12. package/dist/layout-engine/painters/dom/src/features/inline-direction/run-direction.d.ts +0 -3
  13. package/dist/public/ui-react.cjs +1 -1
  14. package/dist/public/ui-react.es.js +1 -1
  15. package/dist/public/ui-vue.cjs +1 -1
  16. package/dist/public/ui-vue.es.js +1 -1
  17. package/dist/public/ui.cjs +1 -1
  18. package/dist/public/ui.es.js +1 -1
  19. package/dist/superdoc/src/core/v2-integration/v2-integration.d.ts +2 -5
  20. package/dist/superdoc/src/helpers/tracked-change-comment-lane.d.ts +1 -0
  21. package/dist/superdoc.cjs +7 -18
  22. package/dist/superdoc.es.js +3 -14
  23. package/dist-cdn/superdoc.min.js +38 -38
  24. package/package.json +2 -5
  25. package/dist/superdoc/src/components/CommentsLayer/comment-schemas.d.ts +0 -18
  26. package/dist/superdoc/src/components/CommentsLayer/types.d.ts +0 -3
  27. package/dist/superdoc/src/components/CommentsLayer/use-conversation.d.ts +0 -22
  28. package/dist/superdoc/src/components/CommentsLayer/use-floating-comment.d.ts +0 -11
  29. package/dist/superdoc/src/core/collaboration/room-overwrite.d.ts +0 -22
  30. package/dist/superdoc/src/core/index.d.ts +0 -1
  31. package/dist/superdoc/src/stores/hrbr-fields-store.d.ts +0 -43
@@ -1078,6 +1078,15 @@ var decodeLayoutStoryDataset = (raw) => {
1078
1078
  `${DOM_CLASS_NAMES.BLOCK_SDT}${DATA_ATTRS.SDT_ID}`;
1079
1079
  `${DATA_ATTRS.DRAGGABLE}`;
1080
1080
  //#endregion
1081
+ //#region src/helpers/tracked-change-comment-lane.ts
1082
+ var TRACKED_CHANGE_COMMENT_LANE_ID_PREFIX = "tc-comment:";
1083
+ function isSyntheticTrackedChangeCommentLaneItem(item) {
1084
+ if (!item || typeof item !== "object") return false;
1085
+ const { id, commentId } = item;
1086
+ const itemId = id ?? commentId;
1087
+ return typeof itemId === "string" && itemId.startsWith(TRACKED_CHANGE_COMMENT_LANE_ID_PREFIX);
1088
+ }
1089
+ //#endregion
1081
1090
  //#region src/public/ui/viewport-batch.ts
1082
1091
  /** No rendering or scrolling: read only geometry already acknowledged by the host. */
1083
1092
  async function readViewportBatch(input, read, generation, disposed) {
@@ -7607,9 +7616,26 @@ function createSuperDocUI(options) {
7607
7616
  recompute();
7608
7617
  return selection;
7609
7618
  };
7619
+ const realComments = (items) => items.filter((item) => !isSyntheticTrackedChangeCommentLaneItem(item));
7620
+ let lastWindowComments = null;
7621
+ const realCommentsOfWindow = (window) => {
7622
+ const items = window?.commentItems;
7623
+ if (!Array.isArray(items)) return null;
7624
+ const last = lastWindowComments;
7625
+ if (last?.source === items && shallowEqual(last.rows, items)) return last.real;
7626
+ lastWindowComments = {
7627
+ source: items,
7628
+ rows: [...items],
7629
+ real: realComments(items)
7630
+ };
7631
+ return lastWindowComments.real;
7632
+ };
7610
7633
  const readCommentsDirectory = () => {
7611
7634
  const listComments = hostMethod(getDoc()?.comments, "list");
7612
- return readAsync("comments", contentToken(), () => listComments ? listComments() : void 0, (raw) => raw && Array.isArray(raw.items) ? raw.items : []);
7635
+ return readAsync("comments", contentToken(), () => listComments ? listComments() : void 0, (raw) => {
7636
+ const items = isPlainObject(raw) ? raw.items : void 0;
7637
+ return Array.isArray(items) ? realComments(items) : [];
7638
+ });
7613
7639
  };
7614
7640
  const readTrackChangesDirectory = (key = "trackChanges") => {
7615
7641
  const token = contentToken();
@@ -7642,7 +7668,7 @@ function createSuperDocUI(options) {
7642
7668
  const reviewWindow = getV2ReviewWindowSnapshot();
7643
7669
  const hasWindowFeed = hasV2ReviewWindowFeed();
7644
7670
  const catalog = !hasWindowFeed ? readCommentsDirectory() : null;
7645
- const windowItems = hasWindowFeed && Array.isArray(reviewWindow?.commentItems) ? reviewWindow.commentItems : null;
7671
+ const windowItems = hasWindowFeed ? realCommentsOfWindow(reviewWindow) : null;
7646
7672
  const value = hasWindowFeed ? windowItems : catalog.value;
7647
7673
  const listStatus = hasWindowFeed ? reviewWindowSliceStatus(reviewWindow) : catalog.status;
7648
7674
  const items = value ?? [];
@@ -15124,6 +15150,12 @@ Object.defineProperty(exports, "isPlainObject", {
15124
15150
  return isPlainObject;
15125
15151
  }
15126
15152
  });
15153
+ Object.defineProperty(exports, "isSyntheticTrackedChangeCommentLaneItem", {
15154
+ enumerable: true,
15155
+ get: function() {
15156
+ return isSyntheticTrackedChangeCommentLaneItem;
15157
+ }
15158
+ });
15127
15159
  Object.defineProperty(exports, "isWorkflowRecordingEnabled", {
15128
15160
  enumerable: true,
15129
15161
  get: function() {
@@ -1078,6 +1078,15 @@ var decodeLayoutStoryDataset = (raw) => {
1078
1078
  `${DOM_CLASS_NAMES.BLOCK_SDT}${DATA_ATTRS.SDT_ID}`;
1079
1079
  `${DATA_ATTRS.DRAGGABLE}`;
1080
1080
  //#endregion
1081
+ //#region src/helpers/tracked-change-comment-lane.ts
1082
+ var TRACKED_CHANGE_COMMENT_LANE_ID_PREFIX = "tc-comment:";
1083
+ function isSyntheticTrackedChangeCommentLaneItem(item) {
1084
+ if (!item || typeof item !== "object") return false;
1085
+ const { id, commentId } = item;
1086
+ const itemId = id ?? commentId;
1087
+ return typeof itemId === "string" && itemId.startsWith(TRACKED_CHANGE_COMMENT_LANE_ID_PREFIX);
1088
+ }
1089
+ //#endregion
1081
1090
  //#region src/public/ui/viewport-batch.ts
1082
1091
  /** No rendering or scrolling: read only geometry already acknowledged by the host. */
1083
1092
  async function readViewportBatch(input, read, generation, disposed) {
@@ -7606,9 +7615,26 @@ function createSuperDocUI(options) {
7606
7615
  recompute();
7607
7616
  return selection;
7608
7617
  };
7618
+ const realComments = (items) => items.filter((item) => !isSyntheticTrackedChangeCommentLaneItem(item));
7619
+ let lastWindowComments = null;
7620
+ const realCommentsOfWindow = (window) => {
7621
+ const items = window?.commentItems;
7622
+ if (!Array.isArray(items)) return null;
7623
+ const last = lastWindowComments;
7624
+ if (last?.source === items && shallowEqual(last.rows, items)) return last.real;
7625
+ lastWindowComments = {
7626
+ source: items,
7627
+ rows: [...items],
7628
+ real: realComments(items)
7629
+ };
7630
+ return lastWindowComments.real;
7631
+ };
7609
7632
  const readCommentsDirectory = () => {
7610
7633
  const listComments = hostMethod(getDoc()?.comments, "list");
7611
- return readAsync("comments", contentToken(), () => listComments ? listComments() : void 0, (raw) => raw && Array.isArray(raw.items) ? raw.items : []);
7634
+ return readAsync("comments", contentToken(), () => listComments ? listComments() : void 0, (raw) => {
7635
+ const items = isPlainObject(raw) ? raw.items : void 0;
7636
+ return Array.isArray(items) ? realComments(items) : [];
7637
+ });
7612
7638
  };
7613
7639
  const readTrackChangesDirectory = (key = "trackChanges") => {
7614
7640
  const token = contentToken();
@@ -7641,7 +7667,7 @@ function createSuperDocUI(options) {
7641
7667
  const reviewWindow = getV2ReviewWindowSnapshot();
7642
7668
  const hasWindowFeed = hasV2ReviewWindowFeed();
7643
7669
  const catalog = !hasWindowFeed ? readCommentsDirectory() : null;
7644
- const windowItems = hasWindowFeed && Array.isArray(reviewWindow?.commentItems) ? reviewWindow.commentItems : null;
7670
+ const windowItems = hasWindowFeed ? realCommentsOfWindow(reviewWindow) : null;
7645
7671
  const value = hasWindowFeed ? windowItems : catalog.value;
7646
7672
  const listStatus = hasWindowFeed ? reviewWindowSliceStatus(reviewWindow) : catalog.status;
7647
7673
  const items = value ?? [];
@@ -15051,4 +15077,4 @@ function commandIsActive(descriptor, selection) {
15051
15077
  return descriptor.activeMark ? selection.activeMarks.includes(descriptor.activeMark) : false;
15052
15078
  }
15053
15079
  //#endregion
15054
- export { isWorkflowRecordingEnabled as _, registerFirstPartyCommandMutation as a, getV2TrackedChangeMutationImpact as c, resolveImageSrc as d, shallowEqual as f, getWorkflowRecording as g, createInteractionHistory as h, readFirstPartyPageNumbers as i, isPlainObject as l, closeInteractionHistory as m, executeFirstPartyCommandAsync as n, BUILT_IN_COMMAND_IDS as o, DOM_CLASS_NAMES as p, executeFirstPartyShortcutAsync as r, applyV2CommentInvalidationFromMutation as s, createSuperDocUI as t, createImageFilePicker as u, recordInteraction as v };
15080
+ export { getWorkflowRecording as _, registerFirstPartyCommandMutation as a, getV2TrackedChangeMutationImpact as c, resolveImageSrc as d, shallowEqual as f, createInteractionHistory as g, closeInteractionHistory as h, readFirstPartyPageNumbers as i, isPlainObject as l, DOM_CLASS_NAMES as m, executeFirstPartyCommandAsync as n, BUILT_IN_COMMAND_IDS as o, isSyntheticTrackedChangeCommentLaneItem as p, executeFirstPartyShortcutAsync as r, applyV2CommentInvalidationFromMutation as s, createSuperDocUI as t, createImageFilePicker as u, isWorkflowRecordingEnabled as v, recordInteraction as y };
@@ -19,7 +19,7 @@ var COLLABORATION_UPGRADE_ENGINE_MINIMUM_NODE_MAJOR = 20;
19
19
  var PRIVATE_ENGINE_INFO = (0, _superdoc_docx_engine_collaboration_upgrade_engine.getCollaborationUpgradeEngineInfo)();
20
20
  var ENGINE_INFO = Object.freeze({
21
21
  ...PRIVATE_ENGINE_INFO,
22
- superdocVersion: "2.27.0-next.2",
22
+ superdocVersion: "2.27.0-next.4",
23
23
  roomSchemaVersion: Object.freeze({ ...PRIVATE_ENGINE_INFO.roomSchemaVersion }),
24
24
  supportedBundleVersions: SUPPORTED_COLLABORATION_UPGRADE_BUNDLE_VERSIONS,
25
25
  supportedV1ReaderContractVersions: SUPPORTED_V1_READER_CONTRACT_VERSIONS
@@ -18,7 +18,7 @@ var COLLABORATION_UPGRADE_ENGINE_MINIMUM_NODE_MAJOR = 20;
18
18
  var PRIVATE_ENGINE_INFO = getCollaborationUpgradeEngineInfo$1();
19
19
  var ENGINE_INFO = Object.freeze({
20
20
  ...PRIVATE_ENGINE_INFO,
21
- superdocVersion: "2.27.0-next.2",
21
+ superdocVersion: "2.27.0-next.4",
22
22
  roomSchemaVersion: Object.freeze({ ...PRIVATE_ENGINE_INFO.roomSchemaVersion }),
23
23
  supportedBundleVersions: SUPPORTED_COLLABORATION_UPGRADE_BUNDLE_VERSIONS,
24
24
  supportedV1ReaderContractVersions: SUPPORTED_V1_READER_CONTRACT_VERSIONS
@@ -43,12 +43,6 @@ export interface SDHistoryCollaborationMeta {
43
43
  * Result of a history.undo or history.redo action.
44
44
  * Mirrors PlanReceipt's revision shape for consistency.
45
45
  *
46
- * AIDEV-NOTE: this shape carries optional ref-effect
47
- * fields. v1 callers leave them undefined; v2 (`V2HistoryAdapter`) populates
48
- * them from the stored semantic delta of the undone/redone transaction so
49
- * callers' held refs stay accurate across history actions. Never make any
50
- * of the new fields required — v1 adapters MUST keep compiling unchanged.
51
- *
52
46
  * The shape also carries three optional collaboration fields:
53
47
  * `status`, `diagnosticCode`, and `collaboration`. v1 leaves them
54
48
  * undefined; collaborative v2 sessions populate them so callers can react
@@ -169,7 +169,7 @@ export type { ParagraphsAdapter, ParagraphFormatApi, ParagraphStylesApi } from '
169
169
  export type { ParagraphTarget, ParagraphBlockType, ParagraphMutationResult, ParagraphMutationSuccess, ParagraphMutationFailure, MutationResolution, ParagraphAlignment, TabStopAlignment, TabStopLeader, BorderSide, ClearBorderSide, LineRule, ParagraphsSetStyleInput, ParagraphSemanticStyleRole, ParagraphsSetStyleRefInput, ParagraphsClearStyleInput, ParagraphsResetDirectFormattingInput, ParagraphsSetAlignmentInput, ParagraphsClearAlignmentInput, ParagraphsSetIndentationInput, ParagraphsClearIndentationInput, ParagraphsSetSpacingInput, ParagraphsClearSpacingInput, ParagraphsSetKeepOptionsInput, ParagraphsSetOutlineLevelInput, ParagraphsSetFlowOptionsInput, ParagraphsSetTabStopInput, ParagraphsClearTabStopInput, ParagraphsClearAllTabStopsInput, ParagraphsSetBorderInput, ParagraphsClearBorderInput, ParagraphsSetShadingInput, ParagraphsClearShadingInput, ParagraphsSetMarkRunPropsInput, ParagraphsSetDirectionInput, ParagraphsClearDirectionInput, ParagraphsSetNumberingInput, ParagraphDirection, AlignmentPolicy, } from './paragraphs/paragraphs.js';
170
170
  export { PARAGRAPH_ALIGNMENTS, TAB_STOP_ALIGNMENTS, TAB_STOP_LEADERS, BORDER_SIDES, CLEAR_BORDER_SIDES, LINE_RULES, PARAGRAPH_DIRECTIONS, ALIGNMENT_POLICIES, } from './paragraphs/paragraphs.js';
171
171
  export type { BlockAddress, BlockRange, CanContinueReason, CanJoinReason, JoinDirection, ListInsertInput, ListItemAddress, ListItemInfo, ListKind, ListsAttachInput, ListsCanContinuePreviousInput, ListsCanContinuePreviousResult, ListsCanJoinInput, ListsCanJoinResult, ListsConvertToTextInput, ListsConvertToTextResult, ListsContinuePreviousInput, ListsCreateInput, ListsCreateResult, ListsDetachInput, ListsDetachResult, ListsDeleteInput, ListsDeleteResult, ListsFailureCode, ListsGetInput, ListsInsertResult, ListsJoinInput, ListsJoinResult, ListsListQuery, ListsListResult, ListsMutateItemResult, ListsSeparateInput, ListsSeparateResult, ListsMergeInput, ListsMergeResult, ListsSplitInput, ListsSplitResult, ListsSetLevelInput, ListsSetLevelRestartInput, ListsSetValueInput, ListTargetInput, MutationScope, LevelAlignment, TrailingCharacter, ListPresetId, ListPresetMarker, ListLevelTemplate, ListTemplate, ListsApplyTemplateInput, ListsApplyPresetInput, ListsCaptureTemplateInput, ListsCaptureTemplateResult, ListsCaptureTemplateSuccessResult, ListsSetLevelNumberingInput, ListsSetLevelBulletInput, ListsSetLevelPictureBulletInput, ListsSetLevelAlignmentInput, ListsSetLevelIndentsInput, ListsSetLevelTrailingCharacterInput, ListsSetLevelMarkerFontInput, ListsClearLevelOverridesInput, ListsSetTypeInput, ListStyle, ListLevelStyle, ListLevelLayout, ListsGetStyleInput, ListsGetStyleResult, ListsGetStyleSuccessResult, ListsApplyStyleInput, ListsRestartAtInput, ListsSetLevelNumberStyleInput, ListsSetLevelTextInput, ListsSetLevelStartInput, ListsSetLevelLayoutInput, ListsGetStateInput, ListsGetStateResult, ListsApplyInput, ListsContinueV2Input, ListsRestartV2Input, ListsRemoveV2Input, } from './lists/lists.types.js';
172
- export { LIST_KINDS, LIST_INSERT_POSITIONS, JOIN_DIRECTIONS, MUTATION_SCOPES, LEVEL_ALIGNMENTS, TRAILING_CHARACTERS, LIST_PRESET_IDS, LIST_PRESET_MARKERS, } from './lists/lists.types.js';
172
+ export { LIST_KINDS, LIST_INSERT_POSITIONS, JOIN_DIRECTIONS, MUTATION_SCOPES, LEVEL_ALIGNMENTS, TRAILING_CHARACTERS, LIST_PRESET_IDS, LIST_PRESET_MARKERS, LIST_CUSTOM_NUMBERING_FORMATS, } from './lists/lists.types.js';
173
173
  export type { CreateSectionBreakInput, CreateSectionBreakResult, DocumentMutationResult, SectionAddress, SectionBorderSpec, SectionBreakCreateLocation, SectionBreakRepresentation, SectionBreakType, SectionColumns, SectionDirection, SectionDomain, SectionHeaderFooterKind, SectionHeaderFooterMargins, SectionHeaderFooterRefs, SectionHeaderFooterVariant, SectionInfo, SectionLineNumbering, SectionLineNumberRestart, SectionMutationResult, SectionOrientation, SectionPageBorders, SectionPageMargins, SectionPageNumbering, SectionPageNumberingChapterSeparator, SectionPageNumberingFormat, SectionPageSetup, SectionRangeDomain, SectionTargetInput, SectionVerticalAlign, SectionsClearHeaderFooterRefInput, SectionsClearPageBordersInput, SectionsGetInput, SectionsListQuery, SectionsListResult, SectionsSetBreakTypeInput, SectionsSetColumnsInput, SectionsSetHeaderFooterMarginsInput, SectionsSetHeaderFooterRefInput, SectionsSetLineNumberingInput, SectionsSetLinkToPreviousInput, SectionsSetOddEvenHeadersFootersInput, SectionsSetPageBordersInput, SectionsSetPageMarginsInput, SectionsSetPageNumberingInput, SectionsSetPageSetupInput, SectionsSetSectionDirectionInput, SectionsSetTitlePageInput, SectionsSetVerticalAlignInput, } from './sections/sections.types.js';
174
174
  export type { CommentsCreateReceipt, CommentsCreateInput, CommentCreateAttributionInput, CommentsPatchInput, CommentsDeleteInput, CommentsAdapter, CommentsApi, GetCommentInput, TrackedChangeCommentTarget, TrackedChangeCommentTargetSide, TextSearchCommentTarget, AddCommentInput, EditCommentInput, ReplyToCommentInput, MoveCommentInput, ResolveCommentInput, ReopenCommentInput, RemoveCommentInput, SetCommentInternalInput, GoToCommentInput, SetCommentActiveInput, } from './comments/comments.js';
175
175
  export { executeCommentsCreate, executeCommentsPatch, executeCommentsDelete, executeGetComment, executeListComments, } from './comments/comments.js';
@@ -206,10 +206,12 @@ export interface ListsConvertToTextInput {
206
206
  target: ListItemAddress;
207
207
  includeMarker?: boolean;
208
208
  }
209
+ export declare const LIST_CUSTOM_NUMBERING_FORMATS: readonly ["01, 02, 03, ...", "001, 002, 003, ...", "0001, 0002, 0003, ..."];
209
210
  /** A captured snapshot of one level's formatting properties. */
210
211
  export interface ListLevelTemplate {
211
212
  level: number;
212
213
  numFmt?: string;
214
+ customFormat?: string;
213
215
  lvlText?: string;
214
216
  start?: number;
215
217
  alignment?: LevelAlignment;
@@ -274,6 +276,7 @@ export interface ListsSetLevelNumberingInput {
274
276
  target: ListItemAddress;
275
277
  level: number;
276
278
  numFmt: string;
279
+ customFormat?: string;
277
280
  lvlText: string;
278
281
  start?: number;
279
282
  /** Format numeric placeholders as decimal. False removes legal numbering; omit to preserve it. */
@@ -197,8 +197,7 @@ export declare function getParagraphInlineDirection(attrs: {
197
197
  *
198
198
  * Prefers the resolved {@link TableDirectionContext} when present, falls
199
199
  * back to the legacy `tableProperties.rightToLeft` (or `bidiVisual` alias)
200
- * for compatibility. The AIDEV-NOTE on the fallback branch names the
201
- * retirement signal.
200
+ * for compatibility.
202
201
  *
203
202
  * Per ECMA-376 §17.4.1, `w:bidiVisual` affects only cell ordering and
204
203
  * table-visual properties. Cell paragraph inline direction is independent;
@@ -111,8 +111,6 @@ export type ResolvedGroupItem = {
111
111
  /**
112
112
  * A resolved fragment wrapper item.
113
113
  * Carries positioning and metadata needed to create the fragment's DOM wrapper.
114
- * Inner content rendering is delegated to the Fragment-based render path via
115
- * fragmentIndex; see the compat-fallback note on that field.
116
114
  */
117
115
  export type ResolvedFragmentItem = {
118
116
  kind: 'fragment';
@@ -138,14 +136,6 @@ export type ResolvedFragmentItem = {
138
136
  fragment: Fragment;
139
137
  /** Block ID. Written to data-block-id. */
140
138
  blockId: string;
141
- /**
142
- * Index back into page.fragments.
143
- *
144
- * AIDEV-NOTE: compat-fallback. The painter currently reads inner content from
145
- * Fragment via this index because ResolvedFragmentItem does not carry full
146
- * content yet. Becomes unused once paint items are self-describing; do not
147
- * promote this to a permanent API surface.
148
- */
149
139
  fragmentIndex: number;
150
140
  /** ProseMirror start position for click-to-position mapping. */
151
141
  pmStart?: number;
@@ -280,14 +270,6 @@ export type ResolvedTableItem = {
280
270
  zIndex?: number;
281
271
  /** Block ID — written to data-block-id. */
282
272
  blockId: string;
283
- /**
284
- * Index back into page.fragments.
285
- *
286
- * AIDEV-NOTE: compat-fallback. The painter currently reads inner content from
287
- * Fragment via this index because ResolvedFragmentItem does not carry full
288
- * content yet. Becomes unused once paint items are self-describing; do not
289
- * promote this to a permanent API surface.
290
- */
291
273
  fragmentIndex: number;
292
274
  /** Source TableFragment back-pointer (see ResolvedFragmentItem.fragment). */
293
275
  fragment: Fragment;
@@ -357,14 +339,6 @@ export type ResolvedImageItem = {
357
339
  zIndex?: number;
358
340
  /** Block ID — written to data-block-id. */
359
341
  blockId: string;
360
- /**
361
- * Index back into page.fragments.
362
- *
363
- * AIDEV-NOTE: compat-fallback. The painter currently reads inner content from
364
- * Fragment via this index because ResolvedFragmentItem does not carry full
365
- * content yet. Becomes unused once paint items are self-describing; do not
366
- * promote this to a permanent API surface.
367
- */
368
342
  fragmentIndex: number;
369
343
  /** Source ImageFragment back-pointer (see ResolvedFragmentItem.fragment). */
370
344
  fragment: Fragment;
@@ -426,14 +400,6 @@ export type ResolvedDrawingItem = {
426
400
  zIndex?: number;
427
401
  /** Block ID — written to data-block-id. */
428
402
  blockId: string;
429
- /**
430
- * Index back into page.fragments.
431
- *
432
- * AIDEV-NOTE: compat-fallback. The painter currently reads inner content from
433
- * Fragment via this index because ResolvedFragmentItem does not carry full
434
- * content yet. Becomes unused once paint items are self-describing; do not
435
- * promote this to a permanent API surface.
436
- */
437
403
  fragmentIndex: number;
438
404
  /** Source DrawingFragment back-pointer (see ResolvedFragmentItem.fragment). */
439
405
  fragment: Fragment;
@@ -35,13 +35,6 @@ export type LayoutHit = {
35
35
  sourceAnchor?: SourceAnchor;
36
36
  /** Diagnostics for partially supported or rejected hits. */
37
37
  diagnostics?: LayoutHitDiagnostic[];
38
- /**
39
- * Legacy PM-shaped position hit.
40
- *
41
- * AIDEV-NOTE: compat-fallback - callers may still consume `pmPosition`.
42
- * Retire once providers stop relying on PM positions to map this hit back to
43
- * a document ref. Do not gate new editor-neutral behavior on this field.
44
- */
45
38
  legacyPm?: PositionHit;
46
39
  };
47
40
  export type LayoutHitDiagnostic = {
@@ -302,7 +302,6 @@ export type LayoutDocumentContinuation = {
302
302
  }): Promise<LayoutContinuationBatch>;
303
303
  dispose(): void;
304
304
  };
305
- /** AIDEV-NOTE: The handle owns one live paginator; advancing never replays a stopped prefix. */
306
305
  export declare function createLayoutDocumentContinuation(blocks: FlowBlock[], measures: Measure[], options?: LayoutOptions, execution?: LayoutExecutionControl): LayoutDocumentContinuation;
307
306
  export type LayoutRangeBoundaryPolicy = 'conservative-context' | 'overscan' | 'degraded-on-incomplete-state';
308
307
  export type LayoutRangeExactness = 'exact' | 'pending-layout' | 'degraded-unsupported' | 'stale';
@@ -26,9 +26,6 @@ export declare const RTL_DATE_LIKE_TOKEN_RE: RegExp;
26
26
  * FE70-FEFF Arabic-B). The block range covers Hebrew, Arabic, Syriac, NKo,
27
27
  * etc.; the Script properties add presentation forms without including
28
28
  * noncharacters (FDD0-FDEF) or the BOM (FEFF).
29
- *
30
- * AIDEV-NOTE: also used by editing/runtime mixed-bidi handling. Consolidating
31
- * crosses a layer boundary; tracked under SD-3169 follow-ups.
32
29
  */
33
30
  export declare const STRONG_RTL_CHAR_RE: RegExp;
34
31
  /**
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-DK14sCrT.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-BWoeA7So.cjs");
3
3
  const require_slice_source = require("../chunks/slice-source-CFaqq0Vo.cjs");
4
4
  let react = require("react");
5
5
  let use_sync_external_store_shim = require("use-sync-external-store/shim");
@@ -1,4 +1,4 @@
1
- import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-BCQ5RHxy.es.js";
1
+ import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-DqZk5WpX.es.js";
2
2
  import { t as toSliceSource } from "../chunks/slice-source-gfOhG2MW.es.js";
3
3
  import { createContext, createElement, useCallback, useContext, useEffect, useRef, useState } from "react";
4
4
  import { useSyncExternalStore } from "use-sync-external-store/shim";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-DK14sCrT.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-BWoeA7So.cjs");
3
3
  const require_slice_source = require("../chunks/slice-source-CFaqq0Vo.cjs");
4
4
  let superdoc_entry_vue = require("vue");
5
5
  //#region src/public/ui/vue.ts
@@ -1,4 +1,4 @@
1
- import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-BCQ5RHxy.es.js";
1
+ import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-DqZk5WpX.es.js";
2
2
  import { t as toSliceSource } from "../chunks/slice-source-gfOhG2MW.es.js";
3
3
  import { computed, inject, onScopeDispose, provide, shallowRef, toRaw, toValue, watch } from "vue";
4
4
  //#region src/public/ui/vue.ts
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-DK14sCrT.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-BWoeA7So.cjs");
3
3
  //#region ../document-api/src/types/receipt.ts
4
4
  /** Read a known failure.details.reason without assuming every failure has one. */
5
5
  function getDocumentApiRejectionReason(details) {
@@ -1,4 +1,4 @@
1
- import { f as shallowEqual, o as BUILT_IN_COMMAND_IDS, t as createSuperDocUI } from "../chunks/create-super-doc-ui-BCQ5RHxy.es.js";
1
+ import { f as shallowEqual, o as BUILT_IN_COMMAND_IDS, t as createSuperDocUI } from "../chunks/create-super-doc-ui-DqZk5WpX.es.js";
2
2
  //#region ../document-api/src/types/receipt.ts
3
3
  /** Read a known failure.details.reason without assuming every failure has one. */
4
4
  function getDocumentApiRejectionReason(details) {
@@ -1,3 +1,4 @@
1
+ import { isSyntheticTrackedChangeCommentLaneItem } from '../../helpers/tracked-change-comment-lane.js';
1
2
  /**
2
3
  * Replace the package loader before engine loading starts. The CDN entry uses
3
4
  * this seam to fetch the exact engine version from its public package URL.
@@ -9,11 +10,6 @@ export function configureDefaultV2IntegrationLoader(loader: () => Promise<unknow
9
10
  export function loadDefaultV2Integration(): Promise<void>;
10
11
  /** Load the engine for editor startup, preserving the fail-closed stub on failure. */
11
12
  export function loadDefaultV2IntegrationOrFallback(): Promise<void>;
12
- /**
13
- * @param {unknown} item
14
- * @returns {boolean}
15
- */
16
- export function isSyntheticTrackedChangeCommentLaneItem(item: unknown): boolean;
17
13
  /**
18
14
  * @param {{ trackedChange?: unknown, trackedChangeAnchorKey?: unknown } | null | undefined} row
19
15
  * @returns {boolean}
@@ -61,6 +57,7 @@ export function hasRealV2Integration(integration: SuperDocV2Integration | null |
61
57
  */
62
58
  /** Default version for the local stub integration (V1-compatible). */
63
59
  export const SUPERDOC_V2_INTEGRATION_VERSION: 1;
60
+ export { isSyntheticTrackedChangeCommentLaneItem };
64
61
  export type SuperDocV2Integration = {
65
62
  /**
66
63
  * Integration contract version.
@@ -0,0 +1 @@
1
+ export declare function isSyntheticTrackedChangeCommentLaneItem(item: unknown): boolean;
package/dist/superdoc.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_rolldown_runtime = require("./chunks/rolldown-runtime-74VwNCz7.cjs");
3
3
  const require_blank_docx = require("./chunks/blank-docx-BuFAbRjs.cjs");
4
- const require_create_super_doc_ui = require("./chunks/create-super-doc-ui-DK14sCrT.cjs");
4
+ const require_create_super_doc_ui = require("./chunks/create-super-doc-ui-BWoeA7So.cjs");
5
5
  const require_eventemitter3 = require("./chunks/eventemitter3-C_TAnXOl.cjs");
6
6
  const require_uuid = require("./chunks/uuid-BhG0ngwk.cjs");
7
7
  const require__plugin_vue_export_helper = require("./chunks/_plugin-vue_export-helper-BUdjGKyl.cjs");
@@ -260,7 +260,7 @@ var v_click_outside_default = {
260
260
  var DEFAULT_ENDPOINT = "https://ingest.superdoc.dev/v1/collect";
261
261
  function getSuperdocVersion() {
262
262
  try {
263
- return "2.27.0-next.2";
263
+ return "2.27.0-next.4";
264
264
  } catch {
265
265
  return "unknown";
266
266
  }
@@ -7087,19 +7087,8 @@ async function loadDefaultV2IntegrationOrFallback() {
7087
7087
  console.error("[SuperDoc] DOCX Engine failed to load; using the stub.", error);
7088
7088
  }
7089
7089
  }
7090
- var V2_SYNTHETIC_TRACKED_CHANGE_COMMENT_ID_PREFIX = "tc-comment:";
7091
7090
  var V2_BODY_TRACKED_CHANGE_ANCHOR_PREFIX = "tc::body::";
7092
7091
  /**
7093
- * @param {unknown} item
7094
- * @returns {boolean}
7095
- */
7096
- function isSyntheticTrackedChangeCommentLaneItem(item) {
7097
- if (!item || typeof item !== "object") return false;
7098
- const id = item.id ?? item.commentId;
7099
- if (typeof id !== "string") return false;
7100
- return id.startsWith(V2_SYNTHETIC_TRACKED_CHANGE_COMMENT_ID_PREFIX);
7101
- }
7102
- /**
7103
7092
  * @param {{ trackedChange?: unknown, trackedChangeAnchorKey?: unknown } | null | undefined} row
7104
7093
  * @returns {boolean}
7105
7094
  */
@@ -7165,7 +7154,7 @@ function createStubV2Integration() {
7165
7154
  RulerComponent: null,
7166
7155
  createGeometryPublisher: createStubGeometryPublisher,
7167
7156
  createReviewWindowController: createStubReviewWindowController,
7168
- isSyntheticTrackedChangeCommentLaneItem,
7157
+ isSyntheticTrackedChangeCommentLaneItem: require_create_super_doc_ui.isSyntheticTrackedChangeCommentLaneItem,
7169
7158
  isV2SyntheticTrackedChangeRow
7170
7159
  };
7171
7160
  }
@@ -9352,7 +9341,7 @@ var useCommentsStore = defineStore("comments", () => {
9352
9341
  }
9353
9342
  const documentId = superdoc?.activeEditor?.documentId ?? superdoc?.activeEditor?.options?.documentId ?? commentsAdapter.documentId ?? trackedChangesAdapter.documentId ?? null;
9354
9343
  const document = documentId != null ? superdocStore.getDocument(String(documentId)) : null;
9355
- const mappedCommentInputs = commentItems.filter((item) => !isSyntheticTrackedChangeCommentLaneItem(item)).map((item) => commentsAdapter.mapV2CommentToUseCommentInput(item, {
9344
+ const mappedCommentInputs = commentItems.filter((item) => !require_create_super_doc_ui.isSyntheticTrackedChangeCommentLaneItem(item)).map((item) => commentsAdapter.mapV2CommentToUseCommentInput(item, {
9356
9345
  fileId: documentId,
9357
9346
  fileType: document?.type ?? null
9358
9347
  })).filter(Boolean);
@@ -9885,7 +9874,7 @@ var useCommentsStore = defineStore("comments", () => {
9885
9874
  ...input.selection,
9886
9875
  documentId: normalizedDocumentId
9887
9876
  }
9888
- })) : effectiveCommentItems.filter((item) => !isSyntheticTrackedChangeCommentLaneItem(item)).map((item) => commentsAdapter.mapV2CommentToUseCommentInput(item, {
9877
+ })) : effectiveCommentItems.filter((item) => !require_create_super_doc_ui.isSyntheticTrackedChangeCommentLaneItem(item)).map((item) => commentsAdapter.mapV2CommentToUseCommentInput(item, {
9889
9878
  fileId: normalizedDocumentId,
9890
9879
  fileType
9891
9880
  })).filter(Boolean);
@@ -9990,7 +9979,7 @@ var useCommentsStore = defineStore("comments", () => {
9990
9979
  const incomingByCommentId = /* @__PURE__ */ new Map();
9991
9980
  const trackedChangeSidecarParentByCommentId = /* @__PURE__ */ new Map();
9992
9981
  const mappedInputs = [];
9993
- const candidateInputs = Array.isArray(preparedInputs) ? preparedInputs : items.filter((item) => !isSyntheticTrackedChangeCommentLaneItem(item)).map((item) => adapter.mapV2CommentToUseCommentInput(item, {
9982
+ const candidateInputs = Array.isArray(preparedInputs) ? preparedInputs : items.filter((item) => !require_create_super_doc_ui.isSyntheticTrackedChangeCommentLaneItem(item)).map((item) => adapter.mapV2CommentToUseCommentInput(item, {
9994
9983
  fileId: effectiveDocumentId,
9995
9984
  fileType
9996
9985
  })).filter(Boolean);
@@ -46242,7 +46231,7 @@ var SuperDoc = class extends require_eventemitter3.import_eventemitter3.default
46242
46231
  }
46243
46232
  this.userColorMap = /* @__PURE__ */ new Map();
46244
46233
  this.colorIndex = 0;
46245
- this.version = "2.27.0-next.2";
46234
+ this.version = "2.27.0-next.4";
46246
46235
  this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
46247
46236
  this.superdocId = config.superdocId || require_uuid.v4();
46248
46237
  this.colors = this.config.colors ?? [];
@@ -1,6 +1,6 @@
1
1
  import { i as __toESM$2 } from "./chunks/rolldown-runtime-0pSA04fp.es.js";
2
2
  import { t as blank_default } from "./chunks/blank-docx-DzQccOlW.es.js";
3
- import { _ as isWorkflowRecordingEnabled, a as registerFirstPartyCommandMutation, c as getV2TrackedChangeMutationImpact, d as resolveImageSrc, g as getWorkflowRecording, h as createInteractionHistory, i as readFirstPartyPageNumbers, l as isPlainObject$1, m as closeInteractionHistory, n as executeFirstPartyCommandAsync, p as DOM_CLASS_NAMES, r as executeFirstPartyShortcutAsync, s as applyV2CommentInvalidationFromMutation, t as createSuperDocUI, u as createImageFilePicker, v as recordInteraction } from "./chunks/create-super-doc-ui-BCQ5RHxy.es.js";
3
+ import { _ as getWorkflowRecording, a as registerFirstPartyCommandMutation, c as getV2TrackedChangeMutationImpact, d as resolveImageSrc, g as createInteractionHistory, h as closeInteractionHistory, i as readFirstPartyPageNumbers, l as isPlainObject$1, m as DOM_CLASS_NAMES, n as executeFirstPartyCommandAsync, p as isSyntheticTrackedChangeCommentLaneItem, r as executeFirstPartyShortcutAsync, s as applyV2CommentInvalidationFromMutation, t as createSuperDocUI, u as createImageFilePicker, v as isWorkflowRecordingEnabled, y as recordInteraction } from "./chunks/create-super-doc-ui-DqZk5WpX.es.js";
4
4
  import { t as import_eventemitter3 } from "./chunks/eventemitter3-DEIiXiH2.es.js";
5
5
  import { t as v4 } from "./chunks/uuid-H0Xcmmhy.es.js";
6
6
  import { $ as vModelText, A as onActivated, B as renderSlot, C as isRef$1, D as normalizeClass, E as nextTick, F as openBlock, G as toRaw$2, H as resolveDynamicComponent, I as provide$1, J as unref, K as toRef, L as reactive, M as onDeactivated, N as onMounted, O as normalizeProps, P as onScopeDispose$1, Q as vModelSelect, R as ref, S as isReactive$1, T as mergeProps, U as shallowRef$1, V as resolveDirective, W as toDisplayString, X as useSlots, Y as useAttrs, Z as vModelCheckbox, _ as getCurrentInstance, a as computed$1, b as hasInjectionContext, c as createCommentVNode, d as createStaticVNode, et as watch$1, f as createTextVNode, g as effectScope, h as defineComponent, i as Transition, it as withModifiers, j as onBeforeUnmount, k as normalizeStyle, l as createElementBlock, m as defineAsyncComponent, n as Fragment, nt as withDirectives, o as createApp, p as createVNode, q as toRefs, r as Teleport, rt as withKeys, s as createBlock, t as _plugin_vue_export_helper_default, tt as withCtx, u as createElementVNode, v as getCurrentScope, w as markRaw, x as inject$1, y as h, z as renderList } from "./chunks/_plugin-vue_export-helper-7ZiLY07t.es.js";
@@ -258,7 +258,7 @@ var v_click_outside_default = {
258
258
  var DEFAULT_ENDPOINT = "https://ingest.superdoc.dev/v1/collect";
259
259
  function getSuperdocVersion() {
260
260
  try {
261
- return "2.27.0-next.2";
261
+ return "2.27.0-next.4";
262
262
  } catch {
263
263
  return "unknown";
264
264
  }
@@ -7085,19 +7085,8 @@ async function loadDefaultV2IntegrationOrFallback() {
7085
7085
  console.error("[SuperDoc] DOCX Engine failed to load; using the stub.", error);
7086
7086
  }
7087
7087
  }
7088
- var V2_SYNTHETIC_TRACKED_CHANGE_COMMENT_ID_PREFIX = "tc-comment:";
7089
7088
  var V2_BODY_TRACKED_CHANGE_ANCHOR_PREFIX = "tc::body::";
7090
7089
  /**
7091
- * @param {unknown} item
7092
- * @returns {boolean}
7093
- */
7094
- function isSyntheticTrackedChangeCommentLaneItem(item) {
7095
- if (!item || typeof item !== "object") return false;
7096
- const id = item.id ?? item.commentId;
7097
- if (typeof id !== "string") return false;
7098
- return id.startsWith(V2_SYNTHETIC_TRACKED_CHANGE_COMMENT_ID_PREFIX);
7099
- }
7100
- /**
7101
7090
  * @param {{ trackedChange?: unknown, trackedChangeAnchorKey?: unknown } | null | undefined} row
7102
7091
  * @returns {boolean}
7103
7092
  */
@@ -46172,7 +46161,7 @@ var SuperDoc = class extends import_eventemitter3.default {
46172
46161
  }
46173
46162
  this.userColorMap = /* @__PURE__ */ new Map();
46174
46163
  this.colorIndex = 0;
46175
- this.version = "2.27.0-next.2";
46164
+ this.version = "2.27.0-next.4";
46176
46165
  this.#log("🦋 [superdoc] Using SuperDoc version:", this.version);
46177
46166
  this.superdocId = config.superdocId || v4();
46178
46167
  this.colors = this.config.colors ?? [];