@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 +3 -0
- package/defines/caret-coords.define.d.ts +5 -0
- package/defines/keyboard.define.d.ts +9 -0
- package/defines/template.define.d.ts +4 -0
- package/defines/utils.define.d.ts +18 -0
- package/esm2022/defines/caret-coords.define.mjs +115 -0
- package/esm2022/defines/keyboard.define.mjs +10 -0
- package/esm2022/defines/template.define.mjs +25 -0
- package/esm2022/defines/utils.define.mjs +280 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/interfaces/mention.interface.mjs +2 -0
- package/esm2022/libs-ui-components-inputs-mention.mjs +5 -0
- package/esm2022/list/list.component.mjs +166 -0
- package/esm2022/mention.directive.mjs +504 -0
- package/fesm2022/libs-ui-components-inputs-mention.mjs +1092 -0
- package/fesm2022/libs-ui-components-inputs-mention.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/interfaces/mention.interface.d.ts +40 -0
- package/list/list.component.d.ts +36 -0
- package/mention.directive.d.ts +48 -0
- package/package.json +25 -0
package/README.md
ADDED
|
@@ -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,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> `;
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tZW50aW9uL3NyYy9kZWZpbmVzL3V0aWxzLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBb0IsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUN2RCxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFakIsT0FBTztJQUNULENBQUM7SUFDRCxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEVBQUU7SUFDL0MsT0FBTyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLE1BQXlCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBZ0MsRUFBRTtJQUMxSyxJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEQsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLE9BQU87SUFDVCxDQUFDO0lBRUQsT0FBTyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQztBQUVGLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLElBQVksRUFBZ0MsRUFBRTtJQUM5RyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWxDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsRSxPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUNsQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFcEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2pELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN2QiwrREFBK0Q7SUFDL0QsZ0VBQWdFO0lBQ2hFLCtCQUErQjtJQUMvQixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQy9DLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQztJQUVyQyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzlCLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzlCLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDO1FBRUQsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdkIseUJBQXlCO0lBQ3pCLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEVBQUU7SUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWxDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFeEMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFekQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0MsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU3QixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFlLEVBQVcsRUFBRTtJQUNuRSxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLE9BQU8sSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQ2hGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEVBQWUsRUFBVyxFQUFFO0lBQ3hELE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssT0FBTyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssVUFBVSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUM7QUFDM0csQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEdBQVcsRUFBRSxNQUF5QixFQUFFLEVBQUU7SUFDL0YsSUFBSSx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUvQixPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUVqRCxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QixLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXZDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU87SUFDVCxDQUFDO0lBQ0QsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3RCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3JCLENBQUM7SUFBQSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFvQixFQUFFLE1BQTBCLEVBQVUsRUFBRTtJQUMzRixJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUVyQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLElBQUksU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdELENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUVuRSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTVDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFFakQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBRUYsZ0NBQWdDO0FBQ2hDLEVBQUU7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtJQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE1BQTBCLEVBQW9CLEVBQUU7SUFDakYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUE4RixFQUFFLEVBQUU7SUFDOUksTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdGLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFhLENBQUM7SUFDaEQsTUFBTSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBYyxDQUFDO0lBRXhELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU87WUFDTCxJQUFJLEVBQUUsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxFQUFFLENBQUM7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEMsbURBQW1EO0lBQ25ELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBa0IsQ0FBQztJQUMxQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFdEIsb0VBQW9FO0lBQ3BFLCtEQUErRDtJQUMvRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBQ3ZCLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3pELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFeEIsTUFBTSxXQUFXLEdBQUc7UUFDbEIsSUFBSSxFQUFFLENBQUM7UUFDUCxHQUFHLEVBQUUsUUFBUSxDQUFDLFlBQVk7UUFDMUIsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUNYLENBQUM7SUFFRiwwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELFFBQVEsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUUzSixJQUFJLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDNUMsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUVoSyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQ3pDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3pELFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUE4RixFQUFFLE9BQWdCLEVBQUUsV0FBMEQsRUFBRSxFQUFFO0lBQ2xOLElBQUksR0FBRyxHQUFnQixPQUFPLENBQUM7SUFDL0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFckMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNYLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM5QyxNQUFNO1FBQ1IsQ0FBQztRQUNELFdBQVcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ3BELFdBQVcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2pELEdBQUcsR0FBZ0IsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ25CLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFDYixNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBQ0QsR0FBRyxHQUFnQixPQUFPLENBQUM7SUFDM0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pDLE9BQU8sQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xGLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM5QyxNQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLFdBQVcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekMsV0FBVyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxHQUFHLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQWMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQWMsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUNyRixJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ25CLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFDYixNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLHNCQUE0QixFQUFFLEVBQUU7SUFDL0QsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsZ0VBQWdFO1FBQ3RHLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLDJEQUEyRDtRQUVwRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLDBEQUEwRDtRQUM1RyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsd0ZBQXdGO1FBQy9HLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLG9DQUFvQztRQUNsRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNERBQTREO0lBQzFGLENBQUM7SUFFRCxPQUFPO0FBQ1QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUF5QixFQUFFLElBQVksRUFBRSxFQUFFO0lBQzNFLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQyxJQUFJLEdBQUcsRUFBRSxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsRUFBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDcEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDL0MsSUFBSSxJQUFpQixDQUFDO1lBQ3RCLElBQUksUUFBZSxDQUFDO1lBRXBCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXZCLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEVBQUU7SUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbEMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLFlBQVksR0FBRyxDQUFDLElBQVUsRUFBRSxTQUEyQixFQUFFLEVBQUU7SUFDL0QsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXQgfSBmcm9tIFwiQGxpYnMtdWkvdXRpbHNcIjtcbmltcG9ydCB7IFBBVFRFUk5fSU5TRVJUIH0gZnJvbSBcIi4vdGVtcGxhdGUuZGVmaW5lXCI7XG5cbmNvbnN0IHNldFZhbHVlID0gKGVsOiBIVE1MSW5wdXRFbGVtZW50LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGlmIChpc0lucHV0T3JUZXh0QXJlYUVsZW1lbnQoZWwpKSB7XG4gICAgZWwudmFsdWUgPSB2YWx1ZTtcblxuICAgIHJldHVybjtcbiAgfVxuICBlbC50ZXh0Q29udGVudCA9IHZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbHVlID0gKGVsOiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XG4gIHJldHVybiBpc0lucHV0T3JUZXh0QXJlYUVsZW1lbnQoZWwpID8gZWwudmFsdWUgOiBlbC50ZXh0Q29udGVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRWYWx1ZSA9IChlbDogSFRNTElucHV0RWxlbWVudCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRleHQ6IHN0cmluZywgaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCwgbm9SZWN1cnNpb24gPSBmYWxzZSk6IENoaWxkTm9kZSB8IHVuZGVmaW5lZCB8IG51bGwgPT4ge1xuICBpZiAoaXNUZXh0RWxlbWVudChlbCkpIHtcbiAgICBjb25zdCB2YWwgPSBnZXRWYWx1ZShlbCk7XG5cbiAgICB0ZXh0ID0gbm9SZWN1cnNpb24gPyBQQVRURVJOX0lOU0VSVCA6IHRleHQ7XG4gICAgc2V0VmFsdWUoZWwsIHZhbD8uc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHRleHQgKyB2YWw/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=
|