@libs-ui/components-inputs-mention 0.2.10-6.2

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 ADDED
@@ -0,0 +1,3 @@
1
+ # inputs-mention
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,5 @@
1
+ export declare const getCaretCoordinates: (element: Element, position: number | null) => {
2
+ top: number;
3
+ left: number;
4
+ height: number;
5
+ };
@@ -0,0 +1,9 @@
1
+ export declare const KEY_BACKSPACE = 8;
2
+ export declare const KEY_TAB = 9;
3
+ export declare const KEY_ENTER = 13;
4
+ export declare const KEY_SHIFT = 16;
5
+ export declare const KEY_ESCAPE = 27;
6
+ export declare const KEY_SPACE = 32;
7
+ export declare const KEY_UP = 38;
8
+ export declare const KEY_DOWN = 40;
9
+ export declare const KEY_BUFFERED = 229;
@@ -0,0 +1,4 @@
1
+ import { IMentionConfig } from "../interfaces/mention.interface";
2
+ export declare const PATTERN_INSERT = "\uFEFF";
3
+ export declare const buildTemplate: (value: string, id: string, feId: string) => string;
4
+ export declare const DEFAULT_CONFIG: IMentionConfig;
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZXQtY29vcmRzLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvbWVudGlvbi9zcmMvZGVmaW5lcy9jYXJldC1jb29yZHMuZGVmaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdFQUFnRTtBQUVoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCx1REFBdUQ7QUFDdkQsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxVQUFVLEdBQUc7SUFDakIsV0FBVyxFQUFFLGNBQWM7SUFDM0IsV0FBVztJQUNYLE9BQU8sRUFBRSxnR0FBZ0c7SUFDekcsUUFBUTtJQUNSLFdBQVc7SUFDWCxXQUFXLEVBQUUsNEJBQTRCO0lBRXpDLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixhQUFhO0lBRWIsWUFBWTtJQUNaLGNBQWM7SUFDZCxlQUFlO0lBQ2YsYUFBYTtJQUViLHdEQUF3RDtJQUN4RCxXQUFXO0lBQ1gsYUFBYTtJQUNiLFlBQVk7SUFDWixhQUFhO0lBQ2IsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osWUFBWTtJQUVaLFdBQVc7SUFDWCxlQUFlO0lBQ2YsWUFBWTtJQUNaLGdCQUFnQixFQUFFLGtEQUFrRDtJQUVwRSxlQUFlO0lBQ2YsYUFBYTtJQUViLFNBQVM7SUFDVCxZQUFZO0NBRWIsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUM7QUFDbEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFN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WyIvKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vY29tcG9uZW50L3RleHRhcmVhLWNhcmV0LXBvc2l0aW9uICovXG5cbmltcG9ydCB7IGdldCwgaXNOaWwsIHNldCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuXG4vLyBXZSdsbCBjb3B5IHRoZSBwcm9wZXJ0aWVzIGJlbG93IGludG8gdGhlIG1pcnJvciBkaXYuXG4vLyBOb3RlIHRoYXQgc29tZSBicm93c2Vycywgc3VjaCBhcyBGaXJlZm94LCBkbyBub3QgY29uY2F0ZW5hdGUgcHJvcGVydGllc1xuLy8gaW50byB0aGVpciBzaG9ydGhhbmQgKGUuZy4gcGFkZGluZy10b3AsIHBhZGRpbmctYm90dG9tIGV0Yy4gLT4gcGFkZGluZyksXG4vLyBzbyB3ZSBoYXZlIHRvIGxpc3QgZXZlcnkgc2luZ2xlIHByb3BlcnR5IGV4cGxpY2l0bHkuXG5jb25zdCBwcm9wZXJ0aWVzID0gW1xuICAnZGlyZWN0aW9uJywgLy8gUlRMIHN1cHBvcnRcbiAgJ2JveFNpemluZycsXG4gICd3aWR0aCcsIC8vIG9uIENocm9tZSBhbmQgSUUsIGV4Y2x1ZGUgdGhlIHNjcm9sbGJhciwgc28gdGhlIG1pcnJvciBkaXYgd3JhcHMgZXhhY3RseSBhcyB0aGUgdGV4dGFyZWEgZG9lc1xuICAnaGVpZ2h0JyxcbiAgJ292ZXJmbG93WCcsXG4gICdvdmVyZmxvd1knLCAvLyBjb3B5IHRoZSBzY3JvbGxiYXIgZm9yIElFXG5cbiAgJ2JvcmRlclRvcFdpZHRoJyxcbiAgJ2JvcmRlclJpZ2h0V2lkdGgnLFxuICAnYm9yZGVyQm90dG9tV2lkdGgnLFxuICAnYm9yZGVyTGVmdFdpZHRoJyxcbiAgJ2JvcmRlclN0eWxlJyxcblxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nUmlnaHQnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZvbnRcbiAgJ2ZvbnRTdHlsZScsXG4gICdmb250VmFyaWFudCcsXG4gICdmb250V2VpZ2h0JyxcbiAgJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2xpbmVIZWlnaHQnLFxuICAnZm9udEZhbWlseScsXG5cbiAgJ3RleHRBbGlnbicsXG4gICd0ZXh0VHJhbnNmb3JtJyxcbiAgJ3RleHRJbmRlbnQnLFxuICAndGV4dERlY29yYXRpb24nLCAvLyBtaWdodCBub3QgbWFrZSBhIGRpZmZlcmVuY2UsIGJ1dCBiZXR0ZXIgYmUgc2FmZVxuXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ3dvcmRTcGFjaW5nJyxcblxuICAndGFiU2l6ZScsXG4gICdNb3pUYWJTaXplJ1xuXG5dO1xuXG5jb25zdCBpc0Jyb3dzZXIgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpO1xuY29uc3QgaXNGaXJlZm94ID0gKGlzQnJvd3NlciAmJiBnZXQod2luZG93LCAnbW96SW5uZXJTY3JlZW5YJykgIT09IG51bGwpO1xuXG5leHBvcnQgY29uc3QgZ2V0Q2FyZXRDb29yZGluYXRlcyA9IChlbGVtZW50OiBFbGVtZW50LCBwb3NpdGlvbjogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICBpZiAoIWlzQnJvd3Nlcikge1xuICAgIHRocm93IG5ldyBFcnJvcigndGV4dGFyZWEtY2FyZXQtcG9zaXRpb24jZ2V0Q2FyZXRDb29yZGluYXRlcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gYSBicm93c2VyJyk7XG4gIH1cblxuICAvLyBUaGUgbWlycm9yIGRpdiB3aWxsIHJlcGxpY2F0ZSB0aGUgdGV4dGFyZWEncyBzdHlsZVxuICBjb25zdCBkaXY6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgZGl2LmlkID0gJ2lucHV0LXRleHRhcmVhLWNhcmV0LXBvc2l0aW9uLW1pcnJvci1kaXYnO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG5cbiAgY29uc3Qgc3R5bGUgPSBkaXYuc3R5bGU7XG4gIGNvbnN0IGNvbXB1dGVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSA6IGdldChlbGVtZW50LCAnY3VycmVudFN0eWxlJyk7IC8vIGN1cnJlbnRTdHlsZSBmb3IgSUUgPCA5XG4gIGNvbnN0IGlzSW5wdXQgPSBlbGVtZW50Lm5vZGVOYW1lID09PSAnSU5QVVQnO1xuXG4gIC8vIERlZmF1bHQgdGV4dGFyZWEgc3R5bGVzXG4gIHN0eWxlLndoaXRlU3BhY2UgPSAncHJlLXdyYXAnO1xuICBpZiAoIWlzSW5wdXQpIHsgc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLXdvcmQnIH0gLy8gb25seSBmb3IgdGV4dGFyZWEtc1xuXG4gIC8vIFBvc2l0aW9uIG9mZi1zY3JlZW5cbiAgc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOyAvLyByZXF1aXJlZCB0byByZXR1cm4gY29vcmRpbmF0ZXMgcHJvcGVybHlcblxuICAvLyBUcmFuc2ZlciB0aGUgZWxlbWVudCdzIHByb3BlcnRpZXMgdG8gdGhlIGRpdlxuICBwcm9wZXJ0aWVzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKGlzSW5wdXQgJiYgcHJvcCA9PT0gJ2xpbmVIZWlnaHQnKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIDxpbnB1dD5zIGJlY2F1c2UgdGV4dCBpcyByZW5kZXJlZCBjZW50ZXJlZCBhbmQgbGluZSBoZWlnaHQgbWF5IGJlICE9IGhlaWdodFxuICAgICAgaWYgKGNvbXB1dGVkLmJveFNpemluZyAhPT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgICAgc3R5bGUubGluZUhlaWdodCA9IGNvbXB1dGVkLmhlaWdodDtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludChjb21wdXRlZC5oZWlnaHQpO1xuICAgICAgY29uc3Qgb3V0ZXJIZWlnaHQgPSBwYXJzZUludChjb21wdXRlZC5wYWRkaW5nVG9wKSArIHBhcnNlSW50KGNvbXB1dGVkLnBhZGRpbmdCb3R0b20pICsgcGFyc2VJbnQoY29tcHV0ZWQuYm9yZGVyVG9wV2lkdGgpICsgcGFyc2VJbnQoY29tcHV0ZWQuYm9yZGVyQm90dG9tV2lkdGgpO1xuICAgICAgY29uc3QgdGFyZ2V0SGVpZ2h0ID0gb3V0ZXJIZWlnaHQgKyBwYXJzZUludChjb21wdXRlZC5saW5lSGVpZ2h0KTtcblxuICAgICAgaWYgKGhlaWdodCA+IHRhcmdldEhlaWdodCkge1xuICAgICAgICBzdHlsZS5saW5lSGVpZ2h0ID0gaGVpZ2h0IC0gb3V0ZXJIZWlnaHQgKyBcInB4XCI7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGhlaWdodCA9PT0gdGFyZ2V0SGVpZ2h0KSB7XG4gICAgICAgIHN0eWxlLmxpbmVIZWlnaHQgPSBjb21wdXRlZC5saW5lSGVpZ2h0O1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN0eWxlLmxpbmVIZWlnaHQgPSAnMCc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0KHN0eWxlLCBwcm9wLCBjb21wdXRlZFtwcm9wXSk7XG4gIH0pO1xuXG4gIGlmICghaXNGaXJlZm94KSB7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAvLyBGaXJlZm94IGxpZXMgYWJvdXQgdGhlIG92ZXJmbG93IHByb3BlcnR5IGZvciB0ZXh0YXJlYXM6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTk4NDI3NVxuICB9XG4gIGNvbnN0IHZhbHVlID0gZ2V0KGVsZW1lbnQsICd2YWx1ZScpO1xuICBpZiAoaXNGaXJlZm94ICYmIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyc2VJbnQoY29tcHV0ZWQuaGVpZ2h0KSkgeyBzdHlsZS5vdmVyZmxvd1kgPSAnc2Nyb2xsJyB9XG4gIGRpdi50ZXh0Q29udGVudCA9IHZhbHVlLnN1YnN0cmluZygwLCBwb3NpdGlvbik7XG4gIC8vIFRoZSBzZWNvbmQgc3BlY2lhbCBoYW5kbGluZyBmb3IgaW5wdXQgdHlwZT1cInRleHRcIiB2cyB0ZXh0YXJlYTpcbiAgLy8gc3BhY2VzIG5lZWQgdG8gYmUgcmVwbGFjZWQgd2l0aCBub24tYnJlYWtpbmcgc3BhY2VzIC0gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTM0MDIwMzUvMTI2OTAzN1xuICBpZiAoaXNJbnB1dCAmJiAhaXNOaWwoZGl2LnRleHRDb250ZW50KSkge1xuICAgIGRpdi50ZXh0Q29udGVudCA9IGRpdi50ZXh0Q29udGVudC5yZXBsYWNlKC9cXHMvZywgJ1xcdTAwYTAnKTtcbiAgfVxuICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gIC8vIFdyYXBwaW5nIG11c3QgYmUgcmVwbGljYXRlZCAqZXhhY3RseSosIGluY2x1ZGluZyB3aGVuIGEgbG9uZyB3b3JkIGdldHNcbiAgLy8gb250byB0aGUgbmV4dCBsaW5lLCB3aXRoIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBiZWZvcmUgKCM3KS5cbiAgLy8gVGhlICAqb25seSogcmVsaWFibGUgd2F5IHRvIGRvIHRoYXQgaXMgdG8gY29weSB0aGUgKmVudGlyZSogcmVzdCBvZiB0aGVcbiAgLy8gdGV4dGFyZWEncyBjb250ZW50IGludG8gdGhlIDxzcGFuPiBjcmVhdGVkIGF0IHRoZSBjYXJldCBwb3NpdGlvbi5cbiAgLy8gRm9yIGlucHV0cywganVzdCAnLicgd291bGQgYmUgZW5vdWdoLCBidXQgbm8gbmVlZCB0byBib3RoZXIuXG4gIHNwYW4udGV4dENvbnRlbnQgPSB2YWx1ZS5zdWJzdHJpbmcocG9zaXRpb24pIHx8ICcuJzsgLy8gfHwgYmVjYXVzZSBhIGNvbXBsZXRlbHkgZW1wdHkgZmF1eCBzcGFuIGRvZXNuJ3QgcmVuZGVyIGF0IGFsbFxuICBkaXYuYXBwZW5kQ2hpbGQoc3Bhbik7XG5cbiAgY29uc3QgY29vcmRpbmF0ZXMgPSB7XG4gICAgdG9wOiBzcGFuLm9mZnNldFRvcCArIHBhcnNlSW50KGNvbXB1dGVkWydib3JkZXJUb3BXaWR0aCddKSxcbiAgICBsZWZ0OiBzcGFuLm9mZnNldExlZnQgKyBwYXJzZUludChjb21wdXRlZFsnYm9yZGVyTGVmdFdpZHRoJ10pLFxuICAgIGhlaWdodDogcGFyc2VJbnQoY29tcHV0ZWRbJ2xpbmVIZWlnaHQnXSlcbiAgfTtcblxuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG5cbiAgcmV0dXJuIGNvb3JkaW5hdGVzO1xufTtcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ export const KEY_BACKSPACE = 8;
2
+ export const KEY_TAB = 9;
3
+ export const KEY_ENTER = 13;
4
+ export const KEY_SHIFT = 16;
5
+ export const KEY_ESCAPE = 27;
6
+ export const KEY_SPACE = 32;
7
+ export const KEY_UP = 38;
8
+ export const KEY_DOWN = 40;
9
+ export const KEY_BUFFERED = 229;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQuZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tZW50aW9uL3NyYy9kZWZpbmVzL2tleWJvYXJkLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUM1QixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDN0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUM1QixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBLRVlfQkFDS1NQQUNFID0gODtcbmV4cG9ydCBjb25zdCBLRVlfVEFCID0gOTtcbmV4cG9ydCBjb25zdCBLRVlfRU5URVIgPSAxMztcbmV4cG9ydCBjb25zdCBLRVlfU0hJRlQgPSAxNjtcbmV4cG9ydCBjb25zdCBLRVlfRVNDQVBFID0gMjc7XG5leHBvcnQgY29uc3QgS0VZX1NQQUNFID0gMzI7XG5leHBvcnQgY29uc3QgS0VZX1VQID0gMzg7XG5leHBvcnQgY29uc3QgS0VZX0RPV04gPSA0MDtcbmV4cG9ydCBjb25zdCBLRVlfQlVGRkVSRUQgPSAyMjk7Il19
@@ -0,0 +1,25 @@
1
+ import { deleteUnicode, get } from "@libs-ui/utils";
2
+ export const PATTERN_INSERT = '\ufeff';
3
+ export const buildTemplate = (value, id, feId) => {
4
+ 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>&nbsp;`;
5
+ };
6
+ export const DEFAULT_CONFIG = {
7
+ items: [],
8
+ triggerChar: '@',
9
+ labelKey: 'email',
10
+ allowSpace: true,
11
+ returnTrigger: false,
12
+ limitSpaceSearchQuery: 3,
13
+ mentionEventName: 'click',
14
+ mentionActionByEvent: (item, trigger) => console.log(item, trigger),
15
+ mentionSelect: (item) => `@${get(item, 'email')}`,
16
+ mentionFilter: (search, items) => {
17
+ const searchString = deleteUnicode(search.toLowerCase());
18
+ return items?.filter(item => {
19
+ const name = deleteUnicode(get(item, 'name').toLowerCase());
20
+ const userName = deleteUnicode(get(item, 'username').toLowerCase());
21
+ return name.includes(searchString) || userName.includes(searchString);
22
+ });
23
+ }
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tZW50aW9uL3NyYy9kZWZpbmVzL3RlbXBsYXRlLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQVUsRUFBRSxJQUFZLEVBQVUsRUFBRTtJQUMvRSxPQUFPLG1MQUFtTCxFQUFFLFdBQVcsSUFBSSxZQUFZLEtBQUssS0FBSyxLQUFLLGVBQWUsQ0FBQztBQUN4UCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQW1CO0lBQzVDLEtBQUssRUFBRSxFQUFFO0lBQ1QsV0FBVyxFQUFFLEdBQUc7SUFDaEIsUUFBUSxFQUFFLE9BQU87SUFDakIsVUFBVSxFQUFFLElBQUk7SUFDaEIsYUFBYSxFQUFFLEtBQUs7SUFDcEIscUJBQXFCLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLG9CQUFvQixFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQ25FLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0lBQ2pELGFBQWEsRUFBRSxDQUFDLE1BQWMsRUFBRSxLQUFzQixFQUFFLEVBQUU7UUFDeEQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRXpELE9BQU8sS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFFcEUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlbGV0ZVVuaWNvZGUsIGdldCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xyXG5pbXBvcnQgeyBJTWVudGlvbkNvbmZpZyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL21lbnRpb24uaW50ZXJmYWNlXCI7XHJcbmV4cG9ydCBjb25zdCBQQVRURVJOX0lOU0VSVCA9ICdcXHVmZWZmJztcclxuXHJcbmV4cG9ydCBjb25zdCBidWlsZFRlbXBsYXRlID0gKHZhbHVlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGZlSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm1vLWxpYi1zaGFyZWQtbWVudGlvblwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDYwMDstbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyBjb2xvcjogIzcyMzlFQVwiIGNvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCIgaWQ9XCIke2lkfVwiIGZlSWQ9XCIke2ZlSWR9XCIgdmFsdWU9XCIke3ZhbHVlfVwiPiR7dmFsdWV9PC9zcGFuPiZuYnNwO2A7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05GSUc6IElNZW50aW9uQ29uZmlnID0ge1xyXG4gIGl0ZW1zOiBbXSxcclxuICB0cmlnZ2VyQ2hhcjogJ0AnLFxyXG4gIGxhYmVsS2V5OiAnZW1haWwnLFxyXG4gIGFsbG93U3BhY2U6IHRydWUsXHJcbiAgcmV0dXJuVHJpZ2dlcjogZmFsc2UsXHJcbiAgbGltaXRTcGFjZVNlYXJjaFF1ZXJ5OiAzLFxyXG4gIG1lbnRpb25FdmVudE5hbWU6ICdjbGljaycsXHJcbiAgbWVudGlvbkFjdGlvbkJ5RXZlbnQ6IChpdGVtLCB0cmlnZ2VyKSA9PiBjb25zb2xlLmxvZyhpdGVtLCB0cmlnZ2VyKSxcclxuICBtZW50aW9uU2VsZWN0OiAoaXRlbSkgPT4gYEAke2dldChpdGVtLCAnZW1haWwnKX1gLFxyXG4gIG1lbnRpb25GaWx0ZXI6IChzZWFyY2g6IHN0cmluZywgaXRlbXM/OiBBcnJheTx1bmtub3duPikgPT4ge1xyXG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gZGVsZXRlVW5pY29kZShzZWFyY2gudG9Mb3dlckNhc2UoKSk7XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zPy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IG5hbWUgPSBkZWxldGVVbmljb2RlKGdldChpdGVtLCAnbmFtZScpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICBjb25zdCB1c2VyTmFtZSA9IGRlbGV0ZVVuaWNvZGUoZ2V0KGl0ZW0sICd1c2VybmFtZScpLnRvTG93ZXJDYXNlKCkpO1xyXG5cclxuICAgICAgcmV0dXJuIG5hbWUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSB8fCB1c2VyTmFtZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59OyJdfQ==
@@ -0,0 +1,280 @@
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
+ };
104
+ export const getCaretPosition = (el, iframe) => {
105
+ if (isInputOrTextAreaElement(el)) {
106
+ const val = el.value;
107
+ return val.slice(0, el.selectionStart || undefined).length;
108
+ }
109
+ const selObj = getWindowSelection(iframe); //window.getSelection();
110
+ if (selObj && selObj.rangeCount > 0) {
111
+ const selRange = selObj.getRangeAt(0);
112
+ const preCaretRange = selRange.cloneRange();
113
+ preCaretRange.selectNodeContents(el);
114
+ preCaretRange.setEnd(selRange.endContainer, selRange.endOffset);
115
+ const position = preCaretRange.toString().length;
116
+ return position;
117
+ }
118
+ return 0;
119
+ };
120
+ // Based on ment.io functions...
121
+ //
122
+ const getDocument = (iframe) => {
123
+ if (!iframe) {
124
+ return document;
125
+ }
126
+ return iframe.contentWindow?.document;
127
+ };
128
+ export const getWindowSelection = (iframe) => {
129
+ if (!iframe) {
130
+ return window.getSelection();
131
+ }
132
+ return iframe.contentWindow?.getSelection() || null;
133
+ };
134
+ export const getContentEditableCaretCoords = (ctx) => {
135
+ const markerTextChar = '\ufeff';
136
+ const markerId = 'sel_' + new Date().getTime() + '_' + Math.random().toString().substring(2);
137
+ const doc = getDocument(ctx.iframe);
138
+ const sel = getWindowSelection(ctx.iframe);
139
+ if (!sel) {
140
+ return {
141
+ left: 0,
142
+ top: 0,
143
+ bottom: 0
144
+ };
145
+ }
146
+ const prevRange = sel.getRangeAt(0);
147
+ // create new range and set postion using prevRange
148
+ const range = doc.createRange();
149
+ const anchorNode = sel.anchorNode;
150
+ range.setStart(anchorNode, prevRange.startOffset);
151
+ range.setEnd(anchorNode, prevRange.startOffset);
152
+ range.collapse(false);
153
+ // Create the marker element containing a single invisible character
154
+ // using DOM methods and insert it at the position in the range
155
+ const markerEl = doc.createElement('span');
156
+ markerEl.id = markerId;
157
+ markerEl.appendChild(doc.createTextNode(markerTextChar));
158
+ range.insertNode(markerEl);
159
+ sel.removeAllRanges();
160
+ sel.addRange(prevRange);
161
+ const coordinates = {
162
+ left: 0,
163
+ top: markerEl.offsetHeight,
164
+ bottom: -1
165
+ };
166
+ localToRelativeCoordinates(ctx, markerEl, coordinates);
167
+ markerEl.parentNode?.removeChild(markerEl);
168
+ const widthScreen = (ctx.windowParent ? window.parent.innerWidth : window.innerWidth) || document.documentElement.clientWidth || document.body.clientWidth;
169
+ if (coordinates.left + 315 > widthScreen) {
170
+ coordinates.left = coordinates.left - 300;
171
+ }
172
+ const heightScreen = (ctx.windowParent ? window.parent.innerHeight : window.innerHeight) || document.documentElement.clientHeight || document.body.clientHeight;
173
+ if (coordinates.top + 190 > heightScreen) {
174
+ coordinates.bottom = heightScreen - coordinates.top + 15;
175
+ coordinates.top = -1;
176
+ }
177
+ return coordinates;
178
+ };
179
+ const localToRelativeCoordinates = (ctx, element, coordinates) => {
180
+ let obj = element;
181
+ let iframe = ctx ? ctx.iframe : null;
182
+ while (obj) {
183
+ if (ctx.parent !== null && ctx.parent === obj) {
184
+ break;
185
+ }
186
+ coordinates.left += obj.offsetLeft + obj.clientLeft;
187
+ coordinates.top += obj.offsetTop + obj.clientTop;
188
+ obj = obj.offsetParent;
189
+ if (!obj && iframe) {
190
+ obj = iframe;
191
+ iframe = null;
192
+ }
193
+ }
194
+ obj = element;
195
+ iframe = ctx ? ctx.iframe : null;
196
+ while ((obj !== getDocument(undefined)?.body || ctx.windowParent) && obj !== null) {
197
+ if (ctx.parent !== null && ctx.parent === obj) {
198
+ break;
199
+ }
200
+ if (obj.scrollTop && obj.scrollTop > 0) {
201
+ coordinates.top -= obj.scrollTop;
202
+ }
203
+ if (obj.scrollLeft && obj.scrollLeft > 0) {
204
+ coordinates.left -= obj.scrollLeft;
205
+ }
206
+ obj = ctx.windowParent ? obj.offsetParent : obj.parentNode;
207
+ if (!obj && iframe) {
208
+ obj = iframe;
209
+ iframe = null;
210
+ }
211
+ }
212
+ };
213
+ const setEndOfContentEditable = (contentEditableElement) => {
214
+ if (document.createRange) {
215
+ const range = document.createRange(); //Create a range (a range is a like the selection but invisible)
216
+ const selection = window.getSelection(); //get the selection object (allows you to change selection)
217
+ range.selectNodeContents(contentEditableElement); //Select the entire contents of the element with the range
218
+ range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start
219
+ selection?.removeAllRanges(); //remove any selections already made
220
+ selection?.addRange(range); //make the range you have just created the visible selection
221
+ }
222
+ return;
223
+ };
224
+ export const insertTextAtCaret = (element, text) => {
225
+ if (window.getSelection) {
226
+ if (!elementContainsSelection(element)) {
227
+ setEndOfContentEditable(element);
228
+ insertTextAtCaret(element, text);
229
+ return;
230
+ }
231
+ const sel = window.getSelection();
232
+ if (sel?.getRangeAt && sel.rangeCount) {
233
+ let range = sel.getRangeAt(0);
234
+ const el = document.createElement("SPAN");
235
+ range.deleteContents();
236
+ el.innerHTML = text;
237
+ const frag = document.createDocumentFragment();
238
+ let node;
239
+ let lastNode;
240
+ while ((node = el.firstChild)) {
241
+ lastNode = frag.appendChild(node);
242
+ }
243
+ range.insertNode(frag);
244
+ if (lastNode) {
245
+ range = range.cloneRange();
246
+ range.setStartAfter(lastNode);
247
+ range.collapse(true);
248
+ sel.removeAllRanges();
249
+ sel.addRange(range);
250
+ }
251
+ }
252
+ }
253
+ };
254
+ const elementContainsSelection = (el) => {
255
+ if (!window.getSelection) {
256
+ return false;
257
+ }
258
+ const sel = window.getSelection();
259
+ if (sel && sel.rangeCount > 0) {
260
+ for (let i = 0; i < sel.rangeCount; ++i) {
261
+ if (!isOrContains(sel.getRangeAt(i).commonAncestorContainer, el)) {
262
+ return false;
263
+ }
264
+ }
265
+ return true;
266
+ }
267
+ return false;
268
+ };
269
+ const isOrContains = (node, container) => {
270
+ while (node) {
271
+ if (node === container) {
272
+ return true;
273
+ }
274
+ if (node.parentNode) {
275
+ node = node.parentNode;
276
+ }
277
+ }
278
+ return false;
279
+ };
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tZW50aW9uL3NyYy9kZWZpbmVzL3V0aWxzLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBb0IsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUN2RCxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFakIsT0FBTztJQUNULENBQUM7SUFDRCxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEVBQUU7SUFDL0MsT0FBTyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLE1BQXlCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBZ0MsRUFBRTtJQUMxSyxJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzQyxR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SUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXQgfSBmcm9tIFwiQGxpYnMtdWkvdXRpbHNcIjtcbmltcG9ydCB7IFBBVFRFUk5fSU5TRVJUIH0gZnJvbSBcIi4vdGVtcGxhdGUuZGVmaW5lXCI7XG5cbmNvbnN0IHNldFZhbHVlID0gKGVsOiBIVE1MSW5wdXRFbGVtZW50LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGlmIChpc0lucHV0T3JUZXh0QXJlYUVsZW1lbnQoZWwpKSB7XG4gICAgZWwudmFsdWUgPSB2YWx1ZTtcblxuICAgIHJldHVybjtcbiAgfVxuICBlbC50ZXh0Q29udGVudCA9IHZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbHVlID0gKGVsOiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XG4gIHJldHVybiBpc0lucHV0T3JUZXh0QXJlYUVsZW1lbnQoZWwpID8gZWwudmFsdWUgOiBlbC50ZXh0Q29udGVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRWYWx1ZSA9IChlbDogSFRNTElucHV0RWxlbWVudCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRleHQ6IHN0cmluZywgaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCwgbm9SZWN1cnNpb24gPSBmYWxzZSk6IENoaWxkTm9kZSB8IHVuZGVmaW5lZCB8IG51bGwgPT4ge1xuICBpZiAoaXNUZXh0RWxlbWVudChlbCkpIHtcbiAgICBjb25zdCB2YWwgPSBnZXRWYWx1ZShlbCk7XG5cbiAgICB0ZXh0ID0gbm9SZWN1cnNpb24gPyBQQVRURVJOX0lOU0VSVCA6IHRleHQ7XG4gICAgc2V0VmFsdWUoZWwsIHZhbD8uc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHRleHQgKyB2YWw/LnN1YnN0cmluZyhlbmQsIHZhbC5sZW5ndGgpKTtcbiAgICBzZXRDYXJldFBvc2l0aW9uKGVsLCBzdGFydCArIHRleHQubGVuZ3RoLCBpZnJhbWUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChub1JlY3Vyc2lvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBpbnNlcnRWYWx1ZVRvQ29udGVudEVkaXRhYmxlKHN0YXJ0LCBlbmQsIHRleHQpO1xufTtcblxuY29uc3QgaW5zZXJ0VmFsdWVUb0NvbnRlbnRFZGl0YWJsZSA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgdGV4dDogc3RyaW5nKTogQ2hpbGROb2RlIHwgdW5kZWZpbmVkIHwgbnVsbCA9PiB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWwgfHwgIXNlbC5hbmNob3JOb2RlIHx8ICFzZWwuZ2V0UmFuZ2VBdCB8fCAhc2VsLnJhbmdlQ291bnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBzZWwuYW5jaG9yTm9kZTtcbiAgY29uc3QgbnVtYmVyVGV4dEJlZm9yZUN1cnNvciA9IChnZXRUZXh0QmVmb3JlQ3Vyc29yKCkgfHwgJycpLmxlbmd0aDtcblxuICByYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBudW1iZXJUZXh0QmVmb3JlQ3Vyc29yIC0gKGVuZCAtIHN0YXJ0KSk7XG4gIHJhbmdlLnNldEVuZChhbmNob3JOb2RlLCBudW1iZXJUZXh0QmVmb3JlQ3Vyc29yKTtcbiAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgLy8gUmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCkgd291bGQgYmUgdXNlZnVsIGhlcmUgYnV0IGlzXG4gIC8vIG9ubHkgcmVsYXRpdmVseSByZWNlbnRseSBzdGFuZGFyZGl6ZWQgYW5kIGlzIG5vdCBzdXBwb3J0ZWQgaW5cbiAgLy8gc29tZSBicm93c2VycyAoSUU5LCBmb3Igb25lKVxuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJTUEFOXCIpO1xuXG4gIGVsLmlubmVySFRNTCA9IHRleHQ7XG4gIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGxldCBub2RlLCBsYXN0Tm9kZSwgbm9kZUhhbmRsZXJFdmVudDtcblxuICB3aGlsZSAoKG5vZGUgPSBlbC5maXJzdENoaWxkKSkge1xuICAgIGlmIChnZXQobm9kZSwgJ2dldEF0dHJpYnV0ZScpKSB7XG4gICAgICBub2RlSGFuZGxlckV2ZW50ID0gbm9kZTtcbiAgICB9XG5cbiAgICBsYXN0Tm9kZSA9IGZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7XG4gIH1cbiAgcmFuZ2UuaW5zZXJ0Tm9kZShmcmFnKTtcblxuICAvLyBQcmVzZXJ2ZSB0aGUgc2VsZWN0aW9uXG4gIGlmIChsYXN0Tm9kZSkge1xuICAgIHJhbmdlID0gcmFuZ2UuY2xvbmVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIobGFzdE5vZGUpO1xuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVIYW5kbGVyRXZlbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dEJlZm9yZUN1cnNvciA9ICgpID0+IHtcbiAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsIHx8ICFzZWwuYW5jaG9yTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgY29uc3QgYW5jaG9yTm9kZSA9IHNlbC5hbmNob3JOb2RlO1xuICBjb25zdCByYW5nZU5ldyA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cbiAgcmFuZ2VOZXcuc2VsZWN0Tm9kZUNvbnRlbnRzKGFuY2hvck5vZGUpO1xuICByYW5nZU5ldy5zZXRFbmQocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTtcblxuICBjb25zdCBmcmFnTmV3ID0gcmFuZ2VOZXcuY2xvbmVDb250ZW50cygpO1xuICBjb25zdCBlbG1QcmV2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIlNQQU5cIik7XG5cbiAgZWxtUHJldi5hcHBlbmRDaGlsZChmcmFnTmV3KTtcblxuICByZXR1cm4gZWxtUHJldi5pbm5lclRleHQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJbnB1dE9yVGV4dEFyZWFFbGVtZW50ID0gKGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gZWwgIT09IG51bGwgJiYgKGVsLm5vZGVOYW1lID09PSAnSU5QVVQnIHx8IGVsLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RleHRFbGVtZW50ID0gKGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gZWwgIT09IG51bGwgJiYgKGVsLm5vZGVOYW1lID09PSAnSU5QVVQnIHx8IGVsLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnIHx8IGVsLm5vZGVOYW1lID09PSAnI3RleHQnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDYXJldFBvc2l0aW9uID0gKGVsOiBIVE1MSW5wdXRFbGVtZW50LCBwb3M6IG51bWJlciwgaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCkgPT4ge1xuICBpZiAoaXNJbnB1dE9yVGV4dEFyZWFFbGVtZW50KGVsKSAmJiBlbC5zZWxlY3Rpb25TdGFydCkge1xuICAgIGVsLmZvY3VzKCk7XG4gICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xuXG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJhbmdlID0gZ2V0RG9jdW1lbnQoaWZyYW1lKT8uY3JlYXRlUmFuZ2UoKTtcblxuICByYW5nZT8uc2V0U3RhcnQoZWwsIHBvcyk7XG4gIHJhbmdlPy5jb2xsYXBzZSh0cnVlKTtcbiAgY29uc3Qgc2VsID0gZ2V0V2luZG93U2VsZWN0aW9uKGlmcmFtZSk7XG5cbiAgaWYgKCFzZWwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICBpZiAocmFuZ2UpIHtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2FyZXRQb3NpdGlvbiA9IChlbDogSFRNTElucHV0RWxlbWVudCwgaWZyYW1lPzogSFRNTElGcmFtZUVsZW1lbnQpOiBudW1iZXIgPT4ge1xuICBpZiAoaXNJbnB1dE9yVGV4dEFyZWFFbGVtZW50KGVsKSkge1xuICAgIGNvbnN0IHZhbCA9IGVsLnZhbHVlO1xuXG4gICAgcmV0dXJuIHZhbC5zbGljZSgwLCBlbC5zZWxlY3Rpb25TdGFydCB8fCB1bmRlZmluZWQpLmxlbmd0aDtcbiAgfVxuICBjb25zdCBzZWxPYmogPSBnZXRXaW5kb3dTZWxlY3Rpb24oaWZyYW1lKTsgLy93aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKHNlbE9iaiAmJiBzZWxPYmoucmFuZ2VDb3VudCA+IDApIHtcbiAgICBjb25zdCBzZWxSYW5nZSA9IHNlbE9iai5nZXRSYW5nZUF0KDApO1xuICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBzZWxSYW5nZS5jbG9uZVJhbmdlKCk7XG5cbiAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbCk7XG4gICAgcHJlQ2FyZXRSYW5nZS5zZXRFbmQoc2VsUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxSYW5nZS5lbmRPZmZzZXQpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcblxuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfVxuICByZXR1cm4gMDtcbn07XG5cbi8vIEJhc2VkIG9uIG1lbnQuaW8gZnVuY3Rpb25zLi4uXG4vL1xuXG5jb25zdCBnZXREb2N1bWVudCA9IChpZnJhbWU/OiBIVE1MSUZyYW1lRWxlbWVudCkgPT4ge1xuICBpZiAoIWlmcmFtZSkge1xuICAgIHJldHVybiBkb2N1bWVudDtcbiAgfVxuXG4gIHJldHVybiBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0V2luZG93U2VsZWN0aW9uID0gKGlmcmFtZT86IEhUTUxJRnJhbWVFbGVtZW50KTogU2VsZWN0aW9uIHwgbnVsbCA9PiB7XG4gIGlmICghaWZyYW1lKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHJldHVybiBpZnJhbWUuY29udGVudFdpbmRvdz8uZ2V0U2VsZWN0aW9uKCkgfHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50RWRpdGFibGVDYXJldENvb3JkcyA9IChjdHg6IHsgaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCB8IHVuZGVmaW5lZCwgcGFyZW50OiBFbGVtZW50IHwgbnVsbCwgd2luZG93UGFyZW50PzogYm9vbGVhbiB9KSA9PiB7XG4gIGNvbnN0IG1hcmtlclRleHRDaGFyID0gJ1xcdWZlZmYnO1xuICBjb25zdCBtYXJrZXJJZCA9ICdzZWxfJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygpLnN1YnN0cmluZygyKTtcbiAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnQoY3R4LmlmcmFtZSkgYXMgRG9jdW1lbnQ7XG4gIGNvbnN0IHNlbCA9IGdldFdpbmRvd1NlbGVjdGlvbihjdHguaWZyYW1lKSBhcyBTZWxlY3Rpb247XG5cbiAgaWYgKCFzZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIGJvdHRvbTogMFxuICAgIH07XG4gIH1cbiAgY29uc3QgcHJldlJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgLy8gY3JlYXRlIG5ldyByYW5nZSBhbmQgc2V0IHBvc3Rpb24gdXNpbmcgcHJldlJhbmdlXG4gIGNvbnN0IHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBzZWwuYW5jaG9yTm9kZSBhcyBOb2RlO1xuICByYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBwcmV2UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgcHJldlJhbmdlLnN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuXG4gIC8vIENyZWF0ZSB0aGUgbWFya2VyIGVsZW1lbnQgY29udGFpbmluZyBhIHNpbmdsZSBpbnZpc2libGUgY2hhcmFjdGVyXG4gIC8vIHVzaW5nIERPTSBtZXRob2RzIGFuZCBpbnNlcnQgaXQgYXQgdGhlIHBvc2l0aW9uIGluIHRoZSByYW5nZVxuICBjb25zdCBtYXJrZXJFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cbiAgbWFya2VyRWwuaWQgPSBtYXJrZXJJZDtcbiAgbWFya2VyRWwuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKG1hcmtlclRleHRDaGFyKSk7XG4gIHJhbmdlLmluc2VydE5vZGUobWFya2VyRWwpO1xuICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIHNlbC5hZGRSYW5nZShwcmV2UmFuZ2UpO1xuXG4gIGNvbnN0IGNvb3JkaW5hdGVzID0ge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiBtYXJrZXJFbC5vZmZzZXRIZWlnaHQsXG4gICAgYm90dG9tOiAtMVxuICB9O1xuXG4gIGxvY2FsVG9SZWxhdGl2ZUNvb3JkaW5hdGVzKGN0eCwgbWFya2VyRWwsIGNvb3JkaW5hdGVzKTtcbiAgbWFya2VyRWwucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobWFya2VyRWwpO1xuICBjb25zdCB3aWR0aFNjcmVlbiA9IChjdHgud2luZG93UGFyZW50ID8gd2luZG93LnBhcmVudC5pbm5lcldpZHRoIDogd2luZG93LmlubmVyV2lkdGgpIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xuXG4gIGlmIChjb29yZGluYXRlcy5sZWZ0ICsgMzE1ID4gd2lkdGhTY3JlZW4pIHtcbiAgICBjb29yZGluYXRlcy5sZWZ0ID0gY29vcmRpbmF0ZXMubGVmdCAtIDMwMDtcbiAgfVxuICBjb25zdCBoZWlnaHRTY3JlZW4gPSAoY3R4LndpbmRvd1BhcmVudCA/IHdpbmRvdy5wYXJlbnQuaW5uZXJIZWlnaHQgOiB3aW5kb3cuaW5uZXJIZWlnaHQpIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgaWYgKGNvb3JkaW5hdGVzLnRvcCArIDE5MCA+IGhlaWdodFNjcmVlbikge1xuICAgIGNvb3JkaW5hdGVzLmJvdHRvbSA9IGhlaWdodFNjcmVlbiAtIGNvb3JkaW5hdGVzLnRvcCArIDE1O1xuICAgIGNvb3JkaW5hdGVzLnRvcCA9IC0xO1xuICB9XG5cbiAgcmV0dXJuIGNvb3JkaW5hdGVzO1xufTtcblxuY29uc3QgbG9jYWxUb1JlbGF0aXZlQ29vcmRpbmF0ZXMgPSAoY3R4OiB7IGlmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQgfCB1bmRlZmluZWQsIHBhcmVudDogRWxlbWVudCB8IG51bGwsIHdpbmRvd1BhcmVudD86IGJvb2xlYW4gfSwgZWxlbWVudDogRWxlbWVudCwgY29vcmRpbmF0ZXM6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIgfSkgPT4ge1xuICBsZXQgb2JqID0gPEhUTUxFbGVtZW50PmVsZW1lbnQ7XG4gIGxldCBpZnJhbWUgPSBjdHggPyBjdHguaWZyYW1lIDogbnVsbDtcblxuICB3aGlsZSAob2JqKSB7XG4gICAgaWYgKGN0eC5wYXJlbnQgIT09IG51bGwgJiYgY3R4LnBhcmVudCA9PT0gb2JqKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29vcmRpbmF0ZXMubGVmdCArPSBvYmoub2Zmc2V0TGVmdCArIG9iai5jbGllbnRMZWZ0O1xuICAgIGNvb3JkaW5hdGVzLnRvcCArPSBvYmoub2Zmc2V0VG9wICsgb2JqLmNsaWVudFRvcDtcbiAgICBvYmogPSA8SFRNTEVsZW1lbnQ+b2JqLm9mZnNldFBhcmVudDtcbiAgICBpZiAoIW9iaiAmJiBpZnJhbWUpIHtcbiAgICAgIG9iaiA9IGlmcmFtZTtcbiAgICAgIGlmcmFtZSA9IG51bGw7XG4gICAgfVxuICB9XG4gIG9iaiA9IDxIVE1MRWxlbWVudD5lbGVtZW50O1xuICBpZnJhbWUgPSBjdHggPyBjdHguaWZyYW1lIDogbnVsbDtcbiAgd2hpbGUgKChvYmogIT09IGdldERvY3VtZW50KHVuZGVmaW5lZCk/LmJvZHkgfHwgY3R4LndpbmRvd1BhcmVudCkgJiYgb2JqICE9PSBudWxsKSB7XG4gICAgaWYgKGN0eC5wYXJlbnQgIT09IG51bGwgJiYgY3R4LnBhcmVudCA9PT0gb2JqKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKG9iai5zY3JvbGxUb3AgJiYgb2JqLnNjcm9sbFRvcCA+IDApIHtcbiAgICAgIGNvb3JkaW5hdGVzLnRvcCAtPSBvYmouc2Nyb2xsVG9wO1xuICAgIH1cbiAgICBpZiAob2JqLnNjcm9sbExlZnQgJiYgb2JqLnNjcm9sbExlZnQgPiAwKSB7XG4gICAgICBjb29yZGluYXRlcy5sZWZ0IC09IG9iai5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBvYmogPSBjdHgud2luZG93UGFyZW50ID8gPEhUTUxFbGVtZW50Pm9iai5vZmZzZXRQYXJlbnQgOiA8SFRNTEVsZW1lbnQ+b2JqLnBhcmVudE5vZGU7XG4gICAgaWYgKCFvYmogJiYgaWZyYW1lKSB7XG4gICAgICBvYmogPSBpZnJhbWU7XG4gICAgICBpZnJhbWUgPSBudWxsO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3Qgc2V0RW5kT2ZDb250ZW50RWRpdGFibGUgPSAoY29udGVudEVkaXRhYmxlRWxlbWVudDogTm9kZSkgPT4ge1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7IC8vQ3JlYXRlIGEgcmFuZ2UgKGEgcmFuZ2UgaXMgYSBsaWtlIHRoZSBzZWxlY3Rpb24gYnV0IGludmlzaWJsZSlcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7IC8vZ2V0IHRoZSBzZWxlY3Rpb24gb2JqZWN0IChhbGxvd3MgeW91IHRvIGNoYW5nZSBzZWxlY3Rpb24pXG5cbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoY29udGVudEVkaXRhYmxlRWxlbWVudCk7IC8vU2VsZWN0IHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgd2l0aCB0aGUgcmFuZ2VcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7IC8vY29sbGFwc2UgdGhlIHJhbmdlIHRvIHRoZSBlbmQgcG9pbnQuIGZhbHNlIG1lYW5zIGNvbGxhcHNlIHRvIGVuZCByYXRoZXIgdGhhbiB0aGUgc3RhcnRcbiAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpOyAvL3JlbW92ZSBhbnkgc2VsZWN0aW9ucyBhbHJlYWR5IG1hZGVcbiAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTsgLy9tYWtlIHRoZSByYW5nZSB5b3UgaGF2ZSBqdXN0IGNyZWF0ZWQgdGhlIHZpc2libGUgc2VsZWN0aW9uXG4gIH1cblxuICByZXR1cm47XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0VGV4dEF0Q2FyZXQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCwgdGV4dDogc3RyaW5nKSA9PiB7XG4gIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgaWYgKCFlbGVtZW50Q29udGFpbnNTZWxlY3Rpb24oZWxlbWVudCkpIHtcbiAgICAgIHNldEVuZE9mQ29udGVudEVkaXRhYmxlKGVsZW1lbnQpO1xuICAgICAgaW5zZXJ0VGV4dEF0Q2FyZXQoZWxlbWVudCwgdGV4dCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgaWYgKHNlbD8uZ2V0UmFuZ2VBdCAmJiBzZWwucmFuZ2VDb3VudCkge1xuICAgICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJTUEFOXCIpO1xuXG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgZWwuaW5uZXJIVE1MID0gdGV4dDtcbiAgICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBsZXQgbm9kZTogTm9kZSB8IG51bGw7XG4gICAgICBsZXQgbGFzdE5vZGUhOiBOb2RlO1xuXG4gICAgICB3aGlsZSAoKG5vZGUgPSBlbC5maXJzdENoaWxkKSkge1xuICAgICAgICBsYXN0Tm9kZSA9IGZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICB9XG4gICAgICByYW5nZS5pbnNlcnROb2RlKGZyYWcpO1xuXG4gICAgICBpZiAobGFzdE5vZGUpIHtcbiAgICAgICAgcmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIobGFzdE5vZGUpO1xuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuY29uc3QgZWxlbWVudENvbnRhaW5zU2VsZWN0aW9uID0gKGVsOiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKHNlbCAmJiBzZWwucmFuZ2VDb3VudCA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbC5yYW5nZUNvdW50OyArK2kpIHtcbiAgICAgIGlmICghaXNPckNvbnRhaW5zKHNlbC5nZXRSYW5nZUF0KGkpLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLCBlbCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNPckNvbnRhaW5zID0gKG5vZGU6IE5vZGUsIGNvbnRhaW5lcjogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07Il19
@@ -0,0 +1,3 @@
1
+ export * from './mention.directive';
2
+ export * from './interfaces/mention.interface';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWVudGlvbi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL21lbnRpb24uaW50ZXJmYWNlJzsiXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL2ludGVyZmFjZXMvbWVudGlvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lbnRpb25Db25maWcgZXh0ZW5kcyBJTWVudGlvbkl0ZW0ge1xuICBkaXNhYmxlU3R5bGU/OiBib29sZWFuO1xuICBpZnJhbWU/OiBzdHJpbmc7XG4gIG1lbnRpb24/OiBBcnJheTxJTWVudGlvbkl0ZW0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZW50aW9uSXRlbSB7XG4gIHRyaWdnZXJDaGFyPzogc3RyaW5nO1xuXG4gIC8vIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBmaWVsZCBpbiB0aGUgb2JqZWN0cyB0byBiZSB1c2VkIGFzIHRoZSBpdGVtIGxhYmVsXG4gIGxhYmVsS2V5Pzogc3RyaW5nO1xuXG4gIC8vIG9wdGlvbiB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHNob3duIGluIHRoZSBwb3AtdXAgbWVudVxuICBkaXNhYmxlU29ydD86IGJvb2xlYW47XG5cbiAgLy8gb3B0aW9uIHRvIGRpc2FibGUgaW50ZXJuYWwgZmlsdGVyaW5nLiBjYW4gYmUgdXNlZCB0byBzaG93IHRoZSBmdWxsIGxpc3QgcmV0dXJuZWRcbiAgLy8gZnJvbSBhbiBhc3luYyBvcGVyYXRpb25cbiAgZGlzYWJsZVNlYXJjaD86IGJvb2xlYW47XG5cbiAgLy8gZGlzcGxheSBtZW51IGFib3ZlIHRleHQgaW5zdGVhZCBvZiBiZWxvd1xuICBkcm9wVXA/OiBib29sZWFuO1xuXG4gIC8vIHdoZXRoZXIgdG8gYWxsb3cgc3BhY2Ugd2hpbGUgbWVudGlvbmluZyBvciBub3RcbiAgYWxsb3dTcGFjZT86IGJvb2xlYW47XG4gIGxpbWl0U3BhY2VTZWFyY2hRdWVyeT86IG51bWJlcjtcblxuICAvLyBvcHRpb24gdG8gaW5jbHVkZSB0aGUgdHJpZ2dlciBjaGFyIGluIHRoZSBzZWFyY2hUZXJtIGV2ZW50XG4gIHJldHVyblRyaWdnZXI/OiBib29sZWFuO1xuXG4gIC8vIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgaXRlbSBiZWZvcmUgaW5zZXJ0aW5nIHRoZSB0ZXh0XG4gIG1lbnRpb25TZWxlY3Q/OiAoaXRlbTogdW5rbm93biwgdHJpZ2dlckNoYXI/OiBzdHJpbmcpID0+IChzdHJpbmcpO1xuXG4gIC8vIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgc2VhcmNoIGltcGxlbWVudGF0aW9uXG4gIG1lbnRpb25GaWx0ZXI/OiAoc2VhcmNoU3RyaW5nOiBzdHJpbmcsIGl0ZW1zPzogQXJyYXk8dW5rbm93bj4pID0+IEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIG1lbnRpb25FdmVudE5hbWU/OiAnY2xpY2snIHwgJ21vdXNlZW50ZXInO1xuICBtZW50aW9uQWN0aW9uQnlFdmVudD86IChpdGVtOiB1bmtub3duLCB0cmlnZ2VyQ2hhcnM/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGl0ZW1zOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+PjtcblxuICB6SW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVJbnNlcnQge1xuICBlbGVtZW50U3BhbjogSFRNTFNwYW5FbGVtZW50O1xuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIGl0ZW0/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICB0cmlnZ2VyQ2hhcj86IHN0cmluZztcbiAgbWFudWFsQWRkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVudGlvbkluc2VydCB7XG4gIGRhdGE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZlSWQ6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9O1xuICBsZW5ndGhLZXk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVudGlvbkZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgYWRkTWVudGlvbjogKGlucHV0RXZlbnQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59Il19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWlucHV0cy1tZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tZW50aW9uL3NyYy9saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLW1lbnRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=