@libs-ui/components-inputs-mention 0.2.78
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/README.md +3 -0
- package/defines/caret-coords.define.d.ts +5 -0
- package/defines/keyboard.define.d.ts +9 -0
- package/defines/template.define.d.ts +4 -0
- package/defines/utils.define.d.ts +18 -0
- package/esm2022/defines/caret-coords.define.mjs +115 -0
- package/esm2022/defines/keyboard.define.mjs +10 -0
- package/esm2022/defines/template.define.mjs +25 -0
- package/esm2022/defines/utils.define.mjs +280 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/interfaces/mention.interface.mjs +2 -0
- package/esm2022/libs-ui-components-inputs-mention.mjs +5 -0
- package/esm2022/list/list.component.mjs +166 -0
- package/esm2022/mention.directive.mjs +504 -0
- package/fesm2022/libs-ui-components-inputs-mention.mjs +1092 -0
- package/fesm2022/libs-ui-components-inputs-mention.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/interfaces/mention.interface.d.ts +40 -0
- package/list/list.component.d.ts +36 -0
- package/mention.directive.d.ts +48 -0
- package/package.json +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libs-ui-components-inputs-mention.mjs","sources":["../../../../../../libs-ui/components/inputs/mention/src/defines/keyboard.define.ts","../../../../../../libs-ui/components/inputs/mention/src/defines/template.define.ts","../../../../../../libs-ui/components/inputs/mention/src/defines/utils.define.ts","../../../../../../libs-ui/components/inputs/mention/src/defines/caret-coords.define.ts","../../../../../../libs-ui/components/inputs/mention/src/list/list.component.ts","../../../../../../libs-ui/components/inputs/mention/src/list/list.component.html","../../../../../../libs-ui/components/inputs/mention/src/mention.directive.ts","../../../../../../libs-ui/components/inputs/mention/src/libs-ui-components-inputs-mention.ts"],"sourcesContent":["export const KEY_BACKSPACE = 8;\nexport const KEY_TAB = 9;\nexport const KEY_ENTER = 13;\nexport const KEY_SHIFT = 16;\nexport const KEY_ESCAPE = 27;\nexport const KEY_SPACE = 32;\nexport const KEY_UP = 38;\nexport const KEY_DOWN = 40;\nexport const KEY_BUFFERED = 229;","import { deleteUnicode, get } from \"@libs-ui/utils\";\r\nimport { IMentionConfig } from \"../interfaces/mention.interface\";\r\nexport const PATTERN_INSERT = '\\ufeff';\r\n\r\nexport const buildTemplate = (value: string, id: string, feId: string): string => {\r\n return `<span class=\"mo-lib-shared-mention\" style=\"font-weight: 600;-moz-osx-font-smoothing: grayscale;-webkit-font-smoothing: antialiased; color: #7239EA\" contenteditable=\"false\" id=\"${id}\" feId=\"${feId}\" value=\"${value}\">${value}</span> `;\r\n};\r\n\r\nexport const DEFAULT_CONFIG: IMentionConfig = {\r\n items: [],\r\n triggerChar: '@',\r\n labelKey: 'email',\r\n allowSpace: true,\r\n returnTrigger: false,\r\n limitSpaceSearchQuery: 3,\r\n mentionEventName: 'click',\r\n mentionActionByEvent: (item, trigger) => console.log(item, trigger),\r\n mentionSelect: (item) => `@${get(item, 'email')}`,\r\n mentionFilter: (search: string, items?: Array<unknown>) => {\r\n const searchString = deleteUnicode(search.toLowerCase());\r\n\r\n return items?.filter(item => {\r\n const name = deleteUnicode(get(item, 'name').toLowerCase());\r\n const userName = deleteUnicode(get(item, 'username').toLowerCase());\r\n\r\n return name.includes(searchString) || userName.includes(searchString);\r\n });\r\n }\r\n};","import { get } from \"@libs-ui/utils\";\nimport { PATTERN_INSERT } from \"./template.define\";\n\nconst setValue = (el: HTMLInputElement, value: string) => {\n if (isInputOrTextAreaElement(el)) {\n el.value = value;\n\n return;\n }\n el.textContent = value;\n};\n\nexport const getValue = (el: HTMLInputElement) => {\n return isInputOrTextAreaElement(el) ? el.value : el.textContent;\n};\n\nexport const insertValue = (el: HTMLInputElement, start: number, end: number, text: string, iframe: HTMLIFrameElement, noRecursion = false): ChildNode | undefined | null => {\n if (isTextElement(el)) {\n const val = getValue(el);\n\n text = noRecursion ? PATTERN_INSERT : text;\n setValue(el, val?.substring(0, start) + text + val?.substring(end, val.length));\n setCaretPosition(el, start + text.length, iframe);\n\n return;\n }\n if (noRecursion) {\n return;\n }\n\n return insertValueToContentEditable(start, end, text);\n};\n\nconst insertValueToContentEditable = (start: number, end: number, text: string): ChildNode | undefined | null => {\n if (!window.getSelection) {\n return;\n }\n const sel = window.getSelection();\n\n if (!sel || !sel.anchorNode || !sel.getRangeAt || !sel.rangeCount) {\n return;\n }\n let range = sel.getRangeAt(0);\n const anchorNode = sel.anchorNode;\n const numberTextBeforeCursor = (getTextBeforeCursor() || '').length;\n\n range.setStart(anchorNode, numberTextBeforeCursor - (end - start));\n range.setEnd(anchorNode, numberTextBeforeCursor);\n range.deleteContents();\n // Range.createContextualFragment() would be useful here but is\n // only relatively recently standardized and is not supported in\n // some browsers (IE9, for one)\n const el = document.createElement(\"SPAN\");\n\n el.innerHTML = text;\n const frag = document.createDocumentFragment();\n let node, lastNode, nodeHandlerEvent;\n\n while ((node = el.firstChild)) {\n if (get(node, 'getAttribute')) {\n nodeHandlerEvent = node;\n }\n\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n return nodeHandlerEvent;\n};\n\nexport const getTextBeforeCursor = () => {\n const sel = window.getSelection();\n\n if (!sel || !sel.anchorNode) {\n return undefined;\n }\n const range = sel.getRangeAt(0);\n const anchorNode = sel.anchorNode;\n const rangeNew = document.createRange();\n\n rangeNew.selectNodeContents(anchorNode);\n rangeNew.setEnd(range.startContainer, range.startOffset);\n\n const fragNew = rangeNew.cloneContents();\n const elmPrev = document.createElement(\"SPAN\");\n\n elmPrev.appendChild(fragNew);\n\n return elmPrev.innerText;\n};\n\nexport const isInputOrTextAreaElement = (el: HTMLElement): boolean => {\n return el !== null && (el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA');\n};\n\nexport const isTextElement = (el: HTMLElement): boolean => {\n return el !== null && (el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA' || el.nodeName === '#text');\n};\n\nexport const setCaretPosition = (el: HTMLInputElement, pos: number, iframe: HTMLIFrameElement) => {\n if (isInputOrTextAreaElement(el) && el.selectionStart) {\n el.focus();\n el.setSelectionRange(pos, pos);\n\n return;\n }\n const range = getDocument(iframe)?.createRange();\n\n range?.setStart(el, pos);\n range?.collapse(true);\n const sel = getWindowSelection(iframe);\n\n if (!sel) {\n return;\n }\n sel.removeAllRanges();\n if (range) {\n sel.addRange(range)\n };\n};\n\nexport const getCaretPosition = (el: HTMLInputElement, iframe?: HTMLIFrameElement): number => {\n if (isInputOrTextAreaElement(el)) {\n const val = el.value;\n\n return val.slice(0, el.selectionStart || undefined).length;\n }\n const selObj = getWindowSelection(iframe); //window.getSelection();\n\n if (selObj && selObj.rangeCount > 0) {\n const selRange = selObj.getRangeAt(0);\n const preCaretRange = selRange.cloneRange();\n\n preCaretRange.selectNodeContents(el);\n preCaretRange.setEnd(selRange.endContainer, selRange.endOffset);\n const position = preCaretRange.toString().length;\n\n return position;\n }\n return 0;\n};\n\n// Based on ment.io functions...\n//\n\nconst getDocument = (iframe?: HTMLIFrameElement) => {\n if (!iframe) {\n return document;\n }\n\n return iframe.contentWindow?.document;\n};\n\nexport const getWindowSelection = (iframe?: HTMLIFrameElement): Selection | null => {\n if (!iframe) {\n return window.getSelection();\n }\n\n return iframe.contentWindow?.getSelection() || null;\n};\n\nexport const getContentEditableCaretCoords = (ctx: { iframe: HTMLIFrameElement | undefined, parent: Element | null, windowParent?: boolean }) => {\n const markerTextChar = '\\ufeff';\n const markerId = 'sel_' + new Date().getTime() + '_' + Math.random().toString().substring(2);\n const doc = getDocument(ctx.iframe) as Document;\n const sel = getWindowSelection(ctx.iframe) as Selection;\n\n if (!sel) {\n return {\n left: 0,\n top: 0,\n bottom: 0\n };\n }\n const prevRange = sel.getRangeAt(0);\n\n // create new range and set postion using prevRange\n const range = doc.createRange();\n const anchorNode = sel.anchorNode as Node;\n range.setStart(anchorNode, prevRange.startOffset);\n range.setEnd(anchorNode, prevRange.startOffset);\n range.collapse(false);\n\n // Create the marker element containing a single invisible character\n // using DOM methods and insert it at the position in the range\n const markerEl = doc.createElement('span');\n\n markerEl.id = markerId;\n markerEl.appendChild(doc.createTextNode(markerTextChar));\n range.insertNode(markerEl);\n sel.removeAllRanges();\n sel.addRange(prevRange);\n\n const coordinates = {\n left: 0,\n top: markerEl.offsetHeight,\n bottom: -1\n };\n\n localToRelativeCoordinates(ctx, markerEl, coordinates);\n markerEl.parentNode?.removeChild(markerEl);\n const widthScreen = (ctx.windowParent ? window.parent.innerWidth : window.innerWidth) || document.documentElement.clientWidth || document.body.clientWidth;\n\n if (coordinates.left + 315 > widthScreen) {\n coordinates.left = coordinates.left - 300;\n }\n const heightScreen = (ctx.windowParent ? window.parent.innerHeight : window.innerHeight) || document.documentElement.clientHeight || document.body.clientHeight;\n\n if (coordinates.top + 190 > heightScreen) {\n coordinates.bottom = heightScreen - coordinates.top + 15;\n coordinates.top = -1;\n }\n\n return coordinates;\n};\n\nconst localToRelativeCoordinates = (ctx: { iframe: HTMLIFrameElement | undefined, parent: Element | null, windowParent?: boolean }, element: Element, coordinates: { top: number; left: number, bottom: number }) => {\n let obj = <HTMLElement>element;\n let iframe = ctx ? ctx.iframe : null;\n\n while (obj) {\n if (ctx.parent !== null && ctx.parent === obj) {\n break;\n }\n coordinates.left += obj.offsetLeft + obj.clientLeft;\n coordinates.top += obj.offsetTop + obj.clientTop;\n obj = <HTMLElement>obj.offsetParent;\n if (!obj && iframe) {\n obj = iframe;\n iframe = null;\n }\n }\n obj = <HTMLElement>element;\n iframe = ctx ? ctx.iframe : null;\n while ((obj !== getDocument(undefined)?.body || ctx.windowParent) && obj !== null) {\n if (ctx.parent !== null && ctx.parent === obj) {\n break;\n }\n if (obj.scrollTop && obj.scrollTop > 0) {\n coordinates.top -= obj.scrollTop;\n }\n if (obj.scrollLeft && obj.scrollLeft > 0) {\n coordinates.left -= obj.scrollLeft;\n }\n obj = ctx.windowParent ? <HTMLElement>obj.offsetParent : <HTMLElement>obj.parentNode;\n if (!obj && iframe) {\n obj = iframe;\n iframe = null;\n }\n }\n};\n\nconst setEndOfContentEditable = (contentEditableElement: Node) => {\n if (document.createRange) {\n const range = document.createRange(); //Create a range (a range is a like the selection but invisible)\n const selection = window.getSelection(); //get the selection object (allows you to change selection)\n\n range.selectNodeContents(contentEditableElement); //Select the entire contents of the element with the range\n range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start\n selection?.removeAllRanges(); //remove any selections already made\n selection?.addRange(range); //make the range you have just created the visible selection\n }\n\n return;\n};\n\nexport const insertTextAtCaret = (element: HTMLInputElement, text: string) => {\n if (window.getSelection) {\n if (!elementContainsSelection(element)) {\n setEndOfContentEditable(element);\n insertTextAtCaret(element, text);\n\n return;\n }\n const sel = window.getSelection();\n\n if (sel?.getRangeAt && sel.rangeCount) {\n let range = sel.getRangeAt(0);\n const el = document.createElement(\"SPAN\");\n\n range.deleteContents();\n el.innerHTML = text;\n const frag = document.createDocumentFragment();\n let node: Node | null;\n let lastNode!: Node;\n\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n }\n};\n\nconst elementContainsSelection = (el: HTMLInputElement) => {\n if (!window.getSelection) {\n return false;\n }\n const sel = window.getSelection();\n\n if (sel && sel.rangeCount > 0) {\n for (let i = 0; i < sel.rangeCount; ++i) {\n if (!isOrContains(sel.getRangeAt(i).commonAncestorContainer, el)) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n};\n\nconst isOrContains = (node: Node, container: HTMLInputElement) => {\n while (node) {\n if (node === container) {\n return true;\n }\n if (node.parentNode) {\n node = node.parentNode;\n }\n }\n\n return false;\n};","/* From: https://github.com/component/textarea-caret-position */\n\nimport { get, isNil, set } from \"@libs-ui/utils\";\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize'\n\n];\n\nconst isBrowser = (typeof window !== 'undefined');\nconst isFirefox = (isBrowser && get(window, 'mozInnerScreenX') !== null);\n\nexport const getCaretCoordinates = (element: Element, position: number | null) => {\n if (!isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n // The mirror div will replicate the textarea's style\n const div: HTMLDivElement = document.createElement('div');\n\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = window.getComputedStyle ? window.getComputedStyle(element) : get(element, 'currentStyle'); // currentStyle for IE < 9\n const isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput) { style.wordWrap = 'break-word' } // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n\n // Transfer the element's properties to the div\n properties.forEach(prop => {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing !== \"border-box\") {\n style.lineHeight = computed.height;\n\n return;\n }\n const height = parseInt(computed.height);\n const outerHeight = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom) + parseInt(computed.borderTopWidth) + parseInt(computed.borderBottomWidth);\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\n\n if (height > targetHeight) {\n style.lineHeight = height - outerHeight + \"px\";\n\n return;\n }\n if (height === targetHeight) {\n style.lineHeight = computed.lineHeight;\n\n return;\n }\n style.lineHeight = '0';\n\n return;\n }\n set(style, prop, computed[prop]);\n });\n\n if (!isFirefox) {\n style.overflow = 'hidden';\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n }\n const value = get(element, 'value');\n if (isFirefox && element.scrollHeight > parseInt(computed.height)) { style.overflowY = 'scroll' }\n div.textContent = value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput && !isNil(div.textContent)) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n }\n const span = document.createElement('span');\n\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n const coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth']),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth']),\n height: parseInt(computed['lineHeight'])\n };\n\n document.body.removeChild(div);\n\n return coordinates;\n};\n","import { ChangeDetectionStrategy, Component, ElementRef, model, OnDestroy, OnInit, signal, viewChild, viewChildren } from \"@angular/core\";\nimport { LibsUiComponentsAvatarComponent } from \"@libs-ui/components-avatar\";\nimport { LibsUiComponentsPopoverComponent } from \"@libs-ui/components-popover\";\nimport { set } from \"@libs-ui/utils\";\nimport { fromEvent, Subject, takeUntil } from \"rxjs\";\nimport { getCaretCoordinates } from \"../defines/caret-coords.define\";\nimport { KEY_ENTER } from \"../defines/keyboard.define\";\nimport { getContentEditableCaretCoords, isInputOrTextAreaElement } from \"../defines/utils.define\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-mention-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n LibsUiComponentsAvatarComponent,\n LibsUiComponentsPopoverComponent\n ]\n})\nexport class LibsUiComponentsInputsMentionListComponent implements OnInit, OnDestroy {\n\n /* PROPERTY */\n public items = signal<Array<Record<string, string | undefined>>>([]);\n public activeIndex = signal<number>(0);\n public hidden = signal<boolean>(false);\n public styleOff = signal<boolean>(false);\n public parentHandlerKeyDown = signal<((e: Event, element: HTMLInputElement | undefined) => unknown) | undefined>(undefined);\n\n protected dropUp = signal<boolean>(false);\n\n private coords = signal<{ top: number, left: number, bottom?: number }>({ top: 0, left: 0, bottom: 0 });\n private offset = signal<number>(0);\n private nativeParentElement = signal<HTMLInputElement | undefined>(undefined);\n private onDestroy = new Subject<void>();\n\n /* INPUT */\n labelKey = model<string>('label');\n zIndex = model<number>(1000);\n isIframe = model.required<boolean>();\n defaultAvatar = model<string>();\n\n /* VIEW CHILD */\n readonly elementEl = viewChild<ElementRef>('element');\n readonly itemsEl = viewChildren<ElementRef>('item');\n\n ngOnInit() {\n if (this.isIframe()) {\n this.initEvent(window.parent, 'wheel');\n this.initEvent(window.parent, 'resize');\n return;\n }\n this.initEvent(window, 'wheel');\n this.initEvent(window, 'resize');\n }\n\n /* FUNCTIONS */\n private initEvent(element: Window, eventName: string) {\n fromEvent<Event>(element, eventName).pipe(takeUntil(this.onDestroy)).subscribe((event: Event) => {\n if (eventName === 'resize' || !this.elementEl()?.nativeElement.contains(event.target)) {\n this.handlerListenClose(event);\n }\n });\n }\n\n private handlerListenClose(event: Event) {\n if (event.target !== this.elementEl()?.nativeElement) {\n this.hidden.set(true);\n }\n }\n\n // lots of confusion here between relative coordinates and containers\n position(nativeParentElement: HTMLInputElement, iframe?: HTMLIFrameElement, leftDiv?: number): void {\n this.nativeParentElement.set(nativeParentElement);\n if (isInputOrTextAreaElement(nativeParentElement)) {\n // parent elements need to have postition:relative for this to work correctly?\n this.coords.set(getCaretCoordinates(nativeParentElement, nativeParentElement.selectionStart));\n this.coords.update(item => ({\n ...item,\n top: nativeParentElement.offsetTop + item.top - nativeParentElement.scrollTop,\n left: nativeParentElement.offsetLeft + item.left - nativeParentElement.scrollLeft + nativeParentElement.getBoundingClientRect().left\n }));\n\n // getCretCoordinates() for text/input elements needs an additional offset to position the list correctly\n this.offset.set(this.getBlockCursorDimensions(nativeParentElement).height);\n this.positionElement();\n return;\n }\n if (iframe) {\n const context: { iframe: HTMLIFrameElement, parent: Element | null, windowParent?: boolean } = { iframe: iframe, parent: window.parent.document.body, windowParent: true };\n // const rect = iframe.getBoundingClientRect();\n const caretRelativeToView = getContentEditableCaretCoords(context);\n const doc = document.documentElement;\n const scrollLeft = (window.scrollX || doc.scrollLeft) - (doc.clientLeft || 0);\n this.coords.update(item => ({\n ...item,\n left: caretRelativeToView.left - scrollLeft - (leftDiv || 0),\n bottom: window.parent.innerHeight - caretRelativeToView.top + 18\n }));\n if (caretRelativeToView.bottom && caretRelativeToView.bottom !== -1) {\n this.coords.update(item => ({\n ...item,\n bottom: caretRelativeToView.bottom\n }));\n }\n this.positionElement();\n\n return;\n }\n const doc = document.documentElement;\n const scrollLeft = (window.scrollX || doc.scrollLeft) - (doc.clientLeft || 0);\n const scrollTop = (window.scrollX || doc.scrollTop) - (doc.clientTop || 0);\n // bounding rectangles are relative to view, offsets are relative to container?\n const caretRelativeToView = getContentEditableCaretCoords({ iframe, parent: null });\n\n this.coords.update(item => ({\n ...item,\n top: caretRelativeToView.top - scrollTop + 10,\n left: caretRelativeToView.left - scrollLeft - (leftDiv || 0),\n bottom: caretRelativeToView.bottom\n }))\n this.positionElement();\n }\n\n get ActiveItem() {\n return this.items()[this.activeIndex()];\n }\n\n protected handlerClick(event: Event, index: number) {\n event.stopPropagation();\n this.activeIndex.set(index);\n set(event, 'keyCode', KEY_ENTER);\n this.parentHandlerKeyDown()?.(event, this.nativeParentElement());\n }\n\n activateNextItem() {\n this.activeIndex.set(this.items().length - 1 > this.activeIndex() ? this.activeIndex() + 1 : this.activeIndex());\n this.scrollToActive();\n }\n\n activatePreviousItem() {\n this.activeIndex.set(this.activeIndex() > 0 ? this.activeIndex() - 1 : this.activeIndex());\n this.scrollToActive();\n }\n\n private positionElement(left: number = this.coords().left, top: number = this.coords().top, dropUp: boolean = this.dropUp(), bottom: number = this.coords().bottom || 0) {\n const el = this.elementEl()?.nativeElement;\n\n top += dropUp ? 0 : this.offset(); // top of list is next line\n el.style.position = \"absolute\";\n el.style.left = left + 'px';\n el.style.top = bottom !== -1 ? 'auto' : top + 'px';\n el.style.bottom = bottom === -1 ? 'auto' : bottom + 'px';\n this.nativeParentElement()?.normalize();\n }\n\n private getBlockCursorDimensions(nativeParentElement: HTMLInputElement) {\n const parentStyles = window.getComputedStyle(nativeParentElement);\n\n return {\n height: parseFloat(parentStyles.lineHeight),\n width: parseFloat(parentStyles.fontSize)\n };\n }\n\n protected handleActiveItem(event: Event, index: number) {\n event.stopPropagation();\n this.activeIndex.set(index);\n }\n\n private scrollToActive() {\n if (!this.itemsEl() || (this.itemsEl().length <= this.activeIndex())) {\n return;\n }\n this.itemsEl()[this.activeIndex()].nativeElement.scrollIntoView();\n }\n\n scrollContent() {\n setTimeout(() => {\n const element = this.elementEl();\n if (element && element.nativeElement) {\n element.nativeElement.scrollTop = 0;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n}\n","<div #element\n class=\"libs-ui-mention-list\"\n [style.zIndex]=\"zIndex()\"\n [class.hidden]=\"hidden()\">\n @for (item of items(); track item) {\n <div #item\n class=\"libs-ui-mention-list-item\"\n [class.libs-ui-mention-list-item-active]=\"$index === activeIndex()\"\n (mousedown)=\"handlerClick($event, $index)\"\n (mouseenter)=\"handleActiveItem($event, $index)\">\n <div class=\"px-[12px] py-[6px] flex items-center\">\n <libs_ui-components-avatar [size]=\"24\"\n [linkAvatar]=\"item.avatar\"\n [linkAvatarError]=\"defaultAvatar()\"\n [textAvatar]=\"item.name\"\n [idGenColor]=\"item.id\"\n [getLastTextAfterSpace]=\"true\" />\n <libs_ui-components-popover [classInclude]=\"'libs-ui-font-h5r'\"\n [type]=\"'text'\"\n [ignoreShowPopover]=\"true\"\n [config]=\"{width: 250}\">\n <!-- // ta.m ẩn show tooltip vì chưa xử lý đc vị trí -->\n {{ item.name + ' (' + item.username + ')' }}\n </libs_ui-components-popover>\n </div>\n </div>\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, ComponentRef, Directive, ElementRef, OnDestroy, TemplateRef, effect, inject, input, output, signal, untracked } from \"@angular/core\";\nimport { IEvent, TYPE_TEMPLATE_REF } from \"@libs-ui/interfaces-types\";\nimport { LibsUiDynamicComponentService } from \"@libs-ui/services-dynamic-component\";\nimport { get, isNil, uuid } from \"@libs-ui/utils\";\nimport { Subject, fromEvent } from \"rxjs\";\nimport { takeUntil, tap } from \"rxjs/operators\";\nimport { KEY_BACKSPACE, KEY_BUFFERED, KEY_DOWN, KEY_ENTER, KEY_ESCAPE, KEY_SHIFT, KEY_SPACE, KEY_TAB, KEY_UP } from \"./defines/keyboard.define\";\nimport { DEFAULT_CONFIG, buildTemplate } from \"./defines/template.define\";\nimport { getCaretPosition, getTextBeforeCursor, getValue, getWindowSelection, insertTextAtCaret, insertValue, setCaretPosition } from \"./defines/utils.define\";\nimport { IMentionConfig, IMentionFunctionControlEvent, IMentionInsert, INodeInsert } from \"./interfaces/mention.interface\";\nimport { LibsUiComponentsInputsMentionListComponent } from \"./list/list.component\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsInputsMentionDirective]',\n standalone: true\n})\nexport class LibsUiComponentsInputsMentionDirective implements AfterViewInit, OnDestroy {\n\n /* PROPERTY */\n private listComponentRef = signal<ComponentRef<LibsUiComponentsInputsMentionListComponent> | undefined>(undefined);\n private nodesInsert = signal<Set<INodeInsert>>(new Set());\n private activeConfig = signal<IMentionConfig | undefined>(undefined);\n private triggerChars = signal<Record<string, IMentionConfig>>({});\n private searchString = signal<string>('');\n private startPos = signal<number | undefined>(undefined);\n private startNode = signal<any>(undefined);\n private searchList = signal<LibsUiComponentsInputsMentionListComponent | undefined>(undefined);\n private searching = signal<boolean>(false);\n private iframe = signal<any>(undefined);\n private lastKeyCode = signal<number | undefined>(undefined);\n private isEditor = signal<boolean>(false);\n private iframeId = signal<string | undefined>(undefined);\n private element = inject(ElementRef);\n private dynamicComponentService = inject(LibsUiDynamicComponentService);\n private onDestroy = new Subject<void>();\n\n /* INPUT */\n readonly mentionConfig = input<IMentionConfig>();\n readonly mentionListTemplate = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n\n /* OUTPUT */\n readonly outSearchTerm = output<string | undefined>();\n readonly outItemSelected = output<unknown>();\n readonly outToggle = output<boolean>();\n readonly outInsertMention = output<IMentionInsert>();\n readonly outFunctionControl = output<IMentionFunctionControlEvent>();\n\n constructor() {\n effect(() => {\n this.mentionConfig();\n untracked(() => this.updateConfig());\n })\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (!this.mentionConfig()) {\n return;\n }\n const isContentEditable = this.element.nativeElement.getAttribute('contenteditable');\n\n this.isEditor.set(!isContentEditable);\n const element = !this.isEditor() ? this.element.nativeElement : this.element.nativeElement.querySelector('.ql-editor[contenteditable=\"true\"]');\n\n element.addEventListener('keydown', (event: Event) => {\n this.handlerKeydown.bind(this)(event, element);\n });\n element.addEventListener('input', (event: Event) => {\n this.handlerInput.bind(this)(event, element);\n });\n element.addEventListener('blur', (event: Event) => {\n this.handlerBlur.bind(this)(event);\n });\n element.addEventListener('click', (event: Event) => {\n this.handlerFocus.bind(this)(event, element);\n });\n\n this.outFunctionControl.emit({\n addMention: () => {\n insertTextAtCaret(element, `${this.mentionConfig()?.triggerChar}`);\n setTimeout(() => {\n this.handlerKeydown({ key: this.mentionConfig()?.triggerChar, keyCode: KEY_BACKSPACE, shiftKey: true, inputEvent: true }, element);\n }, 500);\n }\n });\n });\n }\n\n /* FUNCTIONS */\n protected updateConfig() {\n const mentionConfig = this.mentionConfig();\n if (!mentionConfig) {\n return;\n }\n this.triggerChars.set({});\n this.addConfig(mentionConfig);\n if (mentionConfig.mention) {\n mentionConfig.mention.forEach(config => this.addConfig(config));\n }\n }\n\n private addConfig(config: IMentionConfig) {\n const defaults = Object.assign({}, DEFAULT_CONFIG);\n const labelKey = config.labelKey || 'label';\n config = Object.assign(defaults, config);\n if (config.items && config.items.length > 0) {\n if (typeof config.items[0] === 'string') {\n config.items.forEach((label) => {\n const object: Record<string, Record<string, string | undefined>> = {};\n\n object[labelKey] = label;\n\n return object;\n });\n }\n if (labelKey) {\n // remove items without an labelKey (as it's required to filter the list)\n config.items = config.items.filter(e => e[labelKey]);\n if (!config.disableSort) {\n config.items.sort((a, b) => (a[labelKey] || '').localeCompare((b[labelKey] || '')));\n }\n }\n }\n this.triggerChars.update(item => ({\n ...item,\n [config.triggerChar || '@']: config\n }))\n if (this.activeConfig() && this.activeConfig()?.triggerChar === config.triggerChar) {\n this.activeConfig.set(config);\n this.updateSearchList();\n }\n }\n\n protected setIframe(iframe: HTMLIFrameElement) {\n this.iframe.set(iframe);\n }\n\n private stopEvent(event: Event) {\n if (get(event, 'wasClick')) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n\n protected handlerBlur(event: Event) {\n setTimeout(() => {\n this.stopEvent(event);\n this.stopSearch();\n }, 100);\n }\n\n protected handlerInput(event: Event, nativeElement: HTMLInputElement = this.element.nativeElement) {\n const data = get(event, 'data');\n if (this.lastKeyCode() === KEY_BUFFERED && data) {\n const keyCode = data.charCodeAt(0);\n this.handlerKeydown({ keyCode, inputEvent: true }, nativeElement);\n }\n }\n\n protected handlerKeydown(event: any, nativeElement: HTMLInputElement = this.element.nativeElement): any {\n this.lastKeyCode.set(event.keyCode);\n if (event.isComposing || event.keyCode === KEY_BUFFERED) {\n return;\n }\n\n const val: any = getValue(nativeElement);\n let pos: any = getCaretPosition(nativeElement, this.iframe());\n let charPressed = event.key;\n\n if (!this.isEditor()) {\n if (event.keyCode === KEY_BACKSPACE) {\n this.appendEmptyToLastNode(pos, val.length, nativeElement);\n }\n\n setTimeout(() => {\n this.addNodeZeroWidthSpace(nativeElement);\n }, 0);\n }\n if (!charPressed) {\n const charCode = event.which || event.keyCode;\n\n charPressed = String.fromCharCode(event.which || event.keyCode);\n if (!event.shiftKey && (charCode >= 65 && charCode <= 90)) {\n charPressed = String.fromCharCode(charCode + 32);\n }\n }\n\n if (event.keyCode === KEY_ENTER && event.wasClick && pos < (this.startPos() || 0)) {\n pos = this.startNode().length;\n setCaretPosition(this.startNode(), pos, this.iframe());\n }\n const config = this.triggerChars()[charPressed];\n\n if (config) {\n this.activeConfig.set(config);\n this.startPos.set(event.inputEvent ? pos - 1 : pos);\n this.startNode.set(getWindowSelection(this.iframe())?.anchorNode);\n this.searching.set(true);\n this.searchString.set('');\n this.showSearchList(nativeElement);\n this.updateSearchList();\n if (config.returnTrigger) {\n this.outSearchTerm.emit(config.triggerChar);\n }\n\n return;\n }\n setTimeout(() => {\n for (const itemSet of this.nodesInsert()) {\n if (!nativeElement.contains(itemSet.elementSpan)) {\n itemSet.subscription?.unsubscribe();\n this.nodesInsert().delete(itemSet);\n }\n }\n });\n const startPos = this.startPos();\n if (isNil(startPos) || startPos < 0 || !this.searching()) {\n return;\n }\n const searchList = this.searchList();\n if (pos <= startPos) {\n if (searchList) {\n searchList.hidden.set(true);\n }\n return;\n }\n if (event.keyCode === KEY_SHIFT || event.metaKey || event.altKey || event.ctrlKey || pos <= startPos) {\n return;\n }\n if (!this.activeConfig()?.allowSpace && event.keyCode === KEY_SPACE) {\n this.startPos.set(-1);\n } else if (event.keyCode === KEY_BACKSPACE && pos > 0) {\n pos--;\n if (pos === this.startPos()) {\n this.stopSearch();\n }\n }\n else if (searchList?.hidden()) {\n if (event.keyCode === KEY_TAB || event.keyCode === KEY_ENTER) {\n this.stopSearch();\n return;\n }\n }\n else if (!searchList?.hidden() && this.activeConfig()) {\n if (event.keyCode === KEY_TAB || event.keyCode === KEY_ENTER) {\n this.stopEvent(event);\n // emit the selected list item\n this.outItemSelected.emit(searchList?.ActiveItem);\n // optional function to format the selected item before inserting the text\n this.insertMention(nativeElement, pos);\n // fire input event so angular bindings are updated\n if (\"Event\" in window) {\n // this seems backwards, but fire the event from this elements nativeElement (not the\n // one provided that may be in an iframe, as it won't be propogate)\n // Create the event using the modern Event constructor\n const evt = new Event(this.iframe() ? \"change\" : \"input\", {\n bubbles: true,\n cancelable: false\n });\n // Dispatch the event on the native element\n nativeElement.dispatchEvent(evt);\n }\n this.startPos.set(-1);\n this.stopSearch();\n\n return false;\n }\n\n if (event.keyCode === KEY_ESCAPE) {\n this.stopEvent(event);\n this.stopSearch();\n\n return false;\n }\n if (event.keyCode === KEY_DOWN) {\n this.stopEvent(event);\n searchList?.activateNextItem();\n\n return false;\n }\n if (event.keyCode === KEY_UP) {\n this.stopEvent(event);\n searchList?.activatePreviousItem();\n\n return false;\n }\n }\n if (charPressed.length !== 1 && event.keyCode !== KEY_BACKSPACE) {\n this.stopEvent(event);\n\n return false;\n }\n if (!this.searching()) {\n return;\n }\n let mention = val.substring((this.startPos() || 0) + 1, pos);\n\n if (event.keyCode !== KEY_BACKSPACE && !event.inputEvent) {\n mention += charPressed;\n }\n const searchString = mention.replace(String.fromCharCode(160), ' ').replace(String.fromCharCode(0), '');\n this.searchString.set(searchString.trim());\n const limitSpaceSearchQuery = this.activeConfig()?.limitSpaceSearchQuery;\n if (limitSpaceSearchQuery && (searchString.split(' ').length - 1) > limitSpaceSearchQuery) {\n this.searchString.set('');\n }\n if (this.activeConfig()?.returnTrigger) {\n const triggerChar = (this.searchString() || event.keyCode === KEY_BACKSPACE) ? val.substring(this.startPos(), (this.startPos() || 0) + 1) : '';\n\n this.outSearchTerm.emit(triggerChar + this.searchString());\n this.updateSearchList();\n\n return;\n }\n this.outSearchTerm.emit(this.searchString());\n this.updateSearchList();\n }\n\n protected handlerFocus(e?: Event, nativeElement: HTMLInputElement = this.element.nativeElement) {\n e?.stopPropagation();\n setTimeout(() => {\n const node = getWindowSelection(this.iframe())?.anchorNode;\n\n if (node?.nodeType !== 3) {\n this.stopSearch();\n\n return;\n }\n const textBeforeCursor = getTextBeforeCursor() || '';\n\n const triggerChars = Object.keys(this.triggerChars()).map((key: string) => {\n return {\n key: key,\n config: this.triggerChars()[key],\n index: textBeforeCursor.lastIndexOf(key) as number\n };\n });\n const matchingCharacters = triggerChars.reduce((pre, current) => pre && current && current.index > pre.index ? current : pre);\n\n if (matchingCharacters.index < 0) {\n this.stopSearch();\n\n return;\n }\n const search = textBeforeCursor?.substring(matchingCharacters.index, textBeforeCursor.length);\n\n if (!search) {\n this.stopSearch();\n\n return;\n }\n const pos = getCaretPosition(nativeElement, this.iframe());\n\n this.activeConfig.set(matchingCharacters.config);\n this.startPos.set(pos - (textBeforeCursor.length - matchingCharacters.index));\n this.searchString.set(search.replace(matchingCharacters.key, ''));\n this.searching.set(true);\n this.handlerKeydown({ keyCode: ''.charCodeAt(0), inputEvent: false }, nativeElement);\n const divElement = document.createElement(\"div\");\n\n divElement.style.width = 'max-content';\n divElement.style.position = 'absolute';\n divElement.innerText = search;\n document.body.appendChild(divElement);\n let iframe = undefined;\n try {\n iframe = this.mentionConfig()?.iframe ? (window.parent.document.getElementById(this.mentionConfig()?.iframe as string) as HTMLIFrameElement) : undefined;\n } catch (error) {\n console.log(error);\n }\n const searchList = this.searchList();\n if (searchList) {\n searchList.position(nativeElement, iframe, divElement.getBoundingClientRect().width)\n }\n divElement.remove();\n nativeElement.normalize();\n });\n }\n\n private stopSearch() {\n const searchList = this.searchList();\n if (searchList && !searchList.hidden()) {\n searchList.hidden.set(true);\n this.outToggle.emit(false);\n }\n this.activeConfig.set(undefined);\n this.searching.set(false);\n }\n\n private updateSearchList() {\n const matches: any[] = [];\n const activeConfig = this.activeConfig();\n const searchString = this.searchString();\n const searchList = this.searchList();\n // disabling the search relies on the async operation to do the filtering\n if (activeConfig && activeConfig.items && !activeConfig.disableSearch && !isNil(searchString) && activeConfig.labelKey && activeConfig.mentionFilter) {\n matches.push(...activeConfig.mentionFilter(searchString, activeConfig.items) as any);\n }\n // update the search list\n if (!searchList) {\n return;\n }\n searchList.items.set(matches);\n searchList.hidden.set(!matches.length);\n searchList.activeIndex.set(0);\n searchList.scrollContent();\n this.outToggle.emit(matches.length ? true : false);\n }\n\n private showSearchList(nativeElement: HTMLInputElement) {\n let iframe = undefined;\n const mentionConfig = this.mentionConfig();\n try {\n iframe = mentionConfig?.iframe ? window.parent.document.getElementById(mentionConfig?.iframe as string) as HTMLIFrameElement : undefined;\n } catch (error) {\n console.log(error);\n }\n if (!mentionConfig) {\n return;\n }\n this.outToggle.emit(true);\n let firstTime = false;\n\n if (!this.listComponentRef()) {\n firstTime = true;\n this.listComponentRef.set(this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsInputsMentionListComponent));\n this.searchList.set(this.listComponentRef()?.instance);\n }\n this.searchList()?.labelKey.set(this.activeConfig()?.labelKey || '');\n this.searchList()?.styleOff.set(this.mentionConfig()?.disableStyle || false);\n this.searchList()?.activeIndex.set(0);\n this.searchList()?.zIndex.set(this.mentionConfig()?.zIndex || 2500);\n this.searchList()?.isIframe.set(iframe ? true : false);\n this.searchList()?.parentHandlerKeyDown.set(this.handlerKeydown.bind(this));\n this.searchList()?.position(nativeElement, iframe);\n if (firstTime && this.listComponentRef()) {\n this.iframeId.set(this.dynamicComponentService.addToBody(this.listComponentRef(), iframe ? true : false));\n }\n }\n\n private destroyListSearch() {\n this.dynamicComponentService.remove(this.listComponentRef, this.iframeId());\n this.listComponentRef.set(undefined);\n }\n\n protected appendEmptyToLastNode(position: number, length: number, nativeElement: HTMLInputElement = this.element.nativeElement) {\n const empty = document.createTextNode('\\u00A0');\n const selection = getWindowSelection(this.iframe());\n const anchorNode = selection?.anchorNode;\n\n if (this.isEditor()) {\n const parentNode = anchorNode?.parentNode as Element;\n\n if (parentNode && parentNode.getAttribute && parentNode.getAttribute('id')) {\n if (!parentNode.nextSibling || !parentNode.nextSibling.textContent?.length) {\n parentNode?.parentNode?.insertBefore(empty, parentNode.nextSibling);\n }\n const range = document.createRange();\n const sel = window.getSelection();\n\n range.setStart(parentNode.nextSibling as Node, 0);\n range.collapse(true);\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n\n return;\n }\n let preNode = null;\n const anchorOffset = selection?.anchorOffset;\n\n if (!anchorNode || !anchorOffset) {\n return;\n }\n\n if (anchorNode.nodeName.toLowerCase() !== '#text') {\n nativeElement.appendChild(empty);\n\n return;\n }\n\n for (let i = 0; i < nativeElement.childNodes.length; i++) {\n const node = nativeElement.childNodes[i];\n\n if (anchorNode.nodeType === 3 && anchorNode === node && preNode && preNode.getAttribute && preNode.getAttribute('id') && (!anchorNode.textContent?.length || anchorNode.textContent.length === 1) && position === length) {\n nativeElement.appendChild(empty);\n break;\n }\n preNode = node as Element;\n }\n }\n\n protected addNodeZeroWidthSpace(nativeElement: HTMLInputElement = this.element.nativeElement) {\n const empty = document.createTextNode('\\u200b');\n let preNode = null;\n\n for (let i = 0; i < nativeElement.childNodes.length; i++) {\n const node: any = nativeElement.childNodes[i];\n\n if (preNode && preNode.getAttribute && preNode.getAttribute('id') && node && node.getAttribute && node.getAttribute('id')) {\n nativeElement.insertBefore(empty, preNode.nextSibling);\n }\n\n preNode = node;\n }\n }\n\n private insertMention(nativeElement: HTMLInputElement, pos: number) {\n const activeConfig = this.activeConfig();\n if (!activeConfig) {\n return;\n }\n const searchList = this.searchList();\n let text = '';\n const feId = uuid();\n const id = searchList?.ActiveItem.id || uuid();\n const itemActive = searchList?.ActiveItem;\n const { triggerChar, mentionEventName, mentionActionByEvent } = activeConfig;\n\n if (activeConfig.mentionSelect) {\n text = activeConfig.mentionSelect(searchList?.ActiveItem, activeConfig.triggerChar);\n }\n if (!this.isEditor()) {\n let span: HTMLSpanElement = document.createElement('TEXTAREA');\n\n span.innerText = text;\n text = span.innerHTML;\n span.remove();\n text = buildTemplate(text, id, feId);\n span = insertValue(nativeElement, this.startPos() || 0, pos, text, this.iframe()) as HTMLSpanElement;\n if (span) {\n const data: INodeInsert = {\n elementSpan: span,\n subscription: undefined,\n item: itemActive,\n triggerChar: triggerChar,\n manualAdd: true\n };\n\n this.nodesInsert().add(data);\n if (mentionEventName) {\n data.subscription = fromEvent<IEvent>(span, mentionEventName).pipe(\n tap(e => e.stopPropagation()),\n takeUntil(this.onDestroy)\n ).subscribe(() => {\n if (mentionActionByEvent) {\n mentionActionByEvent(itemActive, triggerChar);\n }\n })\n }\n }\n } else {\n this.outInsertMention.emit({ data: { id, value: text, feId }, lengthKey: pos - (this.startPos() || 0) });\n }\n }\n\n ngOnDestroy(): void {\n this.destroyListSearch();\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["takeUntil"],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Subscription } from "rxjs";
|
|
2
|
+
export interface IMentionConfig extends IMentionItem {
|
|
3
|
+
disableStyle?: boolean;
|
|
4
|
+
iframe?: string;
|
|
5
|
+
mention?: Array<IMentionItem>;
|
|
6
|
+
}
|
|
7
|
+
export interface IMentionItem {
|
|
8
|
+
triggerChar?: string;
|
|
9
|
+
labelKey?: string;
|
|
10
|
+
disableSort?: boolean;
|
|
11
|
+
disableSearch?: boolean;
|
|
12
|
+
dropUp?: boolean;
|
|
13
|
+
allowSpace?: boolean;
|
|
14
|
+
limitSpaceSearchQuery?: number;
|
|
15
|
+
returnTrigger?: boolean;
|
|
16
|
+
mentionSelect?: (item: unknown, triggerChar?: string) => (string);
|
|
17
|
+
mentionFilter?: (searchString: string, items?: Array<unknown>) => Array<unknown> | undefined;
|
|
18
|
+
mentionEventName?: 'click' | 'mouseenter';
|
|
19
|
+
mentionActionByEvent?: (item: unknown, triggerChars?: string) => void;
|
|
20
|
+
items: Array<Record<string, string | undefined>>;
|
|
21
|
+
zIndex?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface INodeInsert {
|
|
24
|
+
elementSpan: HTMLSpanElement;
|
|
25
|
+
subscription?: Subscription;
|
|
26
|
+
item?: Record<string, string | undefined>;
|
|
27
|
+
triggerChar?: string;
|
|
28
|
+
manualAdd?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface IMentionInsert {
|
|
31
|
+
data: {
|
|
32
|
+
id: string;
|
|
33
|
+
feId: string;
|
|
34
|
+
value: string;
|
|
35
|
+
};
|
|
36
|
+
lengthKey: number;
|
|
37
|
+
}
|
|
38
|
+
export interface IMentionFunctionControlEvent {
|
|
39
|
+
addMention: (inputEvent: boolean) => void;
|
|
40
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ElementRef, OnDestroy, OnInit } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class LibsUiComponentsInputsMentionListComponent implements OnInit, OnDestroy {
|
|
4
|
+
items: import("@angular/core").WritableSignal<Record<string, string | undefined>[]>;
|
|
5
|
+
activeIndex: import("@angular/core").WritableSignal<number>;
|
|
6
|
+
hidden: import("@angular/core").WritableSignal<boolean>;
|
|
7
|
+
styleOff: import("@angular/core").WritableSignal<boolean>;
|
|
8
|
+
parentHandlerKeyDown: import("@angular/core").WritableSignal<((e: Event, element: HTMLInputElement | undefined) => unknown) | undefined>;
|
|
9
|
+
protected dropUp: import("@angular/core").WritableSignal<boolean>;
|
|
10
|
+
private coords;
|
|
11
|
+
private offset;
|
|
12
|
+
private nativeParentElement;
|
|
13
|
+
private onDestroy;
|
|
14
|
+
labelKey: import("@angular/core").ModelSignal<string>;
|
|
15
|
+
zIndex: import("@angular/core").ModelSignal<number>;
|
|
16
|
+
isIframe: import("@angular/core").ModelSignal<boolean>;
|
|
17
|
+
defaultAvatar: import("@angular/core").ModelSignal<string | undefined>;
|
|
18
|
+
readonly elementEl: import("@angular/core").Signal<ElementRef<any> | undefined>;
|
|
19
|
+
readonly itemsEl: import("@angular/core").Signal<readonly ElementRef<any>[]>;
|
|
20
|
+
ngOnInit(): void;
|
|
21
|
+
private initEvent;
|
|
22
|
+
private handlerListenClose;
|
|
23
|
+
position(nativeParentElement: HTMLInputElement, iframe?: HTMLIFrameElement, leftDiv?: number): void;
|
|
24
|
+
get ActiveItem(): Record<string, string | undefined>;
|
|
25
|
+
protected handlerClick(event: Event, index: number): void;
|
|
26
|
+
activateNextItem(): void;
|
|
27
|
+
activatePreviousItem(): void;
|
|
28
|
+
private positionElement;
|
|
29
|
+
private getBlockCursorDimensions;
|
|
30
|
+
protected handleActiveItem(event: Event, index: number): void;
|
|
31
|
+
private scrollToActive;
|
|
32
|
+
scrollContent(): void;
|
|
33
|
+
ngOnDestroy(): void;
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsInputsMentionListComponent, never>;
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsInputsMentionListComponent, "libs_ui-components-inputs-mention-list", never, { "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "isIframe": { "alias": "isIframe"; "required": true; "isSignal": true; }; "defaultAvatar": { "alias": "defaultAvatar"; "required": false; "isSignal": true; }; }, { "labelKey": "labelKeyChange"; "zIndex": "zIndexChange"; "isIframe": "isIframeChange"; "defaultAvatar": "defaultAvatarChange"; }, never, never, true, never>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { AfterViewInit, OnDestroy, TemplateRef } from "@angular/core";
|
|
2
|
+
import { IMentionConfig, IMentionFunctionControlEvent, IMentionInsert } from "./interfaces/mention.interface";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class LibsUiComponentsInputsMentionDirective implements AfterViewInit, OnDestroy {
|
|
5
|
+
private listComponentRef;
|
|
6
|
+
private nodesInsert;
|
|
7
|
+
private activeConfig;
|
|
8
|
+
private triggerChars;
|
|
9
|
+
private searchString;
|
|
10
|
+
private startPos;
|
|
11
|
+
private startNode;
|
|
12
|
+
private searchList;
|
|
13
|
+
private searching;
|
|
14
|
+
private iframe;
|
|
15
|
+
private lastKeyCode;
|
|
16
|
+
private isEditor;
|
|
17
|
+
private iframeId;
|
|
18
|
+
private element;
|
|
19
|
+
private dynamicComponentService;
|
|
20
|
+
private onDestroy;
|
|
21
|
+
readonly mentionConfig: import("@angular/core").InputSignal<IMentionConfig | undefined>;
|
|
22
|
+
readonly mentionListTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
|
|
23
|
+
readonly outSearchTerm: import("@angular/core").OutputEmitterRef<string | undefined>;
|
|
24
|
+
readonly outItemSelected: import("@angular/core").OutputEmitterRef<unknown>;
|
|
25
|
+
readonly outToggle: import("@angular/core").OutputEmitterRef<boolean>;
|
|
26
|
+
readonly outInsertMention: import("@angular/core").OutputEmitterRef<IMentionInsert>;
|
|
27
|
+
readonly outFunctionControl: import("@angular/core").OutputEmitterRef<IMentionFunctionControlEvent>;
|
|
28
|
+
constructor();
|
|
29
|
+
ngAfterViewInit(): void;
|
|
30
|
+
protected updateConfig(): void;
|
|
31
|
+
private addConfig;
|
|
32
|
+
protected setIframe(iframe: HTMLIFrameElement): void;
|
|
33
|
+
private stopEvent;
|
|
34
|
+
protected handlerBlur(event: Event): void;
|
|
35
|
+
protected handlerInput(event: Event, nativeElement?: HTMLInputElement): void;
|
|
36
|
+
protected handlerKeydown(event: any, nativeElement?: HTMLInputElement): any;
|
|
37
|
+
protected handlerFocus(e?: Event, nativeElement?: HTMLInputElement): void;
|
|
38
|
+
private stopSearch;
|
|
39
|
+
private updateSearchList;
|
|
40
|
+
private showSearchList;
|
|
41
|
+
private destroyListSearch;
|
|
42
|
+
protected appendEmptyToLastNode(position: number, length: number, nativeElement?: HTMLInputElement): void;
|
|
43
|
+
protected addNodeZeroWidthSpace(nativeElement?: HTMLInputElement): void;
|
|
44
|
+
private insertMention;
|
|
45
|
+
ngOnDestroy(): void;
|
|
46
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsInputsMentionDirective, never>;
|
|
47
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<LibsUiComponentsInputsMentionDirective, "[LibsUiComponentsInputsMentionDirective]", never, { "mentionConfig": { "alias": "mentionConfig"; "required": false; "isSignal": true; }; "mentionListTemplate": { "alias": "mentionListTemplate"; "required": false; "isSignal": true; }; }, { "outSearchTerm": "outSearchTerm"; "outItemSelected": "outItemSelected"; "outToggle": "outToggle"; "outInsertMention": "outInsertMention"; "outFunctionControl": "outFunctionControl"; }, never, never, true, never>;
|
|
48
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@libs-ui/components-inputs-mention",
|
|
3
|
+
"version": "0.2.78",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^18.2.0",
|
|
6
|
+
"@angular/core": "^18.2.0"
|
|
7
|
+
},
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"module": "fesm2022/libs-ui-components-inputs-mention.mjs",
|
|
10
|
+
"typings": "index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
"./package.json": {
|
|
13
|
+
"default": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./index.d.ts",
|
|
17
|
+
"esm2022": "./esm2022/libs-ui-components-inputs-mention.mjs",
|
|
18
|
+
"esm": "./esm2022/libs-ui-components-inputs-mention.mjs",
|
|
19
|
+
"default": "./fesm2022/libs-ui-components-inputs-mention.mjs"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"tslib": "^2.3.0"
|
|
24
|
+
}
|
|
25
|
+
}
|