@harbour-enterprises/superdoc 0.28.0-next.6 → 0.28.0-next.8

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.
@@ -56186,38 +56186,93 @@ Please report this to https://github.com/markedjs/marked.`, e) {
56186
56186
  if (dispatch) dispatch(tr);
56187
56187
  return true;
56188
56188
  };
56189
- const decreaseListIndent = () => ({ editor, tr }) => {
56189
+ const LIST_NODE_NAMES = /* @__PURE__ */ new Set(["orderedList", "bulletList"]);
56190
+ const parseLevel = (value) => {
56191
+ if (typeof value === "number") return value;
56192
+ const parsed = parseInt(value, 10);
56193
+ return Number.isNaN(parsed) ? 0 : parsed;
56194
+ };
56195
+ const resolveParentList = ($pos) => {
56196
+ if (!$pos) return null;
56197
+ for (let depth = $pos.depth; depth >= 0; depth--) {
56198
+ const node2 = $pos.node(depth);
56199
+ if (node2?.type && LIST_NODE_NAMES.has(node2.type.name)) {
56200
+ return node2;
56201
+ }
56202
+ }
56203
+ return null;
56204
+ };
56205
+ const collectTargetListItemPositions = (state2, fallbackPos) => {
56206
+ const doc2 = state2?.doc;
56207
+ const listItemType = state2?.schema?.nodes?.listItem;
56208
+ if (!doc2 || !listItemType) {
56209
+ return typeof fallbackPos === "number" ? [fallbackPos] : [];
56210
+ }
56211
+ const candidates = [];
56212
+ const { from: from2, to } = state2.selection;
56213
+ doc2.nodesBetween(from2, to, (node2, pos) => {
56214
+ if (node2.type === listItemType) {
56215
+ const size2 = typeof node2.nodeSize === "number" ? node2.nodeSize : 0;
56216
+ candidates.push({ node: node2, pos, end: pos + size2 });
56217
+ }
56218
+ });
56219
+ if (!candidates.length && typeof fallbackPos === "number") {
56220
+ return [fallbackPos];
56221
+ }
56222
+ const filtered = candidates.filter(({ pos, end: end2 }) => {
56223
+ return !candidates.some((other) => other.pos > pos && other.pos < end2);
56224
+ });
56225
+ const sorted = filtered.map(({ pos }) => pos).sort((a2, b2) => a2 - b2);
56226
+ return sorted.filter((pos, index2) => index2 === 0 || pos !== sorted[index2 - 1]);
56227
+ };
56228
+ const decreaseListIndent = (_targetPositions) => ({ editor, tr }) => {
56190
56229
  const { state: state2 } = editor;
56191
56230
  const currentItem = ListHelpers.getCurrentListItem && ListHelpers.getCurrentListItem(state2) || findParentNode((n) => n.type && n.type.name === "listItem")(state2.selection);
56192
- if (!currentItem) return false;
56193
- const parentOrdered = ListHelpers.getParentOrderedList && ListHelpers.getParentOrderedList(state2);
56194
- const parentBullet = ListHelpers.getParentBulletList && ListHelpers.getParentBulletList(state2);
56195
- const parentList = parentOrdered || parentBullet || findParentNode((n) => n.type && (n.type.name === "orderedList" || n.type.name === "bulletList"))(state2.selection);
56196
- if (!parentList) return false;
56197
- const attrs = currentItem.node.attrs || {};
56198
- const currLevel = typeof attrs.level === "number" ? attrs.level : 0;
56199
- if (currLevel <= 0) return true;
56200
- const newLevel = currLevel - 1;
56201
- const parentNumId = parentList.node?.attrs?.listId ?? null;
56202
- let numId = parentNumId ?? attrs.numId ?? null;
56203
- let createdNewId = false;
56204
- if (numId == null && ListHelpers.getNewListId) {
56205
- numId = ListHelpers.getNewListId(editor);
56206
- createdNewId = true;
56207
- }
56208
- if (createdNewId && numId != null && ListHelpers.generateNewListDefinition) {
56209
- ListHelpers.generateNewListDefinition({
56210
- numId,
56211
- listType: parentList.node.type,
56212
- editor
56231
+ const parentOrderedHelper = ListHelpers.getParentOrderedList && ListHelpers.getParentOrderedList(state2);
56232
+ const parentBulletHelper = ListHelpers.getParentBulletList && ListHelpers.getParentBulletList(state2);
56233
+ const targetPositions = _targetPositions || collectTargetListItemPositions(state2, currentItem?.pos);
56234
+ if (!targetPositions.length) return false;
56235
+ let parentListsMap = {};
56236
+ const mappedNodes = targetPositions.map((originalPos) => {
56237
+ const mappedPos = tr.mapping ? tr.mapping.map(originalPos) : originalPos;
56238
+ const node2 = tr.doc && tr.doc.nodeAt(mappedPos) || (currentItem && originalPos === currentItem.pos ? currentItem.node : null);
56239
+ return { originalPos, mappedPos, node: node2 };
56240
+ });
56241
+ const validNodes = mappedNodes.filter(({ node: node2 }) => node2 && node2.type.name === "listItem");
56242
+ validNodes.forEach(({ mappedPos, node: node2 }) => {
56243
+ const attrs = node2.attrs || {};
56244
+ const currLevel = parseLevel(attrs.level);
56245
+ if (currLevel <= 0) {
56246
+ return;
56247
+ }
56248
+ const newLevel = currLevel - 1;
56249
+ const $pos = tr.doc ? tr.doc.resolve(mappedPos) : null;
56250
+ const parentListNode = resolveParentList($pos) || parentOrderedHelper?.node || parentBulletHelper?.node || parentOrderedHelper || parentBulletHelper;
56251
+ parentListsMap[mappedPos] = parentListNode;
56252
+ if (!parentListNode) {
56253
+ return;
56254
+ }
56255
+ const fallbackListId = parentListNode.attrs?.listId ?? null;
56256
+ let numId = fallbackListId ?? attrs.numId ?? null;
56257
+ let createdNewId = false;
56258
+ if (numId == null && ListHelpers.getNewListId) {
56259
+ numId = ListHelpers.getNewListId(editor);
56260
+ createdNewId = numId != null;
56261
+ }
56262
+ if (createdNewId && numId != null && ListHelpers.generateNewListDefinition) {
56263
+ ListHelpers.generateNewListDefinition({
56264
+ numId,
56265
+ listType: parentListNode.type,
56266
+ editor
56267
+ });
56268
+ }
56269
+ tr.setNodeMarkup(mappedPos, null, {
56270
+ ...attrs,
56271
+ level: newLevel,
56272
+ numId
56213
56273
  });
56214
- }
56215
- tr.setNodeMarkup(currentItem.pos, null, {
56216
- ...attrs,
56217
- level: newLevel,
56218
- numId
56219
56274
  });
56220
- return true;
56275
+ return Object.values(parentListsMap).length ? !Object.values(parentListsMap).every((pos) => !pos) : true;
56221
56276
  };
56222
56277
  function isVisuallyEmptyParagraph(node2) {
56223
56278
  if (!node2 || node2.type.name !== "paragraph") return false;
@@ -56459,30 +56514,49 @@ Please report this to https://github.com/markedjs/marked.`, e) {
56459
56514
  tr.setSelection(TextSelection$1.near($pos));
56460
56515
  return true;
56461
56516
  };
56462
- const increaseListIndent = () => ({ editor, tr }) => {
56517
+ const increaseListIndent = (_targetPositions) => ({ editor, tr }) => {
56463
56518
  const { state: state2 } = editor;
56464
56519
  const currentItem = ListHelpers.getCurrentListItem && ListHelpers.getCurrentListItem(state2) || findParentNode((n) => n.type && n.type.name === "listItem")(state2.selection);
56465
- if (!currentItem) return false;
56466
- const parentOrdered = ListHelpers.getParentOrderedList && ListHelpers.getParentOrderedList(state2);
56467
- const parentBullet = ListHelpers.getParentBulletList && ListHelpers.getParentBulletList(state2);
56468
- const parentList = parentOrdered || parentBullet || findParentNode((n) => n.type && (n.type.name === "orderedList" || n.type.name === "bulletList"))(state2.selection);
56469
- if (!parentList) return false;
56470
- const currAttrs = currentItem.node.attrs || {};
56471
- const newLevel = (typeof currAttrs.level === "number" ? currAttrs.level : 0) + 1;
56472
- let numId = currAttrs.numId;
56473
- if (numId == null) {
56474
- numId = parentList.node?.attrs?.listId ?? ListHelpers.getNewListId(editor);
56475
- if (ListHelpers.generateNewListDefinition) {
56476
- const listType = parentList.node.type === editor.schema.nodes.orderedList ? editor.schema.nodes.orderedList : editor.schema.nodes.bulletList;
56477
- ListHelpers.generateNewListDefinition({ numId, listType, editor });
56520
+ const parentOrderedHelper = ListHelpers.getParentOrderedList && ListHelpers.getParentOrderedList(state2);
56521
+ const parentBulletHelper = ListHelpers.getParentBulletList && ListHelpers.getParentBulletList(state2);
56522
+ const targetPositions = _targetPositions || collectTargetListItemPositions(state2, currentItem?.pos);
56523
+ if (!targetPositions.length) return false;
56524
+ let parentListsMap = {};
56525
+ const mappedNodes = targetPositions.map((originalPos) => {
56526
+ const mappedPos = tr.mapping ? tr.mapping.map(originalPos) : originalPos;
56527
+ const node2 = tr.doc && tr.doc.nodeAt(mappedPos) || (currentItem && originalPos === currentItem.pos ? currentItem.node : null);
56528
+ return { originalPos, mappedPos, node: node2 };
56529
+ });
56530
+ const validNodes = mappedNodes.filter(({ node: node2 }) => node2 && node2.type.name === "listItem");
56531
+ validNodes.forEach(({ mappedPos, node: node2 }) => {
56532
+ const attrs = node2.attrs || {};
56533
+ const currentLevel = parseLevel(attrs.level);
56534
+ const newLevel = currentLevel + 1;
56535
+ const $pos = tr.doc ? tr.doc.resolve(mappedPos) : null;
56536
+ const parentListNode = resolveParentList($pos) || parentOrderedHelper?.node || parentBulletHelper?.node || parentOrderedHelper || parentBulletHelper;
56537
+ parentListsMap[mappedPos] = parentListNode;
56538
+ if (!parentListNode) {
56539
+ return;
56478
56540
  }
56479
- }
56480
- tr.setNodeMarkup(currentItem.pos, null, {
56481
- ...currAttrs,
56482
- level: newLevel,
56483
- numId
56541
+ let numId = attrs.numId;
56542
+ if (numId == null) {
56543
+ const fallbackListId = parentListNode.attrs?.listId ?? null;
56544
+ numId = fallbackListId ?? (ListHelpers.getNewListId ? ListHelpers.getNewListId(editor) : null);
56545
+ if (numId != null && ListHelpers.generateNewListDefinition) {
56546
+ ListHelpers.generateNewListDefinition({
56547
+ numId,
56548
+ listType: parentListNode.type,
56549
+ editor
56550
+ });
56551
+ }
56552
+ }
56553
+ tr.setNodeMarkup(mappedPos, null, {
56554
+ ...attrs,
56555
+ level: newLevel,
56556
+ numId
56557
+ });
56484
56558
  });
56485
- return true;
56559
+ return Object.values(parentListsMap).length ? !Object.values(parentListsMap).every((pos) => !pos) : true;
56486
56560
  };
56487
56561
  const isList = (n) => !!n && (n.type?.name === "orderedList" || n.type?.name === "bulletList");
56488
56562
  const findNodePosition = (doc2, targetNode) => {
@@ -76580,7 +76654,8 @@ Please report this to https://github.com/markedjs/marked.`, e) {
76580
76654
  const trackedTransaction = ({ tr, state: state2, user }) => {
76581
76655
  const onlyInputTypeMeta = ["inputType", "uiEvent", "paste", "pointer"];
76582
76656
  const notAllowedMeta = ["historyUndo", "historyRedo", "acceptReject"];
76583
- if (!tr.steps.length || tr.meta && !Object.keys(tr.meta).every((meta2) => onlyInputTypeMeta.includes(meta2)) || notAllowedMeta.includes(tr.getMeta("inputType")) || tr.getMeta(CommentsPluginKey)) {
76657
+ const isProgrammaticInput = tr.getMeta("inputType") === "programmatic";
76658
+ if (!tr.steps.length || tr.meta && !Object.keys(tr.meta).every((meta2) => onlyInputTypeMeta.includes(meta2)) && !isProgrammaticInput || notAllowedMeta.includes(tr.getMeta("inputType")) || tr.getMeta(CommentsPluginKey)) {
76584
76659
  return tr;
76585
76660
  }
76586
76661
  const newTr = state2.tr;
@@ -95839,7 +95914,7 @@ ${l}
95839
95914
  const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
95840
95915
  if (!isTrackedChangeActionAllowed({ editor, action: "accept", trackedChanges })) return false;
95841
95916
  let { tr, doc: doc2 } = state2;
95842
- tr.setMeta("acceptReject", true);
95917
+ tr.setMeta("inputType", "acceptReject");
95843
95918
  const map3 = new Mapping();
95844
95919
  doc2.nodesBetween(from2, to, (node2, pos) => {
95845
95920
  if (node2.marks && node2.marks.find((mark2) => mark2.type.name === TrackDeleteMarkName)) {
@@ -95879,7 +95954,7 @@ ${l}
95879
95954
  const trackedChanges = collectTrackedChanges({ state: state2, from: from2, to });
95880
95955
  if (!isTrackedChangeActionAllowed({ editor, action: "reject", trackedChanges })) return false;
95881
95956
  const { tr, doc: doc2 } = state2;
95882
- tr.setMeta("acceptReject", true);
95957
+ tr.setMeta("inputType", "acceptReject");
95883
95958
  const map3 = new Mapping();
95884
95959
  doc2.nodesBetween(from2, to, (node2, pos) => {
95885
95960
  if (node2.marks && node2.marks.find((mark2) => mark2.type.name === TrackDeleteMarkName)) {
@@ -115019,11 +115094,11 @@ ${style2}
115019
115094
  * @returns {void}
115020
115095
  */
115021
115096
  increaseTextIndent: ({ item, argument }) => {
115022
- let command2 = item.command;
115023
- let { state: state2 } = this.activeEditor;
115024
- let listItem2 = findParentNode((node2) => node2.type.name === "listItem")(state2.selection);
115025
- if (listItem2) {
115026
- return this.activeEditor.commands.increaseListIndent();
115097
+ const command2 = item.command;
115098
+ const { state: state2 } = this.activeEditor;
115099
+ const listItemsInSelection = collectTargetListItemPositions(state2);
115100
+ if (listItemsInSelection.length) {
115101
+ return this.activeEditor.commands.increaseListIndent(listItemsInSelection);
115027
115102
  }
115028
115103
  if (command2 in this.activeEditor.commands) {
115029
115104
  this.activeEditor.commands[command2](argument);
@@ -115039,9 +115114,9 @@ ${style2}
115039
115114
  decreaseTextIndent: ({ item, argument }) => {
115040
115115
  let command2 = item.command;
115041
115116
  let { state: state2 } = this.activeEditor;
115042
- let listItem2 = findParentNode((node2) => node2.type.name === "listItem")(state2.selection);
115043
- if (listItem2) {
115044
- return this.activeEditor.commands.decreaseListIndent();
115117
+ const listItemsInSelection = collectTargetListItemPositions(state2);
115118
+ if (listItemsInSelection.length) {
115119
+ return this.activeEditor.commands.decreaseListIndent(listItemsInSelection);
115045
115120
  }
115046
115121
  if (command2 in this.activeEditor.commands) {
115047
115122
  this.activeEditor.commands[command2](argument);