@projectcor/maia-components 2.11.41-8 → 2.11.41

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.
Files changed (84) hide show
  1. package/lib/App.js +11 -22
  2. package/lib/components/atoms/EntitySelector/EntitySelector.js +3 -47
  3. package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +3 -3
  4. package/lib/components/atoms/MAIAInput/MAIAInput.js +321 -246
  5. package/lib/components/atoms/MAIAInput/styles.js +46 -75
  6. package/lib/components/atoms/icons/index.js +1 -2
  7. package/lib/components/index.js +1 -2
  8. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +4 -8
  9. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +3 -31
  10. package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -5
  11. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +18 -9
  12. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -5
  13. package/lib/components/molecules/Sidebar/Sidebar.js +5 -9
  14. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -6
  15. package/lib/components/organisms/ChatAI/ChatAI.js +20 -4
  16. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +2 -5
  17. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +3 -6
  18. package/lib/constants/config.js +1 -3
  19. package/lib/context/cor-user.js +1 -1
  20. package/lib/context/global-context.js +5 -1
  21. package/lib/dev/Providers.js +6 -11
  22. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  23. package/lib/hooks/useChatManager/useChatManager.js +11 -21
  24. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  25. package/lib/hooks/useChatMessages/useChatMessages.js +14 -30
  26. package/lib/hooks/useClientSearch.js +2 -3
  27. package/lib/hooks/useEvent.js +1 -6
  28. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -6
  29. package/lib/hooks/useProjectSearch.js +2 -3
  30. package/lib/hooks/useRecentClientsSearch.js +2 -3
  31. package/lib/hooks/useTaskPanel.js +10 -3
  32. package/lib/lang/br/index.js +1 -24
  33. package/lib/lang/en/index.js +1 -24
  34. package/lib/lang/es/index.js +1 -24
  35. package/lib/lang/fr/index.js +1 -23
  36. package/lib/services/maia/Chats/getChatMessages.js +4 -29
  37. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +8 -4
  38. package/lib/services/maia/Orchestrator/orchestrator.js +5 -8
  39. package/lib/services/maia/RecentProjects/getRecentProjects.js +4 -12
  40. package/lib/services/utils/mapChatMessages.js +5 -12
  41. package/lib/types/Chat.js +1 -1
  42. package/lib/types/agent.js +1 -1
  43. package/package.json +1 -2
  44. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -38
  45. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -184
  46. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +0 -39
  47. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -432
  48. package/lib/components/atoms/ContextMentionChip/index.js +0 -4
  49. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -225
  50. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -6
  51. package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
  52. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -282
  53. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -148
  54. package/lib/components/atoms/ContextMentionItem/index.js +0 -2
  55. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -160
  56. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -79
  57. package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
  58. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +0 -269
  59. package/lib/components/atoms/icons/NotionIcon.js +0 -36
  60. package/lib/components/atoms/icons/SubtaskIcon.js +0 -36
  61. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -68
  62. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
  63. package/lib/components/molecules/ContextMentionInput/index.js +0 -2
  64. package/lib/constants/taskLinkIcon.js +0 -6
  65. package/lib/dev/DevContextMentionInput.js +0 -65
  66. package/lib/hooks/useCaretPosition.js +0 -35
  67. package/lib/hooks/useContextMentions.js +0 -270
  68. package/lib/hooks/useEntitySearch.js +0 -1097
  69. package/lib/hooks/useMentionAllowedTypes.js +0 -103
  70. package/lib/hooks/useMentionPopover.js +0 -334
  71. package/lib/hooks/useTextOverflowEllipsisTooltip.js +0 -34
  72. package/lib/services/maia/RecentTasks/getRecentTasks.js +0 -54
  73. package/lib/services/maia/RecentTasks/index.js +0 -6
  74. package/lib/services/maia/RecentUsers/getRecentUsers.js +0 -59
  75. package/lib/services/maia/RecentUsers/index.js +0 -6
  76. package/lib/services/query/entitySearchQuery.js +0 -18
  77. package/lib/services/query/usersDirectoryQuery.js +0 -19
  78. package/lib/types/contextMention.js +0 -37
  79. package/lib/utils/contextMentionIcons.js +0 -115
  80. package/lib/utils/contextMentionLabel.js +0 -4
  81. package/lib/utils/contextMentionTypeLabel.js +0 -17
  82. package/lib/utils/maiaStreamdownRehypePlugins.js +0 -27
  83. package/lib/utils/openTaskInCorPanel.js +0 -18
  84. package/lib/utils/renderContextMentions.js +0 -355
@@ -1,225 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- import { forwardRef, useCallback, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
6
- import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
7
- import { useContextMentions } from '../../../hooks/useContextMentions';
8
- import { buildChipElement } from '../ContextMentionChip';
9
- import { ContextMentionChipGlobalStyles } from '../ContextMentionChip/ContextMentionChip.styles';
10
- import { SCMEEditable } from './ContextMentionEditor.styles';
11
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
- var isPlaceholderTruncatedInEditor = function isPlaceholderTruncatedInEditor(editor, placeholder) {
13
- var trimmed = placeholder.trim();
14
- if (!trimmed) {
15
- return false;
16
- }
17
- var clientWidth = editor.clientWidth;
18
- if (clientWidth <= 4) {
19
- return false;
20
- }
21
- var styles = window.getComputedStyle(editor);
22
- var ctx = document.createElement('canvas').getContext('2d');
23
- if (!ctx) {
24
- return false;
25
- }
26
- ctx.font = "".concat(styles.fontWeight, " ").concat(styles.fontSize, " ").concat(styles.fontFamily);
27
- var measured = ctx.measureText(trimmed).width;
28
- var paddingLeft = parseFloat(styles.paddingLeft) || 0;
29
- var paddingRight = parseFloat(styles.paddingRight) || 0;
30
- var borderLeft = parseFloat(styles.borderLeftWidth) || 0;
31
- var borderRight = parseFloat(styles.borderRightWidth) || 0;
32
- var available = Math.max(0, clientWidth - paddingLeft - paddingRight - borderLeft - borderRight);
33
- return measured > available + 1;
34
- };
35
- export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
36
- var _placeholder$trim2;
37
- var placeholder = _ref.placeholder,
38
- disabled = _ref.disabled,
39
- className = _ref.className,
40
- onInput = _ref.onInput,
41
- onKeyDown = _ref.onKeyDown,
42
- onFocus = _ref.onFocus,
43
- onBlur = _ref.onBlur;
44
- var _useContextMentions = useContextMentions(),
45
- editorRef = _useContextMentions.editorRef,
46
- updateTrigger = _useContextMentions.updateTrigger,
47
- replaceTriggerWithChip = _useContextMentions.replaceTriggerWithChip,
48
- syncTriggerAtRunLength = _useContextMentions.syncTriggerAtRunLength,
49
- serialize = _useContextMentions.serialize,
50
- clearEditorDom = _useContextMentions.clear,
51
- focus = _useContextMentions.focus;
52
- var skipNextInput = useRef(false);
53
- var _useState = useState(false),
54
- _useState2 = _slicedToArray(_useState, 2),
55
- placeholderTruncated = _useState2[0],
56
- setPlaceholderTruncated = _useState2[1];
57
- var _useState3 = useState(true),
58
- _useState4 = _slicedToArray(_useState3, 2),
59
- logicalEmpty = _useState4[0],
60
- setLogicalEmpty = _useState4[1];
61
- var syncEditorEmptyAttribute = useCallback(function (isEmpty) {
62
- if (editorRef.current) {
63
- editorRef.current.setAttribute('data-empty', String(isEmpty));
64
- }
65
- }, []);
66
- var normalizeEmptyEditorDom = useCallback(function () {
67
- var editor = editorRef.current;
68
- if (!editor) return;
69
-
70
- // Algunos browsers dejan <br> al vaciar un contenteditable; eso desplaza el caret a una "línea fantasma".
71
- if (editor.innerHTML === '<br>') {
72
- editor.innerHTML = '';
73
- }
74
- var selection = window.getSelection();
75
- if (!selection) return;
76
- var range = document.createRange();
77
- range.selectNodeContents(editor);
78
- range.collapse(true);
79
- selection.removeAllRanges();
80
- selection.addRange(range);
81
- }, [editorRef]);
82
- var recomputePlaceholderTruncation = useCallback(function () {
83
- var _placeholder$trim;
84
- var el = editorRef.current;
85
- var ph = (_placeholder$trim = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim !== void 0 ? _placeholder$trim : '';
86
- var isEditorLogicallyEmpty = serialize().text.trim() === '';
87
- if (!el || !ph || !isEditorLogicallyEmpty) {
88
- setPlaceholderTruncated(false);
89
- return;
90
- }
91
- setPlaceholderTruncated(isPlaceholderTruncatedInEditor(el, ph));
92
- }, [placeholder, serialize]);
93
- useLayoutEffect(function () {
94
- recomputePlaceholderTruncation();
95
- var el = editorRef.current;
96
- if (!el) {
97
- return undefined;
98
- }
99
- var ro = new ResizeObserver(function () {
100
- queueMicrotask(recomputePlaceholderTruncation);
101
- });
102
- ro.observe(el);
103
- return function () {
104
- return ro.disconnect();
105
- };
106
- }, [placeholder, disabled, recomputePlaceholderTruncation]);
107
- useImperativeHandle(ref, function () {
108
- return {
109
- focus: focus,
110
- clear: function clear() {
111
- clearEditorDom();
112
- syncEditorEmptyAttribute(true);
113
- setLogicalEmpty(true);
114
- queueMicrotask(recomputePlaceholderTruncation);
115
- },
116
- serialize: serialize,
117
- syncTriggerAtRunLength: syncTriggerAtRunLength,
118
- hasVisualMultiline: function hasVisualMultiline() {
119
- var _editor$textContent$t, _editor$textContent;
120
- var editor = editorRef.current;
121
- if (!editor) {
122
- return false;
123
- }
124
- var text = (_editor$textContent$t = (_editor$textContent = editor.textContent) === null || _editor$textContent === void 0 ? void 0 : _editor$textContent.trim()) !== null && _editor$textContent$t !== void 0 ? _editor$textContent$t : '';
125
- if (!text) {
126
- return false;
127
- }
128
- var styles = window.getComputedStyle(editor);
129
- var lineHeight = parseFloat(styles.lineHeight) || 22;
130
- var editorHeight = editor.getBoundingClientRect().height;
131
- var isMultiline = editorHeight > lineHeight * 1.5;
132
- return isMultiline;
133
- },
134
- getEditorClientRect: function getEditorClientRect() {
135
- var _editorRef$current$ge, _editorRef$current;
136
- return (_editorRef$current$ge = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getBoundingClientRect()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : null;
137
- },
138
- insertMention: function insertMention(mention) {
139
- var chip = buildChipElement(mention);
140
- replaceTriggerWithChip(chip, mention);
141
- skipNextInput.current = true;
142
- var state = serialize();
143
- onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
144
- trigger: {
145
- active: false,
146
- query: '',
147
- atRunLength: 0
148
- }
149
- }));
150
- var isEmpty = state.text.trim() === '';
151
- syncEditorEmptyAttribute(isEmpty);
152
- setLogicalEmpty(isEmpty);
153
- queueMicrotask(function () {
154
- // Si el navegador no dispara `input` tras el chip, el flag quedaba en true y el próximo @ del usuario se ignoraba.
155
- skipNextInput.current = false;
156
- recomputePlaceholderTruncation();
157
- });
158
- }
159
- };
160
- }, [focus, clearEditorDom, serialize, syncTriggerAtRunLength, replaceTriggerWithChip, onInput, recomputePlaceholderTruncation, syncEditorEmptyAttribute]);
161
- var handleInput = function handleInput() {
162
- if (skipNextInput.current) {
163
- skipNextInput.current = false;
164
- return;
165
- }
166
- var trig = updateTrigger();
167
- var state = serialize();
168
- onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
169
- trigger: {
170
- active: trig.active,
171
- query: trig.query,
172
- atRunLength: trig.atRunLength
173
- }
174
- }));
175
- var isEmpty = state.text.trim() === '';
176
- if (isEmpty) {
177
- normalizeEmptyEditorDom();
178
- }
179
- syncEditorEmptyAttribute(isEmpty);
180
- setLogicalEmpty(isEmpty);
181
- queueMicrotask(recomputePlaceholderTruncation);
182
- };
183
- var handlePaste = function handlePaste(e) {
184
- e.preventDefault();
185
- var text = e.clipboardData.getData('text/plain');
186
- var selection = window.getSelection();
187
- if (!selection || selection.rangeCount === 0) return;
188
- selection.deleteFromDocument();
189
- selection.getRangeAt(0).insertNode(document.createTextNode(text));
190
- selection.collapseToEnd();
191
- handleInput();
192
- };
193
- var trimmedPlaceholder = (_placeholder$trim2 = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim2 !== void 0 ? _placeholder$trim2 : '';
194
- var placeholderTooltipTitle = logicalEmpty && placeholderTruncated && trimmedPlaceholder ? trimmedPlaceholder : '';
195
- return /*#__PURE__*/_jsxs(_Fragment, {
196
- children: [/*#__PURE__*/_jsx(ContextMentionChipGlobalStyles, {}), /*#__PURE__*/_jsx(Tooltip, {
197
- title: placeholderTooltipTitle,
198
- children: /*#__PURE__*/_jsx("span", {
199
- style: {
200
- display: 'block',
201
- width: '100%',
202
- minWidth: 0
203
- },
204
- children: /*#__PURE__*/_jsx(SCMEEditable, {
205
- ref: editorRef,
206
- className: className,
207
- "data-placeholder": placeholder,
208
- "data-empty": String(logicalEmpty),
209
- contentEditable: !disabled,
210
- "data-disabled": String(!!disabled),
211
- suppressContentEditableWarning: true,
212
- role: "textbox",
213
- "aria-multiline": "true",
214
- onInput: handleInput,
215
- onKeyDown: onKeyDown,
216
- onPaste: handlePaste,
217
- onFocus: onFocus,
218
- onBlur: onBlur
219
- })
220
- })
221
- })]
222
- });
223
- });
224
- ContextMentionEditor.displayName = 'ContextMentionEditor';
225
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3J3YXJkUmVmIiwidXNlQ2FsbGJhY2siLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJUb29sdGlwIiwidXNlQ29udGV4dE1lbnRpb25zIiwiYnVpbGRDaGlwRWxlbWVudCIsIkNvbnRleHRNZW50aW9uQ2hpcEdsb2JhbFN0eWxlcyIsIlNDTUVFZGl0YWJsZSIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsImlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciIsImVkaXRvciIsInBsYWNlaG9sZGVyIiwidHJpbW1lZCIsInRyaW0iLCJjbGllbnRXaWR0aCIsInN0eWxlcyIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJjdHgiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJnZXRDb250ZXh0IiwiZm9udCIsImNvbmNhdCIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJtZWFzdXJlZCIsIm1lYXN1cmVUZXh0Iiwid2lkdGgiLCJwYWRkaW5nTGVmdCIsInBhcnNlRmxvYXQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwiYXZhaWxhYmxlIiwiTWF0aCIsIm1heCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwiX3JlZiIsInJlZiIsIl9wbGFjZWhvbGRlciR0cmltMiIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwib25JbnB1dCIsIm9uS2V5RG93biIsIm9uRm9jdXMiLCJvbkJsdXIiLCJfdXNlQ29udGV4dE1lbnRpb25zIiwiZWRpdG9yUmVmIiwidXBkYXRlVHJpZ2dlciIsInJlcGxhY2VUcmlnZ2VyV2l0aENoaXAiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwic2VyaWFsaXplIiwiY2xlYXJFZGl0b3JEb20iLCJjbGVhciIsImZvY3VzIiwic2tpcE5leHRJbnB1dCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInBsYWNlaG9sZGVyVHJ1bmNhdGVkIiwic2V0UGxhY2Vob2xkZXJUcnVuY2F0ZWQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImxvZ2ljYWxFbXB0eSIsInNldExvZ2ljYWxFbXB0eSIsInN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSIsImlzRW1wdHkiLCJjdXJyZW50Iiwic2V0QXR0cmlidXRlIiwiU3RyaW5nIiwibm9ybWFsaXplRW1wdHlFZGl0b3JEb20iLCJpbm5lckhUTUwiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZUNvbnRlbnRzIiwiY29sbGFwc2UiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbiIsIl9wbGFjZWhvbGRlciR0cmltIiwiZWwiLCJwaCIsImlzRWRpdG9yTG9naWNhbGx5RW1wdHkiLCJ0ZXh0IiwidW5kZWZpbmVkIiwicm8iLCJSZXNpemVPYnNlcnZlciIsInF1ZXVlTWljcm90YXNrIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJoYXNWaXN1YWxNdWx0aWxpbmUiLCJfZWRpdG9yJHRleHRDb250ZW50JHQiLCJfZWRpdG9yJHRleHRDb250ZW50IiwidGV4dENvbnRlbnQiLCJsaW5lSGVpZ2h0IiwiZWRpdG9ySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGVpZ2h0IiwiaXNNdWx0aWxpbmUiLCJnZXRFZGl0b3JDbGllbnRSZWN0IiwiX2VkaXRvclJlZiRjdXJyZW50JGdlIiwiX2VkaXRvclJlZiRjdXJyZW50IiwiaW5zZXJ0TWVudGlvbiIsIm1lbnRpb24iLCJjaGlwIiwic3RhdGUiLCJfb2JqZWN0U3ByZWFkIiwidHJpZ2dlciIsImFjdGl2ZSIsInF1ZXJ5IiwiYXRSdW5MZW5ndGgiLCJoYW5kbGVJbnB1dCIsInRyaWciLCJoYW5kbGVQYXN0ZSIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwicmFuZ2VDb3VudCIsImRlbGV0ZUZyb21Eb2N1bWVudCIsImdldFJhbmdlQXQiLCJpbnNlcnROb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJjb2xsYXBzZVRvRW5kIiwidHJpbW1lZFBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXJUb29sdGlwVGl0bGUiLCJjaGlsZHJlbiIsInRpdGxlIiwic3R5bGUiLCJkaXNwbGF5IiwibWluV2lkdGgiLCJjb250ZW50RWRpdGFibGUiLCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciLCJyb2xlIiwib25QYXN0ZSIsImRpc3BsYXlOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3IvQ29udGV4dE1lbnRpb25FZGl0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENsaXBib2FyZEV2ZW50LFxuICBmb3J3YXJkUmVmLFxuICBLZXlib2FyZEV2ZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHVzZUNvbnRleHRNZW50aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNvbnRleHRNZW50aW9ucydcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBidWlsZENoaXBFbGVtZW50IH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25DaGlwR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBTQ01FRWRpdGFibGUgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uRWRpdG9yLnN0eWxlcydcblxuY29uc3QgaXNQbGFjZWhvbGRlclRydW5jYXRlZEluRWRpdG9yID0gKGVkaXRvcjogSFRNTEVsZW1lbnQsIHBsYWNlaG9sZGVyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IHBsYWNlaG9sZGVyLnRyaW0oKVxuICBpZiAoIXRyaW1tZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCB7IGNsaWVudFdpZHRoIH0gPSBlZGl0b3JcbiAgaWYgKGNsaWVudFdpZHRoIDw9IDQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgY29uc3QgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKVxuICBpZiAoIWN0eCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGN0eC5mb250ID0gYCR7c3R5bGVzLmZvbnRXZWlnaHR9ICR7c3R5bGVzLmZvbnRTaXplfSAke3N0eWxlcy5mb250RmFtaWx5fWBcbiAgY29uc3QgbWVhc3VyZWQgPSBjdHgubWVhc3VyZVRleHQodHJpbW1lZCkud2lkdGhcblxuICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdMZWZ0KSB8fCAwXG4gIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdSaWdodCkgfHwgMFxuICBjb25zdCBib3JkZXJMZWZ0ID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyTGVmdFdpZHRoKSB8fCAwXG4gIGNvbnN0IGJvcmRlclJpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyUmlnaHRXaWR0aCkgfHwgMFxuICBjb25zdCBhdmFpbGFibGUgPSBNYXRoLm1heCgwLCBjbGllbnRXaWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0IC0gYm9yZGVyTGVmdCAtIGJvcmRlclJpZ2h0KVxuXG4gIHJldHVybiBtZWFzdXJlZCA+IGF2YWlsYWJsZSArIDFcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgPSB7XG4gIGZvY3VzOiAoKSA9PiB2b2lkXG4gIGNsZWFyOiAoKSA9PiB2b2lkXG4gIGluc2VydE1lbnRpb246IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4gdm9pZFxuICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoOiAoYXRSdW5MZW5ndGg6IG51bWJlcikgPT4gdm9pZFxuICBzZXJpYWxpemU6ICgpID0+IHsgdGV4dDogc3RyaW5nOyBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXSB9XG4gIGhhc1Zpc3VhbE11bHRpbGluZTogKCkgPT4gYm9vbGVhblxuICAvKiogUmVjdCBkZWwgw6FyZWEgZWRpdGFibGUgKHZpZXdwb3J0KTsgbG8gdXNhIGVsIHBvcG92ZXIgZGUgQCBwYXJhIGFsaW5lYXIgYW5jaG8vb3JpZ2VuLiAqL1xuICBnZXRFZGl0b3JDbGllbnRSZWN0OiAoKSA9PiBET01SZWN0IHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBDb250ZXh0TWVudGlvbkVkaXRvclByb3BzID0ge1xuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIG9uSW5wdXQ/OiAoc3RhdGU6IHtcbiAgICB0ZXh0OiBzdHJpbmdcbiAgICBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXVxuICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH1cbiAgfSkgPT4gdm9pZFxuICBvbktleURvd24/OiAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25Gb2N1cz86ICgpID0+IHZvaWRcbiAgb25CbHVyPzogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgQ29udGV4dE1lbnRpb25FZGl0b3IgPSBmb3J3YXJkUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlLCBDb250ZXh0TWVudGlvbkVkaXRvclByb3BzPihcbiAgKHsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCBjbGFzc05hbWUsIG9uSW5wdXQsIG9uS2V5RG93biwgb25Gb2N1cywgb25CbHVyIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVkaXRvclJlZixcbiAgICAgIHVwZGF0ZVRyaWdnZXIsXG4gICAgICByZXBsYWNlVHJpZ2dlcldpdGhDaGlwLFxuICAgICAgc3luY1RyaWdnZXJBdFJ1bkxlbmd0aCxcbiAgICAgIHNlcmlhbGl6ZSxcbiAgICAgIGNsZWFyOiBjbGVhckVkaXRvckRvbSxcbiAgICAgIGZvY3VzLFxuICAgIH0gPSB1c2VDb250ZXh0TWVudGlvbnMoKVxuICAgIGNvbnN0IHNraXBOZXh0SW5wdXQgPSB1c2VSZWYoZmFsc2UpXG4gICAgY29uc3QgW3BsYWNlaG9sZGVyVHJ1bmNhdGVkLCBzZXRQbGFjZWhvbGRlclRydW5jYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgICBjb25zdCBbbG9naWNhbEVtcHR5LCBzZXRMb2dpY2FsRW1wdHldID0gdXNlU3RhdGUodHJ1ZSlcblxuICAgIGNvbnN0IHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSA9IHVzZUNhbGxiYWNrKChpc0VtcHR5OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCdkYXRhLWVtcHR5JywgU3RyaW5nKGlzRW1wdHkpKVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgY29uc3Qgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgaWYgKCFlZGl0b3IpIHJldHVyblxuXG4gICAgICAvLyBBbGd1bm9zIGJyb3dzZXJzIGRlamFuIDxicj4gYWwgdmFjaWFyIHVuIGNvbnRlbnRlZGl0YWJsZTsgZXNvIGRlc3BsYXphIGVsIGNhcmV0IGEgdW5hIFwibMOtbmVhIGZhbnRhc21hXCIuXG4gICAgICBpZiAoZWRpdG9yLmlubmVySFRNTCA9PT0gJzxicj4nKSB7XG4gICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnJ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm5cbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICB9LCBbZWRpdG9yUmVmXSlcblxuICAgIGNvbnN0IHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHBoID0gcGxhY2Vob2xkZXI/LnRyaW0oKSA/PyAnJ1xuICAgICAgY29uc3QgaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSA9IHNlcmlhbGl6ZSgpLnRleHQudHJpbSgpID09PSAnJ1xuXG4gICAgICBpZiAoIWVsIHx8ICFwaCB8fCAhaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSkge1xuICAgICAgICBzZXRQbGFjZWhvbGRlclRydW5jYXRlZChmYWxzZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNldFBsYWNlaG9sZGVyVHJ1bmNhdGVkKGlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvcihlbCwgcGgpKVxuICAgIH0sIFtwbGFjZWhvbGRlciwgc2VyaWFsaXplXSlcblxuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgY29uc3QgZWwgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBjb25zdCBybyA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICAgIH0pXG4gICAgICByby5vYnNlcnZlKGVsKVxuICAgICAgcmV0dXJuICgpID0+IHJvLmRpc2Nvbm5lY3QoKVxuICAgIH0sIFtwbGFjZWhvbGRlciwgZGlzYWJsZWQsIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbl0pXG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKFxuICAgICAgcmVmLFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJFZGl0b3JEb20oKVxuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSh0cnVlKVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eSh0cnVlKVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgICAgICBoYXNWaXN1YWxNdWx0aWxpbmU6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZWRpdG9yLnRleHRDb250ZW50Py50cmltKCkgPz8gJydcbiAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMubGluZUhlaWdodCkgfHwgMjJcbiAgICAgICAgICBjb25zdCBlZGl0b3JIZWlnaHQgPSBlZGl0b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XG4gICAgICAgICAgY29uc3QgaXNNdWx0aWxpbmUgPSBlZGl0b3JIZWlnaHQgPiBsaW5lSGVpZ2h0ICogMS41XG5cbiAgICAgICAgICByZXR1cm4gaXNNdWx0aWxpbmVcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IG51bGwsXG4gICAgICAgIGluc2VydE1lbnRpb246IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcChjaGlwLCBtZW50aW9uKVxuICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IHRydWVcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICAgICAgb25JbnB1dD8uKHsgLi4uc3RhdGUsIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9IH0pXG4gICAgICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFNpIGVsIG5hdmVnYWRvciBubyBkaXNwYXJhIGBpbnB1dGAgdHJhcyBlbCBjaGlwLCBlbCBmbGFnIHF1ZWRhYmEgZW4gdHJ1ZSB5IGVsIHByw7N4aW1vIEAgZGVsIHVzdWFyaW8gc2UgaWdub3JhYmEuXG4gICAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgICAgcmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uKClcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBbXG4gICAgICAgIGZvY3VzLFxuICAgICAgICBjbGVhckVkaXRvckRvbSxcbiAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgICAgICByZXBsYWNlVHJpZ2dlcldpdGhDaGlwLFxuICAgICAgICBvbklucHV0LFxuICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24sXG4gICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSxcbiAgICAgIF1cbiAgICApXG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dCA9ICgpID0+IHtcbiAgICAgIGlmIChza2lwTmV4dElucHV0LmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCB0cmlnID0gdXBkYXRlVHJpZ2dlcigpXG4gICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICBvbklucHV0Py4oeyAuLi5zdGF0ZSwgdHJpZ2dlcjogeyBhY3RpdmU6IHRyaWcuYWN0aXZlLCBxdWVyeTogdHJpZy5xdWVyeSwgYXRSdW5MZW5ndGg6IHRyaWcuYXRSdW5MZW5ndGggfSB9KVxuICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgICAgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20oKVxuICAgICAgfVxuICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVQYXN0ZSA9IChlOiBDbGlwYm9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJylcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVyblxuICAgICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpXG4gICAgICBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKVxuICAgICAgc2VsZWN0aW9uLmNvbGxhcHNlVG9FbmQoKVxuICAgICAgaGFuZGxlSW5wdXQoKVxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICBjb25zdCBwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSA9IGxvZ2ljYWxFbXB0eSAmJiBwbGFjZWhvbGRlclRydW5jYXRlZCAmJiB0cmltbWVkUGxhY2Vob2xkZXIgPyB0cmltbWVkUGxhY2Vob2xkZXIgOiAnJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxDb250ZXh0TWVudGlvbkNoaXBHbG9iYWxTdHlsZXMgLz5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3BsYWNlaG9sZGVyVG9vbHRpcFRpdGxlfT5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgIDxTQ01FRWRpdGFibGVcbiAgICAgICAgICAgICAgcmVmPXtlZGl0b3JSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgZGF0YS1lbXB0eT17U3RyaW5nKGxvZ2ljYWxFbXB0eSl9XG4gICAgICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT17IWRpc2FibGVkfVxuICAgICAgICAgICAgICBkYXRhLWRpc2FibGVkPXtTdHJpbmcoISFkaXNhYmxlZCl9XG4gICAgICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1xuICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgICAgIGFyaWEtbXVsdGlsaW5lPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIG9uSW5wdXQ9e2hhbmRsZUlucHV0fVxuICAgICAgICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgICAgICAgb25QYXN0ZT17aGFuZGxlUGFzdGV9XG4gICAgICAgICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAgICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG5Db250ZXh0TWVudGlvbkVkaXRvci5kaXNwbGF5TmFtZSA9ICdDb250ZXh0TWVudGlvbkVkaXRvcidcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBRUVBLFVBQVUsRUFFVkMsV0FBVyxFQUNYQyxtQkFBbUIsRUFDbkJDLGVBQWUsRUFDZkMsTUFBTSxFQUNOQyxRQUFRLFFBQ0gsT0FBTztBQUNkLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBRXRFLFNBQVNDLGdCQUFnQixRQUFRLHVCQUF1QjtBQUN4RCxTQUFTQyw4QkFBOEIsUUFBUSxpREFBaUQ7QUFDaEcsU0FBU0MsWUFBWSxRQUFRLCtCQUErQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBO0FBRTVELElBQU1DLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUlDLE1BQW1CLEVBQUVDLFdBQW1CLEVBQWM7RUFDNUYsSUFBTUMsT0FBTyxHQUFHRCxXQUFXLENBQUNFLElBQUksQ0FBQyxDQUFDO0VBQ2xDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBTyxLQUFLO0VBQ2Q7RUFDQSxJQUFRRSxXQUFXLEdBQUtKLE1BQU0sQ0FBdEJJLFdBQVc7RUFDbkIsSUFBSUEsV0FBVyxJQUFJLENBQUMsRUFBRTtJQUNwQixPQUFPLEtBQUs7RUFDZDtFQUVBLElBQU1DLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FBQ1AsTUFBTSxDQUFDO0VBQzlDLElBQU1RLEdBQUcsR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUNDLFVBQVUsQ0FBQyxJQUFJLENBQUM7RUFDN0QsSUFBSSxDQUFDSCxHQUFHLEVBQUU7SUFDUixPQUFPLEtBQUs7RUFDZDtFQUNBQSxHQUFHLENBQUNJLElBQUksTUFBQUMsTUFBQSxDQUFNUixNQUFNLENBQUNTLFVBQVUs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
@@ -1,6 +0,0 @@
1
- import styled from 'styled-components';
2
- export var SCMEEditable = styled.div.withConfig({
3
- displayName: "ContextMentionEditorstyles__SCMEEditable",
4
- componentId: "sc-vz0osf-0"
5
- })(["box-sizing:border-box;min-width:0;width:100%;min-height:24px;max-height:200px;overflow-y:auto;color:var(--Text-Primary-Dark,#20201f);font-family:var(--cor-typography-font-family,'Work Sans');font-size:14px;font-style:normal;font-weight:400;line-height:22px;letter-spacing:0;outline:none;word-break:break-word;&[data-empty='true']{overflow-x:hidden;}&[data-empty='true']::before{content:attr(data-placeholder);display:block;max-width:100%;color:var(--Text-Secondary-Dark,#666);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}&[data-disabled='true']{opacity:0.5;pointer-events:none;}&::-webkit-scrollbar{width:6px;}&::-webkit-scrollbar-thumb{background:#d0d0d0;border-radius:3px;}"]);
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJTQ01FRWRpdGFibGUiLCJkaXYiLCJ3aXRoQ29uZmlnIiwiZGlzcGxheU5hbWUiLCJjb21wb25lbnRJZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uRWRpdG9yL0NvbnRleHRNZW50aW9uRWRpdG9yLnN0eWxlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cydcblxuZXhwb3J0IGNvbnN0IFNDTUVFZGl0YWJsZSA9IHN0eWxlZC5kaXZgXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1pbi13aWR0aDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IDIwMHB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBjb2xvcjogdmFyKC0tVGV4dC1QcmltYXJ5LURhcmssICMyMDIwMWYpO1xuICBmb250LWZhbWlseTogdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICBsZXR0ZXItc3BhY2luZzogMDtcbiAgb3V0bGluZTogbm9uZTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcblxuICAmW2RhdGEtZW1wdHk9J3RydWUnXSB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICB9XG5cbiAgJltkYXRhLWVtcHR5PSd0cnVlJ106OmJlZm9yZSB7XG4gICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgY29sb3I6IHZhcigtLVRleHQtU2Vjb25kYXJ5LURhcmssICM2NjYpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgfVxuXG4gICZbZGF0YS1kaXNhYmxlZD0ndHJ1ZSddIHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDZweDtcbiAgfVxuICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogI2QwZDBkMDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIH1cbmBcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLG1CQUFtQjtBQUV0QyxPQUFPLElBQU1DLFlBQVksR0FBR0QsTUFBTSxDQUFDRSxHQUFHLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsNnNCQTRDckMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,2 +0,0 @@
1
- export { ContextMentionEditor } from './ContextMentionEditor';
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudGlvbkVkaXRvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uRWRpdG9yL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9yIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkVkaXRvcidcbmV4cG9ydCB0eXBlIHsgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUsIENvbnRleHRNZW50aW9uRWRpdG9yUHJvcHMgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxvQkFBb0IsUUFBUSx3QkFBd0IiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,282 +0,0 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- import { useLayoutEffect, useRef, useState } from 'react';
3
- import { ChevronRight } from '@projectcor/icons/lib/components/ChevronRight';
4
- import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
5
- import { useT } from '../../../hooks/useT';
6
- import { TASK_LINK_ICON_DATA_URL } from '../../../constants/taskLinkIcon';
7
- import { NotionIcon } from '../icons/NotionIcon';
8
- import { SubtaskIcon } from '../icons/SubtaskIcon';
9
- import { getContextMentionIcon, isNotionMcpSlug } from '../../../utils/contextMentionIcons';
10
- import { SCMIRow, SCMIProjectRow, SCMIProjectContent, SCMIName, SCMITitle, SCMIProjectTitle, SCMITitleHighlight, SCMIBreadcrumb, SCMIBreadcrumbParent, SCMIRowUser, SCMUserAvatarWrap, SCMUserAvatarImg, SCMUserAvatarFallback, SCMUserInfo, SCMUserNamePositionRow, SCMUserNameCell, SCMUserNameText, SCMUserPositionText, SCMITaskRowWrap, SCMITaskRowSurface, SCMITaskRowInner, SCMITaskTitleRow, SCMITaskSubtaskIconWrap, SCMITaskProjectName, SCMITaskIconImg, SCMITaskTitle } from './ContextMentionItem.styles';
11
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
- var TASK_PROJECT_NAME_MAX_CHARS = 40;
13
- var truncateWithEllipsis = function truncateWithEllipsis(value, maxChars) {
14
- if (value.length <= maxChars) return value;
15
- return "".concat(value.slice(0, Math.max(0, maxChars - 1)).trimEnd(), "\u2026");
16
- };
17
- var renderTitle = function renderTitle(primary, highlight) {
18
- if (!highlight || highlight.length <= 0) return primary;
19
- var start = highlight.start,
20
- length = highlight.length;
21
- var end = start + length;
22
- if (start < 0 || start > primary.length || end > primary.length) return primary;
23
- return /*#__PURE__*/_jsxs(_Fragment, {
24
- children: [primary.slice(0, start), /*#__PURE__*/_jsx(SCMITitleHighlight, {
25
- children: primary.slice(start, end)
26
- }), primary.slice(end)]
27
- });
28
- };
29
- function useOverflowTooltip(ref, deps) {
30
- var _useState = useState(false),
31
- _useState2 = _slicedToArray(_useState, 2),
32
- showTooltip = _useState2[0],
33
- setShowTooltip = _useState2[1];
34
- useLayoutEffect(function () {
35
- var el = ref.current;
36
- if (!el) {
37
- setShowTooltip(false);
38
- return undefined;
39
- }
40
- var measure = function measure() {
41
- setShowTooltip(el.scrollWidth > el.clientWidth);
42
- };
43
- measure();
44
- var ro = new ResizeObserver(measure);
45
- ro.observe(el);
46
- window.addEventListener('resize', measure);
47
- return function () {
48
- ro.disconnect();
49
- window.removeEventListener('resize', measure);
50
- };
51
- }, deps);
52
- return showTooltip;
53
- }
54
-
55
- /** Iniciales para avatar (nombre legal), no el texto visible de la fila (ej. "Yo"). */
56
- var initialsFromDisplayName = function initialsFromDisplayName(name) {
57
- var _parts$2;
58
- var trimmed = name.trim();
59
- if (!trimmed) return '?';
60
- var parts = trimmed.split(/\s+/).filter(Boolean);
61
- if (parts.length >= 2) {
62
- var _parts$0$charAt, _parts$, _parts$charAt, _parts;
63
- var first = (_parts$0$charAt = (_parts$ = parts[0]) === null || _parts$ === void 0 ? void 0 : _parts$.charAt(0)) !== null && _parts$0$charAt !== void 0 ? _parts$0$charAt : '';
64
- var last = (_parts$charAt = (_parts = parts[parts.length - 1]) === null || _parts === void 0 ? void 0 : _parts.charAt(0)) !== null && _parts$charAt !== void 0 ? _parts$charAt : '';
65
- return "".concat(first).concat(last).toUpperCase();
66
- }
67
- var single = (_parts$2 = parts[0]) !== null && _parts$2 !== void 0 ? _parts$2 : '';
68
- if (single.length >= 2) return single.slice(0, 2).toUpperCase();
69
- return (single.charAt(0) || '?').toUpperCase();
70
- };
71
- var UserRowAvatar = function UserRowAvatar(_ref) {
72
- var picture = _ref.picture,
73
- nameForInitials = _ref.nameForInitials;
74
- var _useState3 = useState(false),
75
- _useState4 = _slicedToArray(_useState3, 2),
76
- broken = _useState4[0],
77
- setBroken = _useState4[1];
78
- var initials = initialsFromDisplayName(nameForInitials);
79
- return /*#__PURE__*/_jsx(SCMUserAvatarWrap, {
80
- children: picture && !broken ? /*#__PURE__*/_jsx(SCMUserAvatarImg, {
81
- src: picture,
82
- alt: "",
83
- onError: function onError() {
84
- return setBroken(true);
85
- },
86
- loading: "lazy",
87
- decoding: "async"
88
- }) : /*#__PURE__*/_jsx(SCMUserAvatarFallback, {
89
- "aria-hidden": true,
90
- children: initials
91
- })
92
- });
93
- };
94
- var ContextMentionTaskRow = function ContextMentionTaskRow(_ref2) {
95
- var _raw$projectName, _breadcrumb$parent, _primaryHighlight$sta, _primaryHighlight$len;
96
- var item = _ref2.item,
97
- active = _ref2.active,
98
- onMouseDown = _ref2.onMouseDown,
99
- onHover = _ref2.onHover;
100
- var primary = item.primary,
101
- primaryHighlight = item.primaryHighlight,
102
- breadcrumb = item.breadcrumb,
103
- raw = item.raw;
104
- var projectName = ((_raw$projectName = raw.projectName) === null || _raw$projectName === void 0 ? void 0 : _raw$projectName.trim()) || (breadcrumb === null || breadcrumb === void 0 || (_breadcrumb$parent = breadcrumb.parent) === null || _breadcrumb$parent === void 0 ? void 0 : _breadcrumb$parent.trim()) || '';
105
- var projectNameDisplay = truncateWithEllipsis(projectName, TASK_PROJECT_NAME_MAX_CHARS);
106
- var isProjectNameTruncatedByChars = projectNameDisplay !== projectName;
107
- var hasFather = raw.fatherId != null;
108
- var titleRef = useRef(null);
109
- var projectRef = useRef(null);
110
- var showTitleTooltip = useOverflowTooltip(titleRef, [primary, projectName, (_primaryHighlight$sta = primaryHighlight === null || primaryHighlight === void 0 ? void 0 : primaryHighlight.start) !== null && _primaryHighlight$sta !== void 0 ? _primaryHighlight$sta : -1, (_primaryHighlight$len = primaryHighlight === null || primaryHighlight === void 0 ? void 0 : primaryHighlight.length) !== null && _primaryHighlight$len !== void 0 ? _primaryHighlight$len : 0, hasFather]);
111
- var showProjectTooltip = useOverflowTooltip(projectRef, [projectNameDisplay, primary]);
112
- var shouldShowProjectTooltip = isProjectNameTruncatedByChars || showProjectTooltip;
113
- return /*#__PURE__*/_jsx(SCMITaskRowWrap, {
114
- onMouseDown: onMouseDown,
115
- onMouseEnter: onHover,
116
- children: /*#__PURE__*/_jsx(SCMITaskRowSurface, {
117
- $active: active,
118
- children: /*#__PURE__*/_jsxs(SCMITaskRowInner, {
119
- children: [/*#__PURE__*/_jsx(SCMITaskIconImg, {
120
- src: TASK_LINK_ICON_DATA_URL,
121
- alt: "",
122
- draggable: false,
123
- "aria-hidden": true
124
- }), /*#__PURE__*/_jsxs(SCMITaskTitleRow, {
125
- children: [hasFather ? /*#__PURE__*/_jsx(SCMITaskSubtaskIconWrap, {
126
- children: /*#__PURE__*/_jsx(SubtaskIcon, {
127
- width: "16px",
128
- height: "16px",
129
- color: "#000",
130
- variant: "regular"
131
- })
132
- }) : null, /*#__PURE__*/_jsx(Tooltip, {
133
- title: showTitleTooltip ? primary : '',
134
- children: /*#__PURE__*/_jsx(SCMITaskTitle, {
135
- ref: titleRef,
136
- children: renderTitle(primary, primaryHighlight)
137
- })
138
- }), projectName ? /*#__PURE__*/_jsx(Tooltip, {
139
- title: shouldShowProjectTooltip ? projectName : '',
140
- children: /*#__PURE__*/_jsx(SCMITaskProjectName, {
141
- ref: projectRef,
142
- children: projectNameDisplay
143
- })
144
- }) : null]
145
- })]
146
- })
147
- })
148
- });
149
- };
150
- export var ContextMentionItem = function ContextMentionItem(_ref3) {
151
- var item = _ref3.item,
152
- active = _ref3.active,
153
- onSelect = _ref3.onSelect,
154
- _onHover = _ref3.onHover;
155
- var _useT = useT(),
156
- t = _useT.t;
157
- var primary = item.primary,
158
- primaryHighlight = item.primaryHighlight,
159
- breadcrumb = item.breadcrumb,
160
- type = item.type,
161
- raw = item.raw;
162
- var handleClick = function handleClick(e) {
163
- e.preventDefault();
164
- e.stopPropagation();
165
- onSelect(item);
166
- };
167
- var hasCount = typeof (breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.count) === 'number';
168
- var hasParent = !!(breadcrumb !== null && breadcrumb !== void 0 && breadcrumb.parent);
169
- var countLabel = (breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.countLabel) && t("contextMention.counters.".concat(breadcrumb.countLabel), {
170
- defaultValue: breadcrumb.countLabel
171
- });
172
- if (type === 'user') {
173
- var positionNameTrimmed = typeof raw.positionName === 'string' ? raw.positionName.trim() : '';
174
- var positionLine = positionNameTrimmed || t('contextMention.userNoPosition', {
175
- defaultValue: 'Sin posición'
176
- });
177
- var userNameForInitials = typeof raw.name === 'string' && raw.name.trim() ? raw.name : primary;
178
- return /*#__PURE__*/_jsxs(SCMIRowUser, {
179
- $active: active,
180
- onMouseDown: handleClick,
181
- onMouseEnter: function onMouseEnter() {
182
- return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
183
- },
184
- children: [/*#__PURE__*/_jsx(UserRowAvatar, {
185
- picture: raw.picture,
186
- nameForInitials: userNameForInitials
187
- }), /*#__PURE__*/_jsx(SCMUserInfo, {
188
- children: /*#__PURE__*/_jsxs(SCMUserNamePositionRow, {
189
- children: [/*#__PURE__*/_jsx(SCMUserNameCell, {
190
- $withDivider: true,
191
- children: /*#__PURE__*/_jsx(SCMUserNameText, {
192
- children: renderTitle(primary, primaryHighlight)
193
- })
194
- }), /*#__PURE__*/_jsx(SCMUserPositionText, {
195
- title: positionLine,
196
- children: positionLine
197
- })]
198
- })
199
- })]
200
- });
201
- }
202
- if (type === 'project') {
203
- return /*#__PURE__*/_jsx(SCMIProjectRow, {
204
- onMouseDown: handleClick,
205
- onMouseEnter: function onMouseEnter() {
206
- return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
207
- },
208
- children: /*#__PURE__*/_jsx(SCMIProjectContent, {
209
- $active: active,
210
- children: /*#__PURE__*/_jsx(SCMIName, {
211
- children: /*#__PURE__*/_jsx(SCMIProjectTitle, {
212
- title: primary,
213
- children: renderTitle(primary, primaryHighlight)
214
- })
215
- })
216
- })
217
- });
218
- }
219
- if (type === 'task') {
220
- return /*#__PURE__*/_jsx(ContextMentionTaskRow, {
221
- item: item,
222
- active: active,
223
- onMouseDown: handleClick,
224
- onHover: function onHover() {
225
- return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
226
- }
227
- });
228
- }
229
- if (type === 'mcp') {
230
- return /*#__PURE__*/_jsx(SCMIRow, {
231
- $active: active,
232
- onMouseDown: handleClick,
233
- onMouseEnter: function onMouseEnter() {
234
- return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
235
- },
236
- children: /*#__PURE__*/_jsxs(SCMITaskRowInner, {
237
- children: [/*#__PURE__*/_jsx("span", {
238
- style: {
239
- display: 'inline-flex',
240
- alignItems: 'center',
241
- justifyContent: 'center',
242
- width: 16,
243
- height: 16,
244
- flex: '0 0 16px'
245
- },
246
- children: isNotionMcpSlug(raw.id) ? /*#__PURE__*/_jsx(NotionIcon, {
247
- width: 16,
248
- height: 16
249
- }) : getContextMentionIcon('mcp', '#2d77bd', raw.id, 16)
250
- }), /*#__PURE__*/_jsx(SCMITaskTitle, {
251
- title: primary,
252
- children: renderTitle(primary, primaryHighlight)
253
- })]
254
- })
255
- });
256
- }
257
- return /*#__PURE__*/_jsx(SCMIRow, {
258
- $active: active,
259
- onMouseDown: handleClick,
260
- onMouseEnter: function onMouseEnter() {
261
- return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
262
- },
263
- children: /*#__PURE__*/_jsxs(SCMIName, {
264
- children: [/*#__PURE__*/_jsx(SCMITitle, {
265
- children: renderTitle(primary, primaryHighlight)
266
- }), (hasCount || hasParent) && /*#__PURE__*/_jsxs(SCMIBreadcrumb, {
267
- children: [hasCount && /*#__PURE__*/_jsxs("span", {
268
- children: [breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.count, " ", countLabel]
269
- }), hasParent && /*#__PURE__*/_jsxs(SCMIBreadcrumbParent, {
270
- children: [/*#__PURE__*/_jsx(ChevronRight, {
271
- width: "12px",
272
- height: "12px",
273
- color: "#808080"
274
- }), /*#__PURE__*/_jsx("span", {
275
- children: breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.parent
276
- })]
277
- })]
278
- })]
279
- })
280
- });
281
- };
282
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNoZXZyb25SaWdodCIsIlRvb2x0aXAiLCJ1c2VUIiwiVEFTS19MSU5LX0lDT05fREFUQV9VUkwiLCJOb3Rpb25JY29uIiwiU3VidGFza0ljb24iLCJnZXRDb250ZXh0TWVudGlvbkljb24iLCJpc05vdGlvbk1jcFNsdWciLCJTQ01JUm93IiwiU0NNSVByb2plY3RSb3ciLCJTQ01JUHJvamVjdENvbnRlbnQiLCJTQ01JTmFtZSIsIlNDTUlUaXRsZSIsIlNDTUlQcm9qZWN0VGl0bGUiLCJTQ01JVGl0bGVIaWdobGlnaHQiLCJTQ01JQnJlYWRjcnVtYiIsIlNDTUlCcmVhZGNydW1iUGFyZW50IiwiU0NNSVJvd1VzZXIiLCJTQ01Vc2VyQXZhdGFyV3JhcCIsIlNDTVVzZXJBdmF0YXJJbWciLCJTQ01Vc2VyQXZhdGFyRmFsbGJhY2siLCJTQ01Vc2VySW5mbyIsIlNDTVVzZXJOYW1lUG9zaXRpb25Sb3ciLCJTQ01Vc2VyTmFtZUNlbGwiLCJTQ01Vc2VyTmFtZVRleHQiLCJTQ01Vc2VyUG9zaXRpb25UZXh0IiwiU0NNSVRhc2tSb3dXcmFwIiwiU0NNSVRhc2tSb3dTdXJmYWNlIiwiU0NNSVRhc2tSb3dJbm5lciIsIlNDTUlUYXNrVGl0bGVSb3ciLCJTQ01JVGFza1N1YnRhc2tJY29uV3JhcCIsIlNDTUlUYXNrUHJvamVjdE5hbWUiLCJTQ01JVGFza0ljb25JbWciLCJTQ01JVGFza1RpdGxlIiwianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwiVEFTS19QUk9KRUNUX05BTUVfTUFYX0NIQVJTIiwidHJ1bmNhdGVXaXRoRWxsaXBzaXMiLCJ2YWx1ZSIsIm1heENoYXJzIiwibGVuZ3RoIiwiY29uY2F0Iiwic2xpY2UiLCJNYXRoIiwibWF4IiwidHJpbUVuZCIsInJlbmRlclRpdGxlIiwicHJpbWFyeSIsImhpZ2hsaWdodCIsInN0YXJ0IiwiZW5kIiwiY2hpbGRyZW4iLCJ1c2VPdmVyZmxvd1Rvb2x0aXAiLCJyZWYiLCJkZXBzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2hvd1Rvb2x0aXAiLCJzZXRTaG93VG9vbHRpcCIsImVsIiwiY3VycmVudCIsInVuZGVmaW5lZCIsIm1lYXN1cmUiLCJzY3JvbGxXaWR0aCIsImNsaWVudFdpZHRoIiwicm8iLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiZGlzY29ubmVjdCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJpbml0aWFsc0Zyb21EaXNwbGF5TmFtZSIsIm5hbWUiLCJfcGFydHMkMiIsInRyaW1tZWQiLCJ0cmltIiwicGFydHMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJfcGFydHMkMCRjaGFyQXQiLCJfcGFydHMkIiwiX3BhcnRzJGNoYXJBdCIsIl9wYXJ0cyIsImZpcnN0IiwiY2hhckF0IiwibGFzdCIsInRvVXBwZXJDYXNlIiwic2luZ2xlIiwiVXNlclJvd0F2YXRhciIsIl9yZWYiLCJwaWN0dXJlIiwibmFtZUZvckluaXRpYWxzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJicm9rZW4iLCJzZXRCcm9rZW4iLCJpbml0aWFscyIsInNyYyIsImFsdCIsIm9uRXJyb3IiLCJsb2FkaW5nIiwiZGVjb2RpbmciLCJDb250ZXh0TWVudGlvblRhc2tSb3ciLCJfcmVmMiIsIl9yYXckcHJvamVjdE5hbWUiLCJfYnJlYWRjcnVtYiRwYXJlbnQiLCJfcHJpbWFyeUhpZ2hsaWdodCRzdGEiLCJfcHJpbWFyeUhpZ2hsaWdodCRsZW4iLCJpdGVtIiwiYWN0aXZlIiwib25Nb3VzZURvd24iLCJvbkhvdmVyIiwicHJpbWFyeUhpZ2hsaWdodCIsImJyZWFkY3J1bWIiLCJyYXciLCJwcm9qZWN0TmFtZSIsInBhcmVudCIsInByb2plY3ROYW1lRGlzcGxheSIsImlzUHJvamVjdE5hbWVUcnVuY2F0ZWRCeUNoYXJzIiwiaGFzRmF0aGVyIiwiZmF0aGVySWQiLCJ0aXRsZVJlZiIsInByb2plY3RSZWYiLCJzaG93VGl0bGVUb29sdGlwIiwic2hvd1Byb2plY3RUb29sdGlwIiwic2hvdWxkU2hvd1Byb2plY3RUb29sdGlwIiwib25Nb3VzZUVudGVyIiwiJGFjdGl2ZSIsImRyYWdnYWJsZSIsIndpZHRoIiwiaGVpZ2h0IiwiY29sb3IiLCJ2YXJpYW50IiwidGl0bGUiLCJDb250ZXh0TWVudGlvbkl0ZW0iLCJfcmVmMyIsIm9uU2VsZWN0IiwiX3VzZVQiLCJ0IiwidHlwZSIsImhhbmRsZUNsaWNrIiwiZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiaGFzQ291bnQiLCJjb3VudCIsImhhc1BhcmVudCIsImNvdW50TGFiZWwiLCJkZWZhdWx0VmFsdWUiLCJwb3NpdGlvbk5hbWVUcmltbWVkIiwicG9zaXRpb25OYW1lIiwicG9zaXRpb25MaW5lIiwidXNlck5hbWVGb3JJbml0aWFscyIsIiR3aXRoRGl2aWRlciIsInN0eWxlIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImZsZXgiLCJpZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uSXRlbS9Db250ZXh0TWVudGlvbkl0ZW0udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZDLCBNb3VzZUV2ZW50LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHR5cGUgUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uUmlnaHQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uUmlnaHQnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IFRBU0tfTElOS19JQ09OX0RBVEFfVVJMIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Rhc2tMaW5rSWNvbidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uSXRlbSBhcyBDb250ZXh0TWVudGlvbkl0ZW1UeXBlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBOb3Rpb25JY29uIH0gZnJvbSAnLi4vaWNvbnMvTm90aW9uSWNvbidcbmltcG9ydCB7IFN1YnRhc2tJY29uIH0gZnJvbSAnLi4vaWNvbnMvU3VidGFza0ljb24nXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24sIGlzTm90aW9uTWNwU2x1ZyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQge1xuICBTQ01JUm93LFxuICBTQ01JUHJvamVjdFJvdyxcbiAgU0NNSVByb2plY3RDb250ZW50LFxuICBTQ01JTmFtZSxcbiAgU0NNSVRpdGxlLFxuICBTQ01JUHJvamVjdFRpdGxlLFxuICBTQ01JVGl0bGVIaWdobGlnaHQsXG4gIFNDTUlCcmVhZGNydW1iLFxuICBTQ01JQnJlYWRjcnVtYlBhcmVudCxcbiAgU0NNSVJvd1VzZXIsXG4gIFNDTVVzZXJBdmF0YXJXcmFwLFxuICBTQ01Vc2VyQXZhdGFySW1nLFxuICBTQ01Vc2VyQXZhdGFyRmFsbGJhY2ssXG4gIFNDTVVzZXJJbmZvLFxuICBTQ01Vc2VyTmFtZVBvc2l0aW9uUm93LFxuICBTQ01Vc2VyTmFtZUNlbGwsXG4gIFNDTVVzZXJOYW1lVGV4dCxcbiAgU0NNVXNlclBvc2l0aW9uVGV4dCxcbiAgU0NNSVRhc2tSb3dXcmFwLFxuICBTQ01JVGFza1Jvd1N1cmZhY2UsXG4gIFNDTUlUYXNrUm93SW5uZXIsXG4gIFNDTUlUYXNrVGl0bGVSb3csXG4gIFNDTUlUYXNrU3VidGFza0ljb25XcmFwLFxuICBTQ01JVGFza1Byb2plY3ROYW1lLFxuICBTQ01JVGFza0ljb25JbWcsXG4gIFNDTUlUYXNrVGl0bGUsXG59IGZyb20gJy4vQ29udGV4dE1lbnRpb25JdGVtLnN0eWxlcydcblxudHlwZSBDb250ZXh0TWVudGlvbkl0ZW1Qcm9wcyA9IHtcbiAgaXRlbTogQ29udGV4dE1lbnRpb25JdGVtVHlwZVxuICBhY3RpdmU/OiBib29sZWFuXG4gIG9uU2VsZWN0OiAoaXRlbTogQ29udGV4dE1lbnRpb25JdGVtVHlwZSkgPT4gdm9pZFxuICBvbkhvdmVyPzogKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbVR5cGUpID0+IHZvaWRcbn1cblxuY29uc3QgVEFTS19QUk9KRUNUX05BTUVfTUFYX0NIQVJTID0gNDBcblxuY29uc3QgdHJ1bmNhdGVXaXRoRWxsaXBzaXMgPSAodmFsdWU6IHN0cmluZywgbWF4Q2hhcnM6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPD0gbWF4Q2hhcnMpIHJldHVybiB2YWx1ZVxuICByZXR1cm4gYCR7dmFsdWUuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbWF4Q2hhcnMgLSAxKSkudHJpbUVuZCgpfeKApmBcbn1cblxuY29uc3QgcmVuZGVyVGl0bGUgPSAocHJpbWFyeTogc3RyaW5nLCBoaWdobGlnaHQ/OiB7IHN0YXJ0OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyIH0pID0+IHtcbiAgaWYgKCFoaWdobGlnaHQgfHwgaGlnaGxpZ2h0Lmxlbmd0aCA8PSAwKSByZXR1cm4gcHJpbWFyeVxuICBjb25zdCB7IHN0YXJ0LCBsZW5ndGggfSA9IGhpZ2hsaWdodFxuICBjb25zdCBlbmQgPSBzdGFydCArIGxlbmd0aFxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gcHJpbWFyeS5sZW5ndGggfHwgZW5kID4gcHJpbWFyeS5sZW5ndGgpIHJldHVybiBwcmltYXJ5XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtwcmltYXJ5LnNsaWNlKDAsIHN0YXJ0KX1cbiAgICAgIDxTQ01JVGl0bGVIaWdobGlnaHQ+e3ByaW1hcnkuc2xpY2Uoc3RhcnQsIGVuZCl9PC9TQ01JVGl0bGVIaWdobGlnaHQ+XG4gICAgICB7cHJpbWFyeS5zbGljZShlbmQpfVxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIHVzZU92ZXJmbG93VG9vbHRpcDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KHJlZjogUmVmT2JqZWN0PFQgfCBudWxsPiwgZGVwczogcmVhZG9ubHkgdW5rbm93bltdKSB7XG4gIGNvbnN0IFtzaG93VG9vbHRpcCwgc2V0U2hvd1Rvb2x0aXBdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IHJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkge1xuICAgICAgc2V0U2hvd1Rvb2x0aXAoZmFsc2UpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgbWVhc3VyZSA9ICgpID0+IHtcbiAgICAgIHNldFNob3dUb29sdGlwKGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGgpXG4gICAgfVxuXG4gICAgbWVhc3VyZSgpXG4gICAgY29uc3Qgcm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIobWVhc3VyZSlcbiAgICByby5vYnNlcnZlKGVsKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByby5kaXNjb25uZWN0KClcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlKVxuICAgIH1cbiAgfSwgZGVwcylcblxuICByZXR1cm4gc2hvd1Rvb2x0aXBcbn1cblxuLyoqIEluaWNpYWxlcyBwYXJhIGF2YXRhciAobm9tYnJlIGxlZ2FsKSwgbm8gZWwgdGV4dG8gdmlzaWJsZSBkZSBsYSBmaWxhIChlai4gXCJZb1wiKS4gKi9cbmNvbnN0IGluaXRpYWxzRnJvbURpc3BsYXlOYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKVxuICBpZiAoIXRyaW1tZWQpIHJldHVybiAnPydcbiAgY29uc3QgcGFydHMgPSB0cmltbWVkLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pXG4gIGlmIChwYXJ0cy5sZW5ndGggPj0gMikge1xuICAgIGNvbnN0IGZpcnN0ID0gcGFydHNbMF0/LmNoYXJBdCgwKSA/PyAnJ1xuICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXT8uY2hhckF0KDApID8/ICcnXG4gICAgcmV0dXJuIGAke2ZpcnN0fSR7bGFzdH1gLnRvVXBwZXJDYXNlKClcbiAgfVxuICBjb25zdCBzaW5nbGUgPSBwYXJ0c1swXSA/PyAnJ1xuICBpZiAoc2luZ2xlLmxlbmd0aCA+PSAyKSByZXR1cm4gc2luZ2xlLnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIChzaW5nbGUuY2hhckF0KDApIHx8ICc/JykudG9VcHBlckNhc2UoKVxufVxuXG5jb25zdCBVc2VyUm93QXZhdGFyOiBGQzx7IHBpY3R1cmU/OiBzdHJpbmcgfCBudWxsOyBuYW1lRm9ySW5pdGlhbHM6IHN0cmluZyB9PiA9ICh7IHBpY3R1cmUsIG5hbWVGb3JJbml0aWFscyB9KSA9PiB7XG4gIGNvbnN0IFticm9rZW4sIHNldEJyb2tlbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgaW5pdGlhbHMgPSBpbml0aWFsc0Zyb21EaXNwbGF5TmFtZShuYW1lRm9ySW5pdGlhbHMpXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNVXNlckF2YXRhcldyYXA+XG4gICAgICB7cGljdHVyZSAmJiAhYnJva2VuID8gKFxuICAgICAgICA8U0NNVXNlckF2YXRhckltZyBzcmM9e3BpY3R1cmV9IGFsdD1cIlwiIG9uRXJyb3I9eygpID0+IHNldEJyb2tlbih0cnVlKX0gbG9hZGluZz1cImxhenlcIiBkZWNvZGluZz1cImFzeW5jXCIgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01Vc2VyQXZhdGFyRmFsbGJhY2sgYXJpYS1oaWRkZW4+e2luaXRpYWxzfTwvU0NNVXNlckF2YXRhckZhbGxiYWNrPlxuICAgICAgKX1cbiAgICA8L1NDTVVzZXJBdmF0YXJXcmFwPlxuICApXG59XG5cbmNvbnN0IENvbnRleHRNZW50aW9uVGFza1JvdzogRkM8e1xuICBpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW1UeXBlXG4gIGFjdGl2ZT86IGJvb2xlYW5cbiAgb25Nb3VzZURvd246IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkXG4gIG9uSG92ZXI/OiAoKSA9PiB2b2lkXG59PiA9ICh7IGl0ZW0sIGFjdGl2ZSwgb25Nb3VzZURvd24sIG9uSG92ZXIgfSkgPT4ge1xuICBjb25zdCB7IHByaW1hcnksIHByaW1hcnlIaWdobGlnaHQsIGJyZWFkY3J1bWIsIHJhdyB9ID0gaXRlbVxuICBjb25zdCBwcm9qZWN0TmFtZSA9IHJhdy5wcm9qZWN0TmFtZT8udHJpbSgpIHx8IGJyZWFkY3J1bWI/LnBhcmVudD8udHJpbSgpIHx8ICcnXG4gIGNvbnN0IHByb2plY3ROYW1lRGlzcGxheSA9IHRydW5jYXRlV2l0aEVsbGlwc2lzKHByb2plY3ROYW1lLCBUQVNLX1BST0pFQ1RfTkFNRV9NQVhfQ0hBUlMpXG4gIGNvbnN0IGlzUHJvamVjdE5hbWVUcnVuY2F0ZWRCeUNoYXJzID0gcHJvamVjdE5hbWVEaXNwbGF5ICE9PSBwcm9qZWN0TmFtZVxuICBjb25zdCBoYXNGYXRoZXIgPSByYXcuZmF0aGVySWQgIT0gbnVsbFxuICBjb25zdCB0aXRsZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgcHJvamVjdFJlZiA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHNob3dUaXRsZVRvb2x0aXAgPSB1c2VPdmVyZmxvd1Rvb2x0aXAodGl0bGVSZWYsIFtcbiAgICBwcmltYXJ5LFxuICAgIHByb2plY3ROYW1lLFxuICAgIHByaW1hcnlIaWdobGlnaHQ/LnN0YXJ0ID8/IC0xLFxuICAgIHByaW1hcnlIaWdobGlnaHQ/Lmxlbmd0aCA/PyAwLFxuICAgIGhhc0ZhdGhlcixcbiAgXSlcbiAgY29uc3Qgc2hvd1Byb2plY3RUb29sdGlwID0gdXNlT3ZlcmZsb3dUb29sdGlwKHByb2plY3RSZWYsIFtwcm9qZWN0TmFtZURpc3BsYXksIHByaW1hcnldKVxuICBjb25zdCBzaG91bGRTaG93UHJvamVjdFRvb2x0aXAgPSBpc1Byb2plY3ROYW1lVHJ1bmNhdGVkQnlDaGFycyB8fCBzaG93UHJvamVjdFRvb2x0aXBcblxuICByZXR1cm4gKFxuICAgIDxTQ01JVGFza1Jvd1dyYXAgb25Nb3VzZURvd249e29uTW91c2VEb3dufSBvbk1vdXNlRW50ZXI9e29uSG92ZXJ9PlxuICAgICAgPFNDTUlUYXNrUm93U3VyZmFjZSAkYWN0aXZlPXthY3RpdmV9PlxuICAgICAgICA8U0NNSVRhc2tSb3dJbm5lcj5cbiAgICAgICAgICA8U0NNSVRhc2tJY29uSW1nIHNyYz17VEFTS19MSU5LX0lDT05fREFUQV9VUkx9IGFsdD1cIlwiIGRyYWdnYWJsZT17ZmFsc2V9IGFyaWEtaGlkZGVuIC8+XG4gICAgICAgICAgPFNDTUlUYXNrVGl0bGVSb3c+XG4gICAgICAgICAgICB7aGFzRmF0aGVyID8gKFxuICAgICAgICAgICAgICA8U0NNSVRhc2tTdWJ0YXNrSWNvbldyYXA+XG4gICAgICAgICAgICAgICAgPFN1YnRhc2tJY29uIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiBjb2xvcj1cIiMwMDBcIiB2YXJpYW50PVwicmVndWxhclwiIC8+XG4gICAgICAgICAgICAgIDwvU0NNSVRhc2tTdWJ0YXNrSWNvbldyYXA+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtzaG93VGl0bGVUb29sdGlwID8gcHJpbWFyeSA6ICcnfT5cbiAgICAgICAgICAgICAgPFNDTUlUYXNrVGl0bGUgcmVmPXt0aXRsZVJlZn0+e3JlbmRlclRpdGxlKHByaW1hcnksIHByaW1hcnlIaWdobGlnaHQpfTwvU0NNSVRhc2tUaXRsZT5cbiAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgIHtwcm9qZWN0TmFtZSA/IChcbiAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Nob3VsZFNob3dQcm9qZWN0VG9vbHRpcCA/IHByb2plY3ROYW1lIDogJyd9PlxuICAgICAgICAgICAgICAgIDxTQ01JVGFza1Byb2plY3ROYW1lIHJlZj17cHJvamVjdFJlZn0+e3Byb2plY3ROYW1lRGlzcGxheX08L1NDTUlUYXNrUHJvamVjdE5hbWU+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNSVRhc2tUaXRsZVJvdz5cbiAgICAgICAgPC9TQ01JVGFza1Jvd0lubmVyPlxuICAgICAgPC9TQ01JVGFza1Jvd1N1cmZhY2U+XG4gICAgPC9TQ01JVGFza1Jvd1dyYXA+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENvbnRleHRNZW50aW9uSXRlbTogRkM8Q29udGV4dE1lbnRpb25JdGVtUHJvcHM+ID0gKHsgaXRlbSwgYWN0aXZlLCBvblNlbGVjdCwgb25Ib3ZlciB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgcHJpbWFyeSwgcHJpbWFyeUhpZ2hsaWdodCwgYnJlYWRjcnVtYiwgdHlwZSwgcmF3IH0gPSBpdGVtXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBvblNlbGVjdChpdGVtKVxuICB9XG5cbiAgY29uc3QgaGFzQ291bnQgPSB0eXBlb2YgYnJlYWRjcnVtYj8uY291bnQgPT09ICdudW1iZXInXG4gIGNvbnN0IGhhc1BhcmVudCA9ICEhYnJlYWRjcnVtYj8ucGFyZW50XG4gIGNvbnN0IGNvdW50TGFiZWwgPVxuICAgIGJyZWFkY3J1bWI/LmNvdW50TGFiZWwgJiZcbiAgICB0KGBjb250ZXh0TWVudGlvbi5jb3VudGVycy4ke2JyZWFkY3J1bWIuY291bnRMYWJlbH1gLCB7IGRlZmF1bHRWYWx1ZTogYnJlYWRjcnVtYi5jb3VudExhYmVsIH0pXG5cbiAgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgIGNvbnN0IHBvc2l0aW9uTmFtZVRyaW1tZWQgPSB0eXBlb2YgcmF3LnBvc2l0aW9uTmFtZSA9PT0gJ3N0cmluZycgPyByYXcucG9zaXRpb25OYW1lLnRyaW0oKSA6ICcnXG4gICAgY29uc3QgcG9zaXRpb25MaW5lID0gcG9zaXRpb25OYW1lVHJpbW1lZCB8fCB0KCdjb250ZXh0TWVudGlvbi51c2VyTm9Qb3NpdGlvbicsIHsgZGVmYXVsdFZhbHVlOiAnU2luIHBvc2ljacOzbicgfSlcbiAgICBjb25zdCB1c2VyTmFtZUZvckluaXRpYWxzID0gdHlwZW9mIHJhdy5uYW1lID09PSAnc3RyaW5nJyAmJiByYXcubmFtZS50cmltKCkgPyByYXcubmFtZSA6IHByaW1hcnlcblxuICAgIHJldHVybiAoXG4gICAgICA8U0NNSVJvd1VzZXIgJGFjdGl2ZT17YWN0aXZlfSBvbk1vdXNlRG93bj17aGFuZGxlQ2xpY2t9IG9uTW91c2VFbnRlcj17KCkgPT4gb25Ib3Zlcj8uKGl0ZW0pfT5cbiAgICAgICAgPFVzZXJSb3dBdmF0YXIgcGljdHVyZT17cmF3LnBpY3R1cmV9IG5hbWVGb3JJbml0aWFscz17dXNlck5hbWVGb3JJbml0aWFsc30gLz5cbiAgICAgICAgPFNDTVVzZXJJbmZvPlxuICAgICAgICAgIDxTQ01Vc2VyTmFtZVBvc2l0aW9uUm93PlxuICAgICAgICAgICAgPFNDTVVzZXJOYW1lQ2VsbCAkd2l0aERpdmlkZXI+XG4gICAgICAgICAgICAgIDxTQ01Vc2VyTmFtZVRleHQ+e3JlbmRlclRpdGxlKHByaW1hcnksIHByaW1hcnlIaWdobGlnaHQpfTwvU0NNVXNlck5hbWVUZXh0PlxuICAgICAgICAgICAgPC9TQ01Vc2VyTmFtZUNlbGw+XG4gICAgICAgICAgICA8U0NNVXNlclBvc2l0aW9uVGV4dCB0aXRsZT17cG9zaXRpb25MaW5lfT57cG9zaXRpb25MaW5lfTwvU0NNVXNlclBvc2l0aW9uVGV4dD5cbiAgICAgICAgICA8L1NDTVVzZXJOYW1lUG9zaXRpb25Sb3c+XG4gICAgICAgIDwvU0NNVXNlckluZm8+XG4gICAgICA8L1NDTUlSb3dVc2VyPlxuICAgIClcbiAgfVxuXG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNDTUlQcm9qZWN0Um93IG9uTW91c2VEb3duPXtoYW5kbGVDbGlja30gb25Nb3VzZUVudGVyPXsoKSA9PiBvbkhvdmVyPy4oaXRlbSl9PlxuICAgICAgICA8U0NNSVByb2plY3RDb250ZW50ICRhY3RpdmU9e2FjdGl2ZX0+XG4gICAgICAgICAgPFNDTUlOYW1lPlxuICAgICAgICAgICAgPFNDTUlQcm9qZWN0VGl0bGUgdGl0bGU9e3ByaW1hcnl9PntyZW5kZXJUaXRsZShwcmltYXJ5LCBwcmltYXJ5SGlnaGxpZ2h0KX08L1NDTUlQcm9qZWN0VGl0bGU+XG4gICAgICAgICAgPC9TQ01JTmFtZT5cbiAgICAgICAgPC9TQ01JUHJvamVjdENvbnRlbnQ+XG4gICAgICA8L1NDTUlQcm9qZWN0Um93PlxuICAgIClcbiAgfVxuXG4gIGlmICh0eXBlID09PSAndGFzaycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPENvbnRleHRNZW50aW9uVGFza1JvdyBpdGVtPXtpdGVtfSBhY3RpdmU9e2FjdGl2ZX0gb25Nb3VzZURvd249e2hhbmRsZUNsaWNrfSBvbkhvdmVyPXsoKSA9PiBvbkhvdmVyPy4oaXRlbSl9IC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdtY3AnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01JUm93ICRhY3RpdmU9e2FjdGl2ZX0gb25Nb3VzZURvd249e2hhbmRsZUNsaWNrfSBvbk1vdXNlRW50ZXI9eygpID0+IG9uSG92ZXI/LihpdGVtKX0+XG4gICAgICAgIDxTQ01JVGFza1Jvd0lubmVyPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICB3aWR0aDogMTYsXG4gICAgICAgICAgICAgIGhlaWdodDogMTYsXG4gICAgICAgICAgICAgIGZsZXg6ICcwIDAgMTZweCcsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpc05vdGlvbk1jcFNsdWcocmF3LmlkKSA/IChcbiAgICAgICAgICAgICAgPE5vdGlvbkljb24gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgZ2V0Q29udGV4dE1lbnRpb25JY29uKCdtY3AnLCAnIzJkNzdiZCcsIHJhdy5pZCwgMTYpXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8U0NNSVRhc2tUaXRsZSB0aXRsZT17cHJpbWFyeX0+e3JlbmRlclRpdGxlKHByaW1hcnksIHByaW1hcnlIaWdobGlnaHQpfTwvU0NNSVRhc2tUaXRsZT5cbiAgICAgICAgPC9TQ01JVGFza1Jvd0lubmVyPlxuICAgICAgPC9TQ01JUm93PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTUlSb3cgJGFjdGl2ZT17YWN0aXZlfSBvbk1vdXNlRG93bj17aGFuZGxlQ2xpY2t9IG9uTW91c2VFbnRlcj17KCkgPT4gb25Ib3Zlcj8uKGl0ZW0pfT5cbiAgICAgIDxTQ01JTmFtZT5cbiAgICAgICAgPFNDTUlUaXRsZT57cmVuZGVyVGl0bGUocHJpbWFyeSwgcHJpbWFyeUhpZ2hsaWdodCl9PC9TQ01JVGl0bGU+XG4gICAgICAgIHsoaGFzQ291bnQgfHwgaGFzUGFyZW50KSAmJiAoXG4gICAgICAgICAgPFNDTUlCcmVhZGNydW1iPlxuICAgICAgICAgICAge2hhc0NvdW50ICYmIChcbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAge2JyZWFkY3J1bWI/LmNvdW50fSB7Y291bnRMYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtoYXNQYXJlbnQgJiYgKFxuICAgICAgICAgICAgICA8U0NNSUJyZWFkY3J1bWJQYXJlbnQ+XG4gICAgICAgICAgICAgICAgPENoZXZyb25SaWdodCB3aWR0aD1cIjEycHhcIiBoZWlnaHQ9XCIxMnB4XCIgY29sb3I9XCIjODA4MDgwXCIgLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57YnJlYWRjcnVtYj8ucGFyZW50fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9TQ01JQnJlYWRjcnVtYlBhcmVudD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TQ01JQnJlYWRjcnVtYj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNSU5hbWU+XG4gICAgPC9TQ01JUm93PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUF5QkEsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBd0IsT0FBTztBQUN6RixTQUFTQyxZQUFZLFFBQVEsK0NBQStDO0FBQzVFLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyx1QkFBdUIsUUFBUSxpQ0FBaUM7QUFFekUsU0FBU0MsVUFBVSxRQUFRLHFCQUFxQjtBQUNoRCxTQUFTQyxXQUFXLFFBQVEsc0JBQXNCO0FBQ2xELFNBQVNDLHFCQUFxQixFQUFFQyxlQUFlLFFBQVEsb0NBQW9DO0FBQzNGLFNBQ0VDLE9BQU8sRUFDUEMsY0FBYyxFQUNkQyxrQkFBa0IsRUFDbEJDLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsY0FBYyxFQUNkQyxvQkFBb0IsRUFDcEJDLFdBQVcsRUFDWEMsaUJBQWlCLEVBQ2pCQyxn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