@projectcor/maia-components 2.11.36-3 → 2.11.36-5
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/lib/App.js +24 -11
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +28 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +84 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +123 -0
- package/lib/components/atoms/ContextMentionChip/index.js +4 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +85 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
- package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +188 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +98 -0
- package/lib/components/atoms/ContextMentionItem/index.js +2 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +131 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +63 -0
- package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +61 -191
- package/lib/components/atoms/icons/NotionIcon.js +36 -0
- package/lib/components/atoms/icons/RocketIcon.js +35 -0
- package/lib/components/atoms/icons/index.js +3 -1
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +483 -0
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +238 -0
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +437 -0
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +3 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +80 -0
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +31 -3
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/index.js +2 -2
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -1
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +21 -2
- package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +16 -6
- package/lib/components/molecules/ChatAIModal/constants.js +6 -2
- package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +55 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
- package/lib/components/molecules/ContextMentionInput/index.js +2 -0
- package/lib/components/molecules/SchedulesPage/SchedulesPage.js +63 -44
- package/lib/components/molecules/Sidebar/Sidebar.js +26 -9
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +5 -1
- package/lib/components/molecules/SkillsPage/SkillsPage.js +747 -0
- package/lib/components/molecules/SkillsPage/index.js +2 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +186 -47
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
- package/lib/constants/taskLinkIcon.js +6 -0
- package/lib/dev/DevAbmAgentModal.js +114 -0
- package/lib/dev/DevContextMentionInput.js +65 -0
- package/lib/dev/Providers.js +11 -6
- package/lib/dev/mocks/abmModalMocks.js +200 -0
- package/lib/hooks/useCaretPosition.js +35 -0
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +21 -11
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
- package/lib/hooks/useContextMentions.js +204 -0
- package/lib/hooks/useEntitySearch.js +405 -0
- package/lib/hooks/useEvent.js +5 -1
- package/lib/hooks/useMentionAllowedTypes.js +81 -0
- package/lib/hooks/useMentionPopover.js +284 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
- package/lib/lang/br/index.js +139 -1
- package/lib/lang/en/index.js +139 -1
- package/lib/lang/es/index.js +139 -1
- package/lib/lang/fr/index.js +147 -9
- package/lib/services/maia/Agents/connectors.js +88 -0
- package/lib/services/maia/Agents/skills.js +164 -0
- package/lib/services/maia/Chats/getChatMessages.js +29 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +8 -5
- package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
- package/lib/services/query/entitySearchQuery.js +16 -0
- package/lib/services/query/usersDirectoryQuery.js +19 -0
- package/lib/services/utils/mapChatMessages.js +12 -5
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/agentSkill.js +2 -0
- package/lib/types/contextMention.js +37 -0
- package/lib/utils/contextMentionIcons.js +117 -0
- package/lib/utils/contextMentionLabel.js +4 -0
- package/lib/utils/contextMentionTypeLabel.js +17 -0
- package/lib/utils/renderContextMentions.js +216 -0
- package/package.json +1 -1
- package/lib/components/molecules/AbmSection/AbmActionsSection.js +0 -136
- package/lib/components/molecules/AbmSection/AbmActionsSection.styles.js +0 -74
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
4
|
+
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; }
|
|
5
|
+
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; }
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
|
+
/**
|
|
8
|
+
* Mocks de las llamadas que dispara AbmAgentModal en modo creación + sección Actions.
|
|
9
|
+
* Sólo se usa en pantallas /src/dev/* — no se importa desde código de producción.
|
|
10
|
+
*
|
|
11
|
+
* Replica el shape real de las respuestas del back para que el modal funcione
|
|
12
|
+
* sin necesidad de tener `MAIA_URL` levantado (caso domingo / staging caído).
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
var jsonResponse = function jsonResponse(body) {
|
|
16
|
+
var init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
17
|
+
status: 200
|
|
18
|
+
};
|
|
19
|
+
return new Response(JSON.stringify(body), _objectSpread(_objectSpread({}, init), {}, {
|
|
20
|
+
headers: _objectSpread({
|
|
21
|
+
'Content-Type': 'application/json'
|
|
22
|
+
}, init.headers || {})
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
var mockedAgentModels = [{
|
|
26
|
+
id: 1,
|
|
27
|
+
display_name: 'GPT-4o',
|
|
28
|
+
description: 'OpenAI GPT-4o (default)',
|
|
29
|
+
model_name: 'gpt-4o',
|
|
30
|
+
provider: 'openai',
|
|
31
|
+
is_deprecated: false
|
|
32
|
+
}, {
|
|
33
|
+
id: 2,
|
|
34
|
+
display_name: 'Claude 3.5 Sonnet',
|
|
35
|
+
description: 'Anthropic Claude 3.5 Sonnet',
|
|
36
|
+
model_name: 'claude-3-5-sonnet',
|
|
37
|
+
provider: 'anthropic',
|
|
38
|
+
is_deprecated: false
|
|
39
|
+
}, {
|
|
40
|
+
id: 3,
|
|
41
|
+
display_name: 'Gemini 1.5 Pro',
|
|
42
|
+
description: 'Google Gemini 1.5 Pro',
|
|
43
|
+
model_name: 'gemini-1.5-pro',
|
|
44
|
+
provider: 'google',
|
|
45
|
+
is_deprecated: false
|
|
46
|
+
}];
|
|
47
|
+
var mockedAgentConnectors = [{
|
|
48
|
+
id: 1,
|
|
49
|
+
slug: 'notion',
|
|
50
|
+
name: 'Notion',
|
|
51
|
+
description: 'Conector de Notion para acceder a páginas y bases de datos del workspace.',
|
|
52
|
+
icon_url: 'https://www.notion.so/images/favicon.ico',
|
|
53
|
+
requires_auth: true,
|
|
54
|
+
is_active: true,
|
|
55
|
+
enabled_for_agent: false,
|
|
56
|
+
user_authorized: false
|
|
57
|
+
}];
|
|
58
|
+
var buildCreatedAgent = function buildCreatedAgent(body) {
|
|
59
|
+
var _body$name, _body$emoji, _body$introduction, _body$input_placehold, _body$user_prompt, _body$tool_group_slug;
|
|
60
|
+
return {
|
|
61
|
+
id: "mock-agent-".concat(Date.now()),
|
|
62
|
+
name: (_body$name = body === null || body === void 0 ? void 0 : body.name) !== null && _body$name !== void 0 ? _body$name : 'Mock Agent',
|
|
63
|
+
emoji: (_body$emoji = body === null || body === void 0 ? void 0 : body.emoji) !== null && _body$emoji !== void 0 ? _body$emoji : '✨',
|
|
64
|
+
introduction: (_body$introduction = body === null || body === void 0 ? void 0 : body.introduction) !== null && _body$introduction !== void 0 ? _body$introduction : '',
|
|
65
|
+
input_placeholder: (_body$input_placehold = body === null || body === void 0 ? void 0 : body.input_placeholder) !== null && _body$input_placehold !== void 0 ? _body$input_placehold : '',
|
|
66
|
+
user_prompt: (_body$user_prompt = body === null || body === void 0 ? void 0 : body.user_prompt) !== null && _body$user_prompt !== void 0 ? _body$user_prompt : '',
|
|
67
|
+
type: 'custom',
|
|
68
|
+
company_id: '2336',
|
|
69
|
+
is_internal: false,
|
|
70
|
+
is_favorite: false,
|
|
71
|
+
ai_model_id: 1,
|
|
72
|
+
model_display_name: 'GPT-4o',
|
|
73
|
+
tool_group_slugs: (_body$tool_group_slug = body === null || body === void 0 ? void 0 : body.tool_group_slugs) !== null && _body$tool_group_slug !== void 0 ? _body$tool_group_slug : [],
|
|
74
|
+
knowledge: [],
|
|
75
|
+
created_by: {
|
|
76
|
+
name: 'Mock User',
|
|
77
|
+
is_deleted: false
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
var resolvers = [function (_ref) {
|
|
82
|
+
var method = _ref.method,
|
|
83
|
+
path = _ref.path;
|
|
84
|
+
if (method === 'GET' && path === 'ai-models') {
|
|
85
|
+
return jsonResponse({
|
|
86
|
+
data: mockedAgentModels,
|
|
87
|
+
total: mockedAgentModels.length
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}, function (_ref2) {
|
|
92
|
+
var method = _ref2.method,
|
|
93
|
+
path = _ref2.path,
|
|
94
|
+
body = _ref2.body;
|
|
95
|
+
if (method === 'POST' && path === 'agents') {
|
|
96
|
+
return jsonResponse(buildCreatedAgent(body));
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}, function (_ref3) {
|
|
100
|
+
var method = _ref3.method,
|
|
101
|
+
path = _ref3.path;
|
|
102
|
+
var agentConnectorsMatch = path.match(/^agents\/([^/]+)\/connectors$/);
|
|
103
|
+
if (!agentConnectorsMatch) return null;
|
|
104
|
+
if (method === 'GET') {
|
|
105
|
+
return jsonResponse(mockedAgentConnectors);
|
|
106
|
+
}
|
|
107
|
+
if (method === 'POST') {
|
|
108
|
+
return jsonResponse({
|
|
109
|
+
agent_id: agentConnectorsMatch[1],
|
|
110
|
+
connector_slugs: [],
|
|
111
|
+
requires_auth: []
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}];
|
|
116
|
+
var parseBody = function parseBody(init) {
|
|
117
|
+
if (!(init !== null && init !== void 0 && init.body)) return null;
|
|
118
|
+
if (typeof init.body !== 'string') return null;
|
|
119
|
+
try {
|
|
120
|
+
return JSON.parse(init.body);
|
|
121
|
+
} catch (_unused) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
var stripBaseUrl = function stripBaseUrl(url, baseUrl) {
|
|
126
|
+
if (!baseUrl) return null;
|
|
127
|
+
var normalizedBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
|
|
128
|
+
if (!url.startsWith(normalizedBase)) return null;
|
|
129
|
+
return url.slice(normalizedBase.length).replace(/^\//, '');
|
|
130
|
+
};
|
|
131
|
+
var originalFetch = null;
|
|
132
|
+
var installed = false;
|
|
133
|
+
export var installAbmModalFetchMocks = function installAbmModalFetchMocks() {
|
|
134
|
+
if (installed) return;
|
|
135
|
+
installed = true;
|
|
136
|
+
originalFetch = window.fetch.bind(window);
|
|
137
|
+
var baseUrl = process.env.MAIA_URL || '';
|
|
138
|
+
window.fetch = /*#__PURE__*/function () {
|
|
139
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(input, init) {
|
|
140
|
+
var url, method, path, body, _i, _resolvers, resolver, response;
|
|
141
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
142
|
+
while (1) switch (_context.prev = _context.next) {
|
|
143
|
+
case 0:
|
|
144
|
+
url = typeof input === 'string' ? input : input.url;
|
|
145
|
+
method = ((init === null || init === void 0 ? void 0 : init.method) || typeof input !== 'string' && input.method || 'GET').toUpperCase();
|
|
146
|
+
path = stripBaseUrl(url, baseUrl);
|
|
147
|
+
if (!(path !== null)) {
|
|
148
|
+
_context.next = 4;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
body = parseBody(init);
|
|
152
|
+
_i = 0, _resolvers = resolvers;
|
|
153
|
+
case 1:
|
|
154
|
+
if (!(_i < _resolvers.length)) {
|
|
155
|
+
_context.next = 3;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
resolver = _resolvers[_i];
|
|
159
|
+
response = resolver({
|
|
160
|
+
method: method,
|
|
161
|
+
path: path,
|
|
162
|
+
body: body
|
|
163
|
+
});
|
|
164
|
+
if (!response) {
|
|
165
|
+
_context.next = 2;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
// eslint-disable-next-line no-console
|
|
169
|
+
console.info("[DEV mock] ".concat(method, " ").concat(path, " \u2192 ").concat(response.status));
|
|
170
|
+
return _context.abrupt("return", response);
|
|
171
|
+
case 2:
|
|
172
|
+
_i++;
|
|
173
|
+
_context.next = 1;
|
|
174
|
+
break;
|
|
175
|
+
case 3:
|
|
176
|
+
// eslint-disable-next-line no-console
|
|
177
|
+
console.warn("[DEV mock] ".concat(method, " ").concat(path, " no tiene mock \u2014 devolviendo 200 vac\xEDo"));
|
|
178
|
+
return _context.abrupt("return", jsonResponse({}));
|
|
179
|
+
case 4:
|
|
180
|
+
return _context.abrupt("return", originalFetch ? originalFetch(input, init) : Promise.reject(new Error('fetch not available')));
|
|
181
|
+
case 5:
|
|
182
|
+
case "end":
|
|
183
|
+
return _context.stop();
|
|
184
|
+
}
|
|
185
|
+
}, _callee);
|
|
186
|
+
}));
|
|
187
|
+
return function (_x, _x2) {
|
|
188
|
+
return _ref4.apply(this, arguments);
|
|
189
|
+
};
|
|
190
|
+
}();
|
|
191
|
+
};
|
|
192
|
+
export var uninstallAbmModalFetchMocks = function uninstallAbmModalFetchMocks() {
|
|
193
|
+
if (!installed) return;
|
|
194
|
+
if (originalFetch) {
|
|
195
|
+
window.fetch = originalFetch;
|
|
196
|
+
}
|
|
197
|
+
originalFetch = null;
|
|
198
|
+
installed = false;
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqc29uUmVzcG9uc2UiLCJib2R5IiwiaW5pdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInN0YXR1cyIsIlJlc3BvbnNlIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9vYmplY3RTcHJlYWQiLCJoZWFkZXJzIiwibW9ja2VkQWdlbnRNb2RlbHMiLCJpZCIsImRpc3BsYXlfbmFtZSIsImRlc2NyaXB0aW9uIiwibW9kZWxfbmFtZSIsInByb3ZpZGVyIiwiaXNfZGVwcmVjYXRlZCIsIm1vY2tlZEFnZW50Q29ubmVjdG9ycyIsInNsdWciLCJuYW1lIiwiaWNvbl91cmwiLCJyZXF1aXJlc19hdXRoIiwiaXNfYWN0aXZlIiwiZW5hYmxlZF9mb3JfYWdlbnQiLCJ1c2VyX2F1dGhvcml6ZWQiLCJidWlsZENyZWF0ZWRBZ2VudCIsIl9ib2R5JG5hbWUiLCJfYm9keSRlbW9qaSIsIl9ib2R5JGludHJvZHVjdGlvbiIsIl9ib2R5JGlucHV0X3BsYWNlaG9sZCIsIl9ib2R5JHVzZXJfcHJvbXB0IiwiX2JvZHkkdG9vbF9ncm91cF9zbHVnIiwiY29uY2F0IiwiRGF0ZSIsIm5vdyIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRfcGxhY2Vob2xkZXIiLCJ1c2VyX3Byb21wdCIsInR5cGUiLCJjb21wYW55X2lkIiwiaXNfaW50ZXJuYWwiLCJpc19mYXZvcml0ZSIsImFpX21vZGVsX2lkIiwibW9kZWxfZGlzcGxheV9uYW1lIiwidG9vbF9ncm91cF9zbHVncyIsImtub3dsZWRnZSIsImNyZWF0ZWRfYnkiLCJpc19kZWxldGVkIiwicmVzb2x2ZXJzIiwiX3JlZiIsIm1ldGhvZCIsInBhdGgiLCJkYXRhIiwidG90YWwiLCJfcmVmMiIsIl9yZWYzIiwiYWdlbnRDb25uZWN0b3JzTWF0Y2giLCJtYXRjaCIsImFnZW50X2lkIiwiY29ubmVjdG9yX3NsdWdzIiwicGFyc2VCb2R5IiwicGFyc2UiLCJfdW51c2VkIiwic3RyaXBCYXNlVXJsIiwidXJsIiwiYmFzZVVybCIsIm5vcm1hbGl6ZWRCYXNlIiwiZW5kc1dpdGgiLCJzbGljZSIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwib3JpZ2luYWxGZXRjaCIsImluc3RhbGxlZCIsImluc3RhbGxBYm1Nb2RhbEZldGNoTW9ja3MiLCJ3aW5kb3ciLCJmZXRjaCIsImJpbmQiLCJwcm9jZXNzIiwiZW52IiwiTUFJQV9VUkwiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiaW5wdXQiLCJfaSIsIl9yZXNvbHZlcnMiLCJyZXNvbHZlciIsInJlc3BvbnNlIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ0b1VwcGVyQ2FzZSIsImNvbnNvbGUiLCJpbmZvIiwiYWJydXB0Iiwid2FybiIsIlByb21pc2UiLCJyZWplY3QiLCJFcnJvciIsInN0b3AiLCJfeCIsIl94MiIsImFwcGx5IiwidW5pbnN0YWxsQWJtTW9kYWxGZXRjaE1vY2tzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rldi9tb2Nrcy9hYm1Nb2RhbE1vY2tzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qKlxuICogTW9ja3MgZGUgbGFzIGxsYW1hZGFzIHF1ZSBkaXNwYXJhIEFibUFnZW50TW9kYWwgZW4gbW9kbyBjcmVhY2nDs24gKyBzZWNjacOzbiBBY3Rpb25zLlxuICogU8OzbG8gc2UgdXNhIGVuIHBhbnRhbGxhcyAvc3JjL2Rldi8qIOKAlCBubyBzZSBpbXBvcnRhIGRlc2RlIGPDs2RpZ28gZGUgcHJvZHVjY2nDs24uXG4gKlxuICogUmVwbGljYSBlbCBzaGFwZSByZWFsIGRlIGxhcyByZXNwdWVzdGFzIGRlbCBiYWNrIHBhcmEgcXVlIGVsIG1vZGFsIGZ1bmNpb25lXG4gKiBzaW4gbmVjZXNpZGFkIGRlIHRlbmVyIGBNQUlBX1VSTGAgbGV2YW50YWRvIChjYXNvIGRvbWluZ28gLyBzdGFnaW5nIGNhw61kbykuXG4gKi9cblxudHlwZSBGZXRjaElucHV0ID0gUGFyYW1ldGVyczx0eXBlb2YgZmV0Y2g+WzBdXG50eXBlIEZldGNoSW5pdCA9IFBhcmFtZXRlcnM8dHlwZW9mIGZldGNoPlsxXVxuXG5jb25zdCBqc29uUmVzcG9uc2UgPSAoYm9keTogdW5rbm93biwgaW5pdDogUmVzcG9uc2VJbml0ID0geyBzdGF0dXM6IDIwMCB9KTogUmVzcG9uc2UgPT5cbiAgbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KGJvZHkpLCB7XG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uKGluaXQuaGVhZGVycyB8fCB7fSksXG4gICAgfSxcbiAgfSlcblxuY29uc3QgbW9ja2VkQWdlbnRNb2RlbHMgPSBbXG4gIHtcbiAgICBpZDogMSxcbiAgICBkaXNwbGF5X25hbWU6ICdHUFQtNG8nLFxuICAgIGRlc2NyaXB0aW9uOiAnT3BlbkFJIEdQVC00byAoZGVmYXVsdCknLFxuICAgIG1vZGVsX25hbWU6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnb3BlbmFpJyxcbiAgICBpc19kZXByZWNhdGVkOiBmYWxzZSxcbiAgfSxcbiAge1xuICAgIGlkOiAyLFxuICAgIGRpc3BsYXlfbmFtZTogJ0NsYXVkZSAzLjUgU29ubmV0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0FudGhyb3BpYyBDbGF1ZGUgMy41IFNvbm5ldCcsXG4gICAgbW9kZWxfbmFtZTogJ2NsYXVkZS0zLTUtc29ubmV0JyxcbiAgICBwcm92aWRlcjogJ2FudGhyb3BpYycsXG4gICAgaXNfZGVwcmVjYXRlZDogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogMyxcbiAgICBkaXNwbGF5X25hbWU6ICdHZW1pbmkgMS41IFBybycsXG4gICAgZGVzY3JpcHRpb246ICdHb29nbGUgR2VtaW5pIDEuNSBQcm8nLFxuICAgIG1vZGVsX25hbWU6ICdnZW1pbmktMS41LXBybycsXG4gICAgcHJvdmlkZXI6ICdnb29nbGUnLFxuICAgIGlzX2RlcHJlY2F0ZWQ6IGZhbHNlLFxuICB9LFxuXVxuXG5jb25zdCBtb2NrZWRBZ2VudENvbm5lY3RvcnMgPSBbXG4gIHtcbiAgICBpZDogMSxcbiAgICBzbHVnOiAnbm90aW9uJyxcbiAgICBuYW1lOiAnTm90aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvbmVjdG9yIGRlIE5vdGlvbiBwYXJhIGFjY2VkZXIgYSBww6FnaW5hcyB5IGJhc2VzIGRlIGRhdG9zIGRlbCB3b3Jrc3BhY2UuJyxcbiAgICBpY29uX3VybDogJ2h0dHBzOi8vd3d3Lm5vdGlvbi5zby9pbWFnZXMvZmF2aWNvbi5pY28nLFxuICAgIHJlcXVpcmVzX2F1dGg6IHRydWUsXG4gICAgaXNfYWN0aXZlOiB0cnVlLFxuICAgIGVuYWJsZWRfZm9yX2FnZW50OiBmYWxzZSxcbiAgICB1c2VyX2F1dGhvcml6ZWQ6IGZhbHNlLFxuICB9LFxuXVxuXG5jb25zdCBidWlsZENyZWF0ZWRBZ2VudCA9IChib2R5OiBhbnkpID0+ICh7XG4gIGlkOiBgbW9jay1hZ2VudC0ke0RhdGUubm93KCl9YCxcbiAgbmFtZTogYm9keT8ubmFtZSA/PyAnTW9jayBBZ2VudCcsXG4gIGVtb2ppOiBib2R5Py5lbW9qaSA/PyAn4pyoJyxcbiAgaW50cm9kdWN0aW9uOiBib2R5Py5pbnRyb2R1Y3Rpb24gPz8gJycsXG4gIGlucHV0X3BsYWNlaG9sZGVyOiBib2R5Py5pbnB1dF9wbGFjZWhvbGRlciA/PyAnJyxcbiAgdXNlcl9wcm9tcHQ6IGJvZHk/LnVzZXJfcHJvbXB0ID8/ICcnLFxuICB0eXBlOiAnY3VzdG9tJyxcbiAgY29tcGFueV9pZDogJzIzMzYnLFxuICBpc19pbnRlcm5hbDogZmFsc2UsXG4gIGlzX2Zhdm9yaXRlOiBmYWxzZSxcbiAgYWlfbW9kZWxfaWQ6IDEsXG4gIG1vZGVsX2Rpc3BsYXlfbmFtZTogJ0dQVC00bycsXG4gIHRvb2xfZ3JvdXBfc2x1Z3M6IGJvZHk/LnRvb2xfZ3JvdXBfc2x1Z3MgPz8gW10sXG4gIGtub3dsZWRnZTogW10sXG4gIGNyZWF0ZWRfYnk6IHsgbmFtZTogJ01vY2sgVXNlcicsIGlzX2RlbGV0ZWQ6IGZhbHNlIH0sXG59KVxuXG50eXBlIFJlc29sdmVyID0gKHJlcTogeyBtZXRob2Q6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSkgPT4gUmVzcG9uc2UgfCBudWxsXG5cbmNvbnN0IHJlc29sdmVyczogUmVzb2x2ZXJbXSA9IFtcbiAgKHsgbWV0aG9kLCBwYXRoIH0pID0+IHtcbiAgICBpZiAobWV0aG9kID09PSAnR0VUJyAmJiBwYXRoID09PSAnYWktbW9kZWxzJykge1xuICAgICAgcmV0dXJuIGpzb25SZXNwb25zZSh7IGRhdGE6IG1vY2tlZEFnZW50TW9kZWxzLCB0b3RhbDogbW9ja2VkQWdlbnRNb2RlbHMubGVuZ3RoIH0pXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH0sXG4gICh7IG1ldGhvZCwgcGF0aCwgYm9keSB9KSA9PiB7XG4gICAgaWYgKG1ldGhvZCA9PT0gJ1BPU1QnICYmIHBhdGggPT09ICdhZ2VudHMnKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKGJ1aWxkQ3JlYXRlZEFnZW50KGJvZHkpKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuICAoeyBtZXRob2QsIHBhdGggfSkgPT4ge1xuICAgIGNvbnN0IGFnZW50Q29ubmVjdG9yc01hdGNoID0gcGF0aC5tYXRjaCgvXmFnZW50c1xcLyhbXi9dKylcXC9jb25uZWN0b3JzJC8pXG4gICAgaWYgKCFhZ2VudENvbm5lY3RvcnNNYXRjaCkgcmV0dXJuIG51bGxcbiAgICBpZiAobWV0aG9kID09PSAnR0VUJykge1xuICAgICAgcmV0dXJuIGpzb25SZXNwb25zZShtb2NrZWRBZ2VudENvbm5lY3RvcnMpXG4gICAgfVxuICAgIGlmIChtZXRob2QgPT09ICdQT1NUJykge1xuICAgICAgcmV0dXJuIGpzb25SZXNwb25zZSh7XG4gICAgICAgIGFnZW50X2lkOiBhZ2VudENvbm5lY3RvcnNNYXRjaFsxXSxcbiAgICAgICAgY29ubmVjdG9yX3NsdWdzOiBbXSxcbiAgICAgICAgcmVxdWlyZXNfYXV0aDogW10sXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXVxuXG5jb25zdCBwYXJzZUJvZHkgPSAoaW5pdD86IEZldGNoSW5pdCk6IGFueSA9PiB7XG4gIGlmICghaW5pdD8uYm9keSkgcmV0dXJuIG51bGxcbiAgaWYgKHR5cGVvZiBpbml0LmJvZHkgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbFxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGluaXQuYm9keSlcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBzdHJpcEJhc2VVcmwgPSAodXJsOiBzdHJpbmcsIGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoIWJhc2VVcmwpIHJldHVybiBudWxsXG4gIGNvbnN0IG5vcm1hbGl6ZWRCYXNlID0gYmFzZVVybC5lbmRzV2l0aCgnLycpID8gYmFzZVVybC5zbGljZSgwLCAtMSkgOiBiYXNlVXJsXG4gIGlmICghdXJsLnN0YXJ0c1dpdGgobm9ybWFsaXplZEJhc2UpKSByZXR1cm4gbnVsbFxuICByZXR1cm4gdXJsLnNsaWNlKG5vcm1hbGl6ZWRCYXNlLmxlbmd0aCkucmVwbGFjZSgvXlxcLy8sICcnKVxufVxuXG5sZXQgb3JpZ2luYWxGZXRjaDogdHlwZW9mIHdpbmRvdy5mZXRjaCB8IG51bGwgPSBudWxsXG5sZXQgaW5zdGFsbGVkID0gZmFsc2VcblxuZXhwb3J0IGNvbnN0IGluc3RhbGxBYm1Nb2RhbEZldGNoTW9ja3MgPSAoKSA9PiB7XG4gIGlmIChpbnN0YWxsZWQpIHJldHVyblxuICBpbnN0YWxsZWQgPSB0cnVlXG4gIG9yaWdpbmFsRmV0Y2ggPSB3aW5kb3cuZmV0Y2guYmluZCh3aW5kb3cpXG5cbiAgY29uc3QgYmFzZVVybCA9IHByb2Nlc3MuZW52Lk1BSUFfVVJMIHx8ICcnXG5cbiAgd2luZG93LmZldGNoID0gKGFzeW5jIChpbnB1dDogRmV0Y2hJbnB1dCwgaW5pdD86IEZldGNoSW5pdCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgPyBpbnB1dCA6IChpbnB1dCBhcyBSZXF1ZXN0KS51cmxcbiAgICBjb25zdCBtZXRob2QgPSAoaW5pdD8ubWV0aG9kIHx8ICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIChpbnB1dCBhcyBSZXF1ZXN0KS5tZXRob2QpIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpXG4gICAgY29uc3QgcGF0aCA9IHN0cmlwQmFzZVVybCh1cmwsIGJhc2VVcmwpXG5cbiAgICBpZiAocGF0aCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgYm9keSA9IHBhcnNlQm9keShpbml0KVxuICAgICAgZm9yIChjb25zdCByZXNvbHZlciBvZiByZXNvbHZlcnMpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXNvbHZlcih7IG1ldGhvZCwgcGF0aCwgYm9keSB9KVxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW0RFViBtb2NrXSAke21ldGhvZH0gJHtwYXRofSDihpIgJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihgW0RFViBtb2NrXSAke21ldGhvZH0gJHtwYXRofSBubyB0aWVuZSBtb2NrIOKAlCBkZXZvbHZpZW5kbyAyMDAgdmFjw61vYClcbiAgICAgIHJldHVybiBqc29uUmVzcG9uc2Uoe30pXG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsRmV0Y2ggPyBvcmlnaW5hbEZldGNoKGlucHV0LCBpbml0KSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignZmV0Y2ggbm90IGF2YWlsYWJsZScpKVxuICB9KSBhcyB0eXBlb2Ygd2luZG93LmZldGNoXG59XG5cbmV4cG9ydCBjb25zdCB1bmluc3RhbGxBYm1Nb2RhbEZldGNoTW9ja3MgPSAoKSA9PiB7XG4gIGlmICghaW5zdGFsbGVkKSByZXR1cm5cbiAgaWYgKG9yaWdpbmFsRmV0Y2gpIHtcbiAgICB3aW5kb3cuZmV0Y2ggPSBvcmlnaW5hbEZldGNoXG4gIH1cbiAgb3JpZ2luYWxGZXRjaCA9IG51bGxcbiAgaW5zdGFsbGVkID0gZmFsc2Vcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUtBLElBQU1BLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJQyxJQUFhO0VBQUEsSUFBRUMsSUFBa0IsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUc7SUFBRUcsTUFBTSxFQUFFO0VBQUksQ0FBQztFQUFBLE9BQ3ZFLElBQUlDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNSLElBQUksQ0FBQyxFQUFBUyxhQUFBLENBQUFBLGFBQUEsS0FDNUJSLElBQUk7SUFDUFMsT0FBTyxFQUFBRCxhQUFBO01BQ0wsY0FBYyxFQUFFO0lBQWtCLEdBQzlCUixJQUFJLENBQUNTLE9BQU8sSUFBSSxDQUFDLENBQUM7RUFDdkIsRUFDRixDQUFDO0FBQUE7QUFFSixJQUFNQyxpQkFBaUIsR0FBRyxDQUN4QjtFQUNFQyxFQUFFLEVBQUUsQ0FBQztFQUNMQyxZQUFZLEVBQUUsUUFBUTtFQUN0QkMsV0FBVyxFQUFFLHlCQUF5QjtFQUN0Q0MsVUFBVSxFQUFFLFFBQVE7RUFDcEJDLFFBQVEsRUFBRSxRQUFRO0VBQ2xCQyxhQUFhLEVBQUU7QUFDakIsQ0FBQyxFQUNEO0VBQ0VMLEVBQUUsRUFBRSxDQUFDO0VB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
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Devuelve el rect del caret actual dentro de un contenedor contenteditable.
|
|
4
|
+
* Si no hay selección válida, retorna null.
|
|
5
|
+
*/
|
|
6
|
+
export var useCaretPosition = function useCaretPosition() {
|
|
7
|
+
return useCallback(function () {
|
|
8
|
+
var selection = window.getSelection();
|
|
9
|
+
if (!selection || selection.rangeCount === 0) return null;
|
|
10
|
+
var range = selection.getRangeAt(0).cloneRange();
|
|
11
|
+
range.collapse(true);
|
|
12
|
+
var rects = range.getClientRects();
|
|
13
|
+
var rect = null;
|
|
14
|
+
if (rects.length > 0) {
|
|
15
|
+
rect = rects.item(0);
|
|
16
|
+
} else {
|
|
17
|
+
var _span$parentNode;
|
|
18
|
+
// Fallback: insertar un span vacío para medir
|
|
19
|
+
var span = document.createElement('span');
|
|
20
|
+
span.textContent = "\u200B";
|
|
21
|
+
range.insertNode(span);
|
|
22
|
+
rect = span.getBoundingClientRect();
|
|
23
|
+
(_span$parentNode = span.parentNode) === null || _span$parentNode === void 0 || _span$parentNode.removeChild(span);
|
|
24
|
+
}
|
|
25
|
+
if (!rect) return null;
|
|
26
|
+
return {
|
|
27
|
+
top: rect.top,
|
|
28
|
+
left: rect.left,
|
|
29
|
+
bottom: rect.bottom,
|
|
30
|
+
right: rect.right,
|
|
31
|
+
height: rect.height
|
|
32
|
+
};
|
|
33
|
+
}, []);
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUNhcmV0UG9zaXRpb24iLCJzZWxlY3Rpb24iLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwicmFuZ2UiLCJnZXRSYW5nZUF0IiwiY2xvbmVSYW5nZSIsImNvbGxhcHNlIiwicmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInJlY3QiLCJsZW5ndGgiLCJpdGVtIiwiX3NwYW4kcGFyZW50Tm9kZSIsInNwYW4iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0Q29udGVudCIsImluc2VydE5vZGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJ0b3AiLCJsZWZ0IiwiYm90dG9tIiwicmlnaHQiLCJoZWlnaHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlQ2FyZXRQb3NpdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBDYXJldFJlY3QgPSB7XG4gIHRvcDogbnVtYmVyXG4gIGxlZnQ6IG51bWJlclxuICBib3R0b206IG51bWJlclxuICByaWdodDogbnVtYmVyXG4gIGhlaWdodDogbnVtYmVyXG59XG5cbi8qKlxuICogRGV2dWVsdmUgZWwgcmVjdCBkZWwgY2FyZXQgYWN0dWFsIGRlbnRybyBkZSB1biBjb250ZW5lZG9yIGNvbnRlbnRlZGl0YWJsZS5cbiAqIFNpIG5vIGhheSBzZWxlY2Npw7NuIHbDoWxpZGEsIHJldG9ybmEgbnVsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUNhcmV0UG9zaXRpb24gPSAoKSA9PiB7XG4gIHJldHVybiB1c2VDYWxsYmFjaygoKTogQ2FyZXRSZWN0IHwgbnVsbCA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybiBudWxsXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jbG9uZVJhbmdlKClcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuXG4gICAgY29uc3QgcmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpXG4gICAgbGV0IHJlY3Q6IERPTVJlY3QgfCBudWxsID0gbnVsbFxuICAgIGlmIChyZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICByZWN0ID0gcmVjdHMuaXRlbSgwKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogaW5zZXJ0YXIgdW4gc3BhbiB2YWPDrW8gcGFyYSBtZWRpclxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICAgICAgc3Bhbi50ZXh0Q29udGVudCA9ICdcXHUyMDBiJ1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKVxuICAgICAgcmVjdCA9IHNwYW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIHNwYW4ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoc3BhbilcbiAgICB9XG5cbiAgICBpZiAoIXJlY3QpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiByZWN0LnRvcCxcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgfVxuICB9LCBbXSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBVyxRQUFRLE9BQU87QUFVbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUEsRUFBUztFQUNwQyxPQUFPRCxXQUFXLENBQUMsWUFBd0I7SUFDekMsSUFBTUUsU0FBUyxHQUFHQyxNQUFNLENBQUNDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQ0YsU0FBUyxJQUFJQSxTQUFTLENBQUNHLFVBQVUsS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJO0lBQ3pELElBQU1DLEtBQUssR0FBR0osU0FBUyxDQUFDSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xERixLQUFLLENBQUNHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFFcEIsSUFBTUMsS0FBSyxHQUFHSixLQUFLLENBQUNLLGNBQWMsQ0FBQyxDQUFDO0lBQ3BDLElBQUlDLElBQW9CLEdBQUcsSUFBSTtJQUMvQixJQUFJRixLQUFLLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDcEJELElBQUksR0FBR0YsS0FBSyxDQUFDSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsTUFBTTtNQUFBLElBQUFDLGdCQUFBO01BQ0w7TUFDQSxJQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLE1BQU0sQ0FBQztNQUMzQ0YsSUFBSSxDQUFDRyxXQUFXLEdBQUcsUUFBUTtNQUMzQmIsS0FBSyxDQUFDYyxVQUFVLENBQUNKLElBQUksQ0FBQztNQUN0QkosSUFBSSxHQUFHSSxJQUFJLENBQUNLLHFCQUFxQixDQUFDLENBQUM7TUFDbkMsQ0FBQU4sZ0JBQUEsR0FBQUMsSUFBSSxDQUFDTSxVQUFVLGNBQUFQLGdCQUFBLGVBQWZBLGdCQUFBLENBQWlCUSxXQUFXLENBQUNQLElBQUksQ0FBQztJQUNwQztJQUVBLElBQUksQ0FBQ0osSUFBSSxFQUFFLE9BQU8sSUFBSTtJQUV0QixPQUFPO01BQ0xZLEdBQUcsRUFBRVosSUFBSSxDQUFDWSxHQUFHO01BQ2JDLElBQUksRUFBRWIsSUFBSSxDQUFDYSxJQUFJO01BQ2ZDLE1BQU0sRUFBRWQsSUFBSSxDQUFDYyxNQUFNO01BQ25CQyxLQUFLLEVBQUVmLElBQUksQ0FBQ2UsS0FBSztNQUNqQkMsTUFBTSxFQUFFaEIsSUFBSSxDQUFDZ0I7SUFDZixDQUFDO0VBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNSLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbmV4cG9ydCB0eXBlIFVzZUNoYXRNYW5hZ2VyUHJvcHMgPSB7XG4gIGNoYXRJZD86IHN0cmluZ1xuICB1c2VySW5pdGlhbE1lc3NhZ2U/OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gIH1cbiAgb25FcnJvcj86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbn1cblxuZXhwb3J0IHR5cGUgU2VuZE1lc3NhZ2VPcHRpb25zID0ge1xuICBwcm9qZWN0Q2hhbmdlZD86IFByb2plY3RcbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgZmFxSWQ/OiBzdHJpbmdcbiAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG59XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
|