@cloudscape-design/components 3.0.1278 → 3.0.1280

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.
package/package.json CHANGED
@@ -164,7 +164,7 @@
164
164
  "./internal/base-component/index.js",
165
165
  "./internal/base-component/styles.css.js"
166
166
  ],
167
- "version": "3.0.1278",
167
+ "version": "3.0.1280",
168
168
  "repository": {
169
169
  "type": "git",
170
170
  "url": "https://github.com/cloudscape-design/components.git"
@@ -1 +1 @@
1
- {"version":3,"file":"caret-controller.d.ts","sourceRoot":"","sources":["../../../../src/prompt-input/core/caret-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAYjD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAEjE;AAED,kFAAkF;AAClF,eAAO,MAAM,aAAa;;;mCAGF,MAAM;6BACZ,MAAM;CACd,CAAC;AAEX,wEAAwE;AACxE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,gBAAgB,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAehH;AAED,yDAAyD;AACzD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,gBAAgB,CAAC,UAAU,EAAE,GAAG,MAAM,CAEhG;AAQD,wEAAwE;AACxE,UAAU,WAAW;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,KAAK,CAAa;gBAEd,OAAO,EAAE,WAAW;IAKhC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;OAGG;IACH,UAAU,CACR,aAAa,EAAE,QAAQ,EACvB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,WAAW,EAC1B,WAAW,CAAC,EAAE,WAAW,GACxB,KAAK;IAeR,wEAAwE;IACxE,OAAO,CAAC,aAAa;IAYrB,yEAAyE;IACzE,WAAW,IAAI,MAAM;IAcrB,uEAAuE;IACvE,iBAAiB,IAAI,WAAW,GAAG,IAAI;IAuCvC;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IA0B9C,wEAAwE;IACxE,OAAO,IAAI,IAAI;IAmBf,qFAAqF;IACrF,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC,2DAA2D;IAC3D,OAAO,CAAC,MAAM,SAAI,GAAG,IAAI;IAQzB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAItD,0CAA0C;IAC1C,SAAS,IAAI,IAAI;IA6BjB,qDAAqD;IACrD,iBAAiB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAYvC,mDAAmD;IACnD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKjC,kEAAkE;IAClE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKlC,OAAO,CAAC,0BAA0B;IA4BlC,OAAO,CAAC,eAAe;IA8BvB,gGAAgG;IAChG,OAAO,CAAC,oBAAoB;IAqC5B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,eAAe;CA+DxB"}
1
+ {"version":3,"file":"caret-controller.d.ts","sourceRoot":"","sources":["../../../../src/prompt-input/core/caret-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAYjD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAEjE;AAED,kFAAkF;AAClF,eAAO,MAAM,aAAa;;;mCAGF,MAAM;6BACZ,MAAM;CACd,CAAC;AAEX,wEAAwE;AACxE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,gBAAgB,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAehH;AAED,yDAAyD;AACzD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,gBAAgB,CAAC,UAAU,EAAE,GAAG,MAAM,CAEhG;AAQD,wEAAwE;AACxE,UAAU,WAAW;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,KAAK,CAAa;gBAEd,OAAO,EAAE,WAAW;IAKhC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;OAGG;IACH,UAAU,CACR,aAAa,EAAE,QAAQ,EACvB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,WAAW,EAC1B,WAAW,CAAC,EAAE,WAAW,GACxB,KAAK;IAeR,wEAAwE;IACxE,OAAO,CAAC,aAAa;IAYrB,yEAAyE;IACzE,WAAW,IAAI,MAAM;IAcrB,uEAAuE;IACvE,iBAAiB,IAAI,WAAW,GAAG,IAAI;IAuCvC;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IA0B9C,wEAAwE;IACxE,OAAO,IAAI,IAAI;IAmBf,qFAAqF;IACrF,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC,2DAA2D;IAC3D,OAAO,CAAC,MAAM,SAAI,GAAG,IAAI;IAQzB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAItD,0CAA0C;IAC1C,SAAS,IAAI,IAAI;IA6BjB,qDAAqD;IACrD,iBAAiB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAYvC,mDAAmD;IACnD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKjC,kEAAkE;IAClE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKlC,OAAO,CAAC,0BAA0B;IAyClC,OAAO,CAAC,eAAe;IA8BvB,gGAAgG;IAChG,OAAO,CAAC,oBAAoB;IAqC5B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,eAAe;CA+DxB"}
@@ -237,8 +237,21 @@ export class CaretController {
237
237
  if (paragraphs.length === 0) {
238
238
  return 0;
239
239
  }
240
- const container = useEnd ? range.endContainer : range.startContainer;
241
- const offset = useEnd ? range.endOffset : range.startOffset;
240
+ let container = useEnd ? range.endContainer : range.startContainer;
241
+ let offset = useEnd ? range.endOffset : range.startOffset;
242
+ // When the selection container is the editable root rather than a
243
+ // descendant node, resolve to the actual child so the paragraph
244
+ // loop below works correctly.
245
+ if (container === this.element) {
246
+ if (offset >= container.childNodes.length) {
247
+ container = container.childNodes[container.childNodes.length - 1];
248
+ offset = container.childNodes.length;
249
+ }
250
+ else {
251
+ container = container.childNodes[offset];
252
+ offset = 0;
253
+ }
254
+ }
242
255
  let position = 0;
243
256
  for (let pIndex = 0; pIndex < paragraphs.length; pIndex++) {
244
257
  const p = paragraphs[pIndex];
@@ -1 +1 @@
1
- {"version":3,"file":"caret-controller.js","sourceRoot":"","sources":["../../../../src/prompt-input/core/caret-controller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isHTMLElement } from '../../internal/utils/dom';\nimport { PromptInputProps } from '../interfaces';\nimport { ElementType } from './constants';\nimport {\n findAllParagraphs,\n findElement,\n getTokenType,\n isEmptyState,\n isReferenceElementType,\n stripZeroWidthCharacters,\n} from './dom-utils';\nimport { isBreakTextToken, isTextNode, isTextToken, isTriggerToken } from './type-guards';\n\n/** Returns the Selection from the element's owning window, supporting iframe contexts. */\nexport function getOwnerSelection(element: Node): Selection | null {\n return (element.ownerDocument?.defaultView ?? window).getSelection();\n}\n\n/** Logical lengths for each token type, used for cursor position calculations. */\nexport const TOKEN_LENGTHS = {\n REFERENCE: 1,\n LINE_BREAK: 1,\n trigger: (filterText: string) => 1 + filterText.length,\n text: (content: string) => content.length,\n} as const;\n\n/** Calculates the logical cursor position after a given token index. */\nexport function calculateTokenPosition(tokens: readonly PromptInputProps.InputToken[], upToIndex: number): number {\n let pos = 0;\n for (let i = 0; i <= upToIndex && i < tokens.length; i++) {\n const token = tokens[i];\n if (isTextToken(token)) {\n pos += TOKEN_LENGTHS.text(token.value);\n } else if (isBreakTextToken(token)) {\n pos += TOKEN_LENGTHS.LINE_BREAK;\n } else if (isTriggerToken(token)) {\n pos += TOKEN_LENGTHS.trigger(token.value);\n } else {\n pos += TOKEN_LENGTHS.REFERENCE;\n }\n }\n return pos;\n}\n\n/** Calculates the total logical length of all tokens. */\nexport function calculateTotalTokenLength(tokens: readonly PromptInputProps.InputToken[]): number {\n return tokens.length === 0 ? 0 : calculateTokenPosition(tokens, tokens.length - 1);\n}\n\ninterface CaretState {\n start: number;\n end: number | undefined;\n isValid: boolean;\n}\n\n/** A resolved position within the DOM: a node and an offset into it. */\ninterface DOMLocation {\n node: Node;\n offset: number;\n}\n\n/**\n * Manages caret positioning within a contentEditable element.\n * Translates between logical token positions and DOM Range/Selection API.\n */\nexport class CaretController {\n private element: HTMLElement;\n private state: CaretState;\n\n constructor(element: HTMLElement) {\n this.element = element;\n this.state = { start: 0, end: undefined, isValid: false };\n }\n\n private get ownerDoc(): Document {\n return this.element.ownerDocument ?? document;\n }\n\n /**\n * Creates a DOM Range from resolved start/end locations and applies it to the given selection.\n * Returns the created Range for further use (e.g. scroll-into-view checks).\n */\n applyRange(\n ownerDocument: Document,\n selection: Selection,\n startLocation: DOMLocation,\n endLocation?: DOMLocation\n ): Range {\n const range = ownerDocument.createRange();\n range.setStart(startLocation.node, startLocation.offset);\n\n if (endLocation) {\n range.setEnd(endLocation.node, endLocation.offset);\n } else {\n range.collapse(true);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n return range;\n }\n\n /** Returns the logical length of a DOM node based on its token type. */\n private getNodeLength(node: Node): number {\n const tokenType = isHTMLElement(node) ? getTokenType(node) : null;\n\n if (isTextNode(node) || tokenType === ElementType.Trigger) {\n return TOKEN_LENGTHS.text(node.textContent || '');\n } else if (tokenType && isReferenceElementType(tokenType)) {\n return TOKEN_LENGTHS.REFERENCE;\n }\n\n return 0;\n }\n\n /** Returns the current logical caret position from the DOM selection. */\n getPosition(): number {\n const selection = getOwnerSelection(this.element);\n if (!selection?.rangeCount) {\n return 0;\n }\n\n const range = selection.getRangeAt(0);\n if (!this.element.contains(range.startContainer)) {\n return 0;\n }\n\n return this.calculatePositionFromRange(range, false);\n }\n\n /** Finds the trigger element at the current caret position, if any. */\n findActiveTrigger(): HTMLElement | null {\n const selection = getOwnerSelection(this.element);\n if (!selection?.rangeCount) {\n return null;\n }\n\n const range = selection.getRangeAt(0);\n if (!range.collapsed) {\n return null;\n }\n\n let node: Node | null = range.startContainer;\n\n // Walk up from cursor to find a trigger ancestor\n while (node && node !== this.element) {\n if (isHTMLElement(node) && getTokenType(node) === ElementType.Trigger) {\n if (isTextNode(range.startContainer) && range.startContainer.parentElement === node) {\n // Caret must be after the trigger character (offset > 0) to be considered \"in\" the trigger\n if (range.startOffset > 0) {\n return node;\n }\n } else {\n return node;\n }\n }\n node = node.parentNode;\n }\n\n // Also check: cursor at offset 0 of a text node right after a trigger\n if (isTextNode(range.startContainer) && range.startOffset === 0) {\n const prevSibling = range.startContainer.previousSibling;\n if (isHTMLElement(prevSibling) && getTokenType(prevSibling) === ElementType.Trigger) {\n return prevSibling;\n }\n }\n\n return null;\n }\n\n /**\n * Sets the caret to a logical position, or creates a selection range if end is provided.\n * Handles smart positioning around atomic reference tokens and scrolls into view.\n * @param start logical start position\n * @param end optional logical end position for range selection\n */\n setPosition(start: number, end?: number): void {\n const ownerDocument = this.ownerDoc;\n if (ownerDocument.activeElement !== this.element) {\n this.element.focus();\n }\n\n const startLocation = this.findDOMLocation(start);\n\n if (!startLocation) {\n return;\n }\n\n const selection = getOwnerSelection(this.element);\n if (!selection) {\n return;\n }\n\n const endLocation = end !== undefined && end !== start ? (this.findDOMLocation(end) ?? undefined) : undefined;\n\n this.applyRange(ownerDocument, selection, startLocation, endLocation);\n\n this.state = { start, end, isValid: true };\n\n ownerDocument.dispatchEvent(new Event('selectionchange'));\n }\n\n /** Captures the current caret/selection state for later restoration. */\n capture(): void {\n const selection = getOwnerSelection(this.element);\n if (!selection?.rangeCount) {\n this.state = { start: 0, end: undefined, isValid: false };\n return;\n }\n\n const range = selection.getRangeAt(0);\n if (!this.element.contains(range.startContainer)) {\n this.state = { start: 0, end: undefined, isValid: false };\n return;\n }\n\n const start = this.calculatePositionFromRange(range, false);\n const end = range.collapsed ? undefined : this.calculatePositionFromRange(range, true);\n\n this.state = { start, end, isValid: true };\n }\n\n /** Returns the captured caret start position, or null if no valid capture exists. */\n getSavedPosition(): number | null {\n return this.state.isValid ? this.state.start : null;\n }\n\n /** Restores the caret to the previously captured state. */\n restore(offset = 0): void {\n if (!this.state.isValid || this.ownerDoc.activeElement !== this.element) {\n return;\n }\n\n this.setPosition(this.state.start + offset, this.state.end !== undefined ? this.state.end + offset : undefined);\n }\n\n /** Overrides the captured state so the next restore() positions to a calculated location.\n * Currently used only in tests — consider removing if no production use case emerges.\n */\n setCapturedPosition(start: number, end?: number): void {\n this.state = { start, end, isValid: true };\n }\n\n /** Selects all content in the element. */\n selectAll(): void {\n const selection = getOwnerSelection(this.element);\n if (!selection) {\n return;\n }\n\n if (isEmptyState(this.element)) {\n return;\n }\n\n if (this.ownerDoc.activeElement !== this.element) {\n this.element.focus();\n }\n\n const paragraphs = findAllParagraphs(this.element);\n if (paragraphs.length === 0) {\n return;\n }\n\n const firstP = paragraphs[0];\n const lastP = paragraphs[paragraphs.length - 1];\n\n const range = this.ownerDoc.createRange();\n range.setStart(firstP, 0);\n range.setEnd(lastP, lastP.childNodes.length);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n /** Positions the caret at the end of a text node. */\n positionAfterText(textNode: Text): void {\n const range = this.ownerDoc.createRange();\n range.setStart(textNode, textNode.textContent?.length || 0);\n range.collapse(true);\n\n const selection = getOwnerSelection(this.element);\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** Moves the caret forward by a logical offset. */\n moveForward(offset: number): void {\n const currentPos = this.getPosition();\n this.setPosition(currentPos + offset);\n }\n\n /** Moves the caret backward by a logical offset, clamped to 0. */\n moveBackward(offset: number): void {\n const currentPos = this.getPosition();\n this.setPosition(Math.max(0, currentPos - offset));\n }\n\n private calculatePositionFromRange(range: Range, useEnd: boolean): number {\n const paragraphs = findAllParagraphs(this.element);\n if (paragraphs.length === 0) {\n return 0;\n }\n\n const container = useEnd ? range.endContainer : range.startContainer;\n const offset = useEnd ? range.endOffset : range.startOffset;\n\n let position = 0;\n\n for (let pIndex = 0; pIndex < paragraphs.length; pIndex++) {\n const p = paragraphs[pIndex];\n if (pIndex > 0) {\n position += TOKEN_LENGTHS.LINE_BREAK;\n }\n\n if (!p.contains(container)) {\n position += this.countParagraphContent(p);\n } else {\n position += this.countUpToCursor(p, container, offset);\n break;\n }\n }\n\n return position;\n }\n\n private findDOMLocation(position: number): DOMLocation | null {\n const paragraphs = findAllParagraphs(this.element);\n let caretPos = 0;\n\n for (let pIndex = 0; pIndex < paragraphs.length; pIndex++) {\n const p = paragraphs[pIndex];\n\n if (pIndex > 0) {\n caretPos += TOKEN_LENGTHS.LINE_BREAK;\n if (caretPos >= position) {\n return { node: p, offset: 0 };\n }\n }\n\n const paragraphLength = this.countParagraphContent(p);\n\n if (caretPos + paragraphLength >= position) {\n return this.findLocationInParagraph(p, position - caretPos);\n }\n\n caretPos += paragraphLength;\n }\n\n const lastP = paragraphs[paragraphs.length - 1];\n if (lastP?.lastChild && isTextNode(lastP.lastChild)) {\n return { node: lastP.lastChild, offset: lastP.lastChild.textContent?.length || 0 };\n }\n return lastP ? { node: lastP, offset: lastP.childNodes.length } : null;\n }\n\n /** Resolves a DOM location for a specific child node at the given offset within a paragraph. */\n private resolveChildLocation(p: HTMLElement, child: ChildNode, offsetInChild: number): DOMLocation {\n if (isTextNode(child)) {\n return { node: child, offset: offsetInChild };\n }\n\n if (!isHTMLElement(child)) {\n return { node: p, offset: Array.from(p.childNodes).indexOf(child) };\n }\n\n const tokenType = getTokenType(child);\n const childIndex = Array.from(p.childNodes).indexOf(child);\n\n if (tokenType === ElementType.Trigger) {\n if (offsetInChild === 0) {\n return { node: p, offset: childIndex };\n }\n const triggerTextNode = child.childNodes[0];\n if (triggerTextNode && isTextNode(triggerTextNode)) {\n return { node: triggerTextNode, offset: offsetInChild };\n }\n return { node: p, offset: childIndex };\n }\n\n if (isReferenceElementType(tokenType)) {\n if (offsetInChild === 0) {\n return { node: p, offset: childIndex };\n }\n const nextSibling = child.nextSibling;\n if (nextSibling) {\n return isTextNode(nextSibling) ? { node: nextSibling, offset: 0 } : { node: p, offset: childIndex + 1 };\n }\n return { node: p, offset: p.childNodes.length };\n }\n\n return { node: p, offset: childIndex };\n }\n\n private findLocationInParagraph(p: HTMLElement, targetOffset: number): DOMLocation | null {\n let offsetInParagraph = 0;\n\n for (const child of Array.from(p.childNodes)) {\n const childLength = this.getNodeLength(child);\n\n if (offsetInParagraph + childLength >= targetOffset) {\n return this.resolveChildLocation(p, child, targetOffset - offsetInParagraph);\n }\n\n offsetInParagraph += childLength;\n }\n\n if (p.lastChild && isTextNode(p.lastChild)) {\n return { node: p.lastChild, offset: p.lastChild.textContent?.length || 0 };\n }\n return { node: p, offset: p.childNodes.length };\n }\n\n private countParagraphContent(p: Element): number {\n let count = 0;\n for (const child of Array.from(p.childNodes)) {\n count += this.getNodeLength(child);\n }\n return count;\n }\n\n private countUpToCursor(p: Element, container: Node, offset: number): number {\n if (container === p) {\n let count = 0;\n for (let i = 0; i < offset && i < p.childNodes.length; i++) {\n count += this.getNodeLength(p.childNodes[i]);\n }\n return count;\n }\n\n let count = 0;\n for (const child of Array.from(p.childNodes)) {\n if (child === container || child.contains(container)) {\n if (isTextNode(child)) {\n return count + offset;\n }\n\n if (isHTMLElement(child)) {\n const tokenType = getTokenType(child);\n\n if (tokenType === ElementType.Trigger) {\n const triggerTextNode = child.childNodes[0];\n if (triggerTextNode && isTextNode(triggerTextNode) && triggerTextNode === container) {\n return count + offset;\n }\n } else if (isReferenceElementType(tokenType)) {\n const caretSpotBefore = findElement(child, { tokenType: ElementType.CaretSpotBefore });\n const caretSpotAfter = findElement(child, { tokenType: ElementType.CaretSpotAfter });\n\n const caretInBefore =\n caretSpotBefore && (caretSpotBefore === container || caretSpotBefore.contains(container));\n const caretInAfter = caretSpotAfter && (caretSpotAfter === container || caretSpotAfter.contains(container));\n\n if (caretInBefore) {\n // Caret is in the before-spot: any typed text counts from the start of the reference\n const beforeContent = stripZeroWidthCharacters(caretSpotBefore!.textContent || '');\n if (beforeContent && isTextNode(container)) {\n return count + offset;\n }\n // No real content — caret is logically before the reference\n return count;\n } else if (caretInAfter) {\n // Caret is in the after-spot: position is after the reference (count it first)\n count += TOKEN_LENGTHS.REFERENCE;\n const afterContent = stripZeroWidthCharacters(caretSpotAfter!.textContent || '');\n if (afterContent && isTextNode(container)) {\n // offset - 1 because the zero-width character occupies position 0\n const contentOffset = Math.max(0, offset - 1);\n return count + contentOffset;\n }\n // No real content — caret is logically after the reference\n return count;\n } else {\n return count + TOKEN_LENGTHS.REFERENCE;\n }\n }\n }\n return count + this.getNodeLength(child);\n }\n count += this.getNodeLength(child);\n }\n\n return count;\n }\n}\n"]}
1
+ {"version":3,"file":"caret-controller.js","sourceRoot":"","sources":["../../../../src/prompt-input/core/caret-controller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isHTMLElement } from '../../internal/utils/dom';\nimport { PromptInputProps } from '../interfaces';\nimport { ElementType } from './constants';\nimport {\n findAllParagraphs,\n findElement,\n getTokenType,\n isEmptyState,\n isReferenceElementType,\n stripZeroWidthCharacters,\n} from './dom-utils';\nimport { isBreakTextToken, isTextNode, isTextToken, isTriggerToken } from './type-guards';\n\n/** Returns the Selection from the element's owning window, supporting iframe contexts. */\nexport function getOwnerSelection(element: Node): Selection | null {\n return (element.ownerDocument?.defaultView ?? window).getSelection();\n}\n\n/** Logical lengths for each token type, used for cursor position calculations. */\nexport const TOKEN_LENGTHS = {\n REFERENCE: 1,\n LINE_BREAK: 1,\n trigger: (filterText: string) => 1 + filterText.length,\n text: (content: string) => content.length,\n} as const;\n\n/** Calculates the logical cursor position after a given token index. */\nexport function calculateTokenPosition(tokens: readonly PromptInputProps.InputToken[], upToIndex: number): number {\n let pos = 0;\n for (let i = 0; i <= upToIndex && i < tokens.length; i++) {\n const token = tokens[i];\n if (isTextToken(token)) {\n pos += TOKEN_LENGTHS.text(token.value);\n } else if (isBreakTextToken(token)) {\n pos += TOKEN_LENGTHS.LINE_BREAK;\n } else if (isTriggerToken(token)) {\n pos += TOKEN_LENGTHS.trigger(token.value);\n } else {\n pos += TOKEN_LENGTHS.REFERENCE;\n }\n }\n return pos;\n}\n\n/** Calculates the total logical length of all tokens. */\nexport function calculateTotalTokenLength(tokens: readonly PromptInputProps.InputToken[]): number {\n return tokens.length === 0 ? 0 : calculateTokenPosition(tokens, tokens.length - 1);\n}\n\ninterface CaretState {\n start: number;\n end: number | undefined;\n isValid: boolean;\n}\n\n/** A resolved position within the DOM: a node and an offset into it. */\ninterface DOMLocation {\n node: Node;\n offset: number;\n}\n\n/**\n * Manages caret positioning within a contentEditable element.\n * Translates between logical token positions and DOM Range/Selection API.\n */\nexport class CaretController {\n private element: HTMLElement;\n private state: CaretState;\n\n constructor(element: HTMLElement) {\n this.element = element;\n this.state = { start: 0, end: undefined, isValid: false };\n }\n\n private get ownerDoc(): Document {\n return this.element.ownerDocument ?? document;\n }\n\n /**\n * Creates a DOM Range from resolved start/end locations and applies it to the given selection.\n * Returns the created Range for further use (e.g. scroll-into-view checks).\n */\n applyRange(\n ownerDocument: Document,\n selection: Selection,\n startLocation: DOMLocation,\n endLocation?: DOMLocation\n ): Range {\n const range = ownerDocument.createRange();\n range.setStart(startLocation.node, startLocation.offset);\n\n if (endLocation) {\n range.setEnd(endLocation.node, endLocation.offset);\n } else {\n range.collapse(true);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n return range;\n }\n\n /** Returns the logical length of a DOM node based on its token type. */\n private getNodeLength(node: Node): number {\n const tokenType = isHTMLElement(node) ? getTokenType(node) : null;\n\n if (isTextNode(node) || tokenType === ElementType.Trigger) {\n return TOKEN_LENGTHS.text(node.textContent || '');\n } else if (tokenType && isReferenceElementType(tokenType)) {\n return TOKEN_LENGTHS.REFERENCE;\n }\n\n return 0;\n }\n\n /** Returns the current logical caret position from the DOM selection. */\n getPosition(): number {\n const selection = getOwnerSelection(this.element);\n if (!selection?.rangeCount) {\n return 0;\n }\n\n const range = selection.getRangeAt(0);\n if (!this.element.contains(range.startContainer)) {\n return 0;\n }\n\n return this.calculatePositionFromRange(range, false);\n }\n\n /** Finds the trigger element at the current caret position, if any. */\n findActiveTrigger(): HTMLElement | null {\n const selection = getOwnerSelection(this.element);\n if (!selection?.rangeCount) {\n return null;\n }\n\n const range = selection.getRangeAt(0);\n if (!range.collapsed) {\n return null;\n }\n\n let node: Node | null = range.startContainer;\n\n // Walk up from cursor to find a trigger ancestor\n while (node && node !== this.element) {\n if (isHTMLElement(node) && getTokenType(node) === ElementType.Trigger) {\n if (isTextNode(range.startContainer) && range.startContainer.parentElement === node) {\n // Caret must be after the trigger character (offset > 0) to be considered \"in\" the trigger\n if (range.startOffset > 0) {\n return node;\n }\n } else {\n return node;\n }\n }\n node = node.parentNode;\n }\n\n // Also check: cursor at offset 0 of a text node right after a trigger\n if (isTextNode(range.startContainer) && range.startOffset === 0) {\n const prevSibling = range.startContainer.previousSibling;\n if (isHTMLElement(prevSibling) && getTokenType(prevSibling) === ElementType.Trigger) {\n return prevSibling;\n }\n }\n\n return null;\n }\n\n /**\n * Sets the caret to a logical position, or creates a selection range if end is provided.\n * Handles smart positioning around atomic reference tokens and scrolls into view.\n * @param start logical start position\n * @param end optional logical end position for range selection\n */\n setPosition(start: number, end?: number): void {\n const ownerDocument = this.ownerDoc;\n if (ownerDocument.activeElement !== this.element) {\n this.element.focus();\n }\n\n const startLocation = this.findDOMLocation(start);\n\n if (!startLocation) {\n return;\n }\n\n const selection = getOwnerSelection(this.element);\n if (!selection) {\n return;\n }\n\n const endLocation = end !== undefined && end !== start ? (this.findDOMLocation(end) ?? undefined) : undefined;\n\n this.applyRange(ownerDocument, selection, startLocation, endLocation);\n\n this.state = { start, end, isValid: true };\n\n ownerDocument.dispatchEvent(new Event('selectionchange'));\n }\n\n /** Captures the current caret/selection state for later restoration. */\n capture(): void {\n const selection = getOwnerSelection(this.element);\n if (!selection?.rangeCount) {\n this.state = { start: 0, end: undefined, isValid: false };\n return;\n }\n\n const range = selection.getRangeAt(0);\n if (!this.element.contains(range.startContainer)) {\n this.state = { start: 0, end: undefined, isValid: false };\n return;\n }\n\n const start = this.calculatePositionFromRange(range, false);\n const end = range.collapsed ? undefined : this.calculatePositionFromRange(range, true);\n\n this.state = { start, end, isValid: true };\n }\n\n /** Returns the captured caret start position, or null if no valid capture exists. */\n getSavedPosition(): number | null {\n return this.state.isValid ? this.state.start : null;\n }\n\n /** Restores the caret to the previously captured state. */\n restore(offset = 0): void {\n if (!this.state.isValid || this.ownerDoc.activeElement !== this.element) {\n return;\n }\n\n this.setPosition(this.state.start + offset, this.state.end !== undefined ? this.state.end + offset : undefined);\n }\n\n /** Overrides the captured state so the next restore() positions to a calculated location.\n * Currently used only in tests — consider removing if no production use case emerges.\n */\n setCapturedPosition(start: number, end?: number): void {\n this.state = { start, end, isValid: true };\n }\n\n /** Selects all content in the element. */\n selectAll(): void {\n const selection = getOwnerSelection(this.element);\n if (!selection) {\n return;\n }\n\n if (isEmptyState(this.element)) {\n return;\n }\n\n if (this.ownerDoc.activeElement !== this.element) {\n this.element.focus();\n }\n\n const paragraphs = findAllParagraphs(this.element);\n if (paragraphs.length === 0) {\n return;\n }\n\n const firstP = paragraphs[0];\n const lastP = paragraphs[paragraphs.length - 1];\n\n const range = this.ownerDoc.createRange();\n range.setStart(firstP, 0);\n range.setEnd(lastP, lastP.childNodes.length);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n /** Positions the caret at the end of a text node. */\n positionAfterText(textNode: Text): void {\n const range = this.ownerDoc.createRange();\n range.setStart(textNode, textNode.textContent?.length || 0);\n range.collapse(true);\n\n const selection = getOwnerSelection(this.element);\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** Moves the caret forward by a logical offset. */\n moveForward(offset: number): void {\n const currentPos = this.getPosition();\n this.setPosition(currentPos + offset);\n }\n\n /** Moves the caret backward by a logical offset, clamped to 0. */\n moveBackward(offset: number): void {\n const currentPos = this.getPosition();\n this.setPosition(Math.max(0, currentPos - offset));\n }\n\n private calculatePositionFromRange(range: Range, useEnd: boolean): number {\n const paragraphs = findAllParagraphs(this.element);\n if (paragraphs.length === 0) {\n return 0;\n }\n\n let container = useEnd ? range.endContainer : range.startContainer;\n let offset = useEnd ? range.endOffset : range.startOffset;\n\n // When the selection container is the editable root rather than a\n // descendant node, resolve to the actual child so the paragraph\n // loop below works correctly.\n if (container === this.element) {\n if (offset >= container.childNodes.length) {\n container = container.childNodes[container.childNodes.length - 1];\n offset = container.childNodes.length;\n } else {\n container = container.childNodes[offset];\n offset = 0;\n }\n }\n\n let position = 0;\n\n for (let pIndex = 0; pIndex < paragraphs.length; pIndex++) {\n const p = paragraphs[pIndex];\n if (pIndex > 0) {\n position += TOKEN_LENGTHS.LINE_BREAK;\n }\n\n if (!p.contains(container)) {\n position += this.countParagraphContent(p);\n } else {\n position += this.countUpToCursor(p, container, offset);\n break;\n }\n }\n\n return position;\n }\n\n private findDOMLocation(position: number): DOMLocation | null {\n const paragraphs = findAllParagraphs(this.element);\n let caretPos = 0;\n\n for (let pIndex = 0; pIndex < paragraphs.length; pIndex++) {\n const p = paragraphs[pIndex];\n\n if (pIndex > 0) {\n caretPos += TOKEN_LENGTHS.LINE_BREAK;\n if (caretPos >= position) {\n return { node: p, offset: 0 };\n }\n }\n\n const paragraphLength = this.countParagraphContent(p);\n\n if (caretPos + paragraphLength >= position) {\n return this.findLocationInParagraph(p, position - caretPos);\n }\n\n caretPos += paragraphLength;\n }\n\n const lastP = paragraphs[paragraphs.length - 1];\n if (lastP?.lastChild && isTextNode(lastP.lastChild)) {\n return { node: lastP.lastChild, offset: lastP.lastChild.textContent?.length || 0 };\n }\n return lastP ? { node: lastP, offset: lastP.childNodes.length } : null;\n }\n\n /** Resolves a DOM location for a specific child node at the given offset within a paragraph. */\n private resolveChildLocation(p: HTMLElement, child: ChildNode, offsetInChild: number): DOMLocation {\n if (isTextNode(child)) {\n return { node: child, offset: offsetInChild };\n }\n\n if (!isHTMLElement(child)) {\n return { node: p, offset: Array.from(p.childNodes).indexOf(child) };\n }\n\n const tokenType = getTokenType(child);\n const childIndex = Array.from(p.childNodes).indexOf(child);\n\n if (tokenType === ElementType.Trigger) {\n if (offsetInChild === 0) {\n return { node: p, offset: childIndex };\n }\n const triggerTextNode = child.childNodes[0];\n if (triggerTextNode && isTextNode(triggerTextNode)) {\n return { node: triggerTextNode, offset: offsetInChild };\n }\n return { node: p, offset: childIndex };\n }\n\n if (isReferenceElementType(tokenType)) {\n if (offsetInChild === 0) {\n return { node: p, offset: childIndex };\n }\n const nextSibling = child.nextSibling;\n if (nextSibling) {\n return isTextNode(nextSibling) ? { node: nextSibling, offset: 0 } : { node: p, offset: childIndex + 1 };\n }\n return { node: p, offset: p.childNodes.length };\n }\n\n return { node: p, offset: childIndex };\n }\n\n private findLocationInParagraph(p: HTMLElement, targetOffset: number): DOMLocation | null {\n let offsetInParagraph = 0;\n\n for (const child of Array.from(p.childNodes)) {\n const childLength = this.getNodeLength(child);\n\n if (offsetInParagraph + childLength >= targetOffset) {\n return this.resolveChildLocation(p, child, targetOffset - offsetInParagraph);\n }\n\n offsetInParagraph += childLength;\n }\n\n if (p.lastChild && isTextNode(p.lastChild)) {\n return { node: p.lastChild, offset: p.lastChild.textContent?.length || 0 };\n }\n return { node: p, offset: p.childNodes.length };\n }\n\n private countParagraphContent(p: Element): number {\n let count = 0;\n for (const child of Array.from(p.childNodes)) {\n count += this.getNodeLength(child);\n }\n return count;\n }\n\n private countUpToCursor(p: Element, container: Node, offset: number): number {\n if (container === p) {\n let count = 0;\n for (let i = 0; i < offset && i < p.childNodes.length; i++) {\n count += this.getNodeLength(p.childNodes[i]);\n }\n return count;\n }\n\n let count = 0;\n for (const child of Array.from(p.childNodes)) {\n if (child === container || child.contains(container)) {\n if (isTextNode(child)) {\n return count + offset;\n }\n\n if (isHTMLElement(child)) {\n const tokenType = getTokenType(child);\n\n if (tokenType === ElementType.Trigger) {\n const triggerTextNode = child.childNodes[0];\n if (triggerTextNode && isTextNode(triggerTextNode) && triggerTextNode === container) {\n return count + offset;\n }\n } else if (isReferenceElementType(tokenType)) {\n const caretSpotBefore = findElement(child, { tokenType: ElementType.CaretSpotBefore });\n const caretSpotAfter = findElement(child, { tokenType: ElementType.CaretSpotAfter });\n\n const caretInBefore =\n caretSpotBefore && (caretSpotBefore === container || caretSpotBefore.contains(container));\n const caretInAfter = caretSpotAfter && (caretSpotAfter === container || caretSpotAfter.contains(container));\n\n if (caretInBefore) {\n // Caret is in the before-spot: any typed text counts from the start of the reference\n const beforeContent = stripZeroWidthCharacters(caretSpotBefore!.textContent || '');\n if (beforeContent && isTextNode(container)) {\n return count + offset;\n }\n // No real content — caret is logically before the reference\n return count;\n } else if (caretInAfter) {\n // Caret is in the after-spot: position is after the reference (count it first)\n count += TOKEN_LENGTHS.REFERENCE;\n const afterContent = stripZeroWidthCharacters(caretSpotAfter!.textContent || '');\n if (afterContent && isTextNode(container)) {\n // offset - 1 because the zero-width character occupies position 0\n const contentOffset = Math.max(0, offset - 1);\n return count + contentOffset;\n }\n // No real content — caret is logically after the reference\n return count;\n } else {\n return count + TOKEN_LENGTHS.REFERENCE;\n }\n }\n }\n return count + this.getNodeLength(child);\n }\n count += this.getNodeLength(child);\n }\n\n return count;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"use-token-mode.d.ts","sourceRoot":"","sources":["../../../../src/prompt-input/tokens/use-token-mode.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-token-mode.d.ts","sourceRoot":"","sources":["../../../../src/prompt-input/tokens/use-token-mode.tsx"],"names":[],"mappings":"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"}
@@ -770,7 +770,10 @@ export function useTokenMode(config) {
770
770
  },
771
771
  onCut: (event) => {
772
772
  if (editableElementRef.current) {
773
- handleClipboardEvent(event, editableElementRef.current, true);
773
+ handleClipboardEvent(event, editableElementRef.current, !disabled && !readOnly);
774
+ if (!disabled && !readOnly) {
775
+ handleInput();
776
+ }
774
777
  }
775
778
  },
776
779
  onPaste: (event) => {
@@ -1 +1 @@
1
- {"version":3,"file":"use-token-mode.js","sourceRoot":"","sources":["../../../../src/prompt-input/tokens/use-token-mode.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport clsx from 'clsx';\n\nimport { useStableCallback, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useDropdownStatus } from '../../internal/components/dropdown-status';\nimport { fireKeyboardEvent, fireNonCancelableEvent } from '../../internal/events';\nimport { getFirstScrollableParent } from '../../internal/utils/scrollable-containers';\nimport Token from '../../token/internal';\nimport { calculateTokenPosition, CaretController, getOwnerSelection } from '../core/caret-controller';\nimport { extractTextFromCaretSpots } from '../core/caret-spot-utils';\nimport {\n findContainingReference,\n getMouseDown,\n isNonTypeablePosition,\n normalizeCollapsedCaret,\n normalizeSelection,\n setMouseDown,\n} from '../core/caret-utils';\nimport { NEXT_TICK_TIMEOUT } from '../core/constants';\nimport { createParagraph, findAllParagraphs } from '../core/dom-utils';\nimport { handleClipboardEvent, handleEditableKeyDown } from '../core/event-handlers';\nimport {\n handleMenuSelection,\n MenuItem,\n MenuItemsHandlers,\n MenuItemsState,\n useMenuItems,\n useMenuLoadMore,\n} from '../core/menu-state';\nimport { extractTokensFromDOM, getPromptText, processTokens } from '../core/token-operations';\nimport { PortalContainer, renderTokensToDOM } from '../core/token-renderer';\nimport {\n enforcePinnedTokenOrdering,\n getCaretPositionAfterPinnedReorder,\n getCaretPositionAfterTokenRemoval,\n mergeConsecutiveTextTokens,\n} from '../core/token-utils';\nimport { detectTriggerTransition } from '../core/trigger-utils';\nimport { isReferenceToken, isTextNode, isTextToken, isTriggerToken } from '../core/type-guards';\nimport { PromptInputProps } from '../interfaces';\nimport { insertTextIntoContentEditable } from '../utils/insert-text-content-editable';\nimport { ShortcutsState, useShortcutsEffects, useShortcutsState } from './use-shortcuts';\n\nimport styles from '../styles.css.js';\nimport testutilStyles from '../test-classes/styles.css.js';\n\n/** Mutable state shared between the editable tokens hook and event handlers. */\nexport interface EditableState {\n skipNextZeroWidthUpdate: boolean;\n menuSelectionTokenId: string | null;\n}\n\nexport function createEditableState(): EditableState {\n return {\n skipNextZeroWidthUpdate: false,\n menuSelectionTokenId: null,\n };\n}\n\n/**\n * Determines if the token array changed structurally and needs a full DOM re-render.\n *\n * Compares token types, IDs, and text values. During normal typing the extracted\n * tokens already match the DOM, so text comparisons won't trigger unnecessary\n * re-renders. External updates (parent replacing tokens) will be detected by\n * the value difference and trigger a re-render.\n *\n * Returns 'none' if no changes, 'text-only' if only token values differ\n * (same count, types, and IDs — covers both text and trigger filter changes),\n * or 'structural' for any other change.\n */\nfunction classifyChange(\n oldTokens: readonly PromptInputProps.InputToken[] | undefined,\n newTokens: readonly PromptInputProps.InputToken[] | undefined\n): 'none' | 'text-only' | 'structural' {\n if (!oldTokens || !newTokens) {\n return 'structural';\n }\n\n if (oldTokens.length !== newTokens.length) {\n return 'structural';\n }\n\n let hasTextDiff = false;\n\n for (let i = 0; i < oldTokens.length; i++) {\n const oldToken = oldTokens[i];\n const newToken = newTokens[i];\n\n if (oldToken.type !== newToken.type) {\n return 'structural';\n }\n\n if (isReferenceToken(oldToken) && isReferenceToken(newToken)) {\n if (oldToken.id !== newToken.id) {\n return 'structural';\n }\n }\n\n if (isTriggerToken(oldToken) && isTriggerToken(newToken)) {\n if (oldToken.id !== newToken.id) {\n return 'structural';\n }\n // Transition between empty and non-empty filter text changes the underline styling.\n const wasEmpty = oldToken.value.length === 0;\n const isEmpty = newToken.value.length === 0;\n if (wasEmpty !== isEmpty) {\n return 'structural';\n }\n if (oldToken.value !== newToken.value) {\n hasTextDiff = true;\n }\n }\n\n if (isTextToken(oldToken) && isTextToken(newToken)) {\n if (oldToken.value !== newToken.value) {\n hasTextDiff = true;\n }\n }\n }\n\n return hasTextDiff ? 'text-only' : 'none';\n}\n\n/**\n * Positions the caret after a menu-selected reference token.\n * Returns true if the caret was positioned (token found), false otherwise.\n */\nfunction positionCaretAfterMenuSelection(\n tokens: readonly PromptInputProps.InputToken[],\n editableState: EditableState,\n caretController: CaretController | null\n): boolean {\n if (!editableState.menuSelectionTokenId || !caretController) {\n return false;\n }\n\n const insertedTokenIndex = tokens.findIndex(t => isReferenceToken(t) && t.id === editableState.menuSelectionTokenId);\n\n if (insertedTokenIndex === -1) {\n return false;\n }\n\n const caretPos = calculateTokenPosition(tokens, insertedTokenIndex);\n caretController.setPosition(caretPos);\n editableState.menuSelectionTokenId = null;\n return true;\n}\n\n/** Finds a trigger token by its ID in the token array. */\nfunction findTriggerTokenById(\n tokens: readonly PromptInputProps.InputToken[],\n triggerId: string\n): PromptInputProps.TriggerToken | null {\n const trigger = tokens.find(token => isTriggerToken(token) && token.id === triggerId);\n if (trigger && isTriggerToken(trigger)) {\n return trigger;\n }\n return null;\n}\n\n/** Configuration for the useTokenMode hook — all props needed to drive token-mode behavior. */\nexport interface UseTokenModeConfig {\n editableElementRef: React.RefObject<HTMLDivElement>;\n caretControllerRef: React.MutableRefObject<CaretController | null>;\n\n tokens?: readonly PromptInputProps.InputToken[];\n tokensToText?: (tokens: readonly PromptInputProps.InputToken[]) => string;\n menus?: readonly PromptInputProps.MenuDefinition[];\n disabled?: boolean;\n readOnly?: boolean;\n autoFocus?: boolean;\n placeholder?: string;\n invalid?: boolean;\n warning?: boolean;\n ariaLabel?: string;\n ariaLabelledby?: string;\n ariaDescribedby?: string;\n ariaRequired?: boolean;\n disableBrowserAutocorrect?: boolean;\n spellcheck?: boolean;\n\n onChange: (detail: { value: string; tokens: PromptInputProps.InputToken[] }) => void;\n onTriggerDetected?: (detail: PromptInputProps.TriggerDetectedDetail) => boolean;\n onAction?: PromptInputProps['onAction'];\n onBlur?: PromptInputProps['onBlur'];\n onFocus?: PromptInputProps['onFocus'];\n onKeyDown?: PromptInputProps['onKeyDown'];\n onKeyUp?: PromptInputProps['onKeyUp'];\n onMenuItemSelect?: PromptInputProps['onMenuItemSelect'];\n onMenuFilter?: PromptInputProps['onMenuFilter'];\n onMenuLoadItems?: PromptInputProps['onMenuLoadItems'];\n\n i18nStrings?: PromptInputProps['i18nStrings'];\n\n adjustInputHeight: () => void;\n}\n\n/** Return value of useTokenMode — state, handlers, and attributes consumed by TokenMode component. */\nexport interface UseTokenModeResult {\n portalContainersRef: React.MutableRefObject<Map<string, PortalContainer>>;\n /** Snapshot of portal containers for rendering portals. Updated after each renderTokensToDOM call. */\n portalContainers: PortalContainer[];\n /** Portal elements to render — renders Token components into DOM containers via createPortal. */\n portals: React.ReactPortal[];\n\n editableState: EditableState;\n\n editableElementAttributes: React.HTMLAttributes<HTMLDivElement> & { 'data-placeholder'?: string };\n\n activeTriggerToken: PromptInputProps.TriggerToken | null;\n activeMenu: PromptInputProps.MenuDefinition | null;\n menuIsOpen: boolean;\n menuFilterText: string;\n triggerWrapperRef: React.MutableRefObject<HTMLElement | null>;\n triggerWrapperReady: boolean;\n\n menuListId: string;\n menuFooterControlId: string;\n highlightedMenuOptionId: string | undefined;\n menuItemsState: MenuItemsState;\n menuItemsHandlers: MenuItemsHandlers;\n menuDropdownStatus: ReturnType<typeof useDropdownStatus> | null;\n shouldRenderMenuDropdown: boolean;\n\n handleInput: () => void;\n\n handleLoadMore: () => void;\n\n tokenOperationAnnouncement: string;\n\n markTokensAsSent: (tokens: readonly PromptInputProps.InputToken[]) => void;\n}\n\ninterface ProcessorConfig {\n tokens?: readonly PromptInputProps.InputToken[];\n menus?: readonly PromptInputProps.MenuDefinition[];\n tokensToText?: (tokens: readonly PromptInputProps.InputToken[]) => string;\n onChange: (detail: { value: string; tokens: PromptInputProps.InputToken[] }) => void;\n onTriggerDetected?: (detail: PromptInputProps.TriggerDetectedDetail) => boolean;\n state: ShortcutsState;\n}\n\n/**\n * Processes token changes from both user input and external (parent) updates.\n *\n * For user input: runs trigger detection on extracted DOM tokens and emits\n * the processed result via onChange.\n *\n * For external updates: detects if the parent provided new tokens that need\n * trigger detection or ID assignment, and emits corrected tokens if so.\n * Skips processing when the tokens reference matches what we last emitted\n * (for example, the parent is echoing back our own onChange).\n */\nfunction useTokenProcessor(config: ProcessorConfig) {\n const { tokens, menus, tokensToText, onChange, onTriggerDetected, state } = config;\n\n const emitTokenChange = useStableCallback((newTokens: PromptInputProps.InputToken[]) => {\n const value = tokensToText ? tokensToText(newTokens) : getPromptText(newTokens);\n state.markTokensAsSent(newTokens);\n onChange({ value, tokens: newTokens });\n });\n\n const markCancelledTriggers = useStableCallback((cancelledIds: Set<string>) => {\n for (const id of cancelledIds) {\n state.cancelledTriggerIds.current.add(id);\n // Prevent opening the menu if the active trigger was cancelled\n if (state.caretInTrigger === id) {\n state.setCaretInTrigger(null);\n }\n }\n });\n\n /** Processes tokens extracted from the DOM after user input. */\n const processUserInput = useStableCallback((inputTokens: PromptInputProps.InputToken[]) => {\n const { tokens: processed, cancelledIds } = processTokens(\n inputTokens,\n { menus, tokensToText },\n {\n source: 'user-input',\n detectTriggers: true,\n },\n onTriggerDetected,\n state.cancelledTriggerIds.current\n );\n\n markCancelledTriggers(cancelledIds);\n emitTokenChange(processed);\n });\n\n /** Processes external token updates from the parent component. */\n useEffect(() => {\n // Skip if these are the tokens we just emitted — the parent is echoing back our onChange\n if (state.lastEmittedTokensRef.current === tokens) {\n return;\n }\n\n if (!tokens) {\n return;\n }\n\n const { tokens: processed, cancelledIds } = processTokens(\n tokens,\n { menus, tokensToText },\n {\n source: 'external',\n detectTriggers: true,\n },\n undefined,\n state.cancelledTriggerIds.current\n );\n\n markCancelledTriggers(cancelledIds);\n\n // Only emit if processing actually changed the tokens (e.g., new triggers detected,\n // IDs assigned). Compare by type, value, and ID to avoid false positives from\n // reference inequality after processTokens creates new token objects.\n const hasChanges =\n processed.length !== tokens.length ||\n processed.some((t, i) => {\n const orig = tokens[i];\n if (t.type !== orig.type || t.value !== orig.value) {\n return true;\n }\n if (isReferenceToken(t) && isReferenceToken(orig) && t.id !== orig.id) {\n return true;\n }\n if (isTriggerToken(t) && isTriggerToken(orig) && t.id !== orig.id) {\n return true;\n }\n return false;\n });\n\n if (hasChanges) {\n emitTokenChange(processed);\n } else {\n // Mark as seen even when no changes — prevents re-processing on next render\n state.lastEmittedTokensRef.current = tokens;\n }\n }, [tokens, menus, tokensToText, state, emitTokenChange, markCancelledTriggers]);\n\n return {\n processUserInput,\n };\n}\n\n/** Encapsulates all token-mode logic: trigger detection, menu state, keyboard handling, and rendering. */\nexport function useTokenMode(config: UseTokenModeConfig): UseTokenModeResult {\n const {\n editableElementRef,\n caretControllerRef,\n tokens,\n tokensToText,\n menus,\n disabled,\n readOnly,\n autoFocus,\n placeholder,\n invalid,\n warning,\n ariaLabel,\n ariaLabelledby,\n ariaDescribedby,\n ariaRequired,\n disableBrowserAutocorrect,\n spellcheck,\n onChange,\n onTriggerDetected,\n onAction,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n onMenuItemSelect,\n onMenuFilter,\n onMenuLoadItems,\n i18nStrings,\n adjustInputHeight,\n } = config;\n\n const shortcutsState = useShortcutsState();\n\n const { markTokensAsSent } = shortcutsState;\n\n const activeTriggerToken = useMemo((): PromptInputProps.TriggerToken | null => {\n if (!tokens || !caretControllerRef.current) {\n return null;\n }\n\n const activeTriggerID = caretControllerRef.current.findActiveTrigger()?.id || null;\n\n if (!activeTriggerID) {\n return null;\n }\n\n if (shortcutsState.cancelledTriggerIds.current.has(activeTriggerID)) {\n return null;\n }\n\n return findTriggerTokenById(tokens, activeTriggerID);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- caretInTrigger is the invalidation signal from useShortcutsEffects\n }, [tokens, caretControllerRef, shortcutsState.caretInTrigger]);\n\n const activeMenu = useMemo(\n () =>\n activeTriggerToken && shortcutsState.caretInTrigger && !disabled && !readOnly\n ? (menus?.find(m => m.trigger === activeTriggerToken.triggerChar) ?? null)\n : null,\n [activeTriggerToken, shortcutsState.caretInTrigger, menus, disabled, readOnly]\n );\n\n const menuIsOpen = !!activeMenu;\n const menuFilterText = activeTriggerToken?.value ?? '';\n\n const processor = useTokenProcessor({\n tokens,\n menus,\n tokensToText,\n onChange,\n onTriggerDetected,\n state: shortcutsState,\n });\n\n const { processUserInput } = processor;\n\n useShortcutsEffects({\n tokens,\n editableElementRef,\n state: shortcutsState,\n activeTriggerToken,\n caretController: caretControllerRef,\n });\n\n const triggerWrapperRef = useRef<HTMLElement | null>(null);\n const [triggerVisible, setTriggerVisible] = useState(true);\n\n // Resolve the trigger DOM element synchronously during render from the tracked map.\n // The Dropdown's contentKey (which includes activeTriggerToken.id) handles\n // repositioning when the active trigger changes — no open/close toggle needed.\n if (activeTriggerToken?.id && menuIsOpen) {\n triggerWrapperRef.current = shortcutsState.triggerElementsRef.current.get(activeTriggerToken.id) ?? null;\n } else {\n triggerWrapperRef.current = null;\n }\n\n const triggerWrapperReady = !!triggerWrapperRef.current && menuIsOpen;\n\n // Hide menu dropdown when trigger scrolls out of the editable container\n useEffect(() => {\n if (!menuIsOpen || !triggerWrapperRef.current || !editableElementRef.current) {\n setTriggerVisible(true);\n return;\n }\n\n const trigger = triggerWrapperRef.current;\n const container = editableElementRef.current;\n\n const checkTriggerVisibility = () => {\n const triggerRect = trigger.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n const isOutOfView = triggerRect.bottom < containerRect.top || triggerRect.top > containerRect.bottom;\n setTriggerVisible(!isOutOfView);\n };\n\n checkTriggerVisibility();\n\n container.addEventListener('scroll', checkTriggerVisibility);\n\n const scrollableParent = getFirstScrollableParent(container);\n if (scrollableParent) {\n scrollableParent.addEventListener('scroll', checkTriggerVisibility);\n }\n\n return () => {\n container.removeEventListener('scroll', checkTriggerVisibility);\n if (scrollableParent) {\n scrollableParent.removeEventListener('scroll', checkTriggerVisibility);\n }\n };\n }, [menuIsOpen, editableElementRef, activeTriggerToken]);\n\n const portalContainersRef = useRef<Map<string, PortalContainer>>(new Map());\n const [portalContainers, setPortalContainers] = useState<PortalContainer[]>([]);\n\n const renderTokens = useCallback(\n (tokens: readonly PromptInputProps.InputToken[], target: HTMLElement) => {\n const result = renderTokensToDOM(\n tokens,\n target,\n portalContainersRef.current,\n shortcutsState.triggerElementsRef.current,\n shortcutsState.cancelledTriggerIds.current\n );\n\n // Update trigger element map from render result\n shortcutsState.triggerElementsRef.current = new Map(result.triggerElements);\n\n setPortalContainers(Array.from(portalContainersRef.current.values()));\n return result;\n },\n [shortcutsState.triggerElementsRef, shortcutsState.cancelledTriggerIds, portalContainersRef]\n );\n\n useLayoutEffect(() => {\n if (editableElementRef.current && !caretControllerRef.current) {\n caretControllerRef.current = new CaretController(editableElementRef.current);\n }\n }, [editableElementRef, caretControllerRef]);\n\n const editableState = useRef(createEditableState()).current;\n\n const [tokenOperationAnnouncement, setTokenOperationAnnouncement] = useState<string>('');\n\n const announceTokenOperation = useStableCallback((message: string) => {\n setTokenOperationAnnouncement(message);\n });\n\n const lastRenderedTokensRef = useRef<readonly PromptInputProps.InputToken[] | undefined>(undefined);\n const lastDisabledRef = useRef(disabled);\n const lastReadOnlyRef = useRef(readOnly);\n\n // Refs to avoid recreating handleInput when these change (new array reference each render).\n const menusRef = useRef(menus);\n menusRef.current = menus;\n\n const handleInput = useCallback(() => {\n if (!editableElementRef.current) {\n return;\n }\n\n const ownerDoc = editableElementRef.current.ownerDocument ?? document;\n const cc = caretControllerRef.current;\n\n if (cc) {\n cc.capture();\n }\n\n if (editableState.skipNextZeroWidthUpdate) {\n editableState.skipNextZeroWidthUpdate = false;\n }\n\n const { movedTextNode } = extractTextFromCaretSpots(portalContainersRef.current, true);\n\n // Extract filter text from cancelled triggers, moving it to the paragraph level\n for (const id of shortcutsState.cancelledTriggerIds.current) {\n const trigger =\n shortcutsState.triggerElementsRef.current.get(id) ??\n (editableElementRef.current.querySelector(`#${CSS.escape(id)}`) as HTMLElement | null);\n if (!trigger) {\n continue;\n }\n const filterText = (trigger.textContent || '').substring(1);\n if (!filterText) {\n continue;\n }\n\n let caretInTrigger = false;\n const selection = editableElementRef.current ? getOwnerSelection(editableElementRef.current) : null;\n if (selection?.rangeCount && trigger.contains(selection.getRangeAt(0).startContainer)) {\n caretInTrigger = true;\n }\n\n const textNode = ownerDoc.createTextNode(filterText);\n trigger.parentNode?.insertBefore(textNode, trigger.nextSibling);\n trigger.textContent = (trigger.textContent || '').charAt(0);\n\n if (caretInTrigger && !movedTextNode) {\n if (cc) {\n cc.positionAfterText(textNode);\n }\n }\n }\n\n if (movedTextNode && cc) {\n cc.positionAfterText(movedTextNode);\n }\n\n const directTextNodes = Array.from(editableElementRef.current.childNodes).filter(\n node => isTextNode(node) && node.textContent?.trim()\n );\n\n if (directTextNodes.length > 0) {\n if (cc) {\n cc.capture();\n }\n\n let targetP = findAllParagraphs(editableElementRef.current)[0];\n if (!targetP) {\n targetP = createParagraph();\n editableElementRef.current.appendChild(targetP);\n }\n\n directTextNodes.forEach(textNode => {\n targetP!.appendChild(textNode);\n });\n\n if (cc) {\n cc.restore();\n }\n }\n\n let extractedTokens = extractTokensFromDOM(\n editableElementRef.current,\n menusRef.current,\n portalContainersRef.current\n );\n\n // When a new trigger appears in the DOM, render immediately to ensure the\n // trigger element exists before subsequent caret operations.\n const newTriggers = extractedTokens.filter(isTriggerToken);\n const existingTriggerIds = new Set(shortcutsState.triggerElementsRef.current.keys());\n if (newTriggers.some(t => !existingTriggerIds.has(t.id))) {\n renderTokens(extractedTokens, editableElementRef.current);\n }\n\n const movedTokens = enforcePinnedTokenOrdering(extractedTokens);\n const tokensWereMoved = movedTokens.some((t, i) => t !== extractedTokens[i]);\n\n const mergedTokens = mergeConsecutiveTextTokens(movedTokens);\n\n if (tokensWereMoved) {\n const caretPosBeforeMove = cc?.getPosition() ?? 0;\n const adjustedPosition = getCaretPositionAfterPinnedReorder(extractedTokens, mergedTokens, caretPosBeforeMove);\n\n extractedTokens = mergedTokens;\n\n renderTokens(mergedTokens, editableElementRef.current);\n\n if (editableElementRef.current && ownerDoc.activeElement === editableElementRef.current && cc) {\n cc.setPosition(adjustedPosition);\n }\n }\n\n processUserInput(extractedTokens);\n\n adjustInputHeight();\n }, [\n processUserInput,\n adjustInputHeight,\n editableElementRef,\n caretControllerRef,\n portalContainersRef,\n editableState,\n renderTokens,\n shortcutsState.triggerElementsRef,\n shortcutsState.cancelledTriggerIds,\n ]);\n\n // Token render effect\n useLayoutEffect(() => {\n if (!editableElementRef.current) {\n return;\n }\n\n const cc = caretControllerRef.current;\n const orderedTokens = tokens ? enforcePinnedTokenOrdering(tokens) : tokens;\n const prevOrderedTokens = lastRenderedTokensRef.current;\n\n const stateChanged = lastDisabledRef.current !== disabled || lastReadOnlyRef.current !== readOnly;\n lastDisabledRef.current = disabled;\n lastReadOnlyRef.current = readOnly;\n\n const triggerTransition = detectTriggerTransition(lastRenderedTokensRef.current, orderedTokens);\n\n const changeType = classifyChange(lastRenderedTokensRef.current, orderedTokens);\n const needsRerender = stateChanged || changeType !== 'none' || triggerTransition > 0;\n\n if (!needsRerender) {\n positionCaretAfterMenuSelection(orderedTokens ?? [], editableState, cc);\n\n lastRenderedTokensRef.current = orderedTokens;\n return;\n }\n\n // Text-only changes from user input are already reflected in the DOM by the\n // browser's native editing. Skip re-render to preserve cursor position —\n // Text-only changes from user input are already reflected in the DOM by the\n // browser's native editing. Skip re-render to preserve cursor position —\n // re-rendering would read a corrupted position from normalizeCaretIntoTrigger.\n // External updates still need a re-render.\n if (\n changeType === 'text-only' &&\n !stateChanged &&\n triggerTransition === 0 &&\n shortcutsState.lastEmittedTokensRef.current === tokens\n ) {\n lastRenderedTokensRef.current = orderedTokens;\n return;\n }\n\n if (triggerTransition > 0 && orderedTokens && cc) {\n renderTokens(orderedTokens, editableElementRef.current);\n lastRenderedTokensRef.current = orderedTokens;\n cc.setPosition(triggerTransition);\n adjustInputHeight();\n return;\n }\n\n // A new trigger appeared (e.g. user typed a trigger char, possibly replacing a selection).\n // Position the caret after the trigger character so the user can start typing a filter.\n const newTrigger =\n orderedTokens &&\n prevOrderedTokens &&\n orderedTokens.find(t => isTriggerToken(t) && !prevOrderedTokens.some(p => isTriggerToken(p) && p.id === t.id));\n if (newTrigger && isTriggerToken(newTrigger) && cc) {\n renderTokens(orderedTokens, editableElementRef.current);\n lastRenderedTokensRef.current = orderedTokens;\n // Use the saved position from insertText if available, otherwise position after the trigger char\n const savedPos = cc.getSavedPosition();\n if (savedPos !== null) {\n cc.setPosition(savedPos);\n } else {\n const triggerIndex = orderedTokens.indexOf(newTrigger);\n const posBeforeTrigger = triggerIndex > 0 ? calculateTokenPosition(orderedTokens, triggerIndex - 1) : 0;\n cc.setPosition(posBeforeTrigger + newTrigger.triggerChar.length);\n }\n adjustInputHeight();\n return;\n }\n\n if (\n lastRenderedTokensRef.current &&\n orderedTokens &&\n lastRenderedTokensRef.current.length === 0 &&\n orderedTokens.length === 0\n ) {\n lastRenderedTokensRef.current = orderedTokens;\n return;\n }\n\n if (editableState.menuSelectionTokenId && cc) {\n const insertedTokenIndex = (orderedTokens ?? []).findIndex(\n t => isReferenceToken(t) && t.id === editableState.menuSelectionTokenId\n );\n\n if (insertedTokenIndex !== -1) {\n renderTokens(orderedTokens ?? [], editableElementRef.current);\n positionCaretAfterMenuSelection(orderedTokens ?? [], editableState, cc);\n\n lastRenderedTokensRef.current = orderedTokens;\n adjustInputHeight();\n return;\n }\n }\n\n lastRenderedTokensRef.current = orderedTokens;\n\n if (cc) {\n cc.capture();\n }\n\n renderTokens(orderedTokens ?? [], editableElementRef.current);\n\n if (positionCaretAfterMenuSelection(orderedTokens ?? [], editableState, cc)) {\n adjustInputHeight();\n return;\n }\n\n if (cc) {\n const savedPosition = cc.getSavedPosition();\n const restoredPosition = getCaretPositionAfterTokenRemoval(\n savedPosition,\n prevOrderedTokens ?? [],\n orderedTokens ?? []\n );\n\n if (restoredPosition !== null) {\n cc.setPosition(restoredPosition);\n } else {\n cc.restore();\n }\n }\n\n adjustInputHeight();\n }, [\n disabled,\n readOnly,\n tokens,\n adjustInputHeight,\n caretControllerRef,\n editableElementRef,\n portalContainersRef,\n editableState,\n renderTokens,\n shortcutsState,\n ]);\n\n useEffect(() => {\n const handleSelectionChange = () => {\n const sel = editableElementRef.current ? getOwnerSelection(editableElementRef.current) : null;\n if (!sel?.rangeCount || !editableElementRef.current?.contains(sel.getRangeAt(0).startContainer)) {\n return;\n }\n // Skip caret normalization during mousedown — the user may be starting a\n // drag selection from a caret-spot position adjacent to a reference.\n if (!getMouseDown()) {\n normalizeCollapsedCaret(sel);\n }\n normalizeSelection(sel);\n };\n const handleMouseDown = () => {\n setMouseDown(true);\n };\n const handleMouseUp = () => {\n setMouseDown(false);\n const sel = editableElementRef.current ? getOwnerSelection(editableElementRef.current) : null;\n if (!sel?.rangeCount || !editableElementRef.current?.contains(sel.getRangeAt(0).startContainer)) {\n return;\n }\n normalizeCollapsedCaret(sel);\n normalizeSelection(sel);\n\n // Deferred re-check: browsers may finalize caret position after mouseup\n /* istanbul ignore next -- browser mouseup normalization covered by integ tests */\n requestAnimationFrame(() => {\n const sel = editableElementRef.current ? getOwnerSelection(editableElementRef.current) : null;\n if (!sel?.rangeCount) {\n return;\n }\n\n const range = sel.getRangeAt(0);\n if (!range.collapsed) {\n const startBad = isNonTypeablePosition(range.startContainer);\n const endBad = isNonTypeablePosition(range.endContainer);\n\n if (startBad) {\n const ref = findContainingReference(range.startContainer);\n if (ref?.parentNode) {\n const index = Array.from(ref.parentNode.childNodes).indexOf(ref as ChildNode);\n range.setStart(ref.parentNode, index);\n }\n }\n if (endBad) {\n const ref = findContainingReference(range.endContainer);\n if (ref?.parentNode) {\n const index = Array.from(ref.parentNode.childNodes).indexOf(ref as ChildNode);\n range.setEnd(ref.parentNode, index + 1);\n }\n }\n }\n\n normalizeCollapsedCaret(sel);\n normalizeSelection(sel);\n });\n };\n\n const ownerDoc = editableElementRef.current?.ownerDocument ?? document;\n const element = editableElementRef.current;\n // selectionchange only fires on document — containment is checked inside the handler.\n ownerDoc.addEventListener('selectionchange', handleSelectionChange);\n // mousedown/mouseup scoped to the element to avoid reacting to clicks elsewhere.\n element?.addEventListener('mousedown', handleMouseDown);\n element?.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n ownerDoc.removeEventListener('selectionchange', handleSelectionChange);\n element?.removeEventListener('mousedown', handleMouseDown);\n element?.removeEventListener('mouseup', handleMouseUp);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- only needs to run on mount\n }, []);\n\n const handleMenuSelect = useStableCallback((option: MenuItem) => {\n if (!activeMenu || !activeTriggerToken || !tokens) {\n return;\n }\n\n shortcutsState.setCaretInTrigger(null);\n\n const result = handleMenuSelection(\n tokens,\n {\n value: option.option.value || '',\n label: option.option.label || option.option.value || '',\n },\n activeMenu.id,\n activeMenu.useAtStart ?? false,\n activeTriggerToken\n );\n\n const value = tokensToText ? tokensToText(result.tokens) : getPromptText(result.tokens);\n markTokensAsSent(result.tokens);\n\n editableState.menuSelectionTokenId = result.insertedToken.id || null;\n\n const isPinned = activeMenu.useAtStart ?? false;\n const announcement = isPinned\n ? i18nStrings?.tokenPinnedAriaLabel?.(result.insertedToken)\n : i18nStrings?.tokenInsertedAriaLabel?.(result.insertedToken);\n\n if (announcement) {\n announceTokenOperation(announcement);\n }\n\n onChange({ value, tokens: result.tokens });\n\n fireNonCancelableEvent(onMenuItemSelect, {\n menuId: activeMenu.id,\n option: option.option,\n });\n });\n\n const [menuItemsState, menuItemsHandlers] = useMenuItems({\n menu: activeMenu ?? { id: '', trigger: '', options: [] },\n filterText: menuFilterText,\n onSelectItem: handleMenuSelect,\n });\n\n const menuStateRef = useRef({\n itemsState: menuItemsState,\n itemsHandlers: menuItemsHandlers,\n isOpen: menuIsOpen,\n });\n menuStateRef.current = {\n itemsState: menuItemsState,\n itemsHandlers: menuItemsHandlers,\n isOpen: menuIsOpen,\n };\n\n const closeMenu = useStableCallback(() => {\n shortcutsState.menuJustClosed.current = shortcutsState.caretInTrigger;\n shortcutsState.setCaretInTrigger(null);\n });\n\n const handleEditableElementKeyDown = useStableCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n handleEditableKeyDown(event, {\n editableElement: editableElementRef.current,\n editableState,\n caretController: caretControllerRef.current,\n tokens,\n tokensToText,\n disabled,\n readOnly,\n i18nStrings,\n announceTokenOperation,\n getMenuOpen: () => menuStateRef.current.isOpen,\n getMenuItemsState: () => menuStateRef.current.itemsState,\n getMenuItemsHandlers: () => menuStateRef.current.itemsHandlers,\n getMenuStatusType: () => activeMenu?.statusType,\n closeMenu,\n onAction: onAction ? detail => fireNonCancelableEvent(onAction, detail) : undefined,\n onChange,\n markTokensAsSent,\n onKeyDown,\n });\n });\n\n const handleEditableElementFocus = useStableCallback(() => {\n if (onFocus) {\n fireNonCancelableEvent(onFocus);\n }\n });\n\n const handleEditableElementBlur = useStableCallback(() => {\n if (onBlur) {\n fireNonCancelableEvent(onBlur);\n }\n });\n\n useEffect(() => {\n if (autoFocus && editableElementRef.current) {\n editableElementRef.current.focus();\n }\n // Intentionally run only on mount — autoFocus should fire once\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const ownerWindow = (editableElementRef.current?.ownerDocument ?? document).defaultView ?? window;\n const handleResize = () => adjustInputHeight();\n ownerWindow.addEventListener('resize', handleResize);\n return () => {\n ownerWindow.removeEventListener('resize', handleResize);\n };\n }, [adjustInputHeight, editableElementRef]);\n\n const menuLoadMoreResult = useMenuLoadMore({\n menu: activeMenu ?? { id: '', trigger: '', options: [] },\n statusType: activeMenu?.statusType ?? 'finished',\n onLoadItems: detail => {\n fireNonCancelableEvent(onMenuLoadItems, detail);\n },\n onLoadMoreItems: () => {\n fireNonCancelableEvent(onMenuLoadItems, {\n menuId: activeMenu?.id ?? '',\n filteringText: undefined,\n firstPage: false,\n samePage: false,\n });\n },\n });\n\n const menuLoadMoreHandlers = activeMenu ? menuLoadMoreResult : null;\n\n useEffect(() => {\n if (menuIsOpen && activeMenu && menuLoadMoreHandlers) {\n menuLoadMoreHandlers.fireLoadMoreOnMenuOpen();\n }\n }, [menuIsOpen, activeMenu, menuLoadMoreHandlers]);\n\n const prevMenuOpenRef = useRef(false);\n const prevItemsLengthRef = useRef(0);\n\n useEffect(() => {\n const justOpened = menuIsOpen && !prevMenuOpenRef.current;\n const itemsLoaded =\n menuIsOpen && prevMenuOpenRef.current && prevItemsLengthRef.current === 0 && menuItemsState.items.length > 0;\n\n if ((justOpened || itemsLoaded) && menuItemsHandlers && menuItemsState && menuItemsState.items.length > 0) {\n // Reset highlight so goHomeWithKeyboard triggers a state change even at index 0\n menuItemsHandlers.resetHighlightWithKeyboard();\n setTimeout(() => {\n menuItemsHandlers?.goHomeWithKeyboard();\n }, NEXT_TICK_TIMEOUT);\n }\n\n prevMenuOpenRef.current = menuIsOpen;\n prevItemsLengthRef.current = menuItemsState?.items.length ?? 0;\n // eslint-disable-next-line react-hooks/exhaustive-deps -- only needs to react to menu open/close and item count changes\n }, [menuIsOpen, menuItemsState.items.length]);\n\n useEffect(() => {\n if (activeTriggerToken && activeMenu && onMenuFilter) {\n fireNonCancelableEvent(onMenuFilter, {\n menuId: activeMenu.id,\n filteringText: activeTriggerToken.value,\n });\n }\n }, [activeTriggerToken, activeMenu, onMenuFilter]);\n\n const handleLoadMore = useStableCallback(() => {\n if (menuLoadMoreHandlers) {\n menuLoadMoreHandlers.fireLoadMoreOnScroll();\n }\n });\n\n const menuListId = useUniqueId('menu-list');\n const menuFooterControlId = useUniqueId('menu-footer');\n const highlightedMenuOptionIdSource = useUniqueId();\n const highlightedMenuOptionId = menuItemsState?.highlightedOption ? highlightedMenuOptionIdSource : undefined;\n\n const menuDropdownStatusResult = useDropdownStatus({\n ...(activeMenu ?? {}),\n isEmpty: !menuItemsState || menuItemsState.items.length === 0,\n recoveryText: i18nStrings?.menuRecoveryText,\n errorIconAriaLabel: i18nStrings?.menuErrorIconAriaLabel,\n loadingText: i18nStrings?.menuLoadingText,\n finishedText: i18nStrings?.menuFinishedText,\n errorText: i18nStrings?.menuErrorText,\n onRecoveryClick: () => {\n if (menuLoadMoreHandlers) {\n menuLoadMoreHandlers.fireLoadMoreOnRecoveryClick();\n }\n editableElementRef.current?.focus();\n },\n hasRecoveryCallback: Boolean(onMenuLoadItems),\n });\n\n const menuDropdownStatus = activeMenu ? menuDropdownStatusResult : null;\n\n const shouldRenderMenuDropdown = useMemo(() => {\n return !!(menuIsOpen && activeMenu && menuItemsState && triggerVisible);\n }, [menuIsOpen, activeMenu, menuItemsState, triggerVisible]);\n\n const showPlaceholder = !!(placeholder && (!tokens || tokens.length === 0));\n\n const editableElementAttributes: React.HTMLAttributes<HTMLDivElement> & { 'data-placeholder'?: string } = {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-invalid': invalid ? 'true' : undefined,\n 'aria-disabled': disabled ? 'true' : undefined,\n 'aria-readonly': readOnly ? 'true' : undefined,\n 'aria-required': ariaRequired ? 'true' : undefined,\n 'data-placeholder': placeholder,\n className: clsx(styles.textarea, testutilStyles.textarea, {\n [styles.invalid]: invalid,\n [styles.warning]: warning,\n [styles['textarea-disabled']]: disabled,\n [styles['textarea-readonly']]: readOnly,\n [styles['placeholder-visible']]: showPlaceholder,\n }),\n autoCorrect: disableBrowserAutocorrect ? 'off' : undefined,\n autoCapitalize: disableBrowserAutocorrect ? 'off' : undefined,\n spellCheck: spellcheck,\n // When disabled, omit tabIndex entirely so the div is not focusable at all.\n tabIndex: disabled ? undefined : 0,\n onKeyDown: handleEditableElementKeyDown,\n onKeyUp: onKeyUp && (event => fireKeyboardEvent(onKeyUp, event)),\n onBlur: handleEditableElementBlur,\n onFocus: handleEditableElementFocus,\n onCopy: (event: React.ClipboardEvent) => {\n if (editableElementRef.current) {\n handleClipboardEvent(event, editableElementRef.current, false);\n }\n },\n onCut: (event: React.ClipboardEvent) => {\n if (editableElementRef.current) {\n handleClipboardEvent(event, editableElementRef.current, true);\n }\n },\n onPaste: (event: React.ClipboardEvent) => {\n event.preventDefault();\n if (disabled || readOnly) {\n return;\n }\n const text = event.clipboardData.getData('text/plain');\n if (!text || !editableElementRef.current || !caretControllerRef.current) {\n return;\n }\n const cc = caretControllerRef.current;\n // Pass undefined for caretStart/caretEnd — let insertText calculate\n // the position after the selection is deleted by replaceSelection.\n insertTextIntoContentEditable(editableElementRef.current, text, undefined, undefined, cc, true);\n },\n };\n\n const portals = portalContainers.map(container =>\n ReactDOM.createPortal(\n <Token key={container.id} variant=\"inline\" label={container.label} disabled={!!disabled} readOnly={!!readOnly} />,\n container.element\n )\n );\n\n return {\n portalContainersRef,\n portalContainers,\n portals,\n editableState,\n editableElementAttributes,\n activeTriggerToken,\n activeMenu,\n menuIsOpen,\n menuFilterText,\n triggerWrapperRef,\n triggerWrapperReady,\n menuListId,\n menuFooterControlId,\n highlightedMenuOptionId,\n menuItemsState,\n menuItemsHandlers,\n menuDropdownStatus,\n shouldRenderMenuDropdown,\n handleInput,\n handleLoadMore,\n tokenOperationAnnouncement,\n markTokensAsSent,\n };\n}\n"]}
1
+ {"version":3,"file":"use-token-mode.js","sourceRoot":"","sources":["../../../../src/prompt-input/tokens/use-token-mode.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport clsx from 'clsx';\n\nimport { useStableCallback, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useDropdownStatus } from '../../internal/components/dropdown-status';\nimport { fireKeyboardEvent, fireNonCancelableEvent } from '../../internal/events';\nimport { getFirstScrollableParent } from '../../internal/utils/scrollable-containers';\nimport Token from '../../token/internal';\nimport { calculateTokenPosition, CaretController, getOwnerSelection } from '../core/caret-controller';\nimport { extractTextFromCaretSpots } from '../core/caret-spot-utils';\nimport {\n findContainingReference,\n getMouseDown,\n isNonTypeablePosition,\n normalizeCollapsedCaret,\n normalizeSelection,\n setMouseDown,\n} from '../core/caret-utils';\nimport { NEXT_TICK_TIMEOUT } from '../core/constants';\nimport { createParagraph, findAllParagraphs } from '../core/dom-utils';\nimport { handleClipboardEvent, handleEditableKeyDown } from '../core/event-handlers';\nimport {\n handleMenuSelection,\n MenuItem,\n MenuItemsHandlers,\n MenuItemsState,\n useMenuItems,\n useMenuLoadMore,\n} from '../core/menu-state';\nimport { extractTokensFromDOM, getPromptText, processTokens } from '../core/token-operations';\nimport { PortalContainer, renderTokensToDOM } from '../core/token-renderer';\nimport {\n enforcePinnedTokenOrdering,\n getCaretPositionAfterPinnedReorder,\n getCaretPositionAfterTokenRemoval,\n mergeConsecutiveTextTokens,\n} from '../core/token-utils';\nimport { detectTriggerTransition } from '../core/trigger-utils';\nimport { isReferenceToken, isTextNode, isTextToken, isTriggerToken } from '../core/type-guards';\nimport { PromptInputProps } from '../interfaces';\nimport { insertTextIntoContentEditable } from '../utils/insert-text-content-editable';\nimport { ShortcutsState, useShortcutsEffects, useShortcutsState } from './use-shortcuts';\n\nimport styles from '../styles.css.js';\nimport testutilStyles from '../test-classes/styles.css.js';\n\n/** Mutable state shared between the editable tokens hook and event handlers. */\nexport interface EditableState {\n skipNextZeroWidthUpdate: boolean;\n menuSelectionTokenId: string | null;\n}\n\nexport function createEditableState(): EditableState {\n return {\n skipNextZeroWidthUpdate: false,\n menuSelectionTokenId: null,\n };\n}\n\n/**\n * Determines if the token array changed structurally and needs a full DOM re-render.\n *\n * Compares token types, IDs, and text values. During normal typing the extracted\n * tokens already match the DOM, so text comparisons won't trigger unnecessary\n * re-renders. External updates (parent replacing tokens) will be detected by\n * the value difference and trigger a re-render.\n *\n * Returns 'none' if no changes, 'text-only' if only token values differ\n * (same count, types, and IDs — covers both text and trigger filter changes),\n * or 'structural' for any other change.\n */\nfunction classifyChange(\n oldTokens: readonly PromptInputProps.InputToken[] | undefined,\n newTokens: readonly PromptInputProps.InputToken[] | undefined\n): 'none' | 'text-only' | 'structural' {\n if (!oldTokens || !newTokens) {\n return 'structural';\n }\n\n if (oldTokens.length !== newTokens.length) {\n return 'structural';\n }\n\n let hasTextDiff = false;\n\n for (let i = 0; i < oldTokens.length; i++) {\n const oldToken = oldTokens[i];\n const newToken = newTokens[i];\n\n if (oldToken.type !== newToken.type) {\n return 'structural';\n }\n\n if (isReferenceToken(oldToken) && isReferenceToken(newToken)) {\n if (oldToken.id !== newToken.id) {\n return 'structural';\n }\n }\n\n if (isTriggerToken(oldToken) && isTriggerToken(newToken)) {\n if (oldToken.id !== newToken.id) {\n return 'structural';\n }\n // Transition between empty and non-empty filter text changes the underline styling.\n const wasEmpty = oldToken.value.length === 0;\n const isEmpty = newToken.value.length === 0;\n if (wasEmpty !== isEmpty) {\n return 'structural';\n }\n if (oldToken.value !== newToken.value) {\n hasTextDiff = true;\n }\n }\n\n if (isTextToken(oldToken) && isTextToken(newToken)) {\n if (oldToken.value !== newToken.value) {\n hasTextDiff = true;\n }\n }\n }\n\n return hasTextDiff ? 'text-only' : 'none';\n}\n\n/**\n * Positions the caret after a menu-selected reference token.\n * Returns true if the caret was positioned (token found), false otherwise.\n */\nfunction positionCaretAfterMenuSelection(\n tokens: readonly PromptInputProps.InputToken[],\n editableState: EditableState,\n caretController: CaretController | null\n): boolean {\n if (!editableState.menuSelectionTokenId || !caretController) {\n return false;\n }\n\n const insertedTokenIndex = tokens.findIndex(t => isReferenceToken(t) && t.id === editableState.menuSelectionTokenId);\n\n if (insertedTokenIndex === -1) {\n return false;\n }\n\n const caretPos = calculateTokenPosition(tokens, insertedTokenIndex);\n caretController.setPosition(caretPos);\n editableState.menuSelectionTokenId = null;\n return true;\n}\n\n/** Finds a trigger token by its ID in the token array. */\nfunction findTriggerTokenById(\n tokens: readonly PromptInputProps.InputToken[],\n triggerId: string\n): PromptInputProps.TriggerToken | null {\n const trigger = tokens.find(token => isTriggerToken(token) && token.id === triggerId);\n if (trigger && isTriggerToken(trigger)) {\n return trigger;\n }\n return null;\n}\n\n/** Configuration for the useTokenMode hook — all props needed to drive token-mode behavior. */\nexport interface UseTokenModeConfig {\n editableElementRef: React.RefObject<HTMLDivElement>;\n caretControllerRef: React.MutableRefObject<CaretController | null>;\n\n tokens?: readonly PromptInputProps.InputToken[];\n tokensToText?: (tokens: readonly PromptInputProps.InputToken[]) => string;\n menus?: readonly PromptInputProps.MenuDefinition[];\n disabled?: boolean;\n readOnly?: boolean;\n autoFocus?: boolean;\n placeholder?: string;\n invalid?: boolean;\n warning?: boolean;\n ariaLabel?: string;\n ariaLabelledby?: string;\n ariaDescribedby?: string;\n ariaRequired?: boolean;\n disableBrowserAutocorrect?: boolean;\n spellcheck?: boolean;\n\n onChange: (detail: { value: string; tokens: PromptInputProps.InputToken[] }) => void;\n onTriggerDetected?: (detail: PromptInputProps.TriggerDetectedDetail) => boolean;\n onAction?: PromptInputProps['onAction'];\n onBlur?: PromptInputProps['onBlur'];\n onFocus?: PromptInputProps['onFocus'];\n onKeyDown?: PromptInputProps['onKeyDown'];\n onKeyUp?: PromptInputProps['onKeyUp'];\n onMenuItemSelect?: PromptInputProps['onMenuItemSelect'];\n onMenuFilter?: PromptInputProps['onMenuFilter'];\n onMenuLoadItems?: PromptInputProps['onMenuLoadItems'];\n\n i18nStrings?: PromptInputProps['i18nStrings'];\n\n adjustInputHeight: () => void;\n}\n\n/** Return value of useTokenMode — state, handlers, and attributes consumed by TokenMode component. */\nexport interface UseTokenModeResult {\n portalContainersRef: React.MutableRefObject<Map<string, PortalContainer>>;\n /** Snapshot of portal containers for rendering portals. Updated after each renderTokensToDOM call. */\n portalContainers: PortalContainer[];\n /** Portal elements to render — renders Token components into DOM containers via createPortal. */\n portals: React.ReactPortal[];\n\n editableState: EditableState;\n\n editableElementAttributes: React.HTMLAttributes<HTMLDivElement> & { 'data-placeholder'?: string };\n\n activeTriggerToken: PromptInputProps.TriggerToken | null;\n activeMenu: PromptInputProps.MenuDefinition | null;\n menuIsOpen: boolean;\n menuFilterText: string;\n triggerWrapperRef: React.MutableRefObject<HTMLElement | null>;\n triggerWrapperReady: boolean;\n\n menuListId: string;\n menuFooterControlId: string;\n highlightedMenuOptionId: string | undefined;\n menuItemsState: MenuItemsState;\n menuItemsHandlers: MenuItemsHandlers;\n menuDropdownStatus: ReturnType<typeof useDropdownStatus> | null;\n shouldRenderMenuDropdown: boolean;\n\n handleInput: () => void;\n\n handleLoadMore: () => void;\n\n tokenOperationAnnouncement: string;\n\n markTokensAsSent: (tokens: readonly PromptInputProps.InputToken[]) => void;\n}\n\ninterface ProcessorConfig {\n tokens?: readonly PromptInputProps.InputToken[];\n menus?: readonly PromptInputProps.MenuDefinition[];\n tokensToText?: (tokens: readonly PromptInputProps.InputToken[]) => string;\n onChange: (detail: { value: string; tokens: PromptInputProps.InputToken[] }) => void;\n onTriggerDetected?: (detail: PromptInputProps.TriggerDetectedDetail) => boolean;\n state: ShortcutsState;\n}\n\n/**\n * Processes token changes from both user input and external (parent) updates.\n *\n * For user input: runs trigger detection on extracted DOM tokens and emits\n * the processed result via onChange.\n *\n * For external updates: detects if the parent provided new tokens that need\n * trigger detection or ID assignment, and emits corrected tokens if so.\n * Skips processing when the tokens reference matches what we last emitted\n * (for example, the parent is echoing back our own onChange).\n */\nfunction useTokenProcessor(config: ProcessorConfig) {\n const { tokens, menus, tokensToText, onChange, onTriggerDetected, state } = config;\n\n const emitTokenChange = useStableCallback((newTokens: PromptInputProps.InputToken[]) => {\n const value = tokensToText ? tokensToText(newTokens) : getPromptText(newTokens);\n state.markTokensAsSent(newTokens);\n onChange({ value, tokens: newTokens });\n });\n\n const markCancelledTriggers = useStableCallback((cancelledIds: Set<string>) => {\n for (const id of cancelledIds) {\n state.cancelledTriggerIds.current.add(id);\n // Prevent opening the menu if the active trigger was cancelled\n if (state.caretInTrigger === id) {\n state.setCaretInTrigger(null);\n }\n }\n });\n\n /** Processes tokens extracted from the DOM after user input. */\n const processUserInput = useStableCallback((inputTokens: PromptInputProps.InputToken[]) => {\n const { tokens: processed, cancelledIds } = processTokens(\n inputTokens,\n { menus, tokensToText },\n {\n source: 'user-input',\n detectTriggers: true,\n },\n onTriggerDetected,\n state.cancelledTriggerIds.current\n );\n\n markCancelledTriggers(cancelledIds);\n emitTokenChange(processed);\n });\n\n /** Processes external token updates from the parent component. */\n useEffect(() => {\n // Skip if these are the tokens we just emitted — the parent is echoing back our onChange\n if (state.lastEmittedTokensRef.current === tokens) {\n return;\n }\n\n if (!tokens) {\n return;\n }\n\n const { tokens: processed, cancelledIds } = processTokens(\n tokens,\n { menus, tokensToText },\n {\n source: 'external',\n detectTriggers: true,\n },\n undefined,\n state.cancelledTriggerIds.current\n );\n\n markCancelledTriggers(cancelledIds);\n\n // Only emit if processing actually changed the tokens (e.g., new triggers detected,\n // IDs assigned). Compare by type, value, and ID to avoid false positives from\n // reference inequality after processTokens creates new token objects.\n const hasChanges =\n processed.length !== tokens.length ||\n processed.some((t, i) => {\n const orig = tokens[i];\n if (t.type !== orig.type || t.value !== orig.value) {\n return true;\n }\n if (isReferenceToken(t) && isReferenceToken(orig) && t.id !== orig.id) {\n return true;\n }\n if (isTriggerToken(t) && isTriggerToken(orig) && t.id !== orig.id) {\n return true;\n }\n return false;\n });\n\n if (hasChanges) {\n emitTokenChange(processed);\n } else {\n // Mark as seen even when no changes — prevents re-processing on next render\n state.lastEmittedTokensRef.current = tokens;\n }\n }, [tokens, menus, tokensToText, state, emitTokenChange, markCancelledTriggers]);\n\n return {\n processUserInput,\n };\n}\n\n/** Encapsulates all token-mode logic: trigger detection, menu state, keyboard handling, and rendering. */\nexport function useTokenMode(config: UseTokenModeConfig): UseTokenModeResult {\n const {\n editableElementRef,\n caretControllerRef,\n tokens,\n tokensToText,\n menus,\n disabled,\n readOnly,\n autoFocus,\n placeholder,\n invalid,\n warning,\n ariaLabel,\n ariaLabelledby,\n ariaDescribedby,\n ariaRequired,\n disableBrowserAutocorrect,\n spellcheck,\n onChange,\n onTriggerDetected,\n onAction,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n onMenuItemSelect,\n onMenuFilter,\n onMenuLoadItems,\n i18nStrings,\n adjustInputHeight,\n } = config;\n\n const shortcutsState = useShortcutsState();\n\n const { markTokensAsSent } = shortcutsState;\n\n const activeTriggerToken = useMemo((): PromptInputProps.TriggerToken | null => {\n if (!tokens || !caretControllerRef.current) {\n return null;\n }\n\n const activeTriggerID = caretControllerRef.current.findActiveTrigger()?.id || null;\n\n if (!activeTriggerID) {\n return null;\n }\n\n if (shortcutsState.cancelledTriggerIds.current.has(activeTriggerID)) {\n return null;\n }\n\n return findTriggerTokenById(tokens, activeTriggerID);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- caretInTrigger is the invalidation signal from useShortcutsEffects\n }, [tokens, caretControllerRef, shortcutsState.caretInTrigger]);\n\n const activeMenu = useMemo(\n () =>\n activeTriggerToken && shortcutsState.caretInTrigger && !disabled && !readOnly\n ? (menus?.find(m => m.trigger === activeTriggerToken.triggerChar) ?? null)\n : null,\n [activeTriggerToken, shortcutsState.caretInTrigger, menus, disabled, readOnly]\n );\n\n const menuIsOpen = !!activeMenu;\n const menuFilterText = activeTriggerToken?.value ?? '';\n\n const processor = useTokenProcessor({\n tokens,\n menus,\n tokensToText,\n onChange,\n onTriggerDetected,\n state: shortcutsState,\n });\n\n const { processUserInput } = processor;\n\n useShortcutsEffects({\n tokens,\n editableElementRef,\n state: shortcutsState,\n activeTriggerToken,\n caretController: caretControllerRef,\n });\n\n const triggerWrapperRef = useRef<HTMLElement | null>(null);\n const [triggerVisible, setTriggerVisible] = useState(true);\n\n // Resolve the trigger DOM element synchronously during render from the tracked map.\n // The Dropdown's contentKey (which includes activeTriggerToken.id) handles\n // repositioning when the active trigger changes — no open/close toggle needed.\n if (activeTriggerToken?.id && menuIsOpen) {\n triggerWrapperRef.current = shortcutsState.triggerElementsRef.current.get(activeTriggerToken.id) ?? null;\n } else {\n triggerWrapperRef.current = null;\n }\n\n const triggerWrapperReady = !!triggerWrapperRef.current && menuIsOpen;\n\n // Hide menu dropdown when trigger scrolls out of the editable container\n useEffect(() => {\n if (!menuIsOpen || !triggerWrapperRef.current || !editableElementRef.current) {\n setTriggerVisible(true);\n return;\n }\n\n const trigger = triggerWrapperRef.current;\n const container = editableElementRef.current;\n\n const checkTriggerVisibility = () => {\n const triggerRect = trigger.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n const isOutOfView = triggerRect.bottom < containerRect.top || triggerRect.top > containerRect.bottom;\n setTriggerVisible(!isOutOfView);\n };\n\n checkTriggerVisibility();\n\n container.addEventListener('scroll', checkTriggerVisibility);\n\n const scrollableParent = getFirstScrollableParent(container);\n if (scrollableParent) {\n scrollableParent.addEventListener('scroll', checkTriggerVisibility);\n }\n\n return () => {\n container.removeEventListener('scroll', checkTriggerVisibility);\n if (scrollableParent) {\n scrollableParent.removeEventListener('scroll', checkTriggerVisibility);\n }\n };\n }, [menuIsOpen, editableElementRef, activeTriggerToken]);\n\n const portalContainersRef = useRef<Map<string, PortalContainer>>(new Map());\n const [portalContainers, setPortalContainers] = useState<PortalContainer[]>([]);\n\n const renderTokens = useCallback(\n (tokens: readonly PromptInputProps.InputToken[], target: HTMLElement) => {\n const result = renderTokensToDOM(\n tokens,\n target,\n portalContainersRef.current,\n shortcutsState.triggerElementsRef.current,\n shortcutsState.cancelledTriggerIds.current\n );\n\n // Update trigger element map from render result\n shortcutsState.triggerElementsRef.current = new Map(result.triggerElements);\n\n setPortalContainers(Array.from(portalContainersRef.current.values()));\n return result;\n },\n [shortcutsState.triggerElementsRef, shortcutsState.cancelledTriggerIds, portalContainersRef]\n );\n\n useLayoutEffect(() => {\n if (editableElementRef.current && !caretControllerRef.current) {\n caretControllerRef.current = new CaretController(editableElementRef.current);\n }\n }, [editableElementRef, caretControllerRef]);\n\n const editableState = useRef(createEditableState()).current;\n\n const [tokenOperationAnnouncement, setTokenOperationAnnouncement] = useState<string>('');\n\n const announceTokenOperation = useStableCallback((message: string) => {\n setTokenOperationAnnouncement(message);\n });\n\n const lastRenderedTokensRef = useRef<readonly PromptInputProps.InputToken[] | undefined>(undefined);\n const lastDisabledRef = useRef(disabled);\n const lastReadOnlyRef = useRef(readOnly);\n\n // Refs to avoid recreating handleInput when these change (new array reference each render).\n const menusRef = useRef(menus);\n menusRef.current = menus;\n\n const handleInput = useCallback(() => {\n if (!editableElementRef.current) {\n return;\n }\n\n const ownerDoc = editableElementRef.current.ownerDocument ?? document;\n const cc = caretControllerRef.current;\n\n if (cc) {\n cc.capture();\n }\n\n if (editableState.skipNextZeroWidthUpdate) {\n editableState.skipNextZeroWidthUpdate = false;\n }\n\n const { movedTextNode } = extractTextFromCaretSpots(portalContainersRef.current, true);\n\n // Extract filter text from cancelled triggers, moving it to the paragraph level\n for (const id of shortcutsState.cancelledTriggerIds.current) {\n const trigger =\n shortcutsState.triggerElementsRef.current.get(id) ??\n (editableElementRef.current.querySelector(`#${CSS.escape(id)}`) as HTMLElement | null);\n if (!trigger) {\n continue;\n }\n const filterText = (trigger.textContent || '').substring(1);\n if (!filterText) {\n continue;\n }\n\n let caretInTrigger = false;\n const selection = editableElementRef.current ? getOwnerSelection(editableElementRef.current) : null;\n if (selection?.rangeCount && trigger.contains(selection.getRangeAt(0).startContainer)) {\n caretInTrigger = true;\n }\n\n const textNode = ownerDoc.createTextNode(filterText);\n trigger.parentNode?.insertBefore(textNode, trigger.nextSibling);\n trigger.textContent = (trigger.textContent || '').charAt(0);\n\n if (caretInTrigger && !movedTextNode) {\n if (cc) {\n cc.positionAfterText(textNode);\n }\n }\n }\n\n if (movedTextNode && cc) {\n cc.positionAfterText(movedTextNode);\n }\n\n const directTextNodes = Array.from(editableElementRef.current.childNodes).filter(\n node => isTextNode(node) && node.textContent?.trim()\n );\n\n if (directTextNodes.length > 0) {\n if (cc) {\n cc.capture();\n }\n\n let targetP = findAllParagraphs(editableElementRef.current)[0];\n if (!targetP) {\n targetP = createParagraph();\n editableElementRef.current.appendChild(targetP);\n }\n\n directTextNodes.forEach(textNode => {\n targetP!.appendChild(textNode);\n });\n\n if (cc) {\n cc.restore();\n }\n }\n\n let extractedTokens = extractTokensFromDOM(\n editableElementRef.current,\n menusRef.current,\n portalContainersRef.current\n );\n\n // When a new trigger appears in the DOM, render immediately to ensure the\n // trigger element exists before subsequent caret operations.\n const newTriggers = extractedTokens.filter(isTriggerToken);\n const existingTriggerIds = new Set(shortcutsState.triggerElementsRef.current.keys());\n if (newTriggers.some(t => !existingTriggerIds.has(t.id))) {\n renderTokens(extractedTokens, editableElementRef.current);\n }\n\n const movedTokens = enforcePinnedTokenOrdering(extractedTokens);\n const tokensWereMoved = movedTokens.some((t, i) => t !== extractedTokens[i]);\n\n const mergedTokens = mergeConsecutiveTextTokens(movedTokens);\n\n if (tokensWereMoved) {\n const caretPosBeforeMove = cc?.getPosition() ?? 0;\n const adjustedPosition = getCaretPositionAfterPinnedReorder(extractedTokens, mergedTokens, caretPosBeforeMove);\n\n extractedTokens = mergedTokens;\n\n renderTokens(mergedTokens, editableElementRef.current);\n\n if (editableElementRef.current && ownerDoc.activeElement === editableElementRef.current && cc) {\n cc.setPosition(adjustedPosition);\n }\n }\n\n processUserInput(extractedTokens);\n\n adjustInputHeight();\n }, [\n processUserInput,\n adjustInputHeight,\n editableElementRef,\n caretControllerRef,\n portalContainersRef,\n editableState,\n renderTokens,\n shortcutsState.triggerElementsRef,\n shortcutsState.cancelledTriggerIds,\n ]);\n\n // Token render effect\n useLayoutEffect(() => {\n if (!editableElementRef.current) {\n return;\n }\n\n const cc = caretControllerRef.current;\n const orderedTokens = tokens ? enforcePinnedTokenOrdering(tokens) : tokens;\n const prevOrderedTokens = lastRenderedTokensRef.current;\n\n const stateChanged = lastDisabledRef.current !== disabled || lastReadOnlyRef.current !== readOnly;\n lastDisabledRef.current = disabled;\n lastReadOnlyRef.current = readOnly;\n\n const triggerTransition = detectTriggerTransition(lastRenderedTokensRef.current, orderedTokens);\n\n const changeType = classifyChange(lastRenderedTokensRef.current, orderedTokens);\n const needsRerender = stateChanged || changeType !== 'none' || triggerTransition > 0;\n\n if (!needsRerender) {\n positionCaretAfterMenuSelection(orderedTokens ?? [], editableState, cc);\n\n lastRenderedTokensRef.current = orderedTokens;\n return;\n }\n\n // Text-only changes from user input are already reflected in the DOM by the\n // browser's native editing. Skip re-render to preserve cursor position —\n // Text-only changes from user input are already reflected in the DOM by the\n // browser's native editing. Skip re-render to preserve cursor position —\n // re-rendering would read a corrupted position from normalizeCaretIntoTrigger.\n // External updates still need a re-render.\n if (\n changeType === 'text-only' &&\n !stateChanged &&\n triggerTransition === 0 &&\n shortcutsState.lastEmittedTokensRef.current === tokens\n ) {\n lastRenderedTokensRef.current = orderedTokens;\n return;\n }\n\n if (triggerTransition > 0 && orderedTokens && cc) {\n renderTokens(orderedTokens, editableElementRef.current);\n lastRenderedTokensRef.current = orderedTokens;\n cc.setPosition(triggerTransition);\n adjustInputHeight();\n return;\n }\n\n // A new trigger appeared (e.g. user typed a trigger char, possibly replacing a selection).\n // Position the caret after the trigger character so the user can start typing a filter.\n const newTrigger =\n orderedTokens &&\n prevOrderedTokens &&\n orderedTokens.find(t => isTriggerToken(t) && !prevOrderedTokens.some(p => isTriggerToken(p) && p.id === t.id));\n if (newTrigger && isTriggerToken(newTrigger) && cc) {\n renderTokens(orderedTokens, editableElementRef.current);\n lastRenderedTokensRef.current = orderedTokens;\n // Use the saved position from insertText if available, otherwise position after the trigger char\n const savedPos = cc.getSavedPosition();\n if (savedPos !== null) {\n cc.setPosition(savedPos);\n } else {\n const triggerIndex = orderedTokens.indexOf(newTrigger);\n const posBeforeTrigger = triggerIndex > 0 ? calculateTokenPosition(orderedTokens, triggerIndex - 1) : 0;\n cc.setPosition(posBeforeTrigger + newTrigger.triggerChar.length);\n }\n adjustInputHeight();\n return;\n }\n\n if (\n lastRenderedTokensRef.current &&\n orderedTokens &&\n lastRenderedTokensRef.current.length === 0 &&\n orderedTokens.length === 0\n ) {\n lastRenderedTokensRef.current = orderedTokens;\n return;\n }\n\n if (editableState.menuSelectionTokenId && cc) {\n const insertedTokenIndex = (orderedTokens ?? []).findIndex(\n t => isReferenceToken(t) && t.id === editableState.menuSelectionTokenId\n );\n\n if (insertedTokenIndex !== -1) {\n renderTokens(orderedTokens ?? [], editableElementRef.current);\n positionCaretAfterMenuSelection(orderedTokens ?? [], editableState, cc);\n\n lastRenderedTokensRef.current = orderedTokens;\n adjustInputHeight();\n return;\n }\n }\n\n lastRenderedTokensRef.current = orderedTokens;\n\n if (cc) {\n cc.capture();\n }\n\n renderTokens(orderedTokens ?? [], editableElementRef.current);\n\n if (positionCaretAfterMenuSelection(orderedTokens ?? [], editableState, cc)) {\n adjustInputHeight();\n return;\n }\n\n if (cc) {\n const savedPosition = cc.getSavedPosition();\n const restoredPosition = getCaretPositionAfterTokenRemoval(\n savedPosition,\n prevOrderedTokens ?? [],\n orderedTokens ?? []\n );\n\n if (restoredPosition !== null) {\n cc.setPosition(restoredPosition);\n } else {\n cc.restore();\n }\n }\n\n adjustInputHeight();\n }, [\n disabled,\n readOnly,\n tokens,\n adjustInputHeight,\n caretControllerRef,\n editableElementRef,\n portalContainersRef,\n editableState,\n renderTokens,\n shortcutsState,\n ]);\n\n useEffect(() => {\n const handleSelectionChange = () => {\n const sel = editableElementRef.current ? getOwnerSelection(editableElementRef.current) : null;\n if (!sel?.rangeCount || !editableElementRef.current?.contains(sel.getRangeAt(0).startContainer)) {\n return;\n }\n // Skip caret normalization during mousedown — the user may be starting a\n // drag selection from a caret-spot position adjacent to a reference.\n if (!getMouseDown()) {\n normalizeCollapsedCaret(sel);\n }\n normalizeSelection(sel);\n };\n const handleMouseDown = () => {\n setMouseDown(true);\n };\n const handleMouseUp = () => {\n setMouseDown(false);\n const sel = editableElementRef.current ? getOwnerSelection(editableElementRef.current) : null;\n if (!sel?.rangeCount || !editableElementRef.current?.contains(sel.getRangeAt(0).startContainer)) {\n return;\n }\n normalizeCollapsedCaret(sel);\n normalizeSelection(sel);\n\n // Deferred re-check: browsers may finalize caret position after mouseup\n /* istanbul ignore next -- browser mouseup normalization covered by integ tests */\n requestAnimationFrame(() => {\n const sel = editableElementRef.current ? getOwnerSelection(editableElementRef.current) : null;\n if (!sel?.rangeCount) {\n return;\n }\n\n const range = sel.getRangeAt(0);\n if (!range.collapsed) {\n const startBad = isNonTypeablePosition(range.startContainer);\n const endBad = isNonTypeablePosition(range.endContainer);\n\n if (startBad) {\n const ref = findContainingReference(range.startContainer);\n if (ref?.parentNode) {\n const index = Array.from(ref.parentNode.childNodes).indexOf(ref as ChildNode);\n range.setStart(ref.parentNode, index);\n }\n }\n if (endBad) {\n const ref = findContainingReference(range.endContainer);\n if (ref?.parentNode) {\n const index = Array.from(ref.parentNode.childNodes).indexOf(ref as ChildNode);\n range.setEnd(ref.parentNode, index + 1);\n }\n }\n }\n\n normalizeCollapsedCaret(sel);\n normalizeSelection(sel);\n });\n };\n\n const ownerDoc = editableElementRef.current?.ownerDocument ?? document;\n const element = editableElementRef.current;\n // selectionchange only fires on document — containment is checked inside the handler.\n ownerDoc.addEventListener('selectionchange', handleSelectionChange);\n // mousedown/mouseup scoped to the element to avoid reacting to clicks elsewhere.\n element?.addEventListener('mousedown', handleMouseDown);\n element?.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n ownerDoc.removeEventListener('selectionchange', handleSelectionChange);\n element?.removeEventListener('mousedown', handleMouseDown);\n element?.removeEventListener('mouseup', handleMouseUp);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- only needs to run on mount\n }, []);\n\n const handleMenuSelect = useStableCallback((option: MenuItem) => {\n if (!activeMenu || !activeTriggerToken || !tokens) {\n return;\n }\n\n shortcutsState.setCaretInTrigger(null);\n\n const result = handleMenuSelection(\n tokens,\n {\n value: option.option.value || '',\n label: option.option.label || option.option.value || '',\n },\n activeMenu.id,\n activeMenu.useAtStart ?? false,\n activeTriggerToken\n );\n\n const value = tokensToText ? tokensToText(result.tokens) : getPromptText(result.tokens);\n markTokensAsSent(result.tokens);\n\n editableState.menuSelectionTokenId = result.insertedToken.id || null;\n\n const isPinned = activeMenu.useAtStart ?? false;\n const announcement = isPinned\n ? i18nStrings?.tokenPinnedAriaLabel?.(result.insertedToken)\n : i18nStrings?.tokenInsertedAriaLabel?.(result.insertedToken);\n\n if (announcement) {\n announceTokenOperation(announcement);\n }\n\n onChange({ value, tokens: result.tokens });\n\n fireNonCancelableEvent(onMenuItemSelect, {\n menuId: activeMenu.id,\n option: option.option,\n });\n });\n\n const [menuItemsState, menuItemsHandlers] = useMenuItems({\n menu: activeMenu ?? { id: '', trigger: '', options: [] },\n filterText: menuFilterText,\n onSelectItem: handleMenuSelect,\n });\n\n const menuStateRef = useRef({\n itemsState: menuItemsState,\n itemsHandlers: menuItemsHandlers,\n isOpen: menuIsOpen,\n });\n menuStateRef.current = {\n itemsState: menuItemsState,\n itemsHandlers: menuItemsHandlers,\n isOpen: menuIsOpen,\n };\n\n const closeMenu = useStableCallback(() => {\n shortcutsState.menuJustClosed.current = shortcutsState.caretInTrigger;\n shortcutsState.setCaretInTrigger(null);\n });\n\n const handleEditableElementKeyDown = useStableCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n handleEditableKeyDown(event, {\n editableElement: editableElementRef.current,\n editableState,\n caretController: caretControllerRef.current,\n tokens,\n tokensToText,\n disabled,\n readOnly,\n i18nStrings,\n announceTokenOperation,\n getMenuOpen: () => menuStateRef.current.isOpen,\n getMenuItemsState: () => menuStateRef.current.itemsState,\n getMenuItemsHandlers: () => menuStateRef.current.itemsHandlers,\n getMenuStatusType: () => activeMenu?.statusType,\n closeMenu,\n onAction: onAction ? detail => fireNonCancelableEvent(onAction, detail) : undefined,\n onChange,\n markTokensAsSent,\n onKeyDown,\n });\n });\n\n const handleEditableElementFocus = useStableCallback(() => {\n if (onFocus) {\n fireNonCancelableEvent(onFocus);\n }\n });\n\n const handleEditableElementBlur = useStableCallback(() => {\n if (onBlur) {\n fireNonCancelableEvent(onBlur);\n }\n });\n\n useEffect(() => {\n if (autoFocus && editableElementRef.current) {\n editableElementRef.current.focus();\n }\n // Intentionally run only on mount — autoFocus should fire once\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const ownerWindow = (editableElementRef.current?.ownerDocument ?? document).defaultView ?? window;\n const handleResize = () => adjustInputHeight();\n ownerWindow.addEventListener('resize', handleResize);\n return () => {\n ownerWindow.removeEventListener('resize', handleResize);\n };\n }, [adjustInputHeight, editableElementRef]);\n\n const menuLoadMoreResult = useMenuLoadMore({\n menu: activeMenu ?? { id: '', trigger: '', options: [] },\n statusType: activeMenu?.statusType ?? 'finished',\n onLoadItems: detail => {\n fireNonCancelableEvent(onMenuLoadItems, detail);\n },\n onLoadMoreItems: () => {\n fireNonCancelableEvent(onMenuLoadItems, {\n menuId: activeMenu?.id ?? '',\n filteringText: undefined,\n firstPage: false,\n samePage: false,\n });\n },\n });\n\n const menuLoadMoreHandlers = activeMenu ? menuLoadMoreResult : null;\n\n useEffect(() => {\n if (menuIsOpen && activeMenu && menuLoadMoreHandlers) {\n menuLoadMoreHandlers.fireLoadMoreOnMenuOpen();\n }\n }, [menuIsOpen, activeMenu, menuLoadMoreHandlers]);\n\n const prevMenuOpenRef = useRef(false);\n const prevItemsLengthRef = useRef(0);\n\n useEffect(() => {\n const justOpened = menuIsOpen && !prevMenuOpenRef.current;\n const itemsLoaded =\n menuIsOpen && prevMenuOpenRef.current && prevItemsLengthRef.current === 0 && menuItemsState.items.length > 0;\n\n if ((justOpened || itemsLoaded) && menuItemsHandlers && menuItemsState && menuItemsState.items.length > 0) {\n // Reset highlight so goHomeWithKeyboard triggers a state change even at index 0\n menuItemsHandlers.resetHighlightWithKeyboard();\n setTimeout(() => {\n menuItemsHandlers?.goHomeWithKeyboard();\n }, NEXT_TICK_TIMEOUT);\n }\n\n prevMenuOpenRef.current = menuIsOpen;\n prevItemsLengthRef.current = menuItemsState?.items.length ?? 0;\n // eslint-disable-next-line react-hooks/exhaustive-deps -- only needs to react to menu open/close and item count changes\n }, [menuIsOpen, menuItemsState.items.length]);\n\n useEffect(() => {\n if (activeTriggerToken && activeMenu && onMenuFilter) {\n fireNonCancelableEvent(onMenuFilter, {\n menuId: activeMenu.id,\n filteringText: activeTriggerToken.value,\n });\n }\n }, [activeTriggerToken, activeMenu, onMenuFilter]);\n\n const handleLoadMore = useStableCallback(() => {\n if (menuLoadMoreHandlers) {\n menuLoadMoreHandlers.fireLoadMoreOnScroll();\n }\n });\n\n const menuListId = useUniqueId('menu-list');\n const menuFooterControlId = useUniqueId('menu-footer');\n const highlightedMenuOptionIdSource = useUniqueId();\n const highlightedMenuOptionId = menuItemsState?.highlightedOption ? highlightedMenuOptionIdSource : undefined;\n\n const menuDropdownStatusResult = useDropdownStatus({\n ...(activeMenu ?? {}),\n isEmpty: !menuItemsState || menuItemsState.items.length === 0,\n recoveryText: i18nStrings?.menuRecoveryText,\n errorIconAriaLabel: i18nStrings?.menuErrorIconAriaLabel,\n loadingText: i18nStrings?.menuLoadingText,\n finishedText: i18nStrings?.menuFinishedText,\n errorText: i18nStrings?.menuErrorText,\n onRecoveryClick: () => {\n if (menuLoadMoreHandlers) {\n menuLoadMoreHandlers.fireLoadMoreOnRecoveryClick();\n }\n editableElementRef.current?.focus();\n },\n hasRecoveryCallback: Boolean(onMenuLoadItems),\n });\n\n const menuDropdownStatus = activeMenu ? menuDropdownStatusResult : null;\n\n const shouldRenderMenuDropdown = useMemo(() => {\n return !!(menuIsOpen && activeMenu && menuItemsState && triggerVisible);\n }, [menuIsOpen, activeMenu, menuItemsState, triggerVisible]);\n\n const showPlaceholder = !!(placeholder && (!tokens || tokens.length === 0));\n\n const editableElementAttributes: React.HTMLAttributes<HTMLDivElement> & { 'data-placeholder'?: string } = {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-invalid': invalid ? 'true' : undefined,\n 'aria-disabled': disabled ? 'true' : undefined,\n 'aria-readonly': readOnly ? 'true' : undefined,\n 'aria-required': ariaRequired ? 'true' : undefined,\n 'data-placeholder': placeholder,\n className: clsx(styles.textarea, testutilStyles.textarea, {\n [styles.invalid]: invalid,\n [styles.warning]: warning,\n [styles['textarea-disabled']]: disabled,\n [styles['textarea-readonly']]: readOnly,\n [styles['placeholder-visible']]: showPlaceholder,\n }),\n autoCorrect: disableBrowserAutocorrect ? 'off' : undefined,\n autoCapitalize: disableBrowserAutocorrect ? 'off' : undefined,\n spellCheck: spellcheck,\n // When disabled, omit tabIndex entirely so the div is not focusable at all.\n tabIndex: disabled ? undefined : 0,\n onKeyDown: handleEditableElementKeyDown,\n onKeyUp: onKeyUp && (event => fireKeyboardEvent(onKeyUp, event)),\n onBlur: handleEditableElementBlur,\n onFocus: handleEditableElementFocus,\n onCopy: (event: React.ClipboardEvent) => {\n if (editableElementRef.current) {\n handleClipboardEvent(event, editableElementRef.current, false);\n }\n },\n onCut: (event: React.ClipboardEvent) => {\n if (editableElementRef.current) {\n handleClipboardEvent(event, editableElementRef.current, !disabled && !readOnly);\n if (!disabled && !readOnly) {\n handleInput();\n }\n }\n },\n onPaste: (event: React.ClipboardEvent) => {\n event.preventDefault();\n if (disabled || readOnly) {\n return;\n }\n const text = event.clipboardData.getData('text/plain');\n if (!text || !editableElementRef.current || !caretControllerRef.current) {\n return;\n }\n const cc = caretControllerRef.current;\n // Pass undefined for caretStart/caretEnd — let insertText calculate\n // the position after the selection is deleted by replaceSelection.\n insertTextIntoContentEditable(editableElementRef.current, text, undefined, undefined, cc, true);\n },\n };\n\n const portals = portalContainers.map(container =>\n ReactDOM.createPortal(\n <Token key={container.id} variant=\"inline\" label={container.label} disabled={!!disabled} readOnly={!!readOnly} />,\n container.element\n )\n );\n\n return {\n portalContainersRef,\n portalContainers,\n portals,\n editableState,\n editableElementAttributes,\n activeTriggerToken,\n activeMenu,\n menuIsOpen,\n menuFilterText,\n triggerWrapperRef,\n triggerWrapperReady,\n menuListId,\n menuFooterControlId,\n highlightedMenuOptionId,\n menuItemsState,\n menuItemsHandlers,\n menuDropdownStatus,\n shouldRenderMenuDropdown,\n handleInput,\n handleLoadMore,\n tokenOperationAnnouncement,\n markTokensAsSent,\n };\n}\n"]}
@@ -53,7 +53,7 @@ class PromptInputWrapper extends dom_1.ComponentWrapper {
53
53
  * Finds the contentEditable element used when `menus` or `tokens` is defined.
54
54
  */
55
55
  findContentEditableElement() {
56
- return this.find('[contenteditable="true"]');
56
+ return this.findByClassName(styles_selectors_js_3.default['content-editable']);
57
57
  }
58
58
  /**
59
59
  * Finds the action button. Note that, despite its typings, this may return null.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/dom/prompt-input/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/dom/prompt-input/index.ts"],"names":[],"mappings":"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"}