@superdoc-dev/cli 0.15.0-next.4 → 0.15.0-next.6

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 (2) hide show
  1. package/dist/index.js +250 -101
  2. package/package.json +7 -7
package/dist/index.js CHANGED
@@ -221759,7 +221759,7 @@ var init_remark_gfm_eZN6yzWQ_es = __esm(() => {
221759
221759
  init_remark_gfm_BhnWr3yf_es();
221760
221760
  });
221761
221761
 
221762
- // ../../packages/superdoc/dist/chunks/src-D6vKCaok.es.js
221762
+ // ../../packages/superdoc/dist/chunks/src-D1Zc7Jgj.es.js
221763
221763
  function deleteProps(obj, propOrProps) {
221764
221764
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
221765
221765
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -223110,12 +223110,80 @@ function findContainingBlockAncestor(element3) {
223110
223110
  }
223111
223111
  return null;
223112
223112
  }
223113
+ function isZeroWidthMarker(node3) {
223114
+ if (node3.type.name === "fieldAnnotation" && node3.attrs?.hidden === true)
223115
+ return true;
223116
+ return ZERO_WIDTH_MARKER_NODE_NAMES.has(node3.type.name);
223117
+ }
223118
+ function findFirstTextPosInNode(node3, nodePos) {
223119
+ if (node3.isText)
223120
+ return nodePos;
223121
+ for (let index2 = 0, offset$1 = 0;index2 < node3.childCount; index2 += 1) {
223122
+ const child = node3.child(index2);
223123
+ const found2 = findFirstTextPosInNode(child, nodePos + 1 + offset$1);
223124
+ if (found2 != null)
223125
+ return found2;
223126
+ offset$1 += child.nodeSize;
223127
+ }
223128
+ return null;
223129
+ }
223130
+ function findFirstContentCursorPosInNode(node3, nodePos) {
223131
+ if (isZeroWidthMarker(node3))
223132
+ return null;
223133
+ if (node3.isText || node3.isAtom)
223134
+ return nodePos;
223135
+ if (node3.isTextblock && node3.childCount === 0)
223136
+ return nodePos + 1;
223137
+ for (let index2 = 0, offset$1 = 0;index2 < node3.childCount; index2 += 1) {
223138
+ const child = node3.child(index2);
223139
+ const found2 = findFirstContentCursorPosInNode(child, nodePos + 1 + offset$1);
223140
+ if (found2 != null)
223141
+ return found2;
223142
+ offset$1 += child.nodeSize;
223143
+ }
223144
+ if (node3.isTextblock)
223145
+ return nodePos + 1;
223146
+ return null;
223147
+ }
223148
+ function findLastTextPosInNode(node3, nodePos) {
223149
+ if (node3.isText)
223150
+ return nodePos + (node3.text?.length ?? 0);
223151
+ for (let index2 = node3.childCount - 1, offset$1 = node3.content.size;index2 >= 0; index2 -= 1) {
223152
+ const child = node3.child(index2);
223153
+ offset$1 -= child.nodeSize;
223154
+ const found2 = findLastTextPosInNode(child, nodePos + 1 + offset$1);
223155
+ if (found2 != null)
223156
+ return found2;
223157
+ }
223158
+ return null;
223159
+ }
223160
+ function findLastContentCursorPosInNode(node3, nodePos) {
223161
+ if (isZeroWidthMarker(node3))
223162
+ return null;
223163
+ if (node3.isText)
223164
+ return nodePos + (node3.text?.length ?? 0);
223165
+ if (node3.isAtom)
223166
+ return node3.isInline ? nodePos + node3.nodeSize : nodePos;
223167
+ if (node3.isTextblock && node3.childCount === 0)
223168
+ return nodePos + 1;
223169
+ for (let index2 = node3.childCount - 1, offset$1 = node3.content.size;index2 >= 0; index2 -= 1) {
223170
+ const child = node3.child(index2);
223171
+ offset$1 -= child.nodeSize;
223172
+ const found2 = findLastContentCursorPosInNode(child, nodePos + 1 + offset$1);
223173
+ if (found2 != null)
223174
+ return found2;
223175
+ }
223176
+ if (node3.isTextblock)
223177
+ return nodePos + node3.nodeSize - 1;
223178
+ return null;
223179
+ }
223113
223180
  function collectSDTNodes(doc$12) {
223114
223181
  const sdtNodes = [];
223115
223182
  doc$12.descendants((node3, pos) => {
223116
223183
  if (node3.type.name === "structuredContent" || node3.type.name === "structuredContentBlock")
223117
223184
  sdtNodes.push({
223118
223185
  type: node3.type.name,
223186
+ node: node3,
223119
223187
  lockMode: node3.attrs.lockMode,
223120
223188
  pos,
223121
223189
  end: pos + node3.nodeSize
@@ -223171,6 +223239,15 @@ function isAtBlockSdtWrapperDeletePosition(state, sdt, pos) {
223171
223239
  return false;
223172
223240
  return $pos.before(textblockDepth) === $pos.start(sdtDepth);
223173
223241
  }
223242
+ function selectionCoversSdtContent(sdt, from$1, to) {
223243
+ if (from$1 === sdt.pos + 1 && to === sdt.end - 1)
223244
+ return true;
223245
+ if (sdt.type !== "structuredContentBlock")
223246
+ return false;
223247
+ const contentStart = findFirstContentCursorPosInNode(sdt.node, sdt.pos);
223248
+ const contentEnd = findLastContentCursorPosInNode(sdt.node, sdt.pos);
223249
+ return contentStart != null && contentEnd != null && from$1 === contentStart && to === contentEnd;
223250
+ }
223174
223251
  function createStructuredContentLockPlugin() {
223175
223252
  return new Plugin({
223176
223253
  key: STRUCTURED_CONTENT_LOCK_KEY,
@@ -223198,7 +223275,7 @@ function createStructuredContentLockPlugin() {
223198
223275
  if (sdtNodes.length === 0)
223199
223276
  return false;
223200
223277
  if (from$1 !== to && !(selection instanceof NodeSelection)) {
223201
- const exactContentSDT = sdtNodes.find((s2) => from$1 === s2.pos + 1 && to === s2.end - 1);
223278
+ const exactContentSDT = sdtNodes.find((s2) => selectionCoversSdtContent(s2, from$1, to));
223202
223279
  if (exactContentSDT) {
223203
223280
  const isContentLocked = exactContentSDT.lockMode === "contentLocked" || exactContentSDT.lockMode === "sdtContentLocked";
223204
223281
  const isWrapperDeletable = exactContentSDT.lockMode !== "sdtLocked" && exactContentSDT.lockMode !== "sdtContentLocked";
@@ -224331,80 +224408,70 @@ function shallowEqual$2(a2, b$1) {
224331
224408
  return false;
224332
224409
  return true;
224333
224410
  }
224334
- function isSdtContentFullyLocked(node3) {
224335
- return node3.attrs.lockMode === "sdtContentLocked";
224336
- }
224337
- function findAncestorDepth$2($pos, predicate) {
224411
+ function findAncestorDepth$3($pos, predicate) {
224338
224412
  for (let depth = $pos.depth;depth > 0; depth -= 1)
224339
224413
  if (predicate($pos.node(depth)))
224340
224414
  return depth;
224341
224415
  return null;
224342
224416
  }
224343
- function isZeroWidthMarker(node3) {
224344
- if (node3.type.name === "fieldAnnotation" && node3.attrs?.hidden === true)
224345
- return true;
224346
- return ZERO_WIDTH_MARKER_NODE_NAMES.has(node3.type.name);
224347
- }
224348
- function findFirstTextPosInNode(node3, nodePos) {
224349
- if (node3.isText)
224350
- return nodePos;
224351
- for (let index2 = 0, offset$1 = 0;index2 < node3.childCount; index2 += 1) {
224352
- const child = node3.child(index2);
224353
- const found2 = findFirstTextPosInNode(child, nodePos + 1 + offset$1);
224354
- if (found2 != null)
224355
- return found2;
224356
- offset$1 += child.nodeSize;
224417
+ function findSiblingAcrossHiddenMarkers$1(doc$12, pos, direction) {
224418
+ let currentPos = pos;
224419
+ let node3 = direction === "before" ? doc$12.resolve(currentPos).nodeBefore : doc$12.resolve(currentPos).nodeAfter;
224420
+ while (node3 && isZeroWidthMarker(node3)) {
224421
+ currentPos += direction === "before" ? -node3.nodeSize : node3.nodeSize;
224422
+ node3 = direction === "before" ? doc$12.resolve(currentPos).nodeBefore : doc$12.resolve(currentPos).nodeAfter;
224357
224423
  }
224358
- return null;
224424
+ return {
224425
+ node: node3,
224426
+ nodePos: direction === "before" && node3 ? currentPos - node3.nodeSize : currentPos
224427
+ };
224359
224428
  }
224360
- function findFirstContentCursorPosInNode(node3, nodePos) {
224361
- if (isZeroWidthMarker(node3))
224429
+ function isAtTextBlockBoundary($from, direction) {
224430
+ const textblockDepth = findAncestorDepth$3($from, (node3) => node3.isTextblock);
224431
+ if (textblockDepth == null)
224362
224432
  return null;
224363
- if (node3.isText || node3.isAtom)
224364
- return nodePos;
224365
- if (node3.isTextblock && node3.childCount === 0)
224366
- return nodePos + 1;
224367
- for (let index2 = 0, offset$1 = 0;index2 < node3.childCount; index2 += 1) {
224368
- const child = node3.child(index2);
224369
- const found2 = findFirstContentCursorPosInNode(child, nodePos + 1 + offset$1);
224370
- if (found2 != null)
224371
- return found2;
224372
- offset$1 += child.nodeSize;
224373
- }
224374
- if (node3.isTextblock)
224375
- return nodePos + 1;
224376
- return null;
224433
+ const textblock = $from.node(textblockDepth);
224434
+ const textblockPos = $from.before(textblockDepth);
224435
+ const boundary = direction === "before" ? findFirstContentCursorPosInNode(textblock, textblockPos) ?? $from.start(textblockDepth) : findLastContentCursorPosInNode(textblock, textblockPos) ?? $from.end(textblockDepth);
224436
+ if ($from.pos !== boundary)
224437
+ return null;
224438
+ return {
224439
+ textblockDepth,
224440
+ textblockPos
224441
+ };
224377
224442
  }
224378
- function findLastTextPosInNode(node3, nodePos) {
224379
- if (node3.isText)
224380
- return nodePos + (node3.text?.length ?? 0);
224381
- for (let index2 = node3.childCount - 1, offset$1 = node3.content.size;index2 >= 0; index2 -= 1) {
224382
- const child = node3.child(index2);
224383
- offset$1 -= child.nodeSize;
224384
- const found2 = findLastTextPosInNode(child, nodePos + 1 + offset$1);
224385
- if (found2 != null)
224386
- return found2;
224387
- }
224388
- return null;
224443
+ function selectAdjacentBlockSdtContent(direction) {
224444
+ return ({ state, dispatch }) => {
224445
+ const { selection } = state;
224446
+ if (!selection.empty)
224447
+ return false;
224448
+ const boundary = isAtTextBlockBoundary(selection.$from, direction);
224449
+ if (!boundary)
224450
+ return false;
224451
+ const siblingBoundaryPos = direction === "before" ? boundary.textblockPos : selection.$from.after(boundary.textblockDepth);
224452
+ const { node: node3, nodePos } = findSiblingAcrossHiddenMarkers$1(state.doc, siblingBoundaryPos, direction);
224453
+ if (node3?.type.name !== "structuredContentBlock")
224454
+ return false;
224455
+ if (node3.content.size === 0)
224456
+ return false;
224457
+ const contentStart = findFirstContentCursorPosInNode(node3, nodePos);
224458
+ const contentEnd = findLastContentCursorPosInNode(node3, nodePos);
224459
+ if (contentStart == null || contentEnd == null)
224460
+ return false;
224461
+ if (contentStart >= contentEnd)
224462
+ return false;
224463
+ if (dispatch)
224464
+ dispatch(state.tr.setSelection(TextSelection.create(state.doc, contentStart, contentEnd)).scrollIntoView());
224465
+ return true;
224466
+ };
224389
224467
  }
224390
- function findLastContentCursorPosInNode(node3, nodePos) {
224391
- if (isZeroWidthMarker(node3))
224392
- return null;
224393
- if (node3.isText)
224394
- return nodePos + (node3.text?.length ?? 0);
224395
- if (node3.isAtom)
224396
- return node3.isInline ? nodePos + node3.nodeSize : nodePos;
224397
- if (node3.isTextblock && node3.childCount === 0)
224398
- return nodePos + 1;
224399
- for (let index2 = node3.childCount - 1, offset$1 = node3.content.size;index2 >= 0; index2 -= 1) {
224400
- const child = node3.child(index2);
224401
- offset$1 -= child.nodeSize;
224402
- const found2 = findLastContentCursorPosInNode(child, nodePos + 1 + offset$1);
224403
- if (found2 != null)
224404
- return found2;
224405
- }
224406
- if (node3.isTextblock)
224407
- return nodePos + node3.nodeSize - 1;
224468
+ function isSdtContentFullyLocked(node3) {
224469
+ return node3.attrs.lockMode === "sdtContentLocked";
224470
+ }
224471
+ function findAncestorDepth$2($pos, predicate) {
224472
+ for (let depth = $pos.depth;depth > 0; depth -= 1)
224473
+ if (predicate($pos.node(depth)))
224474
+ return depth;
224408
224475
  return null;
224409
224476
  }
224410
224477
  function findAncestorDepth$1($pos, predicate) {
@@ -260368,7 +260435,7 @@ function getSdtSiblingBoundaries(containerKeys) {
260368
260435
  };
260369
260436
  });
260370
260437
  }
260371
- function applySdtContainerChrome(doc$12, container, sdt, containerSdt, boundaryOptions, options) {
260438
+ function applySdtContainerChrome(doc$12, container, sdt, containerSdt, boundaryOptions, options, chrome2) {
260372
260439
  if (!shouldRenderSdtContainerChrome(sdt, containerSdt, options))
260373
260440
  return false;
260374
260441
  const metadata = getSdtContainerMetadata(sdt, containerSdt);
@@ -260390,6 +260457,8 @@ function applySdtContainerChrome(doc$12, container, sdt, containerSdt, boundaryO
260390
260457
  container.style.setProperty("--sd-sdt-chrome-bottom-extension", `${boundaryOptions.paddingBottomOverride}px`);
260391
260458
  }
260392
260459
  if (boundaryOptions?.showLabel ?? isStart) {
260460
+ if (chrome2 === "none" && isStructuredContentMetadata(metadata))
260461
+ return true;
260393
260462
  const labelEl = doc$12.createElement("div");
260394
260463
  labelEl.className = config2.labelClassName;
260395
260464
  const labelText = doc$12.createElement("span");
@@ -260689,7 +260758,7 @@ function computeCellVisibleHeight(cell2, cellFrom, cellTo) {
260689
260758
  return cellVisHeight;
260690
260759
  }
260691
260760
  function renderPartialEmbeddedTable(params$1) {
260692
- const { doc: doc$12, block, blockMeasure: tableMeasure, cumulativeLineCount, globalFromLine, globalToLine, contentWidthPx, context, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, applySdtDataset: applySdtDataset$1, sdtBoundary, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome } = params$1;
260761
+ const { doc: doc$12, block, blockMeasure: tableMeasure, cumulativeLineCount, globalFromLine, globalToLine, contentWidthPx, context, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, applySdtDataset: applySdtDataset$1, chrome: chrome2, sdtBoundary, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome } = params$1;
260693
260762
  const rowSegmentCounts = tableMeasure.rows.map((row2) => getEmbeddedRowSegmentCount(row2));
260694
260763
  const totalTableSegments = rowSegmentCounts.reduce((s2, c) => s2 + c, 0);
260695
260764
  const tableStartSegment = cumulativeLineCount;
@@ -260775,6 +260844,7 @@ function renderPartialEmbeddedTable(params$1) {
260775
260844
  captureLineSnapshot,
260776
260845
  renderDrawingContent,
260777
260846
  applySdtDataset: applySdtDataset$1,
260847
+ chrome: chrome2,
260778
260848
  fromRow: embeddedFromRow,
260779
260849
  toRow: embeddedToRow,
260780
260850
  partialRow: partialRowInfo,
@@ -283213,7 +283283,7 @@ var Node$13 = class Node$14 {
283213
283283
  const transaction = view.state.tr.setSelection(selection);
283214
283284
  view.dispatch(transaction);
283215
283285
  }
283216
- }, StructuredContentInlineView, findChildren$12, SD_BLOCK_ID_ATTRIBUTE_NAME = "sdBlockId", SD_BLOCK_REV_ATTRIBUTE_NAME = "sdBlockRev", BLOCK_NODE_METADATA_UPDATE_META = "blockNodeMetadataUpdate", BlockNodePluginKey, BlockNode, nodeAllowsSdBlockIdAttr = (node3) => {
283286
+ }, StructuredContentInlineView, ZERO_WIDTH_MARKER_NODE_NAMES, findChildren$12, SD_BLOCK_ID_ATTRIBUTE_NAME = "sdBlockId", SD_BLOCK_REV_ATTRIBUTE_NAME = "sdBlockRev", BLOCK_NODE_METADATA_UPDATE_META = "blockNodeMetadataUpdate", BlockNodePluginKey, BlockNode, nodeAllowsSdBlockIdAttr = (node3) => {
283217
283287
  return !!(node3?.isBlock && node3?.type?.spec?.attrs?.[SD_BLOCK_ID_ATTRIBUTE_NAME]);
283218
283288
  }, nodeAllowsSdBlockRevAttr = (node3) => {
283219
283289
  return !!(node3?.isBlock && node3?.type?.spec?.attrs?.[SD_BLOCK_REV_ATTRIBUTE_NAME]);
@@ -284869,7 +284939,7 @@ var Node$13 = class Node$14 {
284869
284939
  dispatch(tr.scrollIntoView());
284870
284940
  }
284871
284941
  return true;
284872
- }, deleteBlockSdtAtTextBlockStart = () => ({ state, dispatch }) => {
284942
+ }, selectBlockSdtBeforeTextBlockStart = () => selectAdjacentBlockSdtContent("before"), selectBlockSdtAfterTextBlockEnd = () => selectAdjacentBlockSdtContent("after"), deleteBlockSdtAtTextBlockStart = () => ({ state, dispatch }) => {
284873
284943
  const { selection } = state;
284874
284944
  if (!selection.empty)
284875
284945
  return false;
@@ -284898,7 +284968,7 @@ var Node$13 = class Node$14 {
284898
284968
  dispatch(tr.setSelection(Selection.near(tr.doc.resolve(selectionPos), -1)).scrollIntoView());
284899
284969
  }
284900
284970
  return true;
284901
- }, ZERO_WIDTH_MARKER_NODE_NAMES, moveIntoBlockSdtBeforeTextBlockStart = () => moveIntoAdjacentBlockSdt("before"), moveIntoBlockSdtAfterTextBlockEnd = () => moveIntoAdjacentBlockSdt("after"), deleteSkipEmptyRun = () => ({ state, dispatch }) => {
284971
+ }, moveIntoBlockSdtBeforeTextBlockStart = () => moveIntoAdjacentBlockSdt("before"), moveIntoBlockSdtAfterTextBlockEnd = () => moveIntoAdjacentBlockSdt("after"), deleteSkipEmptyRun = () => ({ state, dispatch }) => {
284902
284972
  const sel = state.selection;
284903
284973
  if (!sel.empty)
284904
284974
  return false;
@@ -296265,6 +296335,7 @@ var Node$13 = class Node$14 {
296265
296335
  },
296266
296336
  () => commands$1.deleteBlockSdtAtTextBlockStart(),
296267
296337
  () => commands$1.selectInlineSdtBeforeRunStart(),
296338
+ () => commands$1.selectBlockSdtBeforeTextBlockStart(),
296268
296339
  () => commands$1.moveIntoBlockSdtBeforeTextBlockStart(),
296269
296340
  () => commands$1.backspaceEmptyRunParagraph(),
296270
296341
  () => commands$1.backspaceSkipEmptyRun(),
@@ -296283,6 +296354,7 @@ var Node$13 = class Node$14 {
296283
296354
  return editor.commands.first(({ commands: commands$1 }) => [
296284
296355
  () => commands$1.deleteBlockSdtAtTextBlockStart(),
296285
296356
  () => commands$1.selectInlineSdtAfterRunEnd(),
296357
+ () => commands$1.selectBlockSdtAfterTextBlockEnd(),
296286
296358
  () => commands$1.moveIntoBlockSdtAfterTextBlockEnd(),
296287
296359
  () => commands$1.deleteSkipEmptyRun(),
296288
296360
  () => commands$1.deleteAtomAfter(),
@@ -300298,6 +300370,35 @@ var Node$13 = class Node$14 {
300298
300370
  background-color: transparent;
300299
300371
  }
300300
300372
 
300373
+ /* Global content-control chrome opt-out: preserve SDT wrappers/datasets while
300374
+ * suppressing built-in visual chrome on structured-content controls. Their
300375
+ * label elements are not emitted by renderer/helpers when this class is
300376
+ * present (DOM non-emission), and these rules neutralize
300377
+ * border/padding/hover/selection visuals. documentSection chrome (e.g. the
300378
+ * locked-section tooltip) is intentionally preserved and not in scope. */
300379
+ .superdoc-cc-chrome-none .superdoc-structured-content-inline,
300380
+ .superdoc-cc-chrome-none .superdoc-structured-content-block {
300381
+ border: none;
300382
+ padding: 0;
300383
+ border-radius: 0;
300384
+ background: none;
300385
+ }
300386
+
300387
+ .superdoc-cc-chrome-none .superdoc-structured-content-inline:hover,
300388
+ .superdoc-cc-chrome-none .superdoc-structured-content-block:hover,
300389
+ .superdoc-cc-chrome-none .superdoc-structured-content-block.sdt-group-hover,
300390
+ .superdoc-cc-chrome-none .superdoc-structured-content-block[data-lock-mode].sdt-group-hover,
300391
+ .superdoc-cc-chrome-none .superdoc-structured-content-inline[data-lock-mode]:hover {
300392
+ border: none;
300393
+ background: none;
300394
+ }
300395
+
300396
+ .superdoc-cc-chrome-none .superdoc-structured-content-inline.ProseMirror-selectednode,
300397
+ .superdoc-cc-chrome-none .superdoc-structured-content-block.ProseMirror-selectednode {
300398
+ border-color: transparent;
300399
+ background: none;
300400
+ }
300401
+
300301
300402
  /* Hover highlight for SDT containers.
300302
300403
  * Hover adds background highlight and z-index boost.
300303
300404
  * Block SDTs use .sdt-group-hover class (event delegation for multi-fragment coordination).
@@ -300323,6 +300424,35 @@ var Node$13 = class Node$14 {
300323
300424
  background-color: var(--sd-content-controls-lock-hover-bg, rgba(98, 155, 231, 0.08));
300324
300425
  }
300325
300426
 
300427
+ /* Chrome opt-out for block SDTs. Main paints block chrome through ::before
300428
+ * (background) and ::after (border) pseudo-elements, which the element-level
300429
+ * .superdoc-cc-chrome-none rules above cannot reach. Suppress the pseudo
300430
+ * chrome directly, including the selected-node border and the lock-hover
300431
+ * ::before background. Declared after every chrome-showing pseudo rule so
300432
+ * source order resolves equal-specificity ties, the same way the
300433
+ * viewing-mode rules below do. */
300434
+ .superdoc-cc-chrome-none .superdoc-structured-content-block::before,
300435
+ .superdoc-cc-chrome-none .superdoc-structured-content-block:hover::before,
300436
+ .superdoc-cc-chrome-none .superdoc-structured-content-block.sdt-group-hover::before,
300437
+ .superdoc-cc-chrome-none .superdoc-structured-content-block[data-lock-mode].sdt-group-hover::before {
300438
+ background: none;
300439
+ }
300440
+
300441
+ .superdoc-cc-chrome-none .superdoc-structured-content-block::after,
300442
+ .superdoc-cc-chrome-none .superdoc-structured-content-block:hover::after,
300443
+ .superdoc-cc-chrome-none .superdoc-structured-content-block.sdt-group-hover::after,
300444
+ .superdoc-cc-chrome-none .superdoc-structured-content-block.ProseMirror-selectednode::after {
300445
+ border: none;
300446
+ }
300447
+
300448
+ /* Reset the lock-hover z-index boost so a suppressed SDT does not stack
300449
+ * above host-attached custom UI. Mirrors the base lock-hover selectors with
300450
+ * the chrome-none prefix so specificity stays above the boost rule. */
300451
+ .superdoc-cc-chrome-none .superdoc-structured-content-block[data-lock-mode].sdt-group-hover:not(.ProseMirror-selectednode),
300452
+ .superdoc-cc-chrome-none .superdoc-structured-content-inline[data-lock-mode]:hover:not(.ProseMirror-selectednode, [data-appearance='hidden']) {
300453
+ z-index: auto;
300454
+ }
300455
+
300326
300456
  /* Viewing mode: remove structured content affordances */
300327
300457
  .presentation-editor--viewing .superdoc-structured-content-block,
300328
300458
  .presentation-editor--viewing .superdoc-structured-content-inline {
@@ -301854,7 +301984,7 @@ menclose::after {
301854
301984
  if (element3.style.textIndent)
301855
301985
  element3.style.removeProperty("text-indent");
301856
301986
  }, INLINE_SDT_CHROME_EXTRA_WIDTH_PX = 4, renderParagraphContent = (params$1) => {
301857
- const { doc: doc$12, frameEl, block, measure, linesOverride, width, localStartLine, localEndLine, lineIndexOffset = 0, continuesFromPrev, continuesOnNext, resolvedContent, betweenInfo, sdtBoundary, spacingPolicy, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome, applySdtDataset: applySdtDataset$1, applyContainerSdtDataset: applyContainerSdtDataset$1, renderDropCap: renderDropCap$1, lineTopOffset = 0 } = params$1;
301987
+ const { doc: doc$12, frameEl, block, measure, linesOverride, width, localStartLine, localEndLine, lineIndexOffset = 0, continuesFromPrev, continuesOnNext, resolvedContent, betweenInfo, sdtBoundary, spacingPolicy, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome, applySdtDataset: applySdtDataset$1, applyContainerSdtDataset: applyContainerSdtDataset$1, contentControlsChrome, renderDropCap: renderDropCap$1, lineTopOffset = 0 } = params$1;
301858
301988
  applyParagraphBlockStyles(frameEl, block.attrs);
301859
301989
  const { shadingLayer, borderLayer } = createParagraphDecorationLayers(doc$12, width, block.attrs, betweenInfo);
301860
301990
  if (shadingLayer)
@@ -301875,7 +302005,7 @@ menclose::after {
301875
302005
  ancestorContainerSdts
301876
302006
  });
301877
302007
  if (applySdtChrome) {
301878
- if (applySdtContainerChrome(doc$12, frameEl, block.attrs?.sdt, block.attrs?.containerSdt, sdtBoundary))
302008
+ if (applySdtContainerChrome(doc$12, frameEl, block.attrs?.sdt, block.attrs?.containerSdt, sdtBoundary, undefined, contentControlsChrome))
301879
302009
  onSdtContainerChrome?.();
301880
302010
  }
301881
302011
  renderParagraphDropCap({
@@ -302274,7 +302404,7 @@ menclose::after {
302274
302404
  el.style[key2] = String(value);
302275
302405
  });
302276
302406
  }, renderEmbeddedTable = (params$1) => {
302277
- const { doc: doc$12, table: table2, measure, availableWidth, context, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, applySdtDataset: applySdtDataset$1, fromRow: paramFromRow, toRow: paramToRow, partialRow: paramPartialRow, sdtBoundary, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome } = params$1;
302407
+ const { doc: doc$12, table: table2, measure, availableWidth, context, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, applySdtDataset: applySdtDataset$1, chrome: chrome2, fromRow: paramFromRow, toRow: paramToRow, partialRow: paramPartialRow, sdtBoundary, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome } = params$1;
302278
302408
  const effectiveFromRow = paramFromRow ?? 0;
302279
302409
  const effectiveToRow = paramToRow ?? table2.rows.length;
302280
302410
  const visibleHeight = computeVisibleHeight(measure.rows, effectiveFromRow, effectiveToRow, paramPartialRow);
@@ -302315,6 +302445,7 @@ menclose::after {
302315
302445
  renderDrawingContent,
302316
302446
  applyFragmentFrame,
302317
302447
  applySdtDataset: applySdtDataset$1,
302448
+ chrome: chrome2,
302318
302449
  applyStyles: applyInlineStyles,
302319
302450
  sdtBoundary,
302320
302451
  ancestorContainerKey,
@@ -302329,7 +302460,7 @@ menclose::after {
302329
302460
  hasSdtContainerChrome
302330
302461
  };
302331
302462
  }, renderTableCell = (deps) => {
302332
- const { doc: doc$12, x, y: y$1, rowHeight, cellMeasure, cell: cell2, borders, useDefaultBorder, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, context, applySdtDataset: applySdtDataset$1, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome, tableIndent, isRtl, cellWidth, fromLine, toLine } = deps;
302463
+ const { doc: doc$12, x, y: y$1, rowHeight, cellMeasure, cell: cell2, borders, useDefaultBorder, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, context, applySdtDataset: applySdtDataset$1, chrome: chrome2, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome, tableIndent, isRtl, cellWidth, fromLine, toLine } = deps;
302333
302464
  const padding = cell2?.attrs?.padding || {
302334
302465
  top: 0,
302335
302466
  left: 4,
@@ -302416,6 +302547,7 @@ menclose::after {
302416
302547
  captureLineSnapshot,
302417
302548
  renderDrawingContent,
302418
302549
  applySdtDataset: applySdtDataset$1,
302550
+ chrome: chrome2,
302419
302551
  sdtBoundary: sdtBoundaries[i4],
302420
302552
  ancestorContainerKey,
302421
302553
  ancestorContainerSdt,
@@ -302578,6 +302710,7 @@ menclose::after {
302578
302710
  cellEl.style.overflow = "visible";
302579
302711
  onSdtContainerChrome?.();
302580
302712
  },
302713
+ contentControlsChrome: chrome2,
302581
302714
  applySdtDataset: applySdtDataset$1,
302582
302715
  renderLine: ({ block: block$1, line, lineIndex, isLastLine, resolvedListTextStartPx }) => renderLine$1(block$1, line, {
302583
302716
  ...context,
@@ -302755,7 +302888,7 @@ menclose::after {
302755
302888
  left: baseBorders.left
302756
302889
  };
302757
302890
  }, renderTableRow = (deps) => {
302758
- const { doc: doc$12, container, rowIndex, y: y$1, rowMeasure, row: row2, totalRows, tableBorders, columnWidths, allRowHeights, tableIndent, isRtl, context, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, applySdtDataset: applySdtDataset$1, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome, continuesFromPrev, continuesOnNext, partialRow, cellSpacingPx = 0 } = deps;
302891
+ const { doc: doc$12, container, rowIndex, y: y$1, rowMeasure, row: row2, totalRows, tableBorders, columnWidths, allRowHeights, tableIndent, isRtl, context, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, applySdtDataset: applySdtDataset$1, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome, continuesFromPrev, continuesOnNext, partialRow, cellSpacingPx = 0, chrome: chrome2 } = deps;
302759
302892
  const totalCols = columnWidths.length;
302760
302893
  const calculateXPosition = (gridColumnStart) => {
302761
302894
  let x = cellSpacingPx;
@@ -302841,12 +302974,13 @@ menclose::after {
302841
302974
  toLine,
302842
302975
  tableIndent,
302843
302976
  isRtl,
302844
- cellWidth: computedCellWidth > 0 ? computedCellWidth : undefined
302977
+ cellWidth: computedCellWidth > 0 ? computedCellWidth : undefined,
302978
+ chrome: chrome2
302845
302979
  });
302846
302980
  container.appendChild(cellElement);
302847
302981
  }
302848
302982
  }, renderTableFragment = (deps) => {
302849
- const { doc: doc$12, fragment: fragment2, block, measure, cellSpacingPx, effectiveColumnWidths, context, sdtBoundary, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, applyFragmentFrame, applySdtDataset: applySdtDataset$1, applyContainerSdtDataset: applyContainerSdtDataset$1, applyStyles: applyStyles$3 } = deps;
302983
+ const { doc: doc$12, fragment: fragment2, block, measure, cellSpacingPx, effectiveColumnWidths, chrome: chrome2, context, sdtBoundary, ancestorContainerKey, ancestorContainerSdt, ancestorContainerKeys, ancestorContainerSdts, onSdtContainerChrome, renderLine: renderLine$1, captureLineSnapshot, renderDrawingContent, applyFragmentFrame, applySdtDataset: applySdtDataset$1, applyContainerSdtDataset: applyContainerSdtDataset$1, applyStyles: applyStyles$3 } = deps;
302850
302984
  if (!doc$12) {
302851
302985
  console.error("DomPainter: document is not available");
302852
302986
  if (typeof document !== "undefined") {
@@ -302884,7 +303018,7 @@ menclose::after {
302884
303018
  ancestorContainerSdt,
302885
303019
  ancestorContainerKeys,
302886
303020
  ancestorContainerSdts
302887
- }))
303021
+ }, chrome2))
302888
303022
  onSdtContainerChrome?.();
302889
303023
  const tableContainerSdt = getSdtContainerMetadata(block.attrs?.sdt, block.attrs?.containerSdt);
302890
303024
  const tableContainerKey = getSdtContainerKey(block.attrs?.sdt, block.attrs?.containerSdt);
@@ -303025,6 +303159,7 @@ menclose::after {
303025
303159
  ancestorContainerKeys: nextAncestorContainerKeys,
303026
303160
  ancestorContainerSdts: nextAncestorContainerSdts,
303027
303161
  onSdtContainerChrome,
303162
+ chrome: chrome2,
303028
303163
  continuesFromPrev: false,
303029
303164
  continuesOnNext: false,
303030
303165
  cellSpacingPx
@@ -303141,6 +303276,7 @@ menclose::after {
303141
303276
  ancestorContainerKeys: nextAncestorContainerKeys,
303142
303277
  ancestorContainerSdts: nextAncestorContainerSdts,
303143
303278
  onSdtContainerChrome,
303279
+ chrome: chrome2,
303144
303280
  continuesFromPrev: isFirstRenderedBodyRow && fragment2.continuesFromPrev === true,
303145
303281
  continuesOnNext: isLastRenderedBodyRow && fragment2.continuesOnNext === true,
303146
303282
  partialRow: partialRowData,
@@ -303281,6 +303417,8 @@ menclose::after {
303281
303417
  wrapper.dataset.appearance = "hidden";
303282
303418
  return wrapper;
303283
303419
  }
303420
+ if (context.contentControlsChrome === "none")
303421
+ return wrapper;
303284
303422
  const alias = sdt?.alias || "Inline content";
303285
303423
  const labelEl = context.doc.createElement("span");
303286
303424
  labelEl.className = DOM_CLASS_NAMES.INLINE_SDT_LABEL;
@@ -303360,7 +303498,7 @@ menclose::after {
303360
303498
  else
303361
303499
  delete el.dataset.continuesOnNext;
303362
303500
  }, isMinimalWordLayout$2 = (value) => isMinimalWordLayout(value), renderParagraphFragment = (params$1) => {
303363
- const { doc: doc$12, fragment: fragment2, sdtBoundary, betweenInfo, resolvedItem, applyStyles: applyStyles$3, applyResolvedFragmentFrame, applyFragmentFrame, applySdtDataset: applySdtDataset$1, applyContainerSdtDataset: applyContainerSdtDataset$1, renderLine: renderLine$1, captureLineSnapshot, createErrorPlaceholder } = params$1;
303501
+ const { doc: doc$12, fragment: fragment2, sdtBoundary, betweenInfo, resolvedItem, applyStyles: applyStyles$3, applyResolvedFragmentFrame, applyFragmentFrame, applySdtDataset: applySdtDataset$1, applyContainerSdtDataset: applyContainerSdtDataset$1, renderLine: renderLine$1, captureLineSnapshot, createErrorPlaceholder, contentControlsChrome } = params$1;
303364
303502
  try {
303365
303503
  if (!doc$12)
303366
303504
  throw new Error("DomPainter: document is not available");
@@ -303427,7 +303565,8 @@ menclose::after {
303427
303565
  wrapperEl: fragmentEl
303428
303566
  });
303429
303567
  },
303430
- sourceAnchor: resolvedItem?.sourceAnchor
303568
+ sourceAnchor: resolvedItem?.sourceAnchor,
303569
+ contentControlsChrome
303431
303570
  });
303432
303571
  return fragmentEl;
303433
303572
  } catch (error3) {
@@ -305073,12 +305212,14 @@ menclose::after {
305073
305212
  this.mountedPageIndices = [];
305074
305213
  this.resolvedLayout = null;
305075
305214
  this.showFormattingMarks = false;
305215
+ this.contentControlsChrome = "default";
305076
305216
  this.options = options;
305077
305217
  this.layoutMode = options.layoutMode ?? "vertical";
305078
305218
  this.isSemanticFlow = (options.flowMode ?? "paginated") === "semantic";
305079
305219
  this.headerProvider = options.headerProvider;
305080
305220
  this.footerProvider = options.footerProvider;
305081
305221
  this.showFormattingMarks = options.showFormattingMarks === true;
305222
+ this.contentControlsChrome = options.contentControlsChrome ?? "default";
305082
305223
  const defaultGap = this.layoutMode === "horizontal" ? 20 : 24;
305083
305224
  this.pageGap = typeof options.pageGap === "number" && Number.isFinite(options.pageGap) ? Math.max(0, options.pageGap) : defaultGap;
305084
305225
  if (!this.isSemanticFlow && this.layoutMode === "vertical" && options.virtualization?.enabled) {
@@ -305109,6 +305250,7 @@ menclose::after {
305109
305250
  }
305110
305251
  applyFormattingMarksClass(mount = this.mount) {
305111
305252
  mount?.classList.toggle("superdoc-show-formatting-marks", this.showFormattingMarks);
305253
+ mount?.classList.toggle("superdoc-cc-chrome-none", this.contentControlsChrome === "none");
305112
305254
  }
305113
305255
  invalidateRenderedContent() {
305114
305256
  this.pageStates = [];
@@ -306239,6 +306381,7 @@ menclose::after {
306239
306381
  sourceAnchor: options?.sourceAnchor
306240
306382
  });
306241
306383
  },
306384
+ contentControlsChrome: this.contentControlsChrome,
306242
306385
  createErrorPlaceholder: this.createErrorPlaceholder.bind(this)
306243
306386
  });
306244
306387
  }
@@ -306973,6 +307116,7 @@ menclose::after {
306973
307116
  measure: tableRenderData.measure,
306974
307117
  cellSpacingPx: tableRenderData.cellSpacingPx,
306975
307118
  effectiveColumnWidths: tableRenderData.effectiveColumnWidths,
307119
+ chrome: this.contentControlsChrome,
306976
307120
  sdtBoundary,
306977
307121
  renderLine: renderLineForTableCell,
306978
307122
  captureLineSnapshot: (lineEl, lineContext, options) => {
@@ -307026,6 +307170,7 @@ menclose::after {
307026
307170
  doc: this.doc,
307027
307171
  layoutEpoch: this.layoutEpoch,
307028
307172
  showFormattingMarks: this.showFormattingMarks,
307173
+ contentControlsChrome: this.contentControlsChrome,
307029
307174
  pendingTooltips: this.pendingTooltips,
307030
307175
  getNextLinkId: () => `superdoc-link-${++this.linkIdCounter}`,
307031
307176
  applySdtDataset,
@@ -318798,7 +318943,7 @@ menclose::after {
318798
318943
  return;
318799
318944
  console.log(...args$1);
318800
318945
  }, HEADER_FOOTER_INIT_BUDGET_MS = 200, MAX_ZOOM_WARNING_THRESHOLD = 10, MAX_SELECTION_RECTS_PER_USER = 100, SEMANTIC_RESIZE_DEBOUNCE_MS = 120, MIN_SEMANTIC_CONTENT_WIDTH_PX = 1, GLOBAL_PERFORMANCE, PresentationEditor, ICONS, TEXTS, tableActionsOptions, TRACKED_MARK_NAMES;
318801
- var init_src_D6vKCaok_es = __esm(() => {
318946
+ var init_src_D1Zc7Jgj_es = __esm(() => {
318802
318947
  init_rolldown_runtime_Bg48TavK_es();
318803
318948
  init_SuperConverter_C6hKp29w_es();
318804
318949
  init_jszip_C49i9kUs_es();
@@ -320556,6 +320701,22 @@ ${err.toString()}`);
320556
320701
  return true;
320557
320702
  }
320558
320703
  };
320704
+ ZERO_WIDTH_MARKER_NODE_NAMES = new Set([
320705
+ "bookmarkStart",
320706
+ "bookmarkEnd",
320707
+ "commentRangeStart",
320708
+ "commentRangeEnd",
320709
+ "commentReference",
320710
+ "permStart",
320711
+ "permEnd",
320712
+ "permStartBlock",
320713
+ "permEndBlock",
320714
+ "tableOfContentsEntry",
320715
+ "indexEntry",
320716
+ "authorityEntry",
320717
+ "passthroughInline",
320718
+ "passthroughBlock"
320719
+ ]);
320559
320720
  ({ findChildren: findChildren$12 } = helpers_exports);
320560
320721
  BlockNodePluginKey = new PluginKey("blockNodePlugin");
320561
320722
  BlockNode = Extension.create({
@@ -321824,22 +321985,6 @@ ${err.toString()}`);
321824
321985
  macBaseKeymap[key2] = pcBaseKeymap[key2];
321825
321986
  typeof navigator != "undefined" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : typeof os != "undefined" && os.platform && os.platform();
321826
321987
  DELETABLE_INLINE_ATOMS$1 = new Set(["noBreakHyphen"]);
321827
- ZERO_WIDTH_MARKER_NODE_NAMES = new Set([
321828
- "bookmarkStart",
321829
- "bookmarkEnd",
321830
- "commentRangeStart",
321831
- "commentRangeEnd",
321832
- "commentReference",
321833
- "permStart",
321834
- "permEnd",
321835
- "permStartBlock",
321836
- "permEndBlock",
321837
- "tableOfContentsEntry",
321838
- "indexEntry",
321839
- "authorityEntry",
321840
- "passthroughInline",
321841
- "passthroughBlock"
321842
- ]);
321843
321988
  DELETABLE_INLINE_ATOMS = new Set(["noBreakHyphen"]);
321844
321989
  commands_exports = /* @__PURE__ */ __export3({
321845
321990
  SELECT_INLINE_SDT_BEFORE_RUN_START_META: () => SELECT_INLINE_SDT_BEFORE_RUN_START_META,
@@ -321890,6 +322035,8 @@ ${err.toString()}`);
321890
322035
  resetAttributes: () => resetAttributes,
321891
322036
  restoreSelection: () => restoreSelection,
321892
322037
  selectAll: () => selectAll$1,
322038
+ selectBlockSdtAfterTextBlockEnd: () => selectBlockSdtAfterTextBlockEnd,
322039
+ selectBlockSdtBeforeTextBlockStart: () => selectBlockSdtBeforeTextBlockStart,
321893
322040
  selectInlineSdtAfterRunEnd: () => selectInlineSdtAfterRunEnd,
321894
322041
  selectInlineSdtBeforeRunStart: () => selectInlineSdtBeforeRunStart,
321895
322042
  selectNodeBackward: () => selectNodeBackward$1,
@@ -346931,7 +347078,8 @@ function print() { __p += __j.call(arguments, '') }
346931
347078
  enableCommentsInViewing: options.layoutEngineOptions?.enableCommentsInViewing,
346932
347079
  presence: validatedPresence,
346933
347080
  showBookmarks: options.layoutEngineOptions?.showBookmarks ?? false,
346934
- showFormattingMarks: options.layoutEngineOptions?.showFormattingMarks ?? false
347081
+ showFormattingMarks: options.layoutEngineOptions?.showFormattingMarks ?? false,
347082
+ contentControlsChrome: options.layoutEngineOptions?.contentControlsChrome
346935
347083
  };
346936
347084
  this.#trackedChangesOverrides = options.layoutEngineOptions?.trackedChanges;
346937
347085
  this.#viewportHost = doc$12.createElement("div");
@@ -350382,7 +350530,8 @@ function print() { __p += __j.call(arguments, '') }
350382
350530
  footerProvider: this.#headerFooterSession?.footerDecorationProvider,
350383
350531
  ruler: this.#layoutOptions.ruler,
350384
350532
  pageGap: this.#layoutState.layout?.pageGap ?? effectiveGap,
350385
- showFormattingMarks: this.#layoutOptions.showFormattingMarks ?? false
350533
+ showFormattingMarks: this.#layoutOptions.showFormattingMarks ?? false,
350534
+ contentControlsChrome: this.#layoutOptions.contentControlsChrome ?? "default"
350386
350535
  });
350387
350536
  const currentZoom = this.#layoutOptions.zoom ?? 1;
350388
350537
  if (currentZoom !== 1)
@@ -353049,7 +353198,7 @@ var init_zipper_yaJVJ4z9_es = __esm(() => {
353049
353198
 
353050
353199
  // ../../packages/superdoc/dist/super-editor.es.js
353051
353200
  var init_super_editor_es = __esm(() => {
353052
- init_src_D6vKCaok_es();
353201
+ init_src_D1Zc7Jgj_es();
353053
353202
  init_SuperConverter_C6hKp29w_es();
353054
353203
  init_jszip_C49i9kUs_es();
353055
353204
  init_xml_js_CqGKpaft_es();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superdoc-dev/cli",
3
- "version": "0.15.0-next.4",
3
+ "version": "0.15.0-next.6",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "superdoc": "./dist/index.js"
@@ -25,8 +25,8 @@
25
25
  "@types/ws": "^8.5.13",
26
26
  "typescript": "^5.9.2",
27
27
  "@superdoc/document-api": "0.0.1",
28
- "@superdoc/pm-adapter": "0.0.0",
29
28
  "@superdoc/super-editor": "0.0.1",
29
+ "@superdoc/pm-adapter": "0.0.0",
30
30
  "superdoc": "1.37.0"
31
31
  },
32
32
  "module": "src/index.ts",
@@ -34,11 +34,11 @@
34
34
  "access": "public"
35
35
  },
36
36
  "optionalDependencies": {
37
- "@superdoc-dev/cli-darwin-arm64": "0.15.0-next.4",
38
- "@superdoc-dev/cli-darwin-x64": "0.15.0-next.4",
39
- "@superdoc-dev/cli-linux-x64": "0.15.0-next.4",
40
- "@superdoc-dev/cli-windows-x64": "0.15.0-next.4",
41
- "@superdoc-dev/cli-linux-arm64": "0.15.0-next.4"
37
+ "@superdoc-dev/cli-darwin-arm64": "0.15.0-next.6",
38
+ "@superdoc-dev/cli-darwin-x64": "0.15.0-next.6",
39
+ "@superdoc-dev/cli-linux-x64": "0.15.0-next.6",
40
+ "@superdoc-dev/cli-linux-arm64": "0.15.0-next.6",
41
+ "@superdoc-dev/cli-windows-x64": "0.15.0-next.6"
42
42
  },
43
43
  "scripts": {
44
44
  "predev": "node scripts/ensure-superdoc-build.js",