MCPcopy Create free account
hub / github.com/adobe/react-spectrum / getPosition

Function getPosition

packages/@react-spectrum/ai/src/TokenField.tsx:593–620  ·  view source on GitHub ↗
(container: Element, node: Node, offset: number)

Source from the content-addressed store, hash-verified

591}
592
593function getPosition(container: Element, node: Node, offset: number): Position {
594 if (node === container) {
595 return {index: offset, offset: 0};
596 }
597
598 let originalNode = node;
599 while (node.parentNode !== container) {
600 node = node.parentNode!;
601 }
602
603 let index = indexOfNode(node);
604 if (node.nodeType === Node.ELEMENT_NODE) {
605 let tokenNode = node.childNodes[1];
606 if (originalNode === tokenNode) {
607 // Cursor is inside the token.
608 offset = offset > 0 ? (tokenNode?.textContent?.length ?? 0) : 0;
609 } else if (originalNode === node) {
610 // Cursor is inside the wrapper element.
611 offset = offset <= 1 ? 0 : (tokenNode?.textContent?.length ?? 0);
612 } else {
613 // Cursor is on one of the zero width spaces.
614 offset =
615 originalNode === tokenNode.previousSibling ? 0 : (tokenNode?.textContent?.length ?? 0);
616 }
617 return {index, offset};
618 }
619 return {index, offset};
620}
621
622let isProgrammaticSelectionChange = false;
623

Callers 3

TokenField.tsxFile · 0.70
rangeToPositionsFunction · 0.70
ColorLoupeFunction · 0.50

Calls 1

indexOfNodeFunction · 0.85

Tested by

no test coverage detected