@projectcor/maia-components 2.11.36-4 → 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.
Files changed (87) hide show
  1. package/lib/App.js +24 -11
  2. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +28 -0
  3. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +84 -0
  4. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +123 -0
  5. package/lib/components/atoms/ContextMentionChip/index.js +4 -0
  6. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +85 -0
  7. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
  8. package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
  9. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +188 -0
  10. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +98 -0
  11. package/lib/components/atoms/ContextMentionItem/index.js +2 -0
  12. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +131 -0
  13. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +63 -0
  14. package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
  15. package/lib/components/atoms/MAIAInput/MAIAInput.js +61 -191
  16. package/lib/components/atoms/icons/NotionIcon.js +36 -0
  17. package/lib/components/atoms/icons/RocketIcon.js +35 -0
  18. package/lib/components/atoms/icons/index.js +3 -1
  19. package/lib/components/index.js +2 -1
  20. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
  21. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +483 -0
  22. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +238 -0
  23. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +437 -0
  24. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +3 -0
  25. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
  26. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
  27. package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +80 -0
  28. package/lib/components/molecules/AbmSection/index.js +2 -2
  29. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -1
  30. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
  31. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +21 -2
  32. package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
  33. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +16 -6
  34. package/lib/components/molecules/ChatAIModal/constants.js +6 -2
  35. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
  36. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +55 -0
  37. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
  38. package/lib/components/molecules/ContextMentionInput/index.js +2 -0
  39. package/lib/components/molecules/SchedulesPage/SchedulesPage.js +53 -41
  40. package/lib/components/molecules/Sidebar/Sidebar.js +25 -8
  41. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +5 -1
  42. package/lib/components/molecules/SkillsPage/SkillsPage.js +747 -0
  43. package/lib/components/molecules/SkillsPage/index.js +2 -0
  44. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +183 -48
  45. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
  46. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
  47. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
  48. package/lib/constants/taskLinkIcon.js +6 -0
  49. package/lib/dev/DevAbmAgentModal.js +114 -0
  50. package/lib/dev/DevContextMentionInput.js +65 -0
  51. package/lib/dev/Providers.js +11 -6
  52. package/lib/dev/mocks/abmModalMocks.js +200 -0
  53. package/lib/hooks/useCaretPosition.js +35 -0
  54. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  55. package/lib/hooks/useChatManager/useChatManager.js +21 -11
  56. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  57. package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
  58. package/lib/hooks/useContextMentions.js +204 -0
  59. package/lib/hooks/useEntitySearch.js +405 -0
  60. package/lib/hooks/useEvent.js +5 -1
  61. package/lib/hooks/useMentionAllowedTypes.js +81 -0
  62. package/lib/hooks/useMentionPopover.js +284 -0
  63. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
  64. package/lib/lang/br/index.js +139 -1
  65. package/lib/lang/en/index.js +139 -1
  66. package/lib/lang/es/index.js +139 -1
  67. package/lib/lang/fr/index.js +147 -9
  68. package/lib/services/maia/Agents/connectors.js +88 -0
  69. package/lib/services/maia/Agents/skills.js +164 -0
  70. package/lib/services/maia/Chats/getChatMessages.js +29 -4
  71. package/lib/services/maia/Orchestrator/orchestrator.js +8 -5
  72. package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
  73. package/lib/services/query/entitySearchQuery.js +16 -0
  74. package/lib/services/query/usersDirectoryQuery.js +19 -0
  75. package/lib/services/utils/mapChatMessages.js +12 -5
  76. package/lib/types/Chat.js +1 -1
  77. package/lib/types/agent.js +1 -1
  78. package/lib/types/agentModal.js +1 -1
  79. package/lib/types/agentSkill.js +2 -0
  80. package/lib/types/contextMention.js +37 -0
  81. package/lib/utils/contextMentionIcons.js +117 -0
  82. package/lib/utils/contextMentionLabel.js +4 -0
  83. package/lib/utils/contextMentionTypeLabel.js +17 -0
  84. package/lib/utils/renderContextMentions.js +216 -0
  85. package/package.json +1 -1
  86. package/lib/components/molecules/AbmSection/AbmActionsSection.js +0 -136
  87. 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcblxuZXhwb3J0IHR5cGUgVXNlQ2hhdE1hbmFnZXJQcm9wcyA9IHtcbiAgY2hhdElkPzogc3RyaW5nXG4gIHVzZXJJbml0aWFsTWVzc2FnZT86IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgfVxuICBvbkVycm9yPzogKCkgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgYWdlbnRzPzogQWdlbnRbXVxufVxuXG5leHBvcnQgdHlwZSBTZW5kTWVzc2FnZU9wdGlvbnMgPSB7XG4gIHByb2plY3RDaGFuZ2VkPzogUHJvamVjdFxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBmYXFJZD86IHN0cmluZ1xuICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xufVxuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbmV4cG9ydCB0eXBlIFVzZUNoYXRNYW5hZ2VyUHJvcHMgPSB7XG4gIGNoYXRJZD86IHN0cmluZ1xuICB1c2VySW5pdGlhbE1lc3NhZ2U/OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gIH1cbiAgb25FcnJvcj86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbn1cblxuZXhwb3J0IHR5cGUgU2VuZE1lc3NhZ2VPcHRpb25zID0ge1xuICBwcm9qZWN0Q2hhbmdlZD86IFByb2plY3RcbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgZmFxSWQ/OiBzdHJpbmdcbiAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG59XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=