@libs-ui/components-inputs-mention 0.1.1-1
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/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/template.define.mjs +26 -0
- package/esm2022/defines/utils.define.mjs +279 -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 +165 -0
- package/esm2022/mention.directive.mjs +507 -0
- package/fesm2022/libs-ui-components-inputs-mention.mjs +1084 -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 +49 -0
- package/package.json +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const getValue: (el: HTMLInputElement) => string | null;
|
|
2
|
+
export declare const insertValue: (el: HTMLInputElement, start: number, end: number, text: string, iframe: HTMLIFrameElement, noRecursion?: boolean) => ChildNode | undefined | null;
|
|
3
|
+
export declare const getTextBeforeCursor: () => string | undefined;
|
|
4
|
+
export declare const isInputOrTextAreaElement: (el: HTMLElement) => boolean;
|
|
5
|
+
export declare const isTextElement: (el: HTMLElement) => boolean;
|
|
6
|
+
export declare const setCaretPosition: (el: HTMLInputElement, pos: number, iframe: HTMLIFrameElement) => void;
|
|
7
|
+
export declare const getCaretPosition: (el: HTMLInputElement, iframe?: HTMLIFrameElement) => number;
|
|
8
|
+
export declare const getWindowSelection: (iframe?: HTMLIFrameElement) => Selection | null;
|
|
9
|
+
export declare const getContentEditableCaretCoords: (ctx: {
|
|
10
|
+
iframe: HTMLIFrameElement | undefined;
|
|
11
|
+
parent: Element | null;
|
|
12
|
+
windowParent?: boolean;
|
|
13
|
+
}) => {
|
|
14
|
+
left: number;
|
|
15
|
+
top: number;
|
|
16
|
+
bottom: number;
|
|
17
|
+
};
|
|
18
|
+
export declare const insertTextAtCaret: (element: HTMLInputElement, text: string) => void;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/* From: https://github.com/component/textarea-caret-position */
|
|
2
|
+
import { get, isNil, set } from '@libs-ui/utils';
|
|
3
|
+
// We'll copy the properties below into the mirror div.
|
|
4
|
+
// Note that some browsers, such as Firefox, do not concatenate properties
|
|
5
|
+
// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),
|
|
6
|
+
// so we have to list every single property explicitly.
|
|
7
|
+
const properties = [
|
|
8
|
+
'direction', // RTL support
|
|
9
|
+
'boxSizing',
|
|
10
|
+
'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does
|
|
11
|
+
'height',
|
|
12
|
+
'overflowX',
|
|
13
|
+
'overflowY', // copy the scrollbar for IE
|
|
14
|
+
'borderTopWidth',
|
|
15
|
+
'borderRightWidth',
|
|
16
|
+
'borderBottomWidth',
|
|
17
|
+
'borderLeftWidth',
|
|
18
|
+
'borderStyle',
|
|
19
|
+
'paddingTop',
|
|
20
|
+
'paddingRight',
|
|
21
|
+
'paddingBottom',
|
|
22
|
+
'paddingLeft',
|
|
23
|
+
// https://developer.mozilla.org/en-US/docs/Web/CSS/font
|
|
24
|
+
'fontStyle',
|
|
25
|
+
'fontVariant',
|
|
26
|
+
'fontWeight',
|
|
27
|
+
'fontStretch',
|
|
28
|
+
'fontSize',
|
|
29
|
+
'fontSizeAdjust',
|
|
30
|
+
'lineHeight',
|
|
31
|
+
'fontFamily',
|
|
32
|
+
'textAlign',
|
|
33
|
+
'textTransform',
|
|
34
|
+
'textIndent',
|
|
35
|
+
'textDecoration', // might not make a difference, but better be safe
|
|
36
|
+
'letterSpacing',
|
|
37
|
+
'wordSpacing',
|
|
38
|
+
'tabSize',
|
|
39
|
+
'MozTabSize',
|
|
40
|
+
];
|
|
41
|
+
const isBrowser = typeof window !== 'undefined';
|
|
42
|
+
const isFirefox = isBrowser && get(window, 'mozInnerScreenX') !== null;
|
|
43
|
+
export const getCaretCoordinates = (element, position) => {
|
|
44
|
+
if (!isBrowser) {
|
|
45
|
+
throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');
|
|
46
|
+
}
|
|
47
|
+
// The mirror div will replicate the textarea's style
|
|
48
|
+
const div = document.createElement('div');
|
|
49
|
+
div.id = 'input-textarea-caret-position-mirror-div';
|
|
50
|
+
document.body.appendChild(div);
|
|
51
|
+
const style = div.style;
|
|
52
|
+
const computed = window.getComputedStyle ? window.getComputedStyle(element) : get(element, 'currentStyle'); // currentStyle for IE < 9
|
|
53
|
+
const isInput = element.nodeName === 'INPUT';
|
|
54
|
+
// Default textarea styles
|
|
55
|
+
style.whiteSpace = 'pre-wrap';
|
|
56
|
+
if (!isInput) {
|
|
57
|
+
style.wordBreak = 'break-word';
|
|
58
|
+
} // only for textarea-s
|
|
59
|
+
// Position off-screen
|
|
60
|
+
style.position = 'absolute'; // required to return coordinates properly
|
|
61
|
+
// Transfer the element's properties to the div
|
|
62
|
+
properties.forEach((prop) => {
|
|
63
|
+
if (isInput && prop === 'lineHeight') {
|
|
64
|
+
// Special case for <input>s because text is rendered centered and line height may be != height
|
|
65
|
+
if (computed.boxSizing !== 'border-box') {
|
|
66
|
+
style.lineHeight = computed.height;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const height = parseInt(computed.height);
|
|
70
|
+
const outerHeight = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom) + parseInt(computed.borderTopWidth) + parseInt(computed.borderBottomWidth);
|
|
71
|
+
const targetHeight = outerHeight + parseInt(computed.lineHeight);
|
|
72
|
+
if (height > targetHeight) {
|
|
73
|
+
style.lineHeight = height - outerHeight + 'px';
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (height === targetHeight) {
|
|
77
|
+
style.lineHeight = computed.lineHeight;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
style.lineHeight = '0';
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
set(style, prop, computed[prop]);
|
|
84
|
+
});
|
|
85
|
+
if (!isFirefox) {
|
|
86
|
+
style.overflow = 'hidden';
|
|
87
|
+
// Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275
|
|
88
|
+
}
|
|
89
|
+
const value = get(element, 'value');
|
|
90
|
+
if (isFirefox && element.scrollHeight > parseInt(computed.height)) {
|
|
91
|
+
style.overflowY = 'scroll';
|
|
92
|
+
}
|
|
93
|
+
div.textContent = value.substring(0, position);
|
|
94
|
+
// The second special handling for input type="text" vs textarea:
|
|
95
|
+
// spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037
|
|
96
|
+
if (isInput && !isNil(div.textContent)) {
|
|
97
|
+
div.textContent = div.textContent.replace(/\s/g, '\u00a0');
|
|
98
|
+
}
|
|
99
|
+
const span = document.createElement('span');
|
|
100
|
+
// Wrapping must be replicated *exactly*, including when a long word gets
|
|
101
|
+
// onto the next line, with whitespace at the end of the line before (#7).
|
|
102
|
+
// The *only* reliable way to do that is to copy the *entire* rest of the
|
|
103
|
+
// textarea's content into the <span> created at the caret position.
|
|
104
|
+
// For inputs, just '.' would be enough, but no need to bother.
|
|
105
|
+
span.textContent = value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all
|
|
106
|
+
div.appendChild(span);
|
|
107
|
+
const coordinates = {
|
|
108
|
+
top: span.offsetTop + parseInt(computed['borderTopWidth']),
|
|
109
|
+
left: span.offsetLeft + parseInt(computed['borderLeftWidth']),
|
|
110
|
+
height: parseInt(computed['lineHeight']),
|
|
111
|
+
};
|
|
112
|
+
document.body.removeChild(div);
|
|
113
|
+
return coordinates;
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZXQtY29vcmRzLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvbWVudGlvbi9zcmMvZGVmaW5lcy9jYXJldC1jb29yZHMuZGVmaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdFQUFnRTtBQUdoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCx1REFBdUQ7QUFDdkQsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxVQUFVLEdBQUc7SUFDakIsV0FBVyxFQUFFLGNBQWM7SUFDM0IsV0FBVztJQUNYLE9BQU8sRUFBRSxnR0FBZ0c7SUFDekcsUUFBUTtJQUNSLFdBQVc7SUFDWCxXQUFXLEVBQUUsNEJBQTRCO0lBRXpDLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixhQUFhO0lBRWIsWUFBWTtJQUNaLGNBQWM7SUFDZCxlQUFlO0lBQ2YsYUFBYTtJQUViLHdEQUF3RDtJQUN4RCxXQUFXO0lBQ1gsYUFBYTtJQUNiLFlBQVk7SUFDWixhQUFhO0lBQ2IsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osWUFBWTtJQUVaLFdBQVc7SUFDWCxlQUFlO0lBQ2YsWUFBWTtJQUNaLGdCQUFnQixFQUFFLGtEQUFrRDtJQUVwRSxlQUFlO0lBQ2YsYUFBYTtJQUViLFNBQVM7SUFDVCxZQUFZO0NBQ2IsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQztBQUNoRCxNQUFNLFNBQVMsR0FBRyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE9B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dHRwczovL2dpdGh1Yi5jb20vY29tcG9uZW50L3RleHRhcmVhLWNhcmV0LXBvc2l0aW9uICovXG5cbmltcG9ydCB7IFBhdGhPZiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgZ2V0LCBpc05pbCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuXG4vLyBXZSdsbCBjb3B5IHRoZSBwcm9wZXJ0aWVzIGJlbG93IGludG8gdGhlIG1pcnJvciBkaXYuXG4vLyBOb3RlIHRoYXQgc29tZSBicm93c2Vycywgc3VjaCBhcyBGaXJlZm94LCBkbyBub3QgY29uY2F0ZW5hdGUgcHJvcGVydGllc1xuLy8gaW50byB0aGVpciBzaG9ydGhhbmQgKGUuZy4gcGFkZGluZy10b3AsIHBhZGRpbmctYm90dG9tIGV0Yy4gLT4gcGFkZGluZyksXG4vLyBzbyB3ZSBoYXZlIHRvIGxpc3QgZXZlcnkgc2luZ2xlIHByb3BlcnR5IGV4cGxpY2l0bHkuXG5jb25zdCBwcm9wZXJ0aWVzID0gW1xuICAnZGlyZWN0aW9uJywgLy8gUlRMIHN1cHBvcnRcbiAgJ2JveFNpemluZycsXG4gICd3aWR0aCcsIC8vIG9uIENocm9tZSBhbmQgSUUsIGV4Y2x1ZGUgdGhlIHNjcm9sbGJhciwgc28gdGhlIG1pcnJvciBkaXYgd3JhcHMgZXhhY3RseSBhcyB0aGUgdGV4dGFyZWEgZG9lc1xuICAnaGVpZ2h0JyxcbiAgJ292ZXJmbG93WCcsXG4gICdvdmVyZmxvd1knLCAvLyBjb3B5IHRoZSBzY3JvbGxiYXIgZm9yIElFXG5cbiAgJ2JvcmRlclRvcFdpZHRoJyxcbiAgJ2JvcmRlclJpZ2h0V2lkdGgnLFxuICAnYm9yZGVyQm90dG9tV2lkdGgnLFxuICAnYm9yZGVyTGVmdFdpZHRoJyxcbiAgJ2JvcmRlclN0eWxlJyxcblxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nUmlnaHQnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZvbnRcbiAgJ2ZvbnRTdHlsZScsXG4gICdmb250VmFyaWFudCcsXG4gICdmb250V2VpZ2h0JyxcbiAgJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2xpbmVIZWlnaHQnLFxuICAnZm9udEZhbWlseScsXG5cbiAgJ3RleHRBbGlnbicsXG4gICd0ZXh0VHJhbnNmb3JtJyxcbiAgJ3RleHRJbmRlbnQnLFxuICAndGV4dERlY29yYXRpb24nLCAvLyBtaWdodCBub3QgbWFrZSBhIGRpZmZlcmVuY2UsIGJ1dCBiZXR0ZXIgYmUgc2FmZVxuXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ3dvcmRTcGFjaW5nJyxcblxuICAndGFiU2l6ZScsXG4gICdNb3pUYWJTaXplJyxcbl07XG5cbmNvbnN0IGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuY29uc3QgaXNGaXJlZm94ID0gaXNCcm93c2VyICYmIGdldCh3aW5kb3csICdtb3pJbm5lclNjcmVlblgnKSAhPT0gbnVsbDtcblxuZXhwb3J0IGNvbnN0IGdldENhcmV0Q29vcmRpbmF0ZXMgPSAoZWxlbWVudDogRWxlbWVudCwgcG9zaXRpb246IG51bWJlciB8IG51bGwpID0+IHtcbiAgaWYgKCFpc0Jyb3dzZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RleHRhcmVhLWNhcmV0LXBvc2l0aW9uI2dldENhcmV0Q29vcmRpbmF0ZXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIGEgYnJvd3NlcicpO1xuICB9XG5cbiAgLy8gVGhlIG1pcnJvciBkaXYgd2lsbCByZXBsaWNhdGUgdGhlIHRleHRhcmVhJ3Mgc3R5bGVcbiAgY29uc3QgZGl2OiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIGRpdi5pZCA9ICdpbnB1dC10ZXh0YXJlYS1jYXJldC1wb3NpdGlvbi1taXJyb3ItZGl2JztcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuXG4gIGNvbnN0IHN0eWxlID0gZGl2LnN0eWxlO1xuICBjb25zdCBjb21wdXRlZCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkgOiBnZXQoZWxlbWVudCwgJ2N1cnJlbnRTdHlsZScpOyAvLyBjdXJyZW50U3R5bGUgZm9yIElFIDwgOVxuICBjb25zdCBpc0lucHV0ID0gZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0lOUFVUJztcblxuICAvLyBEZWZhdWx0IHRleHRhcmVhIHN0eWxlc1xuICBzdHlsZS53aGl0ZVNwYWNlID0gJ3ByZS13cmFwJztcbiAgaWYgKCFpc0lucHV0KSB7XG4gICAgc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLXdvcmQnO1xuICB9IC8vIG9ubHkgZm9yIHRleHRhcmVhLXNcblxuICAvLyBQb3NpdGlvbiBvZmYtc2NyZWVuXG4gIHN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsgLy8gcmVxdWlyZWQgdG8gcmV0dXJuIGNvb3JkaW5hdGVzIHByb3Blcmx5XG5cbiAgLy8gVHJhbnNmZXIgdGhlIGVsZW1lbnQncyBwcm9wZXJ0aWVzIHRvIHRoZSBkaXZcbiAgcHJvcGVydGllcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgaWYgKGlzSW5wdXQgJiYgcHJvcCA9PT0gJ2xpbmVIZWlnaHQnKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIDxpbnB1dD5zIGJlY2F1c2UgdGV4dCBpcyByZW5kZXJlZCBjZW50ZXJlZCBhbmQgbGluZSBoZWlnaHQgbWF5IGJlICE9IGhlaWdodFxuICAgICAgaWYgKGNvbXB1dGVkLmJveFNpemluZyAhPT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgICAgIHN0eWxlLmxpbmVIZWlnaHQgPSBjb21wdXRlZC5oZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQoY29tcHV0ZWQuaGVpZ2h0KTtcbiAgICAgIGNvbnN0IG91dGVySGVpZ2h0ID0gcGFyc2VJbnQoY29tcHV0ZWQucGFkZGluZ1RvcCkgKyBwYXJzZUludChjb21wdXRlZC5wYWRkaW5nQm90dG9tKSArIHBhcnNlSW50KGNvbXB1dGVkLmJvcmRlclRvcFdpZHRoKSArIHBhcnNlSW50KGNvbXB1dGVkLmJvcmRlckJvdHRvbVdpZHRoKTtcbiAgICAgIGNvbnN0IHRhcmdldEhlaWdodCA9IG91dGVySGVpZ2h0ICsgcGFyc2VJbnQoY29tcHV0ZWQubGluZUhlaWdodCk7XG5cbiAgICAgIGlmIChoZWlnaHQgPiB0YXJnZXRIZWlnaHQpIHtcbiAgICAgICAgc3R5bGUubGluZUhlaWdodCA9IGhlaWdodCAtIG91dGVySGVpZ2h0ICsgJ3B4JztcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0ID09PSB0YXJnZXRIZWlnaHQpIHtcbiAgICAgICAgc3R5bGUubGluZUhlaWdodCA9IGNvbXB1dGVkLmxpbmVIZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3R5bGUubGluZUhlaWdodCA9ICcwJztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXQoc3R5bGUsIHByb3AgYXMgUGF0aE9mPENTU1N0eWxlRGVjbGFyYXRpb24+LCBjb21wdXRlZFtwcm9wXSk7XG4gIH0pO1xuXG4gIGlmICghaXNGaXJlZm94KSB7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAvLyBGaXJlZm94IGxpZXMgYWJvdXQgdGhlIG92ZXJmbG93IHByb3BlcnR5IGZvciB0ZXh0YXJlYXM6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTk4NDI3NVxuICB9XG4gIGNvbnN0IHZhbHVlID0gZ2V0KGVsZW1lbnQsICd2YWx1ZScpO1xuICBpZiAoaXNGaXJlZm94ICYmIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyc2VJbnQoY29tcHV0ZWQuaGVpZ2h0KSkge1xuICAgIHN0eWxlLm92ZXJmbG93WSA9ICdzY3JvbGwnO1xuICB9XG4gIGRpdi50ZXh0Q29udGVudCA9IHZhbHVlLnN1YnN0cmluZygwLCBwb3NpdGlvbik7XG4gIC8vIFRoZSBzZWNvbmQgc3BlY2lhbCBoYW5kbGluZyBmb3IgaW5wdXQgdHlwZT1cInRleHRcIiB2cyB0ZXh0YXJlYTpcbiAgLy8gc3BhY2VzIG5lZWQgdG8gYmUgcmVwbGFjZWQgd2l0aCBub24tYnJlYWtpbmcgc3BhY2VzIC0gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTM0MDIwMzUvMTI2OTAzN1xuICBpZiAoaXNJbnB1dCAmJiAhaXNOaWwoZGl2LnRleHRDb250ZW50KSkge1xuICAgIGRpdi50ZXh0Q29udGVudCA9IGRpdi50ZXh0Q29udGVudC5yZXBsYWNlKC9cXHMvZywgJ1xcdTAwYTAnKTtcbiAgfVxuICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gIC8vIFdyYXBwaW5nIG11c3QgYmUgcmVwbGljYXRlZCAqZXhhY3RseSosIGluY2x1ZGluZyB3aGVuIGEgbG9uZyB3b3JkIGdldHNcbiAgLy8gb250byB0aGUgbmV4dCBsaW5lLCB3aXRoIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBiZWZvcmUgKCM3KS5cbiAgLy8gVGhlICAqb25seSogcmVsaWFibGUgd2F5IHRvIGRvIHRoYXQgaXMgdG8gY29weSB0aGUgKmVudGlyZSogcmVzdCBvZiB0aGVcbiAgLy8gdGV4dGFyZWEncyBjb250ZW50IGludG8gdGhlIDxzcGFuPiBjcmVhdGVkIGF0IHRoZSBjYXJldCBwb3NpdGlvbi5cbiAgLy8gRm9yIGlucHV0cywganVzdCAnLicgd291bGQgYmUgZW5vdWdoLCBidXQgbm8gbmVlZCB0byBib3RoZXIuXG4gIHNwYW4udGV4dENvbnRlbnQgPSB2YWx1ZS5zdWJzdHJpbmcocG9zaXRpb24pIHx8ICcuJzsgLy8gfHwgYmVjYXVzZSBhIGNvbXBsZXRlbHkgZW1wdHkgZmF1eCBzcGFuIGRvZXNuJ3QgcmVuZGVyIGF0IGFsbFxuICBkaXYuYXBwZW5kQ2hpbGQoc3Bhbik7XG5cbiAgY29uc3QgY29vcmRpbmF0ZXMgPSB7XG4gICAgdG9wOiBzcGFuLm9mZnNldFRvcCArIHBhcnNlSW50KGNvbXB1dGVkWydib3JkZXJUb3BXaWR0aCddKSxcbiAgICBsZWZ0OiBzcGFuLm9mZnNldExlZnQgKyBwYXJzZUludChjb21wdXRlZFsnYm9yZGVyTGVmdFdpZHRoJ10pLFxuICAgIGhlaWdodDogcGFyc2VJbnQoY29tcHV0ZWRbJ2xpbmVIZWlnaHQnXSksXG4gIH07XG5cbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuXG4gIHJldHVybiBjb29yZGluYXRlcztcbn07XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { deleteUnicode, get } from '@libs-ui/utils';
|
|
3
|
+
export const PATTERN_INSERT = '\ufeff';
|
|
4
|
+
export const buildTemplate = (value, id, feId) => {
|
|
5
|
+
return `<span class="libs-ui-components-mention-item" 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> `;
|
|
6
|
+
};
|
|
7
|
+
export const DEFAULT_CONFIG = {
|
|
8
|
+
items: [],
|
|
9
|
+
triggerChar: '@',
|
|
10
|
+
labelKey: 'email',
|
|
11
|
+
allowSpace: true,
|
|
12
|
+
returnTrigger: false,
|
|
13
|
+
limitSpaceSearchQuery: 3,
|
|
14
|
+
mentionEventName: 'click',
|
|
15
|
+
mentionActionByEvent: (item, trigger) => console.log(item, trigger),
|
|
16
|
+
mentionSelect: (item) => `@${get(item, 'email')}`,
|
|
17
|
+
mentionFilter: (search, items) => {
|
|
18
|
+
const searchString = deleteUnicode(search.toLowerCase());
|
|
19
|
+
return items?.filter((item) => {
|
|
20
|
+
const name = deleteUnicode(get(item, 'name').toLowerCase());
|
|
21
|
+
const userName = deleteUnicode(get(item, 'username').toLowerCase());
|
|
22
|
+
return name.includes(searchString) || userName.includes(searchString);
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tZW50aW9uL3NyYy9kZWZpbmVzL3RlbXBsYXRlLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFVLEVBQUUsSUFBWSxFQUFVLEVBQUU7SUFDL0UsT0FBTyw2TEFBNkwsRUFBRSxXQUFXLElBQUksWUFBWSxLQUFLLEtBQUssS0FBSyxlQUFlLENBQUM7QUFDbFEsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFtQjtJQUM1QyxLQUFLLEVBQUUsRUFBRTtJQUNULFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLHFCQUFxQixFQUFFLENBQUM7SUFDeEIsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixvQkFBb0IsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztJQUNuRSxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtJQUNqRCxhQUFhLEVBQUUsQ0FBQyxNQUFjLEVBQUUsS0FBc0IsRUFBRSxFQUFFO1FBQ3hELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUV6RCxPQUFPLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1QixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFNLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQU0sSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFFekUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGRlbGV0ZVVuaWNvZGUsIGdldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IElNZW50aW9uQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9tZW50aW9uLmludGVyZmFjZSc7XG5leHBvcnQgY29uc3QgUEFUVEVSTl9JTlNFUlQgPSAnXFx1ZmVmZic7XG5cbmV4cG9ydCBjb25zdCBidWlsZFRlbXBsYXRlID0gKHZhbHVlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGZlSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudHMtbWVudGlvbi1pdGVtXCIgc3R5bGU9XCJmb250LXdlaWdodDogNjAwOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7IGNvbG9yOiAjNzIzOUVBXCIgY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIiBpZD1cIiR7aWR9XCIgZmVJZD1cIiR7ZmVJZH1cIiB2YWx1ZT1cIiR7dmFsdWV9XCI+JHt2YWx1ZX08L3NwYW4+Jm5ic3A7YDtcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTkZJRzogSU1lbnRpb25Db25maWcgPSB7XG4gIGl0ZW1zOiBbXSxcbiAgdHJpZ2dlckNoYXI6ICdAJyxcbiAgbGFiZWxLZXk6ICdlbWFpbCcsXG4gIGFsbG93U3BhY2U6IHRydWUsXG4gIHJldHVyblRyaWdnZXI6IGZhbHNlLFxuICBsaW1pdFNwYWNlU2VhcmNoUXVlcnk6IDMsXG4gIG1lbnRpb25FdmVudE5hbWU6ICdjbGljaycsXG4gIG1lbnRpb25BY3Rpb25CeUV2ZW50OiAoaXRlbSwgdHJpZ2dlcikgPT4gY29uc29sZS5sb2coaXRlbSwgdHJpZ2dlciksXG4gIG1lbnRpb25TZWxlY3Q6IChpdGVtKSA9PiBgQCR7Z2V0KGl0ZW0sICdlbWFpbCcpfWAsXG4gIG1lbnRpb25GaWx0ZXI6IChzZWFyY2g6IHN0cmluZywgaXRlbXM/OiBBcnJheTx1bmtub3duPikgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFN0cmluZyA9IGRlbGV0ZVVuaWNvZGUoc2VhcmNoLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgcmV0dXJuIGl0ZW1zPy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBkZWxldGVVbmljb2RlKGdldDxhbnk+KGl0ZW0sICduYW1lJykudG9Mb3dlckNhc2UoKSk7XG4gICAgICBjb25zdCB1c2VyTmFtZSA9IGRlbGV0ZVVuaWNvZGUoZ2V0PGFueT4oaXRlbSwgJ3VzZXJuYW1lJykudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgIHJldHVybiBuYW1lLmluY2x1ZGVzKHNlYXJjaFN0cmluZykgfHwgdXNlck5hbWUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKTtcbiAgICB9KTtcbiAgfSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { get } from '@libs-ui/utils';
|
|
2
|
+
import { PATTERN_INSERT } from './template.define';
|
|
3
|
+
const setValue = (el, value) => {
|
|
4
|
+
if (isInputOrTextAreaElement(el)) {
|
|
5
|
+
el.value = value;
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
el.textContent = value;
|
|
9
|
+
};
|
|
10
|
+
export const getValue = (el) => {
|
|
11
|
+
return isInputOrTextAreaElement(el) ? el.value : el.textContent;
|
|
12
|
+
};
|
|
13
|
+
export const insertValue = (el, start, end, text, iframe, noRecursion = false) => {
|
|
14
|
+
if (isTextElement(el)) {
|
|
15
|
+
const val = getValue(el);
|
|
16
|
+
text = noRecursion ? PATTERN_INSERT : text;
|
|
17
|
+
setValue(el, val?.substring(0, start) + text + val?.substring(end, val.length));
|
|
18
|
+
setCaretPosition(el, start + text.length, iframe);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (noRecursion) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
return insertValueToContentEditable(start, end, text);
|
|
25
|
+
};
|
|
26
|
+
const insertValueToContentEditable = (start, end, text) => {
|
|
27
|
+
if (!window.getSelection) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const sel = window.getSelection();
|
|
31
|
+
if (!sel || !sel.anchorNode || !sel.getRangeAt || !sel.rangeCount) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
let range = sel.getRangeAt(0);
|
|
35
|
+
const anchorNode = sel.anchorNode;
|
|
36
|
+
const numberTextBeforeCursor = (getTextBeforeCursor() || '').length;
|
|
37
|
+
range.setStart(anchorNode, numberTextBeforeCursor - (end - start));
|
|
38
|
+
range.setEnd(anchorNode, numberTextBeforeCursor);
|
|
39
|
+
range.deleteContents();
|
|
40
|
+
// Range.createContextualFragment() would be useful here but is
|
|
41
|
+
// only relatively recently standardized and is not supported in
|
|
42
|
+
// some browsers (IE9, for one)
|
|
43
|
+
const el = document.createElement('SPAN');
|
|
44
|
+
el.innerHTML = text;
|
|
45
|
+
const frag = document.createDocumentFragment();
|
|
46
|
+
let node, lastNode, nodeHandlerEvent;
|
|
47
|
+
while ((node = el.firstChild)) {
|
|
48
|
+
if (get(node, 'getAttribute')) {
|
|
49
|
+
nodeHandlerEvent = node;
|
|
50
|
+
}
|
|
51
|
+
lastNode = frag.appendChild(node);
|
|
52
|
+
}
|
|
53
|
+
range.insertNode(frag);
|
|
54
|
+
// Preserve the selection
|
|
55
|
+
if (lastNode) {
|
|
56
|
+
range = range.cloneRange();
|
|
57
|
+
range.setStartAfter(lastNode);
|
|
58
|
+
range.collapse(true);
|
|
59
|
+
sel.removeAllRanges();
|
|
60
|
+
sel.addRange(range);
|
|
61
|
+
}
|
|
62
|
+
return nodeHandlerEvent;
|
|
63
|
+
};
|
|
64
|
+
export const getTextBeforeCursor = () => {
|
|
65
|
+
const sel = window.getSelection();
|
|
66
|
+
if (!sel || !sel.anchorNode) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
const range = sel.getRangeAt(0);
|
|
70
|
+
const anchorNode = sel.anchorNode;
|
|
71
|
+
const rangeNew = document.createRange();
|
|
72
|
+
rangeNew.selectNodeContents(anchorNode);
|
|
73
|
+
rangeNew.setEnd(range.startContainer, range.startOffset);
|
|
74
|
+
const fragNew = rangeNew.cloneContents();
|
|
75
|
+
const elmPrev = document.createElement('SPAN');
|
|
76
|
+
elmPrev.appendChild(fragNew);
|
|
77
|
+
return elmPrev.innerText;
|
|
78
|
+
};
|
|
79
|
+
export const isInputOrTextAreaElement = (el) => {
|
|
80
|
+
return el !== null && (el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA');
|
|
81
|
+
};
|
|
82
|
+
export const isTextElement = (el) => {
|
|
83
|
+
return el !== null && (el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA' || el.nodeName === '#text');
|
|
84
|
+
};
|
|
85
|
+
export const setCaretPosition = (el, pos, iframe) => {
|
|
86
|
+
if (isInputOrTextAreaElement(el) && el.selectionStart) {
|
|
87
|
+
el.focus();
|
|
88
|
+
el.setSelectionRange(pos, pos);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const range = getDocument(iframe)?.createRange();
|
|
92
|
+
range?.setStart(el, pos);
|
|
93
|
+
range?.collapse(true);
|
|
94
|
+
const sel = getWindowSelection(iframe);
|
|
95
|
+
if (!sel) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
sel.removeAllRanges();
|
|
99
|
+
if (range) {
|
|
100
|
+
sel.addRange(range);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
export const getCaretPosition = (el, iframe) => {
|
|
104
|
+
if (isInputOrTextAreaElement(el)) {
|
|
105
|
+
const val = el.value;
|
|
106
|
+
return val.slice(0, el.selectionStart || undefined).length;
|
|
107
|
+
}
|
|
108
|
+
const selObj = getWindowSelection(iframe); //window.getSelection();
|
|
109
|
+
if (selObj && selObj.rangeCount > 0) {
|
|
110
|
+
const selRange = selObj.getRangeAt(0);
|
|
111
|
+
const preCaretRange = selRange.cloneRange();
|
|
112
|
+
preCaretRange.selectNodeContents(el);
|
|
113
|
+
preCaretRange.setEnd(selRange.endContainer, selRange.endOffset);
|
|
114
|
+
const position = preCaretRange.toString().length;
|
|
115
|
+
return position;
|
|
116
|
+
}
|
|
117
|
+
return 0;
|
|
118
|
+
};
|
|
119
|
+
// Based on ment.io functions...
|
|
120
|
+
//
|
|
121
|
+
const getDocument = (iframe) => {
|
|
122
|
+
if (!iframe) {
|
|
123
|
+
return document;
|
|
124
|
+
}
|
|
125
|
+
return iframe.contentWindow?.document;
|
|
126
|
+
};
|
|
127
|
+
export const getWindowSelection = (iframe) => {
|
|
128
|
+
if (!iframe) {
|
|
129
|
+
return window.getSelection();
|
|
130
|
+
}
|
|
131
|
+
return iframe.contentWindow?.getSelection() || null;
|
|
132
|
+
};
|
|
133
|
+
export const getContentEditableCaretCoords = (ctx) => {
|
|
134
|
+
const markerTextChar = '\ufeff';
|
|
135
|
+
const markerId = 'sel_' + new Date().getTime() + '_' + Math.random().toString().substring(2);
|
|
136
|
+
const doc = getDocument(ctx.iframe);
|
|
137
|
+
const sel = getWindowSelection(ctx.iframe);
|
|
138
|
+
if (!sel) {
|
|
139
|
+
return {
|
|
140
|
+
left: 0,
|
|
141
|
+
top: 0,
|
|
142
|
+
bottom: 0,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const prevRange = sel.getRangeAt(0);
|
|
146
|
+
// create new range and set postion using prevRange
|
|
147
|
+
const range = doc.createRange();
|
|
148
|
+
const anchorNode = sel.anchorNode;
|
|
149
|
+
range.setStart(anchorNode, prevRange.startOffset);
|
|
150
|
+
range.setEnd(anchorNode, prevRange.startOffset);
|
|
151
|
+
range.collapse(false);
|
|
152
|
+
// Create the marker element containing a single invisible character
|
|
153
|
+
// using DOM methods and insert it at the position in the range
|
|
154
|
+
const markerEl = doc.createElement('span');
|
|
155
|
+
markerEl.id = markerId;
|
|
156
|
+
markerEl.appendChild(doc.createTextNode(markerTextChar));
|
|
157
|
+
range.insertNode(markerEl);
|
|
158
|
+
sel.removeAllRanges();
|
|
159
|
+
sel.addRange(prevRange);
|
|
160
|
+
const coordinates = {
|
|
161
|
+
left: 0,
|
|
162
|
+
top: markerEl.offsetHeight,
|
|
163
|
+
bottom: -1,
|
|
164
|
+
};
|
|
165
|
+
localToRelativeCoordinates(ctx, markerEl, coordinates);
|
|
166
|
+
markerEl.parentNode?.removeChild(markerEl);
|
|
167
|
+
const widthScreen = (ctx.windowParent ? window.parent.innerWidth : window.innerWidth) || document.documentElement.clientWidth || document.body.clientWidth;
|
|
168
|
+
if (coordinates.left + 315 > widthScreen) {
|
|
169
|
+
coordinates.left = coordinates.left - 300;
|
|
170
|
+
}
|
|
171
|
+
const heightScreen = (ctx.windowParent ? window.parent.innerHeight : window.innerHeight) || document.documentElement.clientHeight || document.body.clientHeight;
|
|
172
|
+
if (coordinates.top + 190 > heightScreen) {
|
|
173
|
+
coordinates.bottom = heightScreen - coordinates.top + 15;
|
|
174
|
+
coordinates.top = -1;
|
|
175
|
+
}
|
|
176
|
+
return coordinates;
|
|
177
|
+
};
|
|
178
|
+
const localToRelativeCoordinates = (ctx, element, coordinates) => {
|
|
179
|
+
let obj = element;
|
|
180
|
+
let iframe = ctx ? ctx.iframe : null;
|
|
181
|
+
while (obj) {
|
|
182
|
+
if (ctx.parent !== null && ctx.parent === obj) {
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
coordinates.left += obj.offsetLeft + obj.clientLeft;
|
|
186
|
+
coordinates.top += obj.offsetTop + obj.clientTop;
|
|
187
|
+
obj = obj.offsetParent;
|
|
188
|
+
if (!obj && iframe) {
|
|
189
|
+
obj = iframe;
|
|
190
|
+
iframe = null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
obj = element;
|
|
194
|
+
iframe = ctx ? ctx.iframe : null;
|
|
195
|
+
while ((obj !== getDocument(undefined)?.body || ctx.windowParent) && obj !== null) {
|
|
196
|
+
if (ctx.parent !== null && ctx.parent === obj) {
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
if (obj.scrollTop && obj.scrollTop > 0) {
|
|
200
|
+
coordinates.top -= obj.scrollTop;
|
|
201
|
+
}
|
|
202
|
+
if (obj.scrollLeft && obj.scrollLeft > 0) {
|
|
203
|
+
coordinates.left -= obj.scrollLeft;
|
|
204
|
+
}
|
|
205
|
+
obj = ctx.windowParent ? obj.offsetParent : obj.parentNode;
|
|
206
|
+
if (!obj && iframe) {
|
|
207
|
+
obj = iframe;
|
|
208
|
+
iframe = null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
const setEndOfContentEditable = (contentEditableElement) => {
|
|
213
|
+
if (document.createRange) {
|
|
214
|
+
const range = document.createRange(); //Create a range (a range is a like the selection but invisible)
|
|
215
|
+
const selection = window.getSelection(); //get the selection object (allows you to change selection)
|
|
216
|
+
range.selectNodeContents(contentEditableElement); //Select the entire contents of the element with the range
|
|
217
|
+
range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start
|
|
218
|
+
selection?.removeAllRanges(); //remove any selections already made
|
|
219
|
+
selection?.addRange(range); //make the range you have just created the visible selection
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
};
|
|
223
|
+
export const insertTextAtCaret = (element, text) => {
|
|
224
|
+
if (window.getSelection) {
|
|
225
|
+
if (!elementContainsSelection(element)) {
|
|
226
|
+
setEndOfContentEditable(element);
|
|
227
|
+
insertTextAtCaret(element, text);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const sel = window.getSelection();
|
|
231
|
+
if (sel?.getRangeAt && sel.rangeCount) {
|
|
232
|
+
let range = sel.getRangeAt(0);
|
|
233
|
+
const el = document.createElement('SPAN');
|
|
234
|
+
range.deleteContents();
|
|
235
|
+
el.innerHTML = text;
|
|
236
|
+
const frag = document.createDocumentFragment();
|
|
237
|
+
let node;
|
|
238
|
+
let lastNode;
|
|
239
|
+
while ((node = el.firstChild)) {
|
|
240
|
+
lastNode = frag.appendChild(node);
|
|
241
|
+
}
|
|
242
|
+
range.insertNode(frag);
|
|
243
|
+
if (lastNode) {
|
|
244
|
+
range = range.cloneRange();
|
|
245
|
+
range.setStartAfter(lastNode);
|
|
246
|
+
range.collapse(true);
|
|
247
|
+
sel.removeAllRanges();
|
|
248
|
+
sel.addRange(range);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
const elementContainsSelection = (el) => {
|
|
254
|
+
if (!window.getSelection) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
const sel = window.getSelection();
|
|
258
|
+
if (sel && sel.rangeCount > 0) {
|
|
259
|
+
for (let i = 0; i < sel.rangeCount; ++i) {
|
|
260
|
+
if (!isOrContains(sel.getRangeAt(i).commonAncestorContainer, el)) {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
return false;
|
|
267
|
+
};
|
|
268
|
+
const isOrContains = (node, container) => {
|
|
269
|
+
while (node) {
|
|
270
|
+
if (node === container) {
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
if (node.parentNode) {
|
|
274
|
+
node = node.parentNode;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return false;
|
|
278
|
+
};
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tZW50aW9uL3NyYy9kZWZpbmVzL3V0aWxzLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBb0IsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUN2RCxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFakIsT0FBTztJQUNULENBQUM7SUFDRCxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEVBQUU7SUFDL0MsT0FBTyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLE1BQXlCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBZ0MsRUFBRTtJQUMxSyxJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzQyxR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VUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFBBVFRFUk5fSU5TRVJUIH0gZnJvbSAnLi90ZW1wbGF0ZS5kZWZpbmUnO1xuXG5jb25zdCBzZXRWYWx1ZSA9IChlbDogSFRNTElucHV0RWxlbWVudCwgdmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAoaXNJbnB1dE9yVGV4dEFyZWFFbGVtZW50KGVsKSkge1xuICAgIGVsLnZhbHVlID0gdmFsdWU7XG5cbiAgICByZXR1cm47XG4gIH1cbiAgZWwudGV4dENvbnRlbnQgPSB2YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWx1ZSA9IChlbDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICByZXR1cm4gaXNJbnB1dE9yVGV4dEFyZWFFbGVtZW50KGVsKSA/IGVsLnZhbHVlIDogZWwudGV4dENvbnRlbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0VmFsdWUgPSAoZWw6IEhUTUxJbnB1dEVsZW1lbnQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcsIGlmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQsIG5vUmVjdXJzaW9uID0gZmFsc2UpOiBDaGlsZE5vZGUgfCB1bmRlZmluZWQgfCBudWxsID0+IHtcbiAgaWYgKGlzVGV4dEVsZW1lbnQoZWwpKSB7XG4gICAgY29uc3QgdmFsID0gZ2V0VmFsdWUoZWwpO1xuXG4gICAgdGV4dCA9IG5vUmVjdXJzaW9uID8gUEFUVEVSTl9JTlNFUlQgOiB0ZXh0O1xuICAgIHNldFZhbHVlKGVsLCB2YWw/LnN1YnN0cmluZygwLCBzdGFydCkgKyB0ZXh0ICsgdmFsPy5zdWJzdHJpbmcoZW5kLCB2YWwubGVuZ3RoKSk7XG4gICAgc2V0Q2FyZXRQb3NpdGlvbihlbCwgc3RhcnQgKyB0ZXh0Lmxlbmd0aCwgaWZyYW1lKTtcblxuICAgIHJldHVybjtcbiAgfVxuICBpZiAobm9SZWN1cnNpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gaW5zZXJ0VmFsdWVUb0NvbnRlbnRFZGl0YWJsZShzdGFydCwgZW5kLCB0ZXh0KTtcbn07XG5cbmNvbnN0IGluc2VydFZhbHVlVG9Db250ZW50RWRpdGFibGUgPSAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IENoaWxkTm9kZSB8IHVuZGVmaW5lZCB8IG51bGwgPT4ge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsIHx8ICFzZWwuYW5jaG9yTm9kZSB8fCAhc2VsLmdldFJhbmdlQXQgfHwgIXNlbC5yYW5nZUNvdW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuICBjb25zdCBhbmNob3JOb2RlID0gc2VsLmFuY2hvck5vZGU7XG4gIGNvbnN0IG51bWJlclRleHRCZWZvcmVDdXJzb3IgPSAoZ2V0VGV4dEJlZm9yZUN1cnNvcigpIHx8ICcnKS5sZW5ndGg7XG5cbiAgcmFuZ2Uuc2V0U3RhcnQoYW5jaG9yTm9kZSwgbnVtYmVyVGV4dEJlZm9yZUN1cnNvciAtIChlbmQgLSBzdGFydCkpO1xuICByYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgbnVtYmVyVGV4dEJlZm9yZUN1cnNvcik7XG4gIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gIC8vIFJhbmdlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCgpIHdvdWxkIGJlIHVzZWZ1bCBoZXJlIGJ1dCBpc1xuICAvLyBvbmx5IHJlbGF0aXZlbHkgcmVjZW50bHkgc3RhbmRhcmRpemVkIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGluXG4gIC8vIHNvbWUgYnJvd3NlcnMgKElFOSwgZm9yIG9uZSlcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XG5cbiAgZWwuaW5uZXJIVE1MID0gdGV4dDtcbiAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgbGV0IG5vZGUsIGxhc3ROb2RlLCBub2RlSGFuZGxlckV2ZW50O1xuXG4gIHdoaWxlICgobm9kZSA9IGVsLmZpcnN0Q2hpbGQpKSB7XG4gICAgaWYgKGdldChub2RlLCAnZ2V0QXR0cmlidXRlJykpIHtcbiAgICAgIG5vZGVIYW5kbGVyRXZlbnQgPSBub2RlO1xuICAgIH1cblxuICAgIGxhc3ROb2RlID0gZnJhZy5hcHBlbmRDaGlsZChub2RlKTtcbiAgfVxuICByYW5nZS5pbnNlcnROb2RlKGZyYWcpO1xuXG4gIC8vIFByZXNlcnZlIHRoZSBzZWxlY3Rpb25cbiAgaWYgKGxhc3ROb2RlKSB7XG4gICAgcmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihsYXN0Tm9kZSk7XG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZUhhbmRsZXJFdmVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmVmb3JlQ3Vyc29yID0gKCkgPT4ge1xuICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWwgfHwgIXNlbC5hbmNob3JOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuICBjb25zdCBhbmNob3JOb2RlID0gc2VsLmFuY2hvck5vZGU7XG4gIGNvbnN0IHJhbmdlTmV3ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICByYW5nZU5ldy5zZWxlY3ROb2RlQ29udGVudHMoYW5jaG9yTm9kZSk7XG4gIHJhbmdlTmV3LnNldEVuZChyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQpO1xuXG4gIGNvbnN0IGZyYWdOZXcgPSByYW5nZU5ldy5jbG9uZUNvbnRlbnRzKCk7XG4gIGNvbnN0IGVsbVByZXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XG5cbiAgZWxtUHJldi5hcHBlbmRDaGlsZChmcmFnTmV3KTtcblxuICByZXR1cm4gZWxtUHJldi5pbm5lclRleHQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJbnB1dE9yVGV4dEFyZWFFbGVtZW50ID0gKGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gZWwgIT09IG51bGwgJiYgKGVsLm5vZGVOYW1lID09PSAnSU5QVVQnIHx8IGVsLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RleHRFbGVtZW50ID0gKGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gZWwgIT09IG51bGwgJiYgKGVsLm5vZGVOYW1lID09PSAnSU5QVVQnIHx8IGVsLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnIHx8IGVsLm5vZGVOYW1lID09PSAnI3RleHQnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDYXJldFBvc2l0aW9uID0gKGVsOiBIVE1MSW5wdXRFbGVtZW50LCBwb3M6IG51bWJlciwgaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCkgPT4ge1xuICBpZiAoaXNJbnB1dE9yVGV4dEFyZWFFbGVtZW50KGVsKSAmJiBlbC5zZWxlY3Rpb25TdGFydCkge1xuICAgIGVsLmZvY3VzKCk7XG4gICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xuXG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJhbmdlID0gZ2V0RG9jdW1lbnQoaWZyYW1lKT8uY3JlYXRlUmFuZ2UoKTtcblxuICByYW5nZT8uc2V0U3RhcnQoZWwsIHBvcyk7XG4gIHJhbmdlPy5jb2xsYXBzZSh0cnVlKTtcbiAgY29uc3Qgc2VsID0gZ2V0V2luZG93U2VsZWN0aW9uKGlmcmFtZSk7XG5cbiAgaWYgKCFzZWwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICBpZiAocmFuZ2UpIHtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2FyZXRQb3NpdGlvbiA9IChlbDogSFRNTElucHV0RWxlbWVudCwgaWZyYW1lPzogSFRNTElGcmFtZUVsZW1lbnQpOiBudW1iZXIgPT4ge1xuICBpZiAoaXNJbnB1dE9yVGV4dEFyZWFFbGVtZW50KGVsKSkge1xuICAgIGNvbnN0IHZhbCA9IGVsLnZhbHVlO1xuXG4gICAgcmV0dXJuIHZhbC5zbGljZSgwLCBlbC5zZWxlY3Rpb25TdGFydCB8fCB1bmRlZmluZWQpLmxlbmd0aDtcbiAgfVxuICBjb25zdCBzZWxPYmogPSBnZXRXaW5kb3dTZWxlY3Rpb24oaWZyYW1lKTsgLy93aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKHNlbE9iaiAmJiBzZWxPYmoucmFuZ2VDb3VudCA+IDApIHtcbiAgICBjb25zdCBzZWxSYW5nZSA9IHNlbE9iai5nZXRSYW5nZUF0KDApO1xuICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBzZWxSYW5nZS5jbG9uZVJhbmdlKCk7XG5cbiAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbCk7XG4gICAgcHJlQ2FyZXRSYW5nZS5zZXRFbmQoc2VsUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxSYW5nZS5lbmRPZmZzZXQpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcblxuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfVxuICByZXR1cm4gMDtcbn07XG5cbi8vIEJhc2VkIG9uIG1lbnQuaW8gZnVuY3Rpb25zLi4uXG4vL1xuXG5jb25zdCBnZXREb2N1bWVudCA9IChpZnJhbWU/OiBIVE1MSUZyYW1lRWxlbWVudCkgPT4ge1xuICBpZiAoIWlmcmFtZSkge1xuICAgIHJldHVybiBkb2N1bWVudDtcbiAgfVxuXG4gIHJldHVybiBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0V2luZG93U2VsZWN0aW9uID0gKGlmcmFtZT86IEhUTUxJRnJhbWVFbGVtZW50KTogU2VsZWN0aW9uIHwgbnVsbCA9PiB7XG4gIGlmICghaWZyYW1lKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHJldHVybiBpZnJhbWUuY29udGVudFdpbmRvdz8uZ2V0U2VsZWN0aW9uKCkgfHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50RWRpdGFibGVDYXJldENvb3JkcyA9IChjdHg6IHsgaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCB8IHVuZGVmaW5lZDsgcGFyZW50OiBFbGVtZW50IHwgbnVsbDsgd2luZG93UGFyZW50PzogYm9vbGVhbiB9KSA9PiB7XG4gIGNvbnN0IG1hcmtlclRleHRDaGFyID0gJ1xcdWZlZmYnO1xuICBjb25zdCBtYXJrZXJJZCA9ICdzZWxfJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygpLnN1YnN0cmluZygyKTtcbiAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnQoY3R4LmlmcmFtZSkgYXMgRG9jdW1lbnQ7XG4gIGNvbnN0IHNlbCA9IGdldFdpbmRvd1NlbGVjdGlvbihjdHguaWZyYW1lKSBhcyBTZWxlY3Rpb247XG5cbiAgaWYgKCFzZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHByZXZSYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gIC8vIGNyZWF0ZSBuZXcgcmFuZ2UgYW5kIHNldCBwb3N0aW9uIHVzaW5nIHByZXZSYW5nZVxuICBjb25zdCByYW5nZSA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICBjb25zdCBhbmNob3JOb2RlID0gc2VsLmFuY2hvck5vZGUgYXMgTm9kZTtcbiAgcmFuZ2Uuc2V0U3RhcnQoYW5jaG9yTm9kZSwgcHJldlJhbmdlLnN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGFuY2hvck5vZGUsIHByZXZSYW5nZS5zdGFydE9mZnNldCk7XG4gIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcblxuICAvLyBDcmVhdGUgdGhlIG1hcmtlciBlbGVtZW50IGNvbnRhaW5pbmcgYSBzaW5nbGUgaW52aXNpYmxlIGNoYXJhY3RlclxuICAvLyB1c2luZyBET00gbWV0aG9kcyBhbmQgaW5zZXJ0IGl0IGF0IHRoZSBwb3NpdGlvbiBpbiB0aGUgcmFuZ2VcbiAgY29uc3QgbWFya2VyRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gIG1hcmtlckVsLmlkID0gbWFya2VySWQ7XG4gIG1hcmtlckVsLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShtYXJrZXJUZXh0Q2hhcikpO1xuICByYW5nZS5pbnNlcnROb2RlKG1hcmtlckVsKTtcbiAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICBzZWwuYWRkUmFuZ2UocHJldlJhbmdlKTtcblxuICBjb25zdCBjb29yZGluYXRlcyA9IHtcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogbWFya2VyRWwub2Zmc2V0SGVpZ2h0LFxuICAgIGJvdHRvbTogLTEsXG4gIH07XG5cbiAgbG9jYWxUb1JlbGF0aXZlQ29vcmRpbmF0ZXMoY3R4LCBtYXJrZXJFbCwgY29vcmRpbmF0ZXMpO1xuICBtYXJrZXJFbC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChtYXJrZXJFbCk7XG4gIGNvbnN0IHdpZHRoU2NyZWVuID0gKGN0eC53aW5kb3dQYXJlbnQgPyB3aW5kb3cucGFyZW50LmlubmVyV2lkdGggOiB3aW5kb3cuaW5uZXJXaWR0aCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG5cbiAgaWYgKGNvb3JkaW5hdGVzLmxlZnQgKyAzMTUgPiB3aWR0aFNjcmVlbikge1xuICAgIGNvb3JkaW5hdGVzLmxlZnQgPSBjb29yZGluYXRlcy5sZWZ0IC0gMzAwO1xuICB9XG4gIGNvbnN0IGhlaWdodFNjcmVlbiA9IChjdHgud2luZG93UGFyZW50ID8gd2luZG93LnBhcmVudC5pbm5lckhlaWdodCA6IHdpbmRvdy5pbm5lckhlaWdodCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtcblxuICBpZiAoY29vcmRpbmF0ZXMudG9wICsgMTkwID4gaGVpZ2h0U2NyZWVuKSB7XG4gICAgY29vcmRpbmF0ZXMuYm90dG9tID0gaGVpZ2h0U2NyZWVuIC0gY29vcmRpbmF0ZXMudG9wICsgMTU7XG4gICAgY29vcmRpbmF0ZXMudG9wID0gLTE7XG4gIH1cblxuICByZXR1cm4gY29vcmRpbmF0ZXM7XG59O1xuXG5jb25zdCBsb2NhbFRvUmVsYXRpdmVDb29yZGluYXRlcyA9IChjdHg6IHsgaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCB8IHVuZGVmaW5lZDsgcGFyZW50OiBFbGVtZW50IHwgbnVsbDsgd2luZG93UGFyZW50PzogYm9vbGVhbiB9LCBlbGVtZW50OiBFbGVtZW50LCBjb29yZGluYXRlczogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyBib3R0b206IG51bWJlciB9KSA9PiB7XG4gIGxldCBvYmogPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudDtcbiAgbGV0IGlmcmFtZSA9IGN0eCA/IGN0eC5pZnJhbWUgOiBudWxsO1xuXG4gIHdoaWxlIChvYmopIHtcbiAgICBpZiAoY3R4LnBhcmVudCAhPT0gbnVsbCAmJiBjdHgucGFyZW50ID09PSBvYmopIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb29yZGluYXRlcy5sZWZ0ICs9IG9iai5vZmZzZXRMZWZ0ICsgb2JqLmNsaWVudExlZnQ7XG4gICAgY29vcmRpbmF0ZXMudG9wICs9IG9iai5vZmZzZXRUb3AgKyBvYmouY2xpZW50VG9wO1xuICAgIG9iaiA9IDxIVE1MRWxlbWVudD5vYmoub2Zmc2V0UGFyZW50O1xuICAgIGlmICghb2JqICYmIGlmcmFtZSkge1xuICAgICAgb2JqID0gaWZyYW1lO1xuICAgICAgaWZyYW1lID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgb2JqID0gPEhUTUxFbGVtZW50PmVsZW1lbnQ7XG4gIGlmcmFtZSA9IGN0eCA/IGN0eC5pZnJhbWUgOiBudWxsO1xuICB3aGlsZSAoKG9iaiAhPT0gZ2V0RG9jdW1lbnQodW5kZWZpbmVkKT8uYm9keSB8fCBjdHgud2luZG93UGFyZW50KSAmJiBvYmogIT09IG51bGwpIHtcbiAgICBpZiAoY3R4LnBhcmVudCAhPT0gbnVsbCAmJiBjdHgucGFyZW50ID09PSBvYmopIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAob2JqLnNjcm9sbFRvcCAmJiBvYmouc2Nyb2xsVG9wID4gMCkge1xuICAgICAgY29vcmRpbmF0ZXMudG9wIC09IG9iai5zY3JvbGxUb3A7XG4gICAgfVxuICAgIGlmIChvYmouc2Nyb2xsTGVmdCAmJiBvYmouc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNvb3JkaW5hdGVzLmxlZnQgLT0gb2JqLnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIG9iaiA9IGN0eC53aW5kb3dQYXJlbnQgPyA8SFRNTEVsZW1lbnQ+b2JqLm9mZnNldFBhcmVudCA6IDxIVE1MRWxlbWVudD5vYmoucGFyZW50Tm9kZTtcbiAgICBpZiAoIW9iaiAmJiBpZnJhbWUpIHtcbiAgICAgIG9iaiA9IGlmcmFtZTtcbiAgICAgIGlmcmFtZSA9IG51bGw7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBzZXRFbmRPZkNvbnRlbnRFZGl0YWJsZSA9IChjb250ZW50RWRpdGFibGVFbGVtZW50OiBOb2RlKSA9PiB7XG4gIGlmIChkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsgLy9DcmVhdGUgYSByYW5nZSAoYSByYW5nZSBpcyBhIGxpa2UgdGhlIHNlbGVjdGlvbiBidXQgaW52aXNpYmxlKVxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsgLy9nZXQgdGhlIHNlbGVjdGlvbiBvYmplY3QgKGFsbG93cyB5b3UgdG8gY2hhbmdlIHNlbGVjdGlvbilcblxuICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhjb250ZW50RWRpdGFibGVFbGVtZW50KTsgLy9TZWxlY3QgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZWxlbWVudCB3aXRoIHRoZSByYW5nZVxuICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy9jb2xsYXBzZSB0aGUgcmFuZ2UgdG8gdGhlIGVuZCBwb2ludC4gZmFsc2UgbWVhbnMgY29sbGFwc2UgdG8gZW5kIHJhdGhlciB0aGFuIHRoZSBzdGFydFxuICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7IC8vcmVtb3ZlIGFueSBzZWxlY3Rpb25zIGFscmVhZHkgbWFkZVxuICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpOyAvL21ha2UgdGhlIHJhbmdlIHlvdSBoYXZlIGp1c3QgY3JlYXRlZCB0aGUgdmlzaWJsZSBzZWxlY3Rpb25cbiAgfVxuXG4gIHJldHVybjtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRUZXh0QXRDYXJldCA9IChlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICBpZiAoIWVsZW1lbnRDb250YWluc1NlbGVjdGlvbihlbGVtZW50KSkge1xuICAgICAgc2V0RW5kT2ZDb250ZW50RWRpdGFibGUoZWxlbWVudCk7XG4gICAgICBpbnNlcnRUZXh0QXRDYXJldChlbGVtZW50LCB0ZXh0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoc2VsPy5nZXRSYW5nZUF0ICYmIHNlbC5yYW5nZUNvdW50KSB7XG4gICAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xuXG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgZWwuaW5uZXJIVE1MID0gdGV4dDtcbiAgICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBsZXQgbm9kZTogTm9kZSB8IG51bGw7XG4gICAgICBsZXQgbGFzdE5vZGUhOiBOb2RlO1xuXG4gICAgICB3aGlsZSAoKG5vZGUgPSBlbC5maXJzdENoaWxkKSkge1xuICAgICAgICBsYXN0Tm9kZSA9IGZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICB9XG4gICAgICByYW5nZS5pbnNlcnROb2RlKGZyYWcpO1xuXG4gICAgICBpZiAobGFzdE5vZGUpIHtcbiAgICAgICAgcmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIobGFzdE5vZGUpO1xuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuY29uc3QgZWxlbWVudENvbnRhaW5zU2VsZWN0aW9uID0gKGVsOiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKHNlbCAmJiBzZWwucmFuZ2VDb3VudCA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbC5yYW5nZUNvdW50OyArK2kpIHtcbiAgICAgIGlmICghaXNPckNvbnRhaW5zKHNlbC5nZXRSYW5nZUF0KGkpLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLCBlbCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNPckNvbnRhaW5zID0gKG5vZGU6IE5vZGUsIGNvbnRhaW5lcjogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './mention.directive';
|
|
2
|
+
export * from './interfaces/mention.interface';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWVudGlvbi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL21lbnRpb24uaW50ZXJmYWNlJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL2ludGVyZmFjZXMvbWVudGlvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElNZW50aW9uQ29uZmlnIGV4dGVuZHMgSU1lbnRpb25JdGVtIHtcbiAgZGlzYWJsZVN0eWxlPzogYm9vbGVhbjtcbiAgaWZyYW1lPzogc3RyaW5nO1xuICBtZW50aW9uPzogQXJyYXk8SU1lbnRpb25JdGVtPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVudGlvbkl0ZW0ge1xuICB0cmlnZ2VyQ2hhcj86IHN0cmluZztcblxuICAvLyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgZmllbGQgaW4gdGhlIG9iamVjdHMgdG8gYmUgdXNlZCBhcyB0aGUgaXRlbSBsYWJlbFxuICBsYWJlbEtleT86IHN0cmluZztcblxuICAvLyBvcHRpb24gdG8gbGltaXQgdGhlIG51bWJlciBvZiBpdGVtcyBzaG93biBpbiB0aGUgcG9wLXVwIG1lbnVcbiAgZGlzYWJsZVNvcnQ/OiBib29sZWFuO1xuXG4gIC8vIG9wdGlvbiB0byBkaXNhYmxlIGludGVybmFsIGZpbHRlcmluZy4gY2FuIGJlIHVzZWQgdG8gc2hvdyB0aGUgZnVsbCBsaXN0IHJldHVybmVkXG4gIC8vIGZyb20gYW4gYXN5bmMgb3BlcmF0aW9uXG4gIGRpc2FibGVTZWFyY2g/OiBib29sZWFuO1xuXG4gIC8vIGRpc3BsYXkgbWVudSBhYm92ZSB0ZXh0IGluc3RlYWQgb2YgYmVsb3dcbiAgZHJvcFVwPzogYm9vbGVhbjtcblxuICAvLyB3aGV0aGVyIHRvIGFsbG93IHNwYWNlIHdoaWxlIG1lbnRpb25pbmcgb3Igbm90XG4gIGFsbG93U3BhY2U/OiBib29sZWFuO1xuICBsaW1pdFNwYWNlU2VhcmNoUXVlcnk/OiBudW1iZXI7XG5cbiAgLy8gb3B0aW9uIHRvIGluY2x1ZGUgdGhlIHRyaWdnZXIgY2hhciBpbiB0aGUgc2VhcmNoVGVybSBldmVudFxuICByZXR1cm5UcmlnZ2VyPzogYm9vbGVhbjtcblxuICAvLyBvcHRpb25hbCBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGl0ZW0gYmVmb3JlIGluc2VydGluZyB0aGUgdGV4dFxuICBtZW50aW9uU2VsZWN0PzogKGl0ZW06IHVua25vd24sIHRyaWdnZXJDaGFyPzogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgLy8gb3B0aW9uYWwgZnVuY3Rpb24gdG8gY3VzdG9taXplIHRoZSBzZWFyY2ggaW1wbGVtZW50YXRpb25cbiAgbWVudGlvbkZpbHRlcj86IChzZWFyY2hTdHJpbmc6IHN0cmluZywgaXRlbXM/OiBBcnJheTx1bmtub3duPikgPT4gQXJyYXk8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgbWVudGlvbkV2ZW50TmFtZT86ICdjbGljaycgfCAnbW91c2VlbnRlcic7XG4gIG1lbnRpb25BY3Rpb25CeUV2ZW50PzogKGl0ZW06IHVua25vd24sIHRyaWdnZXJDaGFycz86IHN0cmluZykgPT4gdm9pZDtcbiAgaXRlbXM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+O1xuXG4gIHpJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZUluc2VydCB7XG4gIGVsZW1lbnRTcGFuOiBIVE1MU3BhbkVsZW1lbnQ7XG4gIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgaXRlbT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHRyaWdnZXJDaGFyPzogc3RyaW5nO1xuICBtYW51YWxBZGQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZW50aW9uSW5zZXJ0IHtcbiAgZGF0YToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmVJZDogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH07XG4gIGxlbmd0aEtleTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZW50aW9uRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICBhZGRNZW50aW9uOiAoaW5wdXRFdmVudDogYm9vbGVhbikgPT4gdm9pZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWlucHV0cy1tZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tZW50aW9uL3NyYy9saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLW1lbnRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|