@pubann/textae 14.1.2 → 14.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -58502,7 +58502,7 @@
58502
58502
  )
58503
58503
  } // ./package.json
58504
58504
 
58505
- const package_namespaceObject = { rE: '14.1.2' } // ./src/lib/component/SettingDialog/EscapeSequence.js
58505
+ const package_namespaceObject = { rE: '14.2.0' } // ./src/lib/component/SettingDialog/EscapeSequence.js
58506
58506
  class EscapeSequence {
58507
58507
  static escape(str) {
58508
58508
  return str
@@ -104898,6 +104898,7 @@ data-button-type="${type}">
104898
104898
  get isPalletShown() {
104899
104899
  return false
104900
104900
  }
104901
+ updateSelectedTextOffsets() {}
104901
104902
  } // ./src/lib/component/PromiseDialog.js
104902
104903
 
104903
104904
  class PromiseDialog extends Dialog {
@@ -110402,31 +110403,71 @@ data-button-type="${type}">
110402
110403
  get #textBox() {
110403
110404
  return this.#editorHTMLElement.querySelector('.textae-editor__text-box')
110404
110405
  }
110405
- } // ./src/lib/Editor/UseCase/EditModeFactory/ViewMode.js
110406
+ } // ./src/lib/Editor/UseCase/EditModeFactory/ViewMode/updateSelection/getTextNodeAtOffset.js
110407
+
110408
+ // Get the text node at a specific offset within a root element.
110409
+ // This function traverses the DOM tree to find the text node and its offset.
110410
+ function getTextNodeAtOffset(rootElement, offset) {
110411
+ let currentOffset = 0
110412
+
110413
+ function traverse(node) {
110414
+ for (const child of node.childNodes) {
110415
+ if (child.nodeType === Node.TEXT_NODE) {
110416
+ const textLength = child.textContent.length
110417
+ if (currentOffset + textLength >= offset) {
110418
+ return {
110419
+ node: child,
110420
+ offset: offset - currentOffset
110421
+ }
110422
+ }
110423
+ currentOffset += textLength
110424
+ } else if (child.nodeType === Node.ELEMENT_NODE) {
110425
+ const result = traverse(child)
110426
+ if (result) return result
110427
+ }
110428
+ }
110429
+ return null
110430
+ }
110431
+
110432
+ return traverse(rootElement)
110433
+ } // ./src/lib/Editor/UseCase/EditModeFactory/ViewMode/updateSelection/index.js
110434
+
110435
+ // This function updates the selection in the document based on the provided offsets.
110436
+ function updateSelection(selection, rootElement, begin, end) {
110437
+ const startNode = getTextNodeAtOffset(rootElement, begin)
110438
+ const endNode = getTextNodeAtOffset(rootElement, end)
110439
+
110440
+ const range = document.createRange()
110441
+ range.setStart(startNode.node, startNode.offset)
110442
+ range.setEnd(endNode.node, endNode.offset)
110443
+
110444
+ selection.removeAllRanges()
110445
+ selection.addRange(range)
110446
+ } // ./src/lib/Editor/UseCase/EditModeFactory/ViewMode/index.js
110406
110447
 
110407
110448
  class ViewMode extends EditModeBase {
110408
110449
  #editorHTMLElement
110450
+ #eventEmitter
110409
110451
  #annotationModel
110410
110452
  #selectedTextStartOffset
110411
110453
  #selectedTextEndOffset
110412
- #updateSelectedTextHandler
110454
+ #spanConfig
110455
+ #menuState
110413
110456
 
110414
- constructor(editorHTMLElement, eventEmitter, annotationModel) {
110457
+ constructor(
110458
+ editorHTMLElement,
110459
+ eventEmitter,
110460
+ annotationModel,
110461
+ spanConfig,
110462
+ menuState
110463
+ ) {
110415
110464
  super()
110416
110465
 
110417
110466
  this.#editorHTMLElement = editorHTMLElement
110467
+ this.#eventEmitter = eventEmitter
110418
110468
  this.#annotationModel = annotationModel
110419
-
110420
- this.#updateSelectedTextHandler = debounce300(() => {
110421
- this.#updateSelectedTextOffsets()
110422
-
110423
- eventEmitter.emit('textae-event.editor.selected-text.change')
110424
- })
110425
-
110426
- document.addEventListener(
110427
- 'selectionchange',
110428
- this.#updateSelectedTextHandler
110429
- )
110469
+ this.#spanConfig = spanConfig
110470
+ this.#menuState = menuState
110430
110471
  }
110431
110472
 
110432
110473
  get selectedText() {
@@ -110457,8 +110498,9 @@ data-button-type="${type}">
110457
110498
  }
110458
110499
  }
110459
110500
 
110460
- #updateSelectedTextOffsets() {
110501
+ updateSelectedTextOffsets() {
110461
110502
  const selection = document.getSelection()
110503
+
110462
110504
  if (selection && selection.rangeCount > 0) {
110463
110505
  const range = selection.getRangeAt(0)
110464
110506
  const textBox = this.#editorHTMLElement.querySelector(
@@ -110469,15 +110511,22 @@ data-button-type="${type}">
110469
110511
  textBox.contains(range.startContainer) &&
110470
110512
  textBox.contains(range.endContainer)
110471
110513
  ) {
110472
- this.#selectedTextStartOffset =
110473
- this.#annotationModel.textSelection.begin
110474
- this.#selectedTextEndOffset =
110475
- this.#annotationModel.textSelection.end
110514
+ const { begin, end } = this.#annotationModel.getTextSelection(
110515
+ this.#spanConfig,
110516
+ this.#menuState.textSelectionAdjuster
110517
+ )
110518
+
110519
+ updateSelection(selection, textBox, begin, end)
110520
+
110521
+ this.#selectedTextStartOffset = begin
110522
+ this.#selectedTextEndOffset = end
110476
110523
  }
110477
110524
  } else {
110478
110525
  this.#selectedTextStartOffset = undefined
110479
110526
  this.#selectedTextEndOffset = undefined
110480
110527
  }
110528
+
110529
+ this.#eventEmitter.emit('textae-event.editor.selected-text.change')
110481
110530
  }
110482
110531
  } // ./src/lib/Editor/UseCase/EditModeFactory/index.js
110483
110532
 
@@ -110561,8 +110610,20 @@ data-button-type="${type}">
110561
110610
  )
110562
110611
  }
110563
110612
 
110564
- static createViewMode(editorHTMLElement, eventEmitter, annotationModel) {
110565
- return new ViewMode(editorHTMLElement, eventEmitter, annotationModel)
110613
+ static createViewMode(
110614
+ editorHTMLElement,
110615
+ eventEmitter,
110616
+ annotationModel,
110617
+ spanConfig,
110618
+ menuState
110619
+ ) {
110620
+ return new ViewMode(
110621
+ editorHTMLElement,
110622
+ eventEmitter,
110623
+ annotationModel,
110624
+ spanConfig,
110625
+ menuState
110626
+ )
110566
110627
  }
110567
110628
  } // ./src/lib/Editor/UseCase/CurrentEditMode.js
110568
110629
 
@@ -110590,6 +110651,12 @@ data-button-type="${type}">
110590
110651
  this.#textEditMode = textEditMode
110591
110652
  this.#viewMode = viewMode
110592
110653
 
110654
+ const updateSelectedTextHandler = debounce300(() =>
110655
+ this.#current.updateSelectedTextOffsets()
110656
+ )
110657
+
110658
+ document.addEventListener('selectionchange', updateSelectedTextHandler)
110659
+
110593
110660
  eventEmitter
110594
110661
  .on('textae-event.editor.relation.click', (event, relation) =>
110595
110662
  this.#current.relationClicked(event, relation)
@@ -110949,7 +111016,9 @@ data-button-type="${type}">
110949
111016
  const viewMode = EditModeFactory.createViewMode(
110950
111017
  editorHTMLElement,
110951
111018
  eventEmitter,
110952
- annotationModel
111019
+ annotationModel,
111020
+ spanConfig,
111021
+ menuState
110953
111022
  )
110954
111023
  this.#viewMode = viewMode
110955
111024
  const currentEditMode = new CurrentEditMode(