@nasser-sw/fabric 7.0.1-beta10 → 7.0.1-beta12
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/dist/index.js +177 -117
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +177 -117
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +177 -117
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +177 -117
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/shapes/IText/ITextBehavior.d.ts.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.mjs +10 -0
- package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs +162 -116
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.mjs +4 -0
- package/dist/src/shapes/Text/Text.mjs.map +1 -1
- package/dist/src/shapes/Text/constants.d.ts +1 -1
- package/dist/src/shapes/Text/constants.d.ts.map +1 -1
- package/dist/src/shapes/Text/constants.min.mjs +1 -1
- package/dist/src/shapes/Text/constants.min.mjs.map +1 -1
- package/dist/src/shapes/Text/constants.mjs +1 -1
- package/dist/src/shapes/Text/constants.mjs.map +1 -1
- package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts.map +1 -1
- package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/constants.d.ts +1 -1
- package/dist-extensions/src/shapes/Text/constants.d.ts.map +1 -1
- package/fabric-test-editor.html +1 -1
- package/package.json +1 -1
- package/rtl-debug.html +745 -0
- package/src/shapes/IText/ITextBehavior.ts +11 -0
- package/src/shapes/IText/ITextKeyBehavior.ts +732 -691
- package/src/shapes/Text/Text.ts +4 -0
- package/src/shapes/Text/constants.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ITextKeyBehavior.mjs","sources":["../../../../src/shapes/IText/ITextKeyBehavior.ts"],"sourcesContent":["import { config } from '../../config';\nimport { getFabricDocument, getEnv } from '../../env';\nimport { capValue } from '../../util/misc/capValue';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextBehavior } from './ITextBehavior';\nimport type { TKeyMapIText } from './constants';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, LEFT, RIGHT } from '../../constants';\nimport type { IText } from './IText';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\n\nexport abstract class ITextKeyBehavior<\n Props extends TOptions<TextProps> = Partial<TextProps>,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextBehavior<Props, SProps, EventSpec> {\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behavior for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the IText or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = Object.assign({}, this.keysMap);\n * The function must be in IText.prototype.myFunction And will receive event as args[0]\n */\n declare keysMap: TKeyMapIText;\n\n declare keysMapRtl: TKeyMapIText;\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n declare ctrlKeysMapUp: TKeyMapIText;\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n declare ctrlKeysMapDown: TKeyMapIText;\n\n declare hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * DOM container to append the hiddenTextarea.\n * An alternative to attaching to the document.body.\n * Useful to reduce laggish redraw of the full document.body tree and\n * also with modals event capturing that won't let the textarea take focus.\n * @type HTMLElement\n */\n declare hiddenTextareaContainer?: HTMLElement | null;\n\n declare private _clickHandlerInitialized: boolean;\n declare private _copyDone: boolean;\n declare private fromPaste: boolean;\n\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea() {\n const doc =\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument();\n const textarea = doc.createElement('textarea');\n Object.entries({\n autocapitalize: 'off',\n autocorrect: 'off',\n autocomplete: 'off',\n spellcheck: 'false',\n 'data-fabric': 'textarea',\n wrap: 'off',\n }).map(([attribute, value]) => textarea.setAttribute(attribute, value));\n const { top, left, fontSize } = this._calcTextareaPosition();\n // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n textarea.style.cssText = `position: absolute; top: ${top}; left: ${left}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${fontSize};`;\n\n (this.hiddenTextareaContainer || doc.body).appendChild(textarea);\n\n Object.entries({\n blur: 'blur',\n keydown: 'onKeyDown',\n keyup: 'onKeyUp',\n input: 'onInput',\n copy: 'copy',\n cut: 'copy',\n paste: 'paste',\n compositionstart: 'onCompositionStart',\n compositionupdate: 'onCompositionUpdate',\n compositionend: 'onCompositionEnd',\n } as Record<string, keyof this>).map(([eventName, handler]) =>\n textarea.addEventListener(\n eventName,\n (this[handler] as EventListener).bind(this),\n ),\n );\n this.hiddenTextarea = textarea;\n }\n\n /**\n * Override this method to customize cursor behavior on textbox blur\n */\n blur() {\n this.abortCursorAnimation();\n }\n\n /**\n * Handles keydown event\n * only used for arrows and combination of modifier keys.\n * @param {KeyboardEvent} e Event object\n */\n onKeyDown(e: KeyboardEvent) {\n if (!this.isEditing) {\n return;\n }\n const keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\n if (e.keyCode in keyMap) {\n (this[keyMap[e.keyCode] as keyof this] as (arg: KeyboardEvent) => void)(\n e,\n );\n } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {\n (\n this[this.ctrlKeysMapDown[e.keyCode] as keyof this] as (\n arg: KeyboardEvent,\n ) => void\n )(e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.inCompositionMode = false;\n this.clearContextTop();\n this.renderCursorOrSelection();\n } else {\n this.canvas && this.canvas.requestRenderAll();\n }\n }\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {KeyboardEvent} e Event object\n */\n onKeyUp(e: KeyboardEvent) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n if (e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey)) {\n (\n this[this.ctrlKeysMapUp[e.keyCode] as keyof this] as (\n arg: KeyboardEvent,\n ) => void\n )(e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n }\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput(this: this & { hiddenTextarea: HTMLTextAreaElement }, e: Event) {\n const fromPaste = this.fromPaste;\n const { value, selectionStart, selectionEnd } = this.hiddenTextarea;\n this.fromPaste = false;\n e && e.stopPropagation();\n if (!this.isEditing) {\n return;\n }\n const updateAndFire = () => {\n this.updateFromTextArea();\n this.fire(CHANGED);\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this as unknown as IText });\n this.canvas.requestRenderAll();\n }\n };\n if (this.hiddenTextarea.value === '') {\n this.styles = {};\n updateAndFire();\n return;\n }\n // decisions about style changes.\n const nextText = this._splitTextIntoLines(value).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n _selectionStart = this.selectionStart,\n _selectionEnd = this.selectionEnd,\n selection = _selectionStart !== _selectionEnd;\n let copiedStyle: TextStyleDeclaration[] | undefined,\n removedText,\n charDiff = nextCharCount - charCount,\n removeFrom,\n removeTo;\n\n const textareaSelection = this.fromStringToGraphemeSelection(\n selectionStart,\n selectionEnd,\n value,\n );\n const backDelete = _selectionStart > textareaSelection.selectionStart;\n\n if (selection) {\n removedText = this._text.slice(_selectionStart, _selectionEnd);\n charDiff += _selectionEnd - _selectionStart;\n } else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(_selectionEnd + charDiff, _selectionEnd);\n } else {\n removedText = this._text.slice(\n _selectionStart,\n _selectionStart - charDiff,\n );\n }\n }\n const insertedText = nextText.slice(\n textareaSelection.selectionEnd - charDiff,\n textareaSelection.selectionEnd,\n );\n if (removedText && removedText.length) {\n if (insertedText.length) {\n // let's copy some style before deleting.\n // we want to copy the style before the cursor OR the style at the cursor if selection\n // is bigger than 0.\n copiedStyle = this.getSelectionStyles(\n _selectionStart,\n _selectionStart + 1,\n false,\n );\n // now duplicate the style one for each inserted text.\n copiedStyle = insertedText.map(\n () =>\n // this return an array of references, but that is fine since we are\n // copying the style later.\n copiedStyle![0],\n );\n }\n if (selection) {\n removeFrom = _selectionStart;\n removeTo = _selectionEnd;\n } else if (backDelete) {\n // detect differences between forwardDelete and backDelete\n removeFrom = _selectionEnd - removedText.length;\n removeTo = _selectionEnd;\n } else {\n removeFrom = _selectionEnd;\n removeTo = _selectionEnd + removedText.length;\n }\n this.removeStyleFromTo(removeFrom, removeTo);\n }\n if (insertedText.length) {\n const { copyPasteData } = getEnv();\n if (\n fromPaste &&\n insertedText.join('') === copyPasteData.copiedText &&\n !config.disableStyleCopyPaste\n ) {\n copiedStyle = copyPasteData.copiedTextStyle;\n }\n this.insertNewStyleBlock(insertedText, _selectionStart, copiedStyle);\n }\n updateAndFire();\n }\n\n /**\n * Composition start\n */\n onCompositionStart() {\n this.inCompositionMode = true;\n }\n\n /**\n * Composition end\n */\n onCompositionEnd() {\n this.inCompositionMode = false;\n }\n\n onCompositionUpdate({ target }: CompositionEvent) {\n const { selectionStart, selectionEnd } = target as HTMLTextAreaElement;\n this.compositionStart = selectionStart;\n this.compositionEnd = selectionEnd;\n this.updateTextareaPosition();\n }\n\n /**\n * Copies selected text\n */\n copy() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n const { copyPasteData } = getEnv();\n copyPasteData.copiedText = this.getSelectedText();\n if (!config.disableStyleCopyPaste) {\n copyPasteData.copiedTextStyle = this.getSelectionStyles(\n this.selectionStart,\n this.selectionEnd,\n true,\n );\n } else {\n copyPasteData.copiedTextStyle = undefined;\n }\n this._copyDone = true;\n }\n\n /**\n * Pastes text\n */\n paste() {\n this.fromPaste = true;\n }\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor(lineIndex: number, charIndex: number): number {\n let widthBeforeCursor = this._getLineLeftOffset(lineIndex),\n bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n return widthBeforeCursor;\n }\n\n /**\n * Gets start offset of a selection\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n // if on last line, down cursor goes to end of line\n if (\n lineIndex === this._textLines.length - 1 ||\n e.metaKey ||\n e.keyCode === 34\n ) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n return (\n textAfterCursor.length +\n indexOnOtherLine +\n 1 +\n this.missingNewlineOffset(lineIndex)\n );\n }\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset(e: KeyboardEvent, isRight: boolean): number {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n } else {\n return this.selectionStart;\n }\n }\n\n /**\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n // return a negative offset\n return (\n -this._textLines[lineIndex - 1].length +\n indexOnOtherLine -\n textBeforeCursor.length +\n (1 - missingNewlineOffset)\n );\n }\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine(lineIndex: number, width: number) {\n const line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n let widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0,\n charWidth,\n foundMatch;\n\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n const leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : j - 1;\n break;\n }\n }\n\n // reached end\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n }\n\n /**\n * Moves cursor down\n * @param {KeyboardEvent} e Event object\n */\n moveCursorDown(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorUpOrDown('Down', e);\n }\n\n /**\n * Moves cursor up\n * @param {KeyboardEvent} e Event object\n */\n moveCursorUp(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorUpOrDown('Up', e);\n }\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorUpOrDown(direction: 'Up' | 'Down', e: KeyboardEvent) {\n const offset = this[`get${direction}CursorOffset`](\n e,\n this._selectionDirection === RIGHT,\n );\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n } else {\n this.moveCursorWithoutShift(offset);\n }\n if (offset !== 0) {\n const max = this.text.length;\n this.selectionStart = capValue(0, this.selectionStart, max);\n this.selectionEnd = capValue(0, this.selectionEnd, max);\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift(offset: number) {\n const newSelection =\n this._selectionDirection === LEFT\n ? this.selectionStart + offset\n : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(\n this.selectionStart,\n this.selectionEnd,\n newSelection,\n );\n return offset !== 0;\n }\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift(offset: number) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n return offset !== 0;\n }\n\n /**\n * Moves cursor left\n * @param {KeyboardEvent} e Event object\n */\n moveCursorLeft(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorLeftOrRight('Left', e);\n }\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n *\n * @todo refactor not to use method name composition\n */\n _move(\n e: KeyboardEvent,\n prop: 'selectionStart' | 'selectionEnd',\n direction: 'Left' | 'Right',\n ): boolean {\n let newValue: number | undefined;\n if (e.altKey) {\n newValue = this[`findWordBoundary${direction}`](this[prop]);\n } else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36) {\n newValue = this[`findLineBoundary${direction}`](this[prop]);\n } else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n if (typeof newValue !== 'undefined' && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n return false;\n }\n\n /**\n * @private\n */\n _moveLeft(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Left');\n }\n\n /**\n * @private\n */\n _moveRight(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Right');\n }\n\n /**\n * Moves cursor left without keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithoutShift(e: KeyboardEvent) {\n let change = true;\n this._selectionDirection = LEFT;\n\n // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n if (\n this.selectionEnd === this.selectionStart &&\n this.selectionStart !== 0\n ) {\n change = this._moveLeft(e, 'selectionStart');\n }\n this.selectionEnd = this.selectionStart;\n return change;\n }\n\n /**\n * Moves cursor left while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === RIGHT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveLeft(e, 'selectionEnd');\n } else if (this.selectionStart !== 0) {\n this._selectionDirection = LEFT;\n return this._moveLeft(e, 'selectionStart');\n }\n }\n\n /**\n * Moves cursor right\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRight(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorLeftOrRight('Right', e);\n }\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorLeftOrRight(direction: 'Left' | 'Right', e: KeyboardEvent) {\n const actionName = `moveCursor${direction}${\n e.shiftKey ? 'WithShift' : 'WithoutShift'\n }` as const;\n this._currentCursorOpacity = 1;\n if (this[actionName](e)) {\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor right while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorRightWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === LEFT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveRight(e, 'selectionStart');\n } else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = RIGHT;\n return this._moveRight(e, 'selectionEnd');\n }\n }\n\n /**\n * Moves cursor right without keeping selection\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRightWithoutShift(e: KeyboardEvent) {\n let changed = true;\n this._selectionDirection = RIGHT;\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionStart = this.selectionEnd;\n }\n return changed;\n }\n}\n"],"names":["ITextKeyBehavior","ITextBehavior","initHiddenTextarea","doc","canvas","getDocumentFromElement","getElement","getFabricDocument","textarea","createElement","Object","entries","autocapitalize","autocorrect","autocomplete","spellcheck","wrap","map","_ref","attribute","value","setAttribute","top","left","fontSize","_calcTextareaPosition","style","cssText","hiddenTextareaContainer","body","appendChild","blur","keydown","keyup","input","copy","cut","paste","compositionstart","compositionupdate","compositionend","_ref2","eventName","handler","addEventListener","bind","hiddenTextarea","abortCursorAnimation","onKeyDown","e","isEditing","keyMap","direction","keysMapRtl","keysMap","keyCode","ctrlKeysMapDown","ctrlKey","metaKey","stopImmediatePropagation","preventDefault","inCompositionMode","clearContextTop","renderCursorOrSelection","requestRenderAll","onKeyUp","_copyDone","ctrlKeysMapUp","onInput","fromPaste","selectionStart","selectionEnd","stopPropagation","updateAndFire","updateFromTextArea","fire","CHANGED","target","styles","nextText","_splitTextIntoLines","graphemeText","charCount","_text","length","nextCharCount","_selectionStart","_selectionEnd","selection","copiedStyle","removedText","charDiff","removeFrom","removeTo","textareaSelection","fromStringToGraphemeSelection","backDelete","slice","insertedText","getSelectionStyles","removeStyleFromTo","copyPasteData","getEnv","join","copiedText","config","disableStyleCopyPaste","copiedTextStyle","insertNewStyleBlock","onCompositionStart","onCompositionEnd","onCompositionUpdate","_ref3","compositionStart","compositionEnd","updateTextareaPosition","getSelectedText","undefined","_getWidthBeforeCursor","lineIndex","charIndex","widthBeforeCursor","_getLineLeftOffset","bound","__charBounds","width","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","cursorLocation","get2DCursorLocation","_textLines","indexOnOtherLine","_getIndexOnLine","textAfterCursor","missingNewlineOffset","shiftKey","getUpCursorOffset","textBeforeCursor","line","lineLeftOffset","widthOfCharsOnLine","indexOnLine","charWidth","foundMatch","j","jlen","leftEdge","rightEdge","offsetFromLeftEdge","Math","abs","offsetFromRightEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","offset","_selectionDirection","RIGHT","moveCursorWithShift","moveCursorWithoutShift","max","text","capValue","initDelayedCursor","_fireSelectionChanged","_updateTextarea","newSelection","LEFT","setSelectionStartEndWithShift","moveCursorLeft","_moveCursorLeftOrRight","_move","prop","newValue","altKey","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","actionName","_currentCursorOpacity","moveCursorRightWithShift","moveCursorRightWithoutShift","changed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ITextKeyBehavior.mjs","sources":["../../../../src/shapes/IText/ITextKeyBehavior.ts"],"sourcesContent":["import { config } from '../../config';\r\nimport { getFabricDocument, getEnv } from '../../env';\r\nimport { capValue } from '../../util/misc/capValue';\r\nimport type { ITextEvents } from './ITextBehavior';\r\nimport { ITextBehavior } from './ITextBehavior';\r\nimport type { TKeyMapIText } from './constants';\r\nimport type { TOptions } from '../../typedefs';\r\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\r\nimport { getDocumentFromElement } from '../../util/dom_misc';\r\nimport { CHANGED, LEFT, RIGHT } from '../../constants';\r\nimport type { IText } from './IText';\r\nimport type { TextStyleDeclaration } from '../Text/StyledText';\r\n\r\nexport abstract class ITextKeyBehavior<\r\n Props extends TOptions<TextProps> = Partial<TextProps>,\r\n SProps extends SerializedTextProps = SerializedTextProps,\r\n EventSpec extends ITextEvents = ITextEvents,\r\n> extends ITextBehavior<Props, SProps, EventSpec> {\r\n /**\r\n * For functionalities on keyDown\r\n * Map a special key to a function of the instance/prototype\r\n * If you need different behavior for ESC or TAB or arrows, you have to change\r\n * this map setting the name of a function that you build on the IText or\r\n * your prototype.\r\n * the map change will affect all Instances unless you need for only some text Instances\r\n * in that case you have to clone this object and assign your Instance.\r\n * this.keysMap = Object.assign({}, this.keysMap);\r\n * The function must be in IText.prototype.myFunction And will receive event as args[0]\r\n */\r\n declare keysMap: TKeyMapIText;\r\n\r\n declare keysMapRtl: TKeyMapIText;\r\n\r\n /**\r\n * For functionalities on keyUp + ctrl || cmd\r\n */\r\n declare ctrlKeysMapUp: TKeyMapIText;\r\n\r\n /**\r\n * For functionalities on keyDown + ctrl || cmd\r\n */\r\n declare ctrlKeysMapDown: TKeyMapIText;\r\n\r\n declare hiddenTextarea: HTMLTextAreaElement | null;\r\n\r\n /**\r\n * DOM container to append the hiddenTextarea.\r\n * An alternative to attaching to the document.body.\r\n * Useful to reduce laggish redraw of the full document.body tree and\r\n * also with modals event capturing that won't let the textarea take focus.\r\n * @type HTMLElement\r\n */\r\n declare hiddenTextareaContainer?: HTMLElement | null;\r\n\r\n declare private _clickHandlerInitialized: boolean;\r\n declare private _copyDone: boolean;\r\n declare private fromPaste: boolean;\r\n\r\n /**\r\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\r\n */\r\n initHiddenTextarea() {\r\n const doc =\r\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\r\n getFabricDocument();\r\n const textarea = doc.createElement('textarea');\r\n Object.entries({\r\n autocapitalize: 'off',\r\n autocorrect: 'off',\r\n autocomplete: 'off',\r\n spellcheck: 'false',\r\n 'data-fabric': 'textarea',\r\n wrap: 'off',\r\n }).map(([attribute, value]) => textarea.setAttribute(attribute, value));\r\n const { top, left, fontSize } = this._calcTextareaPosition();\r\n // line-height: 1px; was removed from the style to fix this:\r\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\r\n textarea.style.cssText = `position: absolute; top: ${top}; left: ${left}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${fontSize};`;\r\n\r\n (this.hiddenTextareaContainer || doc.body).appendChild(textarea);\r\n\r\n Object.entries({\r\n blur: 'blur',\r\n keydown: 'onKeyDown',\r\n keyup: 'onKeyUp',\r\n input: 'onInput',\r\n copy: 'copy',\r\n cut: 'copy',\r\n paste: 'paste',\r\n compositionstart: 'onCompositionStart',\r\n compositionupdate: 'onCompositionUpdate',\r\n compositionend: 'onCompositionEnd',\r\n } as Record<string, keyof this>).map(([eventName, handler]) =>\r\n textarea.addEventListener(\r\n eventName,\r\n (this[handler] as EventListener).bind(this),\r\n ),\r\n );\r\n this.hiddenTextarea = textarea;\r\n }\r\n\r\n /**\r\n * Override this method to customize cursor behavior on textbox blur\r\n */\r\n blur() {\r\n this.abortCursorAnimation();\r\n }\r\n\r\n /**\r\n * Handles keydown event\r\n * only used for arrows and combination of modifier keys.\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n onKeyDown(e: KeyboardEvent) {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n const keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\r\n if (e.keyCode in keyMap) {\r\n (this[keyMap[e.keyCode] as keyof this] as (arg: KeyboardEvent) => void)(\r\n e,\r\n );\r\n } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {\r\n (\r\n this[this.ctrlKeysMapDown[e.keyCode] as keyof this] as (\r\n arg: KeyboardEvent,\r\n ) => void\r\n )(e);\r\n } else {\r\n return;\r\n }\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n if (e.keyCode >= 33 && e.keyCode <= 40) {\r\n // if i press an arrow key just update selection\r\n this.inCompositionMode = false;\r\n this.clearContextTop();\r\n this.renderCursorOrSelection();\r\n } else {\r\n this.canvas && this.canvas.requestRenderAll();\r\n }\r\n }\r\n\r\n /**\r\n * Handles keyup event\r\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\r\n * if a copy/cut event fired, keyup is dismissed\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n onKeyUp(e: KeyboardEvent) {\r\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\r\n this._copyDone = false;\r\n return;\r\n }\r\n if (e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey)) {\r\n (\r\n this[this.ctrlKeysMapUp[e.keyCode] as keyof this] as (\r\n arg: KeyboardEvent,\r\n ) => void\r\n )(e);\r\n } else {\r\n return;\r\n }\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.canvas && this.canvas.requestRenderAll();\r\n }\r\n\r\n /**\r\n * Handles onInput event\r\n * @param {Event} e Event object\r\n */\r\n onInput(this: this & { hiddenTextarea: HTMLTextAreaElement }, e: Event) {\r\n const fromPaste = this.fromPaste;\r\n const { value, selectionStart, selectionEnd } = this.hiddenTextarea;\r\n this.fromPaste = false;\r\n e && e.stopPropagation();\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n \r\n // Debug log to track the double keypress issue\r\n console.log('🔤 onInput debug:', {\r\n fabricText: this.text,\r\n textareaValue: value,\r\n fabricSelection: { start: this.selectionStart, end: this.selectionEnd },\r\n textareaSelection: { start: selectionStart, end: selectionEnd },\r\n fromPaste,\r\n inComposition: this.inCompositionMode\r\n });\r\n \r\n // Immediate sync for simple character replacement - fix for double keypress issue\r\n if (this.text !== value && !this.inCompositionMode) {\r\n console.log('🔤 Immediate sync: fabric text differs from textarea, syncing immediately');\r\n console.log('🔤 Before sync - fabric text:', this.text);\r\n console.log('🔤 Before sync - textarea value:', value);\r\n console.log('🔤 fromPaste:', fromPaste);\r\n \r\n // Clear all relevant caches that might prevent visual updates\r\n this.cursorOffsetCache = {};\r\n (this as any)._browserWrapCache = null;\r\n (this as any)._lastDimensionState = null;\r\n this._forceClearCache = true;\r\n \r\n console.log('🔤 Cleared all caches');\r\n \r\n // Use the same logic as updateAndFire but immediately\r\n this.updateFromTextArea();\r\n this.fire(CHANGED);\r\n if (this.canvas) {\r\n this.canvas.fire('text:changed', { target: this as unknown as IText });\r\n // ONLY use synchronous rendering to avoid race conditions\r\n // Remove requestRenderAll() which queues for next animation frame\r\n this.canvas.renderAll();\r\n }\r\n \r\n console.log('🔤 After updateFromTextArea - fabric text:', this.text);\r\n console.log('🔤 Sync complete, caches cleared, synchronous render only');\r\n return;\r\n }\r\n \r\n const updateAndFire = () => {\r\n this.updateFromTextArea();\r\n this.fire(CHANGED);\r\n if (this.canvas) {\r\n this.canvas.fire('text:changed', { target: this as unknown as IText });\r\n this.canvas.requestRenderAll();\r\n }\r\n };\r\n if (this.hiddenTextarea.value === '') {\r\n this.styles = {};\r\n updateAndFire();\r\n return;\r\n }\r\n // decisions about style changes.\r\n const nextText = this._splitTextIntoLines(value).graphemeText,\r\n charCount = this._text.length,\r\n nextCharCount = nextText.length,\r\n _selectionStart = this.selectionStart,\r\n _selectionEnd = this.selectionEnd,\r\n selection = _selectionStart !== _selectionEnd;\r\n let copiedStyle: TextStyleDeclaration[] | undefined,\r\n removedText,\r\n charDiff = nextCharCount - charCount,\r\n removeFrom,\r\n removeTo;\r\n\r\n const textareaSelection = this.fromStringToGraphemeSelection(\r\n selectionStart,\r\n selectionEnd,\r\n value,\r\n );\r\n const backDelete = _selectionStart > textareaSelection.selectionStart;\r\n\r\n if (selection) {\r\n removedText = this._text.slice(_selectionStart, _selectionEnd);\r\n charDiff += _selectionEnd - _selectionStart;\r\n } else if (nextCharCount < charCount) {\r\n if (backDelete) {\r\n removedText = this._text.slice(_selectionEnd + charDiff, _selectionEnd);\r\n } else {\r\n removedText = this._text.slice(\r\n _selectionStart,\r\n _selectionStart - charDiff,\r\n );\r\n }\r\n }\r\n const insertedText = nextText.slice(\r\n textareaSelection.selectionEnd - charDiff,\r\n textareaSelection.selectionEnd,\r\n );\r\n if (removedText && removedText.length) {\r\n if (insertedText.length) {\r\n // let's copy some style before deleting.\r\n // we want to copy the style before the cursor OR the style at the cursor if selection\r\n // is bigger than 0.\r\n copiedStyle = this.getSelectionStyles(\r\n _selectionStart,\r\n _selectionStart + 1,\r\n false,\r\n );\r\n // now duplicate the style one for each inserted text.\r\n copiedStyle = insertedText.map(\r\n () =>\r\n // this return an array of references, but that is fine since we are\r\n // copying the style later.\r\n copiedStyle![0],\r\n );\r\n }\r\n if (selection) {\r\n removeFrom = _selectionStart;\r\n removeTo = _selectionEnd;\r\n } else if (backDelete) {\r\n // detect differences between forwardDelete and backDelete\r\n removeFrom = _selectionEnd - removedText.length;\r\n removeTo = _selectionEnd;\r\n } else {\r\n removeFrom = _selectionEnd;\r\n removeTo = _selectionEnd + removedText.length;\r\n }\r\n this.removeStyleFromTo(removeFrom, removeTo);\r\n }\r\n if (insertedText.length) {\r\n const { copyPasteData } = getEnv();\r\n if (\r\n fromPaste &&\r\n insertedText.join('') === copyPasteData.copiedText &&\r\n !config.disableStyleCopyPaste\r\n ) {\r\n copiedStyle = copyPasteData.copiedTextStyle;\r\n }\r\n this.insertNewStyleBlock(insertedText, _selectionStart, copiedStyle);\r\n }\r\n updateAndFire();\r\n }\r\n\r\n /**\r\n * Composition start\r\n */\r\n onCompositionStart() {\r\n this.inCompositionMode = true;\r\n }\r\n\r\n /**\r\n * Composition end\r\n */\r\n onCompositionEnd() {\r\n this.inCompositionMode = false;\r\n }\r\n\r\n onCompositionUpdate({ target }: CompositionEvent) {\r\n const { selectionStart, selectionEnd } = target as HTMLTextAreaElement;\r\n this.compositionStart = selectionStart;\r\n this.compositionEnd = selectionEnd;\r\n this.updateTextareaPosition();\r\n }\r\n\r\n /**\r\n * Copies selected text\r\n */\r\n copy() {\r\n if (this.selectionStart === this.selectionEnd) {\r\n //do not cut-copy if no selection\r\n return;\r\n }\r\n const { copyPasteData } = getEnv();\r\n copyPasteData.copiedText = this.getSelectedText();\r\n if (!config.disableStyleCopyPaste) {\r\n copyPasteData.copiedTextStyle = this.getSelectionStyles(\r\n this.selectionStart,\r\n this.selectionEnd,\r\n true,\r\n );\r\n } else {\r\n copyPasteData.copiedTextStyle = undefined;\r\n }\r\n this._copyDone = true;\r\n }\r\n\r\n /**\r\n * Pastes text\r\n */\r\n paste() {\r\n this.fromPaste = true;\r\n }\r\n\r\n /**\r\n * Finds the width in pixels before the cursor on the same line\r\n * @private\r\n * @param {Number} lineIndex\r\n * @param {Number} charIndex\r\n * @return {Number} widthBeforeCursor width before cursor\r\n */\r\n _getWidthBeforeCursor(lineIndex: number, charIndex: number): number {\r\n let widthBeforeCursor = this._getLineLeftOffset(lineIndex),\r\n bound;\r\n\r\n if (charIndex > 0) {\r\n bound = this.__charBounds[lineIndex][charIndex - 1];\r\n widthBeforeCursor += bound.left + bound.width;\r\n }\r\n return widthBeforeCursor;\r\n }\r\n\r\n /**\r\n * Gets start offset of a selection\r\n * @param {KeyboardEvent} e Event object\r\n * @param {Boolean} isRight\r\n * @return {Number}\r\n */\r\n getDownCursorOffset(e: KeyboardEvent, isRight: boolean): number {\r\n const selectionProp = this._getSelectionForOffset(e, isRight),\r\n cursorLocation = this.get2DCursorLocation(selectionProp),\r\n lineIndex = cursorLocation.lineIndex;\r\n // if on last line, down cursor goes to end of line\r\n if (\r\n lineIndex === this._textLines.length - 1 ||\r\n e.metaKey ||\r\n e.keyCode === 34\r\n ) {\r\n // move to the end of a text\r\n return this._text.length - selectionProp;\r\n }\r\n const charIndex = cursorLocation.charIndex,\r\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\r\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\r\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\r\n return (\r\n textAfterCursor.length +\r\n indexOnOtherLine +\r\n 1 +\r\n this.missingNewlineOffset(lineIndex)\r\n );\r\n }\r\n\r\n /**\r\n * private\r\n * Helps finding if the offset should be counted from Start or End\r\n * @param {KeyboardEvent} e Event object\r\n * @param {Boolean} isRight\r\n * @return {Number}\r\n */\r\n _getSelectionForOffset(e: KeyboardEvent, isRight: boolean): number {\r\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\r\n return this.selectionEnd;\r\n } else {\r\n return this.selectionStart;\r\n }\r\n }\r\n\r\n /**\r\n * @param {KeyboardEvent} e Event object\r\n * @param {Boolean} isRight\r\n * @return {Number}\r\n */\r\n getUpCursorOffset(e: KeyboardEvent, isRight: boolean): number {\r\n const selectionProp = this._getSelectionForOffset(e, isRight),\r\n cursorLocation = this.get2DCursorLocation(selectionProp),\r\n lineIndex = cursorLocation.lineIndex;\r\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\r\n // if on first line, up cursor goes to start of line\r\n return -selectionProp;\r\n }\r\n const charIndex = cursorLocation.charIndex,\r\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\r\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\r\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\r\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\r\n // return a negative offset\r\n return (\r\n -this._textLines[lineIndex - 1].length +\r\n indexOnOtherLine -\r\n textBeforeCursor.length +\r\n (1 - missingNewlineOffset)\r\n );\r\n }\r\n\r\n /**\r\n * for a given width it founds the matching character.\r\n * @private\r\n */\r\n _getIndexOnLine(lineIndex: number, width: number) {\r\n const line = this._textLines[lineIndex],\r\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\r\n let widthOfCharsOnLine = lineLeftOffset,\r\n indexOnLine = 0,\r\n charWidth,\r\n foundMatch;\r\n\r\n for (let j = 0, jlen = line.length; j < jlen; j++) {\r\n charWidth = this.__charBounds[lineIndex][j].width;\r\n widthOfCharsOnLine += charWidth;\r\n if (widthOfCharsOnLine > width) {\r\n foundMatch = true;\r\n const leftEdge = widthOfCharsOnLine - charWidth,\r\n rightEdge = widthOfCharsOnLine,\r\n offsetFromLeftEdge = Math.abs(leftEdge - width),\r\n offsetFromRightEdge = Math.abs(rightEdge - width);\r\n\r\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : j - 1;\r\n break;\r\n }\r\n }\r\n\r\n // reached end\r\n if (!foundMatch) {\r\n indexOnLine = line.length - 1;\r\n }\r\n\r\n return indexOnLine;\r\n }\r\n\r\n /**\r\n * Moves cursor down\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n moveCursorDown(e: KeyboardEvent) {\r\n if (\r\n this.selectionStart >= this._text.length &&\r\n this.selectionEnd >= this._text.length\r\n ) {\r\n return;\r\n }\r\n this._moveCursorUpOrDown('Down', e);\r\n }\r\n\r\n /**\r\n * Moves cursor up\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n moveCursorUp(e: KeyboardEvent) {\r\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\r\n return;\r\n }\r\n this._moveCursorUpOrDown('Up', e);\r\n }\r\n\r\n /**\r\n * Moves cursor up or down, fires the events\r\n * @param {String} direction 'Up' or 'Down'\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n _moveCursorUpOrDown(direction: 'Up' | 'Down', e: KeyboardEvent) {\r\n const offset = this[`get${direction}CursorOffset`](\r\n e,\r\n this._selectionDirection === RIGHT,\r\n );\r\n if (e.shiftKey) {\r\n this.moveCursorWithShift(offset);\r\n } else {\r\n this.moveCursorWithoutShift(offset);\r\n }\r\n if (offset !== 0) {\r\n const max = this.text.length;\r\n this.selectionStart = capValue(0, this.selectionStart, max);\r\n this.selectionEnd = capValue(0, this.selectionEnd, max);\r\n // TODO fix: abort and init should be an alternative depending\r\n // on selectionStart/End being equal or different\r\n this.abortCursorAnimation();\r\n this.initDelayedCursor();\r\n this._fireSelectionChanged();\r\n this._updateTextarea();\r\n }\r\n }\r\n\r\n /**\r\n * Moves cursor with shift\r\n * @param {Number} offset\r\n */\r\n moveCursorWithShift(offset: number) {\r\n const newSelection =\r\n this._selectionDirection === LEFT\r\n ? this.selectionStart + offset\r\n : this.selectionEnd + offset;\r\n this.setSelectionStartEndWithShift(\r\n this.selectionStart,\r\n this.selectionEnd,\r\n newSelection,\r\n );\r\n return offset !== 0;\r\n }\r\n\r\n /**\r\n * Moves cursor up without shift\r\n * @param {Number} offset\r\n */\r\n moveCursorWithoutShift(offset: number) {\r\n if (offset < 0) {\r\n this.selectionStart += offset;\r\n this.selectionEnd = this.selectionStart;\r\n } else {\r\n this.selectionEnd += offset;\r\n this.selectionStart = this.selectionEnd;\r\n }\r\n return offset !== 0;\r\n }\r\n\r\n /**\r\n * Moves cursor left\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n moveCursorLeft(e: KeyboardEvent) {\r\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\r\n return;\r\n }\r\n this._moveCursorLeftOrRight('Left', e);\r\n }\r\n\r\n /**\r\n * @private\r\n * @return {Boolean} true if a change happened\r\n *\r\n * @todo refactor not to use method name composition\r\n */\r\n _move(\r\n e: KeyboardEvent,\r\n prop: 'selectionStart' | 'selectionEnd',\r\n direction: 'Left' | 'Right',\r\n ): boolean {\r\n let newValue: number | undefined;\r\n if (e.altKey) {\r\n newValue = this[`findWordBoundary${direction}`](this[prop]);\r\n } else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36) {\r\n newValue = this[`findLineBoundary${direction}`](this[prop]);\r\n } else {\r\n this[prop] += direction === 'Left' ? -1 : 1;\r\n return true;\r\n }\r\n if (typeof newValue !== 'undefined' && this[prop] !== newValue) {\r\n this[prop] = newValue;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n _moveLeft(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\r\n return this._move(e, prop, 'Left');\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n _moveRight(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\r\n return this._move(e, prop, 'Right');\r\n }\r\n\r\n /**\r\n * Moves cursor left without keeping selection\r\n * @param {KeyboardEvent} e\r\n */\r\n moveCursorLeftWithoutShift(e: KeyboardEvent) {\r\n let change = true;\r\n this._selectionDirection = LEFT;\r\n\r\n // only move cursor when there is no selection,\r\n // otherwise we discard it, and leave cursor on same place\r\n if (\r\n this.selectionEnd === this.selectionStart &&\r\n this.selectionStart !== 0\r\n ) {\r\n change = this._moveLeft(e, 'selectionStart');\r\n }\r\n this.selectionEnd = this.selectionStart;\r\n return change;\r\n }\r\n\r\n /**\r\n * Moves cursor left while keeping selection\r\n * @param {KeyboardEvent} e\r\n */\r\n moveCursorLeftWithShift(e: KeyboardEvent) {\r\n if (\r\n this._selectionDirection === RIGHT &&\r\n this.selectionStart !== this.selectionEnd\r\n ) {\r\n return this._moveLeft(e, 'selectionEnd');\r\n } else if (this.selectionStart !== 0) {\r\n this._selectionDirection = LEFT;\r\n return this._moveLeft(e, 'selectionStart');\r\n }\r\n }\r\n\r\n /**\r\n * Moves cursor right\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n moveCursorRight(e: KeyboardEvent) {\r\n if (\r\n this.selectionStart >= this._text.length &&\r\n this.selectionEnd >= this._text.length\r\n ) {\r\n return;\r\n }\r\n this._moveCursorLeftOrRight('Right', e);\r\n }\r\n\r\n /**\r\n * Moves cursor right or Left, fires event\r\n * @param {String} direction 'Left', 'Right'\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n _moveCursorLeftOrRight(direction: 'Left' | 'Right', e: KeyboardEvent) {\r\n const actionName = `moveCursor${direction}${\r\n e.shiftKey ? 'WithShift' : 'WithoutShift'\r\n }` as const;\r\n this._currentCursorOpacity = 1;\r\n if (this[actionName](e)) {\r\n // TODO fix: abort and init should be an alternative depending\r\n // on selectionStart/End being equal or different\r\n this.abortCursorAnimation();\r\n this.initDelayedCursor();\r\n this._fireSelectionChanged();\r\n this._updateTextarea();\r\n }\r\n }\r\n\r\n /**\r\n * Moves cursor right while keeping selection\r\n * @param {KeyboardEvent} e\r\n */\r\n moveCursorRightWithShift(e: KeyboardEvent) {\r\n if (\r\n this._selectionDirection === LEFT &&\r\n this.selectionStart !== this.selectionEnd\r\n ) {\r\n return this._moveRight(e, 'selectionStart');\r\n } else if (this.selectionEnd !== this._text.length) {\r\n this._selectionDirection = RIGHT;\r\n return this._moveRight(e, 'selectionEnd');\r\n }\r\n }\r\n\r\n /**\r\n * Moves cursor right without keeping selection\r\n * @param {KeyboardEvent} e Event object\r\n */\r\n moveCursorRightWithoutShift(e: KeyboardEvent) {\r\n let changed = true;\r\n this._selectionDirection = RIGHT;\r\n\r\n if (this.selectionStart === this.selectionEnd) {\r\n changed = this._moveRight(e, 'selectionStart');\r\n this.selectionEnd = this.selectionStart;\r\n } else {\r\n this.selectionStart = this.selectionEnd;\r\n }\r\n return changed;\r\n }\r\n}\r\n"],"names":["ITextKeyBehavior","ITextBehavior","initHiddenTextarea","doc","canvas","getDocumentFromElement","getElement","getFabricDocument","textarea","createElement","Object","entries","autocapitalize","autocorrect","autocomplete","spellcheck","wrap","map","_ref","attribute","value","setAttribute","top","left","fontSize","_calcTextareaPosition","style","cssText","hiddenTextareaContainer","body","appendChild","blur","keydown","keyup","input","copy","cut","paste","compositionstart","compositionupdate","compositionend","_ref2","eventName","handler","addEventListener","bind","hiddenTextarea","abortCursorAnimation","onKeyDown","e","isEditing","keyMap","direction","keysMapRtl","keysMap","keyCode","ctrlKeysMapDown","ctrlKey","metaKey","stopImmediatePropagation","preventDefault","inCompositionMode","clearContextTop","renderCursorOrSelection","requestRenderAll","onKeyUp","_copyDone","ctrlKeysMapUp","onInput","fromPaste","selectionStart","selectionEnd","stopPropagation","console","log","fabricText","text","textareaValue","fabricSelection","start","end","textareaSelection","inComposition","cursorOffsetCache","_browserWrapCache","_lastDimensionState","_forceClearCache","updateFromTextArea","fire","CHANGED","target","renderAll","updateAndFire","styles","nextText","_splitTextIntoLines","graphemeText","charCount","_text","length","nextCharCount","_selectionStart","_selectionEnd","selection","copiedStyle","removedText","charDiff","removeFrom","removeTo","fromStringToGraphemeSelection","backDelete","slice","insertedText","getSelectionStyles","removeStyleFromTo","copyPasteData","getEnv","join","copiedText","config","disableStyleCopyPaste","copiedTextStyle","insertNewStyleBlock","onCompositionStart","onCompositionEnd","onCompositionUpdate","_ref3","compositionStart","compositionEnd","updateTextareaPosition","getSelectedText","undefined","_getWidthBeforeCursor","lineIndex","charIndex","widthBeforeCursor","_getLineLeftOffset","bound","__charBounds","width","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","cursorLocation","get2DCursorLocation","_textLines","indexOnOtherLine","_getIndexOnLine","textAfterCursor","missingNewlineOffset","shiftKey","getUpCursorOffset","textBeforeCursor","line","lineLeftOffset","widthOfCharsOnLine","indexOnLine","charWidth","foundMatch","j","jlen","leftEdge","rightEdge","offsetFromLeftEdge","Math","abs","offsetFromRightEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","offset","_selectionDirection","RIGHT","moveCursorWithShift","moveCursorWithoutShift","max","capValue","initDelayedCursor","_fireSelectionChanged","_updateTextarea","newSelection","LEFT","setSelectionStartEndWithShift","moveCursorLeft","_moveCursorLeftOrRight","_move","prop","newValue","altKey","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","actionName","_currentCursorOpacity","moveCursorRightWithShift","moveCursorRightWithoutShift","changed"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../../src/shapes/Text/Text.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../../src/shapes/Text/Text.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{cache as e}from"../../cache.min.mjs";import{RIGHT as i,CENTER as s,STROKE as n,BOTTOM as r,TOP as h,FILL as o,LEFT as l,DEFAULT_SVG_FONT_SIZE as a}from"../../constants.min.mjs";import{StyledText as d}from"./StyledText.min.mjs";import{SHARED_ATTRIBUTES as c}from"../../parser/attributes.min.mjs";import{parseAttributes as f}from"../../parser/parseAttributes.min.mjs";import{classRegistry as g}from"../../ClassRegistry.min.mjs";import{graphemeSplit as p}from"../../util/lang_string.min.mjs";import{createCanvasElementFor as u}from"../../util/misc/dom.min.mjs";import{layoutText as m}from"../../text/layout.min.mjs";import{segmentGraphemes as _}from"../../text/unicode.min.mjs";import{hasStyleChanged as x,stylesToArray as S,stylesFromArray as y}from"../../util/misc/textStyles.min.mjs";import{getPathSegmentsInfo as T,getPointOnPath as L}from"../../util/path/index.min.mjs";import"../Object/FabricObject.min.mjs";import{TextSVGExportMixin as w}from"./TextSVGExportMixin.min.mjs";import{applyMixins as v}from"../../util/applyMixins.min.mjs";import{textLayoutProperties as O,additionalProps as A,textDefaultValues as C,JUSTIFY as k,JUSTIFY_CENTER as F,JUSTIFY_RIGHT as W,JUSTIFY_LEFT as z,TEXT_DECORATION_THICKNESS as D}from"./constants.min.mjs";import{isFiller as b}from"../../util/typeAssertions.min.mjs";import{getBrowserLines as H,clearBrowserLines as j}from"../../text/browserLines.min.mjs";import{cacheProperties as B}from"../Object/defaultValues.min.mjs";let P;class I extends d{static getDefaults(){return{...super.getDefaults(),...I.ownDefaults}}constructor(e,i){super(),t(this,"__charBounds",[]),Object.assign(this,I.ownDefaults),this.setOptions(i),this.styles||(this.styles={}),this.text=e,this.initialized=!0,this.path&&this.setPathInfo(),this.initDimensions(),this.setCoords()}setPathInfo(){const t=this.path;t&&(t.segmentsInfo=T(t.path))}_splitText(){const t=H(this);if(t&&this.useOverlayEditing)return this._splitTextFromBrowserLines(t);const e=this._splitTextIntoLines(this.text);return this.textLines=e.lines,this._textLines=e.graphemeLines,this._unwrappedTextLines=e._unwrappedLines,this._text=e.graphemeText,e}_splitTextFromBrowserLines(t){const e=[],i=[],s=[];let n=[];for(const r of t){e.push(r.text);const h=this.graphemeSplit(r.text);i.push(h),s.push(h),n=n.concat(h),r!==t[t.length-1]&&n.push("\n")}const r={lines:e,graphemeLines:i,graphemeText:n,_unwrappedLines:s};return this.textLines=r.lines,this._textLines=r.graphemeLines,this._unwrappedTextLines=r._unwrappedLines,this._text=r.graphemeText,r}initDimensions(){if(this._isFontReady()||this.initialized||this._scheduleInitAfterFontLoad(),this.enableAdvancedLayout&&!this.path)return this.initDimensionsAdvanced();this._splitText(),this._clearCache(),this.dirty=!0,this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.includes(k)&&(this.__charBounds&&this.__charBounds.length>0?this.enlargeSpaces():(console.warn("⚠️ __charBounds not ready for justify alignment, deferring enlargeSpaces"),setTimeout(()=>{var t;this.__charBounds&&this.__charBounds.length>0&&this.enlargeSpaces&&(console.log("🔧 Applying deferred justify alignment"),this.enlargeSpaces(),null===(t=this.canvas)||void 0===t||t.requestRenderAll())},0)))}enlargeSpaces(){let t,e,i,s,n,r,h;const o="rtl"===this.direction;for(let l=0,a=this._textLines.length;l<a;l++)if((this.textAlign.includes("justify")||l!==a-1&&!this.isEndOfWrapping(l))&&(s=0,n=this._textLines[l],e=this.getLineWidth(l),e<this.width&&(h=this.textLines[l].match(this._reSpacesAndTabs))))if(i=h.length,t=(this.width-e)/i,console.log(`🔧 EnlargeSpaces Line ${l}:`),console.log(` Current width: ${e}, Target: ${this.width}`),console.log(` Spaces: ${i}, diffSpace: ${t.toFixed(2)}`),o){for(let t=0;t<n.length;t++)this._reSpaceAndTab.test(n[t]);let e=0;for(let s=0;s<=n.length;s++)if(r=this.__charBounds[l][s],r){this._reSpaceAndTab.test(n[s])&&(r.width+=t,r.kernedWidth+=t,e++);const h=(i-e)*t;r.left+=h}}else for(let e=0;e<=n.length;e++)r=this.__charBounds[l][e],r&&(this._reSpaceAndTab.test(n[e])?(r.width+=t,r.kernedWidth+=t,r.left+=s,s+=t):r.left+=s)}_layoutTextAdvanced(){const t=this._getAdvancedLayoutOptions();return m(t)}_getAdvancedLayoutOptions(){return{text:this.text,width:this.width,height:this.height,wrap:this.wrap||"word",align:this._mapTextAlignToAlign(this.textAlign),ellipsis:this.ellipsis||!1,fontSize:this.fontSize,lineHeight:this.lineHeight,letterSpacing:this.letterSpacing||0,charSpacing:this.charSpacing,direction:"inherit"===this.direction?"ltr":this.direction,fontFamily:this.fontFamily,fontStyle:this.fontStyle,fontWeight:this.fontWeight,verticalAlign:this.verticalAlign||"top"}}_mapTextAlignToAlign(t){switch(t){case"center":case s:return"center";case"right":case i:return"right";case"justify":case k:case z:case W:case F:return"justify";default:return"left"}}initDimensionsAdvanced(){if(!this.enableAdvancedLayout)return this.initDimensions();const t=this._layoutTextAdvanced();this.width=t.totalWidth||this.MIN_TEXT_WIDTH,this.height=t.totalHeight,this._convertLayoutToLegacyFormat(t),this.textAlign.includes(k)&&setTimeout(()=>{var t;this.enlargeSpaces&&(this.enlargeSpaces(),null===(t=this.canvas)||void 0===t||t.renderAll())},0),this.dirty=!0}_convertLayoutToLegacyFormat(t){this._textLines=t.lines.map(t=>t.graphemes),this.textLines=t.lines.map(t=>t.text),this.__charBounds=t.lines.map(t=>t.bounds.map(t=>({left:t.left,top:t.y,width:t.width,height:t.height,kernedWidth:t.kernedWidth,deltaY:t.deltaY||0}))),t.lines.length>0&&(this._unwrappedTextLines=t.lines.map(t=>t.graphemes))}isEndOfWrapping(t){return t===this._textLines.length-1}missingNewlineOffset(t){return 1}get2DCursorLocation(t,e){const i=e?this._unwrappedTextLines:this._textLines;let s;for(s=0;s<i.length;s++){if(t<=i[s].length)return{lineIndex:s,charIndex:t};t-=i[s].length+this.missingNewlineOffset(s,e)}return{lineIndex:s-1,charIndex:i[s-1].length<t?i[s-1].length:t}}toString(){return`#<Text (${this.complexity()}): { "text": "${this.text}", "fontFamily": "${this.fontFamily}" }>`}_getCacheCanvasDimensions(){const t=super._getCacheCanvasDimensions(),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t}_render(t){const e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")}_renderText(t){this.__overlayEditor||(this.paintFirst===n?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t)))}_setTextStyles(t,e,i){if(t.textBaseline="alphabetic",this.path)switch(this.pathAlign){case s:t.textBaseline="middle";break;case"ascender":t.textBaseline=h;break;case"descender":t.textBaseline=r}t.font=this._getFontDeclaration(e,i)}calcTextWidth(){let t=this.getLineWidth(0);for(let e=1,i=this._textLines.length;e<i;e++){const i=this.getLineWidth(e);i>t&&(t=i)}return t}_renderTextLine(t,e,i,s,n,r){this._renderChars(t,e,i,s,n,r)}_renderTextLinesBackground(t){if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))return;const e=t.fillStyle,i=this._getLeftOffset();let s=this._getTopOffset();for(let e=0,n=this._textLines.length;e<n;e++){const n=this.getHeightOfLine(e);if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",e)){s+=n;continue}const r=this._textLines[e].length,h=this._getLineLeftOffset(e);let o,l,a=0,d=0,c=this.getValueOfPropertyAt(e,0,"textBackgroundColor");for(let f=0;f<r;f++){const r=this.__charBounds[e][f];l=this.getValueOfPropertyAt(e,f,"textBackgroundColor"),this.path?(t.save(),t.translate(r.renderLeft,r.renderTop),t.rotate(r.angle),t.fillStyle=l,l&&t.fillRect(-r.width/2,-n/this.lineHeight*(1-this._fontSizeFraction),r.width,n/this.lineHeight),t.restore()):l!==c?(o=i+h+d,"rtl"===this.direction&&(o=this.width-o-a),t.fillStyle=c,c&&t.fillRect(o,s,a,n/this.lineHeight),d=r.left,a=r.width,c=l):a+=r.kernedWidth}l&&!this.path&&(o=i+h+d,"rtl"===this.direction&&(o=this.width-o-a),t.fillStyle=l,t.fillRect(o,s,a,n/this.lineHeight)),s+=n}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,i,s,n){const r=e.getFontCache(i),h=this._getFontDeclaration(i),o=s+t,l=s&&h===this._getFontDeclaration(n),a=i.fontSize/this.CACHE_FONT_SIZE;let d,c,f,g;if(s&&void 0!==r[s]&&(f=r[s]),void 0!==r[t]&&(g=d=r[t]),l&&void 0!==r[o]&&(c=r[o],g=c-f),void 0===d||void 0===f||void 0===c){const e=function(){if(!P){const t=u({width:0,height:0});P=t.getContext("2d")}return P}();this._setTextStyles(e,i,!0),void 0===d&&(g=d=e.measureText(t).width,r[t]=d),void 0===f&&l&&s&&(f=e.measureText(s).width,r[s]=f),l&&void 0===c&&(c=e.measureText(o).width,r[o]=c,g=c-f)}return{width:d*a,kernedWidth:g*a}}getHeightOfChar(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")}measureLine(t){const e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e}_measureLine(t){let e,n,r=0;const h=this.pathSide===i,o=this.path,a=this._textLines[t],d=a.length,c=new Array(d);this.__charBounds[t]=c;for(let i=0;i<d;i++){const s=a[i];n=this._getGraphemeBox(s,t,i,e),c[i]=n,r+=n.kernedWidth,e=s}if(c[d]={left:n?n.left+n.width:0,width:0,kernedWidth:0,height:this.fontSize,deltaY:0},o&&o.segmentsInfo){let t=0;const e=o.segmentsInfo[o.segmentsInfo.length-1].length;switch(this.textAlign){case l:t=h?e-r:0;break;case s:t=(e-r)/2;break;case i:t=h?0:e-r}t+=this.pathStartOffset*(h?-1:1);for(let i=h?d-1:0;h?i>=0:i<d;h?i--:i++)n=c[i],t>e?t%=e:t<0&&(t+=e),this._setGraphemeOnPath(t,n),t+=n.kernedWidth}return{width:r,numOfSpaces:0}}_setGraphemeOnPath(t,e){const s=t+e.kernedWidth/2,n=this.path,r=L(n.path,s,n.segmentsInfo);e.renderLeft=r.x-n.pathOffset.x,e.renderTop=r.y-n.pathOffset.y,e.angle=r.angle+(this.pathSide===i?Math.PI:0)}_getGraphemeBox(t,e,i,s,n){const r=this.getCompleteStyleDeclaration(e,i),h=s?this.getCompleteStyleDeclaration(e,i-1):{},o=this._measureChar(t,r,s,h);let l,a=o.kernedWidth,d=o.width;0!==this.charSpacing&&(l=this._getWidthOfCharSpacing(),d+=l,a+=l);const c={width:d,left:0,height:r.fontSize,kernedWidth:a,deltaY:r.deltaY};if(i>0&&!n){const t=this.__charBounds[e][i-1];c.left=t.left+t.width+o.kernedWidth-o.width}return c}getHeightOfLine(t){if(this.__lineHeights[t])return this.__lineHeights[t];let e=this.getHeightOfChar(t,0);for(let i=1,s=this._textLines[t].length;i<s;i++)e=Math.max(this.getHeightOfChar(t,i),e);return this.__lineHeights[t]=e*this.lineHeight*this._fontSizeMult}calcTextHeight(){let t,e=0;for(let i=0,s=this._textLines.length;i<s;i++)t=this.getHeightOfLine(i),e+=i===s-1?t/this.lineHeight:t;return e}_getLeftOffset(){return"ltr"===this.direction?-this.width/2:this.width/2}_getTopOffset(){return-this.height/2}_renderTextCommon(t,e){t.save();let i=0;const s=this._getLeftOffset(),n=this._getTopOffset();for(let r=0,h=this._textLines.length;r<h;r++){const h=this.getHeightOfLine(r),o=h/this.lineHeight,l=this._getLineLeftOffset(r);this._renderTextLine(e,t,this._textLines[r],s+l,n+i+o,r),i+=h}t.restore()}_renderTextFill(t){(this.fill||this.styleHas(o))&&this._renderTextCommon(t,"fillText")}_renderTextStroke(t){(this.stroke&&0!==this.strokeWidth||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())}_renderChars(t,e,s,n,r,h){const o=this.getHeightOfLine(h),a=this.textAlign.includes(k),d=this.path,c=!a&&0===this.charSpacing&&this.isEmptyStyles(h)&&!d,f="ltr"===this.direction,g="ltr"===this.direction?1:-1,p=e.direction;let u,m,_,S,y,T="",L=0;if(e.save(),p!==this.direction&&(e.canvas.setAttribute("dir",f?"ltr":"rtl"),e.direction=f?"ltr":"rtl",e.textAlign=a||f?l:i),r-=o*this._fontSizeFraction/this.lineHeight,c)return this._renderChar(t,e,h,0,s.join(""),n,r),void e.restore();for(let i=0,o=s.length-1;i<=o;i++)S=i===o||this.charSpacing||d,T+=s[i],_=this.__charBounds[h][i],0===L?(n+=g*(_.kernedWidth-_.width),L+=_.width):L+=_.kernedWidth,a&&!S&&this._reSpaceAndTab.test(s[i])&&(S=!0),S||(u=u||this.getCompleteStyleDeclaration(h,i),m=this.getCompleteStyleDeclaration(h,i+1),S=x(u,m,!1)),S&&(d?(e.save(),e.translate(_.renderLeft,_.renderTop),e.rotate(_.angle),this._renderChar(t,e,h,i,T,-L/2,0),e.restore()):(y=n,this._renderChar(t,e,h,i,T,y,r)),T="",u=m,n+=g*L,L=0);e.restore()}_applyPatternGradientTransformText(t){const e=this.width+this.strokeWidth,i=this.height+this.strokeWidth,s=u({width:e,height:i}),n=s.getContext("2d");return s.width=e,s.height=i,n.beginPath(),n.moveTo(0,0),n.lineTo(e,0),n.lineTo(e,i),n.lineTo(0,i),n.closePath(),n.translate(e/2,i/2),n.fillStyle=t.toLive(n),this._applyPatternGradientTransform(n,t),n.fill(),n.createPattern(s,"no-repeat")}handleFiller(t,e,i){let s,n;return b(i)?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?(s=-this.width/2,n=-this.height/2,t.translate(s,n),t[e]=this._applyPatternGradientTransformText(i),{offsetX:s,offsetY:n}):(t[e]=i.toLive(t),this._applyPatternGradientTransform(t,i)):(t[e]=i,{offsetX:0,offsetY:0})}_setStrokeStyles(t,e){let{stroke:i,strokeWidth:s}=e;return t.lineWidth=s,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",i)}_setFillStyles(t,e){let{fill:i}=e;return this.handleFiller(t,"fillStyle",i)}_renderChar(t,e,i,s,n,r,h){const o=this._getStyleDeclaration(i,s),l=this.getCompleteStyleDeclaration(i,s),a="fillText"===t&&l.fill,d="strokeText"===t&&l.stroke&&l.strokeWidth;if(d||a){if(e.save(),e.font=this._getFontDeclaration(l),o.textBackgroundColor&&this._removeShadow(e),o.deltaY&&(h+=o.deltaY),a){const t=this._setFillStyles(e,l);e.fillText(n,r-t.offsetX,h-t.offsetY)}if(d){const t=this._setStrokeStyles(e,l);e.strokeText(n,r-t.offsetX,h-t.offsetY)}e.restore()}}setSuperscript(t,e){this._setScript(t,e,this.superscript)}setSubscript(t,e){this._setScript(t,e,this.subscript)}_setScript(t,e,i){const s=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),r=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),h={fontSize:n*i.size,deltaY:r+n*i.baseline};this.setSelectionStyles(h,t,e)}_getLineLeftOffset(t){const e=this.getLineWidth(t),n=this.width-e,r=this.textAlign,h=this.direction,o=this.isEndOfWrapping(t);let a=0;return r===k||r===F&&!o||r===W&&!o||r===z&&!o?0:(r===s&&(a=n/2),r===i&&(a=n),r===F&&(a=n/2),r===W&&(a=n),"rtl"===h&&(r===i||r===k||r===W?a=0:r===l||r===z?a=-n:r!==s&&r!==F||(a=-n/2)),a)}_clearCache(){this._forceClearCache=!1,this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]}getLineWidth(t){if(void 0!==this.__lineWidths[t])return this.__lineWidths[t];const{width:e}=this.measureLine(t);return this.__lineWidths[t]=e,e}_getWidthOfCharSpacing(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0}getValueOfPropertyAt(t,e,i){var s;return null!==(s=this._getStyleDeclaration(t,e)[i])&&void 0!==s?s:this[i]}_renderTextDecoration(t,e){if(!this[e]&&!this.styleHas(e))return;let i=this._getTopOffset();const s=this._getLeftOffset(),n=this.path,r=this._getWidthOfCharSpacing(),h="linethrough"===e?.5:"overline"===e?1:0,l=this.offsets[e];for(let a=0,d=this._textLines.length;a<d;a++){const d=this.getHeightOfLine(a);if(!this[e]&&!this.styleHas(e,a)){i+=d;continue}const c=this._textLines[a],f=d/this.lineHeight,g=this._getLineLeftOffset(a);let p=0,u=0,m=this.getValueOfPropertyAt(a,0,e),_=this.getValueOfPropertyAt(a,0,o),x=this.getValueOfPropertyAt(a,0,D),S=m,y=_,T=x;const L=i+f*(1-this._fontSizeFraction);let w=this.getHeightOfChar(a,0),v=this.getValueOfPropertyAt(a,0,"deltaY");for(let i=0,r=c.length;i<r;i++){const r=this.__charBounds[a][i];S=this.getValueOfPropertyAt(a,i,e),y=this.getValueOfPropertyAt(a,i,o),T=this.getValueOfPropertyAt(a,i,D);const d=this.getHeightOfChar(a,i),c=this.getValueOfPropertyAt(a,i,"deltaY");if(n&&S&&y){const e=this.fontSize*T/1e3;t.save(),t.fillStyle=_,t.translate(r.renderLeft,r.renderTop),t.rotate(r.angle),t.fillRect(-r.kernedWidth/2,l*d+c-h*e,r.kernedWidth,e),t.restore()}else if((S!==m||y!==_||d!==w||T!==x||c!==v)&&u>0){const e=this.fontSize*x/1e3;let i=s+g+p;"rtl"===this.direction&&(i=this.width-i-u),m&&_&&x&&(t.fillStyle=_,t.fillRect(i,L+l*w+v-h*e,u,e)),p=r.left,u=r.width,m=S,x=T,_=y,w=d,v=c}else u+=r.kernedWidth}let O=s+g+p;"rtl"===this.direction&&(O=this.width-O-u),t.fillStyle=y;const A=this.fontSize*T/1e3;S&&y&&T&&t.fillRect(O,L+l*w+v-h*A,u-r,A),i+=d}this._removeShadow(t)}_getFontDeclaration(){let{fontFamily:t=this.fontFamily,fontStyle:e=this.fontStyle,fontWeight:i=this.fontWeight,fontSize:s=this.fontSize}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=t.includes("'")||t.includes('"')||t.includes(",")||I.genericFonts.includes(t.toLowerCase())?t:`"${t}"`;return n||t.includes(",")||!(t.toLowerCase().includes("stv")||t.toLowerCase().includes("arabic")||t.toLowerCase().includes("naskh")||t.toLowerCase().includes("kufi"))||(r=`${r}, "Arial Unicode MS", Arial, sans-serif`),[e,i,`${n?this.CACHE_FONT_SIZE:s}px`,r].join(" ")}render(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._forceClearCache&&this.initDimensions(),super.render(t)))}graphemeSplit(t){return p(t)}_splitTextIntoLines(t){const e=t.split(this._reNewline),i=new Array(e.length),s=["\n"];let n=[];for(let t=0;t<e.length;t++)"rtl"===this.direction||this._containsArabicText(e[t])?(i[t]=_(e[t]),console.log(`🔤 BiDi-aware split line ${t}: "${e[t]}" -> [${i[t].join(", ")}]`)):i[t]=this.graphemeSplit(e[t]),n=n.concat(i[t],s);return n.pop(),{_unwrappedLines:i,lines:e,graphemeText:n,graphemeLines:i}}_containsArabicText(t){return/[\u0600-\u06FF\u0750-\u077F\uFB50-\uFDFF\uFE70-\uFEFF]/.test(t)}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{...super.toObject([...A,...t]),styles:S(this.styles,this.text),...this.path?{path:this.path.toObject()}:{}}}set(t,e){const{textLayoutProperties:i}=this.constructor;super.set(t,e);let s=!1,n=!1;if("object"==typeof t)for(const e in t)"path"===e&&this.setPathInfo(),s=s||i.includes(e),n=n||"path"===e;else s=i.includes(t),n="path"===t;return n&&this.setPathInfo(),s&&this.initialized&&(j(this),this.initDimensions(),this.setCoords()),this}complexity(){return 1}static async fromElement(t,e,n){const r=f(t,I.ATTRIBUTE_NAMES,n),{textAnchor:h=l,textDecoration:o="",dx:d=0,dy:c=0,top:g=0,left:p=0,fontSize:u=a,strokeWidth:m=1,..._}={...e,...r},x=new this((t.textContent||"").replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," "),{left:p+d,top:g+c,underline:o.includes("underline"),overline:o.includes("overline"),linethrough:o.includes("line-through"),strokeWidth:0,fontSize:u,..._}),S=x.getScaledHeight()/x.height,y=((x.height+x.strokeWidth)*x.lineHeight-x.height)*S,T=x.getScaledHeight()+y;let L=0;return h===s&&(L=x.getScaledWidth()/2),h===i&&(L=x.getScaledWidth()),x.set({left:x.left-L,top:x.top-(T-x.fontSize*(.07+x._fontSizeFraction))/x.lineHeight,strokeWidth:m}),x}_isFontReady(){if("undefined"==typeof document||!("fonts"in document))return!0;try{return document.fonts.check(`${this.fontSize}px ${this.fontFamily}`)}catch(t){return!0}}_scheduleInitAfterFontLoad(){if("undefined"==typeof document||!("fonts"in document))return;if(this._fontLoadScheduled)return;this._fontLoadScheduled=!0;const t=`${this.fontSize}px ${this.fontFamily}`;document.fonts.load(t).then(()=>{var t;(this._fontLoadScheduled=!1,this.initDimensions(),this.textAlign&&this.textAlign.includes(k))?setTimeout(()=>{var t;this.enlargeSpaces&&this.enlargeSpaces(),null===(t=this.canvas)||void 0===t||t.requestRenderAll()},10):null===(t=this.canvas)||void 0===t||t.requestRenderAll()}).catch(()=>{this._fontLoadScheduled=!1})}forceTextReinitialization(){console.log("🔄 Force reinitializing text object"),this._clearCache(),this.dirty=!0,this._splitText(),this.initDimensions(),this.textAlign&&this.textAlign.includes(k)&&setTimeout(()=>{var t;this.__charBounds&&this.__charBounds.length>0&&this.enlargeSpaces&&(this.enlargeSpaces(),null===(t=this.canvas)||void 0===t||t.requestRenderAll())},10)}static fromObject(t){return this._fromObject({...t,styles:y(t.styles||{},t.text)},{extraParam:"text"}).then(t=>{t.initialized=!0,t._clearCache&&t._clearCache(),t.dirty=!0;const e=`${t.fontSize}px ${t.fontFamily}`;return"undefined"!=typeof document&&"fonts"in document&&"Arial"!==t.fontFamily&&"Times New Roman"!==t.fontFamily?document.fonts.load(e).then(()=>{var i;console.log(`🔤 Font loaded for JSON object: ${e}`),t.initialized=!0;if(null===(i=t.fontFamily)||void 0===i?void 0:i.toLowerCase().includes("stv")){console.log("🔤 STV font detected, using enhanced reinitialization"),t._browserWrapCache=null,t._lastDimensionState=null,t._browserWrapInitialized=!1,console.log("🔤 STV font: Cleared all cached states for fresh initialization"),t._usingBrowserWrapping=!0,console.log("🔤 STV font: Forcing browser wrapping flag during JSON load");const e=i=>{t.forceTextReinitialization?t.forceTextReinitialization():t.initDimensions(),t.width<50&&i<3&&(console.log(`🔤 STV font width still ${t.width}px, retrying in ${100*i}ms (attempt ${i+1}/3)`),setTimeout(()=>e(i+1),100*i))};e(0)}else t.forceTextReinitialization?(console.log("🔤 Using Textbox specialized reinitialization"),t.forceTextReinitialization()):t.initDimensions();return t}).catch(()=>(console.warn(`⚠️ Font loading failed for ${e}, proceeding with fallback`),t.initialized=!0,t.forceTextReinitialization?t.forceTextReinitialization():t.initDimensions(),t)):(t.initialized=!0,t.forceTextReinitialization?(console.log("🔤 Using Textbox specialized reinitialization for standard font"),t.forceTextReinitialization()):t.initDimensions(),t)})}}t(I,"textLayoutProperties",O),t(I,"cacheProperties",[...B,...A]),t(I,"ownDefaults",C),t(I,"type","Text"),t(I,"genericFonts",["serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","math","emoji","fangsong"]),t(I,"ATTRIBUTE_NAMES",c.concat("x","y","dx","dy","font-family","font-style","font-weight","font-size","letter-spacing","text-decoration","text-anchor")),v(I,[w]),g.setClass(I),g.setSVGClass(I);export{I as FabricText};
|
|
1
|
+
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{cache as e}from"../../cache.min.mjs";import{RIGHT as i,CENTER as s,STROKE as n,BOTTOM as r,TOP as h,FILL as o,LEFT as l,DEFAULT_SVG_FONT_SIZE as a}from"../../constants.min.mjs";import{StyledText as d}from"./StyledText.min.mjs";import{SHARED_ATTRIBUTES as c}from"../../parser/attributes.min.mjs";import{parseAttributes as f}from"../../parser/parseAttributes.min.mjs";import{classRegistry as g}from"../../ClassRegistry.min.mjs";import{graphemeSplit as u}from"../../util/lang_string.min.mjs";import{createCanvasElementFor as p}from"../../util/misc/dom.min.mjs";import{layoutText as m}from"../../text/layout.min.mjs";import{segmentGraphemes as _}from"../../text/unicode.min.mjs";import{hasStyleChanged as x,stylesToArray as S,stylesFromArray as y}from"../../util/misc/textStyles.min.mjs";import{getPathSegmentsInfo as T,getPointOnPath as L}from"../../util/path/index.min.mjs";import"../Object/FabricObject.min.mjs";import{TextSVGExportMixin as w}from"./TextSVGExportMixin.min.mjs";import{applyMixins as v}from"../../util/applyMixins.min.mjs";import{textLayoutProperties as O,additionalProps as A,textDefaultValues as C,JUSTIFY as k,JUSTIFY_CENTER as F,JUSTIFY_RIGHT as W,JUSTIFY_LEFT as z,TEXT_DECORATION_THICKNESS as b}from"./constants.min.mjs";import{isFiller as D}from"../../util/typeAssertions.min.mjs";import{getBrowserLines as H,clearBrowserLines as j}from"../../text/browserLines.min.mjs";import{cacheProperties as B}from"../Object/defaultValues.min.mjs";let P;class I extends d{static getDefaults(){return{...super.getDefaults(),...I.ownDefaults}}constructor(e,i){super(),t(this,"__charBounds",[]),Object.assign(this,I.ownDefaults),this.setOptions(i),this.styles||(this.styles={}),this.text=e,this.initialized=!0,this.path&&this.setPathInfo(),this.initDimensions(),this.setCoords()}setPathInfo(){const t=this.path;t&&(t.segmentsInfo=T(t.path))}_splitText(){const t=H(this);if(t&&this.useOverlayEditing)return this._splitTextFromBrowserLines(t);const e=this._splitTextIntoLines(this.text);return this.textLines=e.lines,this._textLines=e.graphemeLines,this._unwrappedTextLines=e._unwrappedLines,this._text=e.graphemeText,e}_splitTextFromBrowserLines(t){const e=[],i=[],s=[];let n=[];for(const r of t){e.push(r.text);const h=this.graphemeSplit(r.text);i.push(h),s.push(h),n=n.concat(h),r!==t[t.length-1]&&n.push("\n")}const r={lines:e,graphemeLines:i,graphemeText:n,_unwrappedLines:s};return this.textLines=r.lines,this._textLines=r.graphemeLines,this._unwrappedTextLines=r._unwrappedLines,this._text=r.graphemeText,r}initDimensions(){if(this._isFontReady()||this.initialized||this._scheduleInitAfterFontLoad(),this.enableAdvancedLayout&&!this.path)return this.initDimensionsAdvanced();this._splitText(),this._clearCache(),this.dirty=!0,this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.includes(k)&&(this.__charBounds&&this.__charBounds.length>0?this.enlargeSpaces():(console.warn("⚠️ __charBounds not ready for justify alignment, deferring enlargeSpaces"),setTimeout(()=>{var t;this.__charBounds&&this.__charBounds.length>0&&this.enlargeSpaces&&(console.log("🔧 Applying deferred justify alignment"),this.enlargeSpaces(),null===(t=this.canvas)||void 0===t||t.requestRenderAll())},0)))}enlargeSpaces(){let t,e,i,s,n,r,h;const o="rtl"===this.direction;for(let l=0,a=this._textLines.length;l<a;l++)if((this.textAlign.includes("justify")||l!==a-1&&!this.isEndOfWrapping(l))&&(s=0,n=this._textLines[l],e=this.getLineWidth(l),e<this.width&&(h=this.textLines[l].match(this._reSpacesAndTabs))))if(i=h.length,t=(this.width-e)/i,console.log(`🔧 EnlargeSpaces Line ${l}:`),console.log(` Current width: ${e}, Target: ${this.width}`),console.log(` Spaces: ${i}, diffSpace: ${t.toFixed(2)}`),o){for(let t=0;t<n.length;t++)this._reSpaceAndTab.test(n[t]);let e=0;for(let s=0;s<=n.length;s++)if(r=this.__charBounds[l][s],r){this._reSpaceAndTab.test(n[s])&&(r.width+=t,r.kernedWidth+=t,e++);const h=(i-e)*t;r.left+=h}}else for(let e=0;e<=n.length;e++)r=this.__charBounds[l][e],r&&(this._reSpaceAndTab.test(n[e])?(r.width+=t,r.kernedWidth+=t,r.left+=s,s+=t):r.left+=s)}_layoutTextAdvanced(){const t=this._getAdvancedLayoutOptions();return m(t)}_getAdvancedLayoutOptions(){return{text:this.text,width:this.width,height:this.height,wrap:this.wrap||"word",align:this._mapTextAlignToAlign(this.textAlign),ellipsis:this.ellipsis||!1,fontSize:this.fontSize,lineHeight:this.lineHeight,letterSpacing:this.letterSpacing||0,charSpacing:this.charSpacing,direction:"inherit"===this.direction?"ltr":this.direction,fontFamily:this.fontFamily,fontStyle:this.fontStyle,fontWeight:this.fontWeight,verticalAlign:this.verticalAlign||"top"}}_mapTextAlignToAlign(t){switch(t){case"center":case s:return"center";case"right":case i:return"right";case"justify":case k:case z:case W:case F:return"justify";default:return"left"}}initDimensionsAdvanced(){if(!this.enableAdvancedLayout)return this.initDimensions();const t=this._layoutTextAdvanced();this.width=t.totalWidth||this.MIN_TEXT_WIDTH,this.height=t.totalHeight,this._convertLayoutToLegacyFormat(t),this.textAlign.includes(k)&&setTimeout(()=>{var t;this.enlargeSpaces&&(this.enlargeSpaces(),null===(t=this.canvas)||void 0===t||t.renderAll())},0),this.dirty=!0}_convertLayoutToLegacyFormat(t){this._textLines=t.lines.map(t=>t.graphemes),this.textLines=t.lines.map(t=>t.text),this.__charBounds=t.lines.map(t=>t.bounds.map(t=>({left:t.left,top:t.y,width:t.width,height:t.height,kernedWidth:t.kernedWidth,deltaY:t.deltaY||0}))),t.lines.length>0&&(this._unwrappedTextLines=t.lines.map(t=>t.graphemes))}isEndOfWrapping(t){return t===this._textLines.length-1}missingNewlineOffset(t){return 1}get2DCursorLocation(t,e){const i=e?this._unwrappedTextLines:this._textLines;let s;for(s=0;s<i.length;s++){if(t<=i[s].length)return{lineIndex:s,charIndex:t};t-=i[s].length+this.missingNewlineOffset(s,e)}return{lineIndex:s-1,charIndex:i[s-1].length<t?i[s-1].length:t}}toString(){return`#<Text (${this.complexity()}): { "text": "${this.text}", "fontFamily": "${this.fontFamily}" }>`}_getCacheCanvasDimensions(){const t=super._getCacheCanvasDimensions(),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t}_render(t){const e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")}_renderText(t){this.__overlayEditor||(this.paintFirst===n?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t)))}_setTextStyles(t,e,i){if(t.textBaseline="alphabetic",this.path)switch(this.pathAlign){case s:t.textBaseline="middle";break;case"ascender":t.textBaseline=h;break;case"descender":t.textBaseline=r}t.font=this._getFontDeclaration(e,i)}calcTextWidth(){let t=this.getLineWidth(0);for(let e=1,i=this._textLines.length;e<i;e++){const i=this.getLineWidth(e);i>t&&(t=i)}return t}_renderTextLine(t,e,i,s,n,r){this._renderChars(t,e,i,s,n,r)}_renderTextLinesBackground(t){if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))return;const e=t.fillStyle,i=this._getLeftOffset();let s=this._getTopOffset();for(let e=0,n=this._textLines.length;e<n;e++){const n=this.getHeightOfLine(e);if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",e)){s+=n;continue}const r=this._textLines[e].length,h=this._getLineLeftOffset(e);let o,l,a=0,d=0,c=this.getValueOfPropertyAt(e,0,"textBackgroundColor");for(let f=0;f<r;f++){const r=this.__charBounds[e][f];l=this.getValueOfPropertyAt(e,f,"textBackgroundColor"),this.path?(t.save(),t.translate(r.renderLeft,r.renderTop),t.rotate(r.angle),t.fillStyle=l,l&&t.fillRect(-r.width/2,-n/this.lineHeight*(1-this._fontSizeFraction),r.width,n/this.lineHeight),t.restore()):l!==c?(o=i+h+d,"rtl"===this.direction&&(o=this.width-o-a),t.fillStyle=c,c&&t.fillRect(o,s,a,n/this.lineHeight),d=r.left,a=r.width,c=l):a+=r.kernedWidth}l&&!this.path&&(o=i+h+d,"rtl"===this.direction&&(o=this.width-o-a),t.fillStyle=l,t.fillRect(o,s,a,n/this.lineHeight)),s+=n}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,i,s,n){const r=e.getFontCache(i),h=this._getFontDeclaration(i),o=s+t,l=s&&h===this._getFontDeclaration(n),a=i.fontSize/this.CACHE_FONT_SIZE;let d,c,f,g;if(s&&void 0!==r[s]&&(f=r[s]),void 0!==r[t]&&(g=d=r[t]),l&&void 0!==r[o]&&(c=r[o],g=c-f),void 0===d||void 0===f||void 0===c){const e=function(){if(!P){const t=p({width:0,height:0});P=t.getContext("2d")}return P}();this._setTextStyles(e,i,!0),void 0===d&&(g=d=e.measureText(t).width,r[t]=d),void 0===f&&l&&s&&(f=e.measureText(s).width,r[s]=f),l&&void 0===c&&(c=e.measureText(o).width,r[o]=c,g=c-f)}return{width:d*a,kernedWidth:g*a}}getHeightOfChar(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")}measureLine(t){const e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e}_measureLine(t){let e,n,r=0;const h=this.pathSide===i,o=this.path,a=this._textLines[t],d=a.length,c=new Array(d);this.__charBounds[t]=c;for(let i=0;i<d;i++){const s=a[i];n=this._getGraphemeBox(s,t,i,e),c[i]=n,r+=n.kernedWidth,e=s}if(c[d]={left:n?n.left+n.width:0,width:0,kernedWidth:0,height:this.fontSize,deltaY:0},o&&o.segmentsInfo){let t=0;const e=o.segmentsInfo[o.segmentsInfo.length-1].length;switch(this.textAlign){case l:t=h?e-r:0;break;case s:t=(e-r)/2;break;case i:t=h?0:e-r}t+=this.pathStartOffset*(h?-1:1);for(let i=h?d-1:0;h?i>=0:i<d;h?i--:i++)n=c[i],t>e?t%=e:t<0&&(t+=e),this._setGraphemeOnPath(t,n),t+=n.kernedWidth}return{width:r,numOfSpaces:0}}_setGraphemeOnPath(t,e){const s=t+e.kernedWidth/2,n=this.path,r=L(n.path,s,n.segmentsInfo);e.renderLeft=r.x-n.pathOffset.x,e.renderTop=r.y-n.pathOffset.y,e.angle=r.angle+(this.pathSide===i?Math.PI:0)}_getGraphemeBox(t,e,i,s,n){const r=this.getCompleteStyleDeclaration(e,i),h=s?this.getCompleteStyleDeclaration(e,i-1):{},o=this._measureChar(t,r,s,h);let l,a=o.kernedWidth,d=o.width;0!==this.charSpacing&&(l=this._getWidthOfCharSpacing(),d+=l,a+=l);const c={width:d,left:0,height:r.fontSize,kernedWidth:a,deltaY:r.deltaY};if(i>0&&!n){const t=this.__charBounds[e][i-1];c.left=t.left+t.width+o.kernedWidth-o.width}return c}getHeightOfLine(t){if(this.__lineHeights[t])return this.__lineHeights[t];let e=this.getHeightOfChar(t,0);for(let i=1,s=this._textLines[t].length;i<s;i++)e=Math.max(this.getHeightOfChar(t,i),e);return this.__lineHeights[t]=e*this.lineHeight*this._fontSizeMult}calcTextHeight(){let t,e=0;for(let i=0,s=this._textLines.length;i<s;i++)t=this.getHeightOfLine(i),e+=i===s-1?t/this.lineHeight:t;return e}_getLeftOffset(){return"ltr"===this.direction?-this.width/2:this.width/2}_getTopOffset(){return-this.height/2}_renderTextCommon(t,e){t.save();let i=0;const s=this._getLeftOffset(),n=this._getTopOffset();for(let r=0,h=this._textLines.length;r<h;r++){const h=this.getHeightOfLine(r),o=h/this.lineHeight,l=this._getLineLeftOffset(r);this._renderTextLine(e,t,this._textLines[r],s+l,n+i+o,r),i+=h}t.restore()}_renderTextFill(t){(this.fill||this.styleHas(o))&&this._renderTextCommon(t,"fillText")}_renderTextStroke(t){(this.stroke&&0!==this.strokeWidth||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())}_renderChars(t,e,s,n,r,h){const o=this.getHeightOfLine(h),a=this.textAlign.includes(k),d=this.path,c=!a&&0===this.charSpacing&&this.isEmptyStyles(h)&&!d,f="ltr"===this.direction,g="ltr"===this.direction?1:-1,u=e.direction;let p,m,_,S,y,T="",L=0;if(e.save(),u!==this.direction&&(e.canvas.setAttribute("dir",f?"ltr":"rtl"),e.direction=f?"ltr":"rtl",e.textAlign=a||f?l:i),r-=o*this._fontSizeFraction/this.lineHeight,c)return this._renderChar(t,e,h,0,s.join(""),n,r),void e.restore();for(let i=0,o=s.length-1;i<=o;i++)S=i===o||this.charSpacing||d,T+=s[i],_=this.__charBounds[h][i],0===L?(n+=g*(_.kernedWidth-_.width),L+=_.width):L+=_.kernedWidth,a&&!S&&this._reSpaceAndTab.test(s[i])&&(S=!0),S||(p=p||this.getCompleteStyleDeclaration(h,i),m=this.getCompleteStyleDeclaration(h,i+1),S=x(p,m,!1)),S&&(d?(e.save(),e.translate(_.renderLeft,_.renderTop),e.rotate(_.angle),this._renderChar(t,e,h,i,T,-L/2,0),e.restore()):(y=n,this._renderChar(t,e,h,i,T,y,r)),T="",p=m,n+=g*L,L=0);e.restore()}_applyPatternGradientTransformText(t){const e=this.width+this.strokeWidth,i=this.height+this.strokeWidth,s=p({width:e,height:i}),n=s.getContext("2d");return s.width=e,s.height=i,n.beginPath(),n.moveTo(0,0),n.lineTo(e,0),n.lineTo(e,i),n.lineTo(0,i),n.closePath(),n.translate(e/2,i/2),n.fillStyle=t.toLive(n),this._applyPatternGradientTransform(n,t),n.fill(),n.createPattern(s,"no-repeat")}handleFiller(t,e,i){let s,n;return D(i)?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?(s=-this.width/2,n=-this.height/2,t.translate(s,n),t[e]=this._applyPatternGradientTransformText(i),{offsetX:s,offsetY:n}):(t[e]=i.toLive(t),this._applyPatternGradientTransform(t,i)):(t[e]=i,{offsetX:0,offsetY:0})}_setStrokeStyles(t,e){let{stroke:i,strokeWidth:s}=e;return t.lineWidth=s,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",i)}_setFillStyles(t,e){let{fill:i}=e;return this.handleFiller(t,"fillStyle",i)}_renderChar(t,e,i,s,n,r,h){const o=this._getStyleDeclaration(i,s),l=this.getCompleteStyleDeclaration(i,s),a="fillText"===t&&l.fill,d="strokeText"===t&&l.stroke&&l.strokeWidth;if(d||a){if(e.save(),e.font=this._getFontDeclaration(l),o.textBackgroundColor&&this._removeShadow(e),o.deltaY&&(h+=o.deltaY),a){const t=this._setFillStyles(e,l);e.fillText(n,r-t.offsetX,h-t.offsetY)}if(d){const t=this._setStrokeStyles(e,l);e.strokeText(n,r-t.offsetX,h-t.offsetY)}e.restore()}}setSuperscript(t,e){this._setScript(t,e,this.superscript)}setSubscript(t,e){this._setScript(t,e,this.subscript)}_setScript(t,e,i){const s=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),r=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),h={fontSize:n*i.size,deltaY:r+n*i.baseline};this.setSelectionStyles(h,t,e)}_getLineLeftOffset(t){const e=this.getLineWidth(t),n=this.width-e,r=this.textAlign,h=this.direction,o=this.isEndOfWrapping(t);let a=0;return r===k||r===F&&!o||r===W&&!o||r===z&&!o?0:(r===s&&(a=n/2),r===i&&(a=n),r===F&&(a=n/2),r===W&&(a=n),"rtl"===h&&(r===i||r===k||r===W?a=0:r===l||r===z?a=-n:r!==s&&r!==F||(a=-n/2)),a)}_clearCache(){this._forceClearCache=!1,this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]}getLineWidth(t){if(void 0!==this.__lineWidths[t])return this.__lineWidths[t];const{width:e}=this.measureLine(t);return this.__lineWidths[t]=e,e}_getWidthOfCharSpacing(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0}getValueOfPropertyAt(t,e,i){var s;return null!==(s=this._getStyleDeclaration(t,e)[i])&&void 0!==s?s:this[i]}_renderTextDecoration(t,e){if(!this[e]&&!this.styleHas(e))return;let i=this._getTopOffset();const s=this._getLeftOffset(),n=this.path,r=this._getWidthOfCharSpacing(),h="linethrough"===e?.5:"overline"===e?1:0,l=this.offsets[e];for(let a=0,d=this._textLines.length;a<d;a++){const d=this.getHeightOfLine(a);if(!this[e]&&!this.styleHas(e,a)){i+=d;continue}const c=this._textLines[a],f=d/this.lineHeight,g=this._getLineLeftOffset(a);let u=0,p=0,m=this.getValueOfPropertyAt(a,0,e),_=this.getValueOfPropertyAt(a,0,o),x=this.getValueOfPropertyAt(a,0,b),S=m,y=_,T=x;const L=i+f*(1-this._fontSizeFraction);let w=this.getHeightOfChar(a,0),v=this.getValueOfPropertyAt(a,0,"deltaY");for(let i=0,r=c.length;i<r;i++){const r=this.__charBounds[a][i];S=this.getValueOfPropertyAt(a,i,e),y=this.getValueOfPropertyAt(a,i,o),T=this.getValueOfPropertyAt(a,i,b);const d=this.getHeightOfChar(a,i),c=this.getValueOfPropertyAt(a,i,"deltaY");if(n&&S&&y){const e=this.fontSize*T/1e3;t.save(),t.fillStyle=_,t.translate(r.renderLeft,r.renderTop),t.rotate(r.angle),t.fillRect(-r.kernedWidth/2,l*d+c-h*e,r.kernedWidth,e),t.restore()}else if((S!==m||y!==_||d!==w||T!==x||c!==v)&&p>0){const e=this.fontSize*x/1e3;let i=s+g+u;"rtl"===this.direction&&(i=this.width-i-p),m&&_&&x&&(t.fillStyle=_,t.fillRect(i,L+l*w+v-h*e,p,e)),u=r.left,p=r.width,m=S,x=T,_=y,w=d,v=c}else p+=r.kernedWidth}let O=s+g+u;"rtl"===this.direction&&(O=this.width-O-p),t.fillStyle=y;const A=this.fontSize*T/1e3;S&&y&&T&&t.fillRect(O,L+l*w+v-h*A,p-r,A),i+=d}this._removeShadow(t)}_getFontDeclaration(){let{fontFamily:t=this.fontFamily,fontStyle:e=this.fontStyle,fontWeight:i=this.fontWeight,fontSize:s=this.fontSize}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=t.includes("'")||t.includes('"')||t.includes(",")||I.genericFonts.includes(t.toLowerCase())?t:`"${t}"`;return n||t.includes(",")||!(t.toLowerCase().includes("stv")||t.toLowerCase().includes("arabic")||t.toLowerCase().includes("naskh")||t.toLowerCase().includes("kufi"))||(r=`${r}, "Arial Unicode MS", Arial, sans-serif`),[e,i,`${n?this.CACHE_FONT_SIZE:s}px`,r].join(" ")}render(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._forceClearCache&&this.initDimensions(),super.render(t)))}graphemeSplit(t){return u(t)}_splitTextIntoLines(t){const e=t.split(this._reNewline),i=new Array(e.length),s=["\n"];let n=[];for(let t=0;t<e.length;t++)"rtl"===this.direction||this._containsArabicText(e[t])?(i[t]=_(e[t]),console.log(`🔤 BiDi-aware split line ${t}: "${e[t]}" -> [${i[t].join(", ")}]`)):i[t]=this.graphemeSplit(e[t]),n=n.concat(i[t],s);return n.pop(),{_unwrappedLines:i,lines:e,graphemeText:n,graphemeLines:i}}_containsArabicText(t){return/[\u0600-\u06FF\u0750-\u077F\uFB50-\uFDFF\uFE70-\uFEFF]/.test(t)}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{...super.toObject([...A,...t]),styles:S(this.styles,this.text),...this.path?{path:this.path.toObject()}:{}}}set(t,e){const{textLayoutProperties:i}=this.constructor;super.set(t,e);let s=!1,n=!1;if("object"==typeof t)for(const e in t)"path"===e&&this.setPathInfo(),s=s||i.includes(e),n=n||"path"===e;else s=i.includes(t),n="path"===t;return n&&this.setPathInfo(),s&&this.initialized&&(j(this),this.initDimensions(),this.setCoords()),this}complexity(){return 1}static async fromElement(t,e,n){const r=f(t,I.ATTRIBUTE_NAMES,n),{textAnchor:h=l,textDecoration:o="",dx:d=0,dy:c=0,top:g=0,left:u=0,fontSize:p=a,strokeWidth:m=1,..._}={...e,...r},x=new this((t.textContent||"").replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," "),{left:u+d,top:g+c,underline:o.includes("underline"),overline:o.includes("overline"),linethrough:o.includes("line-through"),strokeWidth:0,fontSize:p,..._}),S=x.getScaledHeight()/x.height,y=((x.height+x.strokeWidth)*x.lineHeight-x.height)*S,T=x.getScaledHeight()+y;let L=0;return h===s&&(L=x.getScaledWidth()/2),h===i&&(L=x.getScaledWidth()),x.set({left:x.left-L,top:x.top-(T-x.fontSize*(.07+x._fontSizeFraction))/x.lineHeight,strokeWidth:m}),x}_isFontReady(){if("undefined"==typeof document||!("fonts"in document))return!0;try{return document.fonts.check(`${this.fontSize}px ${this.fontFamily}`)}catch(t){return!0}}_scheduleInitAfterFontLoad(){if("undefined"==typeof document||!("fonts"in document))return;if(this._fontLoadScheduled)return;this._fontLoadScheduled=!0;const t=`${this.fontSize}px ${this.fontFamily}`;document.fonts.load(t).then(()=>{var t;(this._fontLoadScheduled=!1,this.initDimensions(),this.textAlign&&this.textAlign.includes(k))?setTimeout(()=>{var t;this.enlargeSpaces&&this.enlargeSpaces(),null===(t=this.canvas)||void 0===t||t.requestRenderAll()},10):null===(t=this.canvas)||void 0===t||t.requestRenderAll()}).catch(()=>{this._fontLoadScheduled=!1})}forceTextReinitialization(){console.log("🔄 Force reinitializing text object"),this._clearCache(),this.dirty=!0,this._splitText(),this.initDimensions(),this.textAlign&&this.textAlign.includes(k)&&setTimeout(()=>{var t;this.__charBounds&&this.__charBounds.length>0&&this.enlargeSpaces&&(this.enlargeSpaces(),null===(t=this.canvas)||void 0===t||t.requestRenderAll())},10)}static fromObject(t){return this._fromObject({...t,styles:y(t.styles||{},t.text)},{extraParam:"text"}).then(t=>{t.initialized=!0,t._clearCache&&t._clearCache(),t.dirty=!0;const e=`${t.fontSize}px ${t.fontFamily}`;return"undefined"!=typeof document&&"fonts"in document&&"Arial"!==t.fontFamily&&"Times New Roman"!==t.fontFamily?document.fonts.load(e).then(()=>{var i;console.log(`🔤 Font loaded for JSON object: ${e}`),t.initialized=!0;if(null===(i=t.fontFamily)||void 0===i?void 0:i.toLowerCase().includes("stv")){console.log("🔤 STV font detected, using enhanced reinitialization"),t._browserWrapCache=null,t._lastDimensionState=null,t._browserWrapInitialized=!1,console.log("🔤 STV font: Cleared all cached states for fresh initialization"),t._usingBrowserWrapping=!0,console.log("🔤 STV font: Forcing browser wrapping flag during JSON load"),t.useOverlayEditing=!0,console.log("🔤 STV font: Enabling overlay editing during JSON load");const e=i=>{t.forceTextReinitialization?t.forceTextReinitialization():t.initDimensions(),t.width<50&&i<3&&(console.log(`🔤 STV font width still ${t.width}px, retrying in ${100*i}ms (attempt ${i+1}/3)`),setTimeout(()=>e(i+1),100*i))};e(0)}else t.forceTextReinitialization?(console.log("🔤 Using Textbox specialized reinitialization"),t.forceTextReinitialization()):t.initDimensions();return t}).catch(()=>(console.warn(`⚠️ Font loading failed for ${e}, proceeding with fallback`),t.initialized=!0,t.forceTextReinitialization?t.forceTextReinitialization():t.initDimensions(),t)):(t.initialized=!0,t.forceTextReinitialization?(console.log("🔤 Using Textbox specialized reinitialization for standard font"),t.forceTextReinitialization()):t.initDimensions(),t)})}}t(I,"textLayoutProperties",O),t(I,"cacheProperties",[...B,...A]),t(I,"ownDefaults",C),t(I,"type","Text"),t(I,"genericFonts",["serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","math","emoji","fangsong"]),t(I,"ATTRIBUTE_NAMES",c.concat("x","y","dx","dy","font-family","font-style","font-weight","font-size","letter-spacing","text-decoration","text-anchor")),v(I,[w]),g.setClass(I),g.setSVGClass(I);export{I as FabricText};
|
|
2
2
|
//# sourceMappingURL=Text.min.mjs.map
|