@crestapps/ai-chat-ui 2.0.0-preview.215 → 2.0.0-preview.223
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/dist/ai-chat-widget.js +762 -964
- package/dist/ai-chat-widget.js.map +1 -1
- package/dist/ai-chat-widget.min.js +1 -1
- package/dist/ai-chat-widget.min.js.map +1 -1
- package/dist/ai-chat.css +0 -2
- package/dist/ai-chat.js +2380 -3698
- package/dist/ai-chat.js.map +1 -1
- package/dist/ai-chat.min.css +1 -1
- package/dist/ai-chat.min.js +78 -1
- package/dist/ai-chat.min.js.map +1 -1
- package/dist/chat-image-carousel.css +0 -2
- package/dist/chat-image-carousel.js +306 -482
- package/dist/chat-image-carousel.js.map +1 -1
- package/dist/chat-image-carousel.min.css +1 -1
- package/dist/chat-image-carousel.min.js +1 -1
- package/dist/chat-image-carousel.min.js.map +1 -1
- package/dist/chat-interaction-settings.js +221 -293
- package/dist/chat-interaction-settings.js.map +1 -1
- package/dist/chat-interaction-settings.min.js +1 -1
- package/dist/chat-interaction-settings.min.js.map +1 -1
- package/dist/chat-interaction.js +2330 -3557
- package/dist/chat-interaction.js.map +1 -1
- package/dist/chat-interaction.min.js +62 -1
- package/dist/chat-interaction.min.js.map +1 -1
- package/dist/chat-markers.js +193 -485
- package/dist/chat-markers.js.map +1 -1
- package/dist/chat-markers.min.js +2 -1
- package/dist/chat-markers.min.js.map +1 -1
- package/dist/chat-widget.css +0 -2
- package/dist/chat-widget.min.css +1 -1
- package/dist/document-drop-zone.css +0 -2
- package/dist/document-drop-zone.js +127 -153
- package/dist/document-drop-zone.js.map +1 -1
- package/dist/document-drop-zone.min.css +1 -1
- package/dist/document-drop-zone.min.js +1 -1
- package/dist/document-drop-zone.min.js.map +1 -1
- package/dist/realtime-audio.js +1639 -2504
- package/dist/realtime-audio.js.map +1 -1
- package/dist/realtime-audio.min.js +3 -1
- package/dist/realtime-audio.min.js.map +1 -1
- package/dist/technical-name-generator.js +58 -80
- package/dist/technical-name-generator.js.map +1 -1
- package/dist/technical-name-generator.min.js +1 -1
- package/dist/technical-name-generator.min.js.map +1 -1
- package/package.json +1 -5
- package/dist/ai-chat.css.map +0 -1
- package/dist/chat-image-carousel.css.map +0 -1
- package/dist/chat-widget.css.map +0 -1
- package/dist/document-drop-zone.css.map +0 -1
|
@@ -1,297 +1,225 @@
|
|
|
1
1
|
/*
|
|
2
|
-
** NOTE: This file is generated by
|
|
3
|
-
**
|
|
2
|
+
** NOTE: This file is generated by the assets build (npm run build) and should not be edited directly!
|
|
3
|
+
** Edit its sources under Assets/ and rebuild; see Assets.json for the files it is built from.
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
cb.addEventListener('change', debounceSave);
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
// Expose helpers for callers that add/remove rows dynamically (e.g. prompt templates).
|
|
228
|
-
return {
|
|
229
|
-
scheduleSave: debounceSave,
|
|
230
|
-
collectSettings: collectSettings
|
|
231
|
-
};
|
|
232
|
-
};
|
|
233
|
-
function parseJsonAttribute(element, attributeName) {
|
|
234
|
-
var rawValue = element.getAttribute(attributeName);
|
|
235
|
-
if (!rawValue) {
|
|
236
|
-
return null;
|
|
237
|
-
}
|
|
238
|
-
try {
|
|
239
|
-
return JSON.parse(rawValue);
|
|
240
|
-
} catch (error) {
|
|
241
|
-
console.error('Failed to parse chat interaction settings config JSON.', error);
|
|
242
|
-
return null;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
function initializeFromElement(element) {
|
|
246
|
-
if (!element || element.dataset.chatInteractionSettingsInitialized === 'true') {
|
|
247
|
-
return element ? element.__chatInteractionSettingsState || null : null;
|
|
248
|
-
}
|
|
249
|
-
var config = parseJsonAttribute(element, 'data-chat-interaction-settings-config');
|
|
250
|
-
if (!config) {
|
|
251
|
-
return null;
|
|
252
|
-
}
|
|
253
|
-
var state = window.initializeChatInteractionSettings(config);
|
|
254
|
-
if (!state) {
|
|
255
|
-
return null;
|
|
256
|
-
}
|
|
257
|
-
element.dataset.chatInteractionSettingsInitialized = 'true';
|
|
258
|
-
element.__chatInteractionSettingsState = state;
|
|
259
|
-
return state;
|
|
260
|
-
}
|
|
261
|
-
function scanForAutoInitialization(root) {
|
|
262
|
-
if (!root || typeof root.querySelectorAll !== 'function') {
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
if (typeof root.matches === 'function' && root.matches('[data-chat-interaction-settings-config]')) {
|
|
266
|
-
initializeFromElement(root);
|
|
267
|
-
}
|
|
268
|
-
root.querySelectorAll('[data-chat-interaction-settings-config]').forEach(initializeFromElement);
|
|
269
|
-
}
|
|
270
|
-
function startAutoInitialization() {
|
|
271
|
-
scanForAutoInitialization(document);
|
|
272
|
-
if (typeof MutationObserver === 'undefined') {
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
var observer = new MutationObserver(function (mutations) {
|
|
276
|
-
mutations.forEach(function (mutation) {
|
|
277
|
-
mutation.addedNodes.forEach(function (node) {
|
|
278
|
-
if (node && node.nodeType === 1) {
|
|
279
|
-
scanForAutoInitialization(node);
|
|
280
|
-
}
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
});
|
|
284
|
-
observer.observe(document.body, {
|
|
285
|
-
childList: true,
|
|
286
|
-
subtree: true
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
if (document.readyState === 'loading') {
|
|
290
|
-
document.addEventListener('DOMContentLoaded', startAutoInitialization, {
|
|
291
|
-
once: true
|
|
292
|
-
});
|
|
293
|
-
} else {
|
|
294
|
-
startAutoInitialization();
|
|
295
|
-
}
|
|
5
|
+
(function() {
|
|
6
|
+
//#region src/Resources/CrestApps.AI.Resources/Assets/js/chat-interaction-settings.js
|
|
7
|
+
(function() {
|
|
8
|
+
"use strict";
|
|
9
|
+
function getStatusElement(id) {
|
|
10
|
+
return id ? document.getElementById(id) : null;
|
|
11
|
+
}
|
|
12
|
+
function showSaveIndicator(statusEl, text, cssClass) {
|
|
13
|
+
if (!statusEl) return;
|
|
14
|
+
statusEl.classList.remove.apply(statusEl.classList, [
|
|
15
|
+
"text-success",
|
|
16
|
+
"text-warning",
|
|
17
|
+
"text-danger",
|
|
18
|
+
"text-bg-light",
|
|
19
|
+
"text-bg-success",
|
|
20
|
+
"text-bg-warning",
|
|
21
|
+
"text-bg-danger"
|
|
22
|
+
]);
|
|
23
|
+
if (cssClass) statusEl.classList.add(cssClass);
|
|
24
|
+
statusEl.textContent = text;
|
|
25
|
+
}
|
|
26
|
+
function getValidationMessage(input) {
|
|
27
|
+
if (!input || input.type !== "number") return null;
|
|
28
|
+
var value = (input.value || "").trim();
|
|
29
|
+
if (value === "") return null;
|
|
30
|
+
var numericValue = Number(value);
|
|
31
|
+
if (Number.isNaN(numericValue)) return "Enter a valid number.";
|
|
32
|
+
var min = input.getAttribute("min");
|
|
33
|
+
if (min !== null && min !== "" && numericValue < Number(min)) return "Value must be at least " + min + ".";
|
|
34
|
+
var max = input.getAttribute("max");
|
|
35
|
+
if (max !== null && max !== "" && numericValue > Number(max)) return "Value must be no more than " + max + ".";
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function getOrCreateValidationMessage(input) {
|
|
39
|
+
var message = input.parentElement.querySelector(".invalid-feedback[data-setting-validation]");
|
|
40
|
+
if (!message) {
|
|
41
|
+
message = document.createElement("div");
|
|
42
|
+
message.className = "invalid-feedback";
|
|
43
|
+
message.dataset.settingValidation = "true";
|
|
44
|
+
input.parentElement.appendChild(message);
|
|
45
|
+
}
|
|
46
|
+
return message;
|
|
47
|
+
}
|
|
48
|
+
function validateSettingInput(input) {
|
|
49
|
+
var message = getValidationMessage(input);
|
|
50
|
+
var validation = getOrCreateValidationMessage(input);
|
|
51
|
+
var isValid = !message;
|
|
52
|
+
input.classList.toggle("is-invalid", !isValid);
|
|
53
|
+
validation.textContent = message || "";
|
|
54
|
+
validation.style.display = isValid ? "none" : "block";
|
|
55
|
+
return isValid;
|
|
56
|
+
}
|
|
57
|
+
function hasInvalidSettings() {
|
|
58
|
+
var isValid = true;
|
|
59
|
+
document.querySelectorAll(".setting-input[type=\"number\"]").forEach(function(input) {
|
|
60
|
+
if (!validateSettingInput(input)) isValid = false;
|
|
61
|
+
});
|
|
62
|
+
return !isValid;
|
|
63
|
+
}
|
|
64
|
+
function collectSettings() {
|
|
65
|
+
var settings = {};
|
|
66
|
+
document.querySelectorAll(".setting-input").forEach(function(el) {
|
|
67
|
+
var key = el.dataset.setting;
|
|
68
|
+
if (!key) return;
|
|
69
|
+
if (el.type === "checkbox") {
|
|
70
|
+
settings[key] = el.checked;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
var val = (el.value || "").trim();
|
|
74
|
+
if (el.type === "number") settings[key] = val === "" ? null : parseFloat(val);
|
|
75
|
+
else settings[key] = val || null;
|
|
76
|
+
});
|
|
77
|
+
var groups = {};
|
|
78
|
+
document.querySelectorAll(".capability-checkbox").forEach(function(cb) {
|
|
79
|
+
var group = cb.dataset.group;
|
|
80
|
+
if (!group) return;
|
|
81
|
+
if (!groups[group]) groups[group] = [];
|
|
82
|
+
if (cb.checked) groups[group].push(cb.value);
|
|
83
|
+
});
|
|
84
|
+
for (var g in groups) settings[g] = groups[g];
|
|
85
|
+
var promptTemplates = [];
|
|
86
|
+
document.querySelectorAll(".prompt-template-card").forEach(function(card) {
|
|
87
|
+
var idEl = card.querySelector(".prompt-template-id-input");
|
|
88
|
+
var paramsEl = card.querySelector(".prompt-template-parameters-input");
|
|
89
|
+
var tid = idEl ? idEl.value : card.dataset.templateId || "";
|
|
90
|
+
if (!tid) return;
|
|
91
|
+
promptTemplates.push({
|
|
92
|
+
templateId: tid,
|
|
93
|
+
promptParameters: paramsEl ? (paramsEl.value || "").trim() : ""
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
if (promptTemplates.length > 0) {
|
|
97
|
+
settings.promptTemplateIds = promptTemplates.map(function(t) {
|
|
98
|
+
return t.templateId;
|
|
99
|
+
});
|
|
100
|
+
settings.promptTemplates = promptTemplates;
|
|
101
|
+
}
|
|
102
|
+
return settings;
|
|
103
|
+
}
|
|
104
|
+
window.initializeChatInteractionSettings = function(config) {
|
|
105
|
+
config = config || {};
|
|
106
|
+
var itemId = config.itemId;
|
|
107
|
+
if (!itemId) {
|
|
108
|
+
console.warn("initializeChatInteractionSettings: itemId is required.");
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (typeof signalR === "undefined") {
|
|
112
|
+
console.warn("initializeChatInteractionSettings: SignalR client is not loaded.");
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
var hubUrl = config.hubUrl || "/hubs/chat-interaction";
|
|
116
|
+
var statusEl = getStatusElement(config.statusElementId || "chat-settings-save-status");
|
|
117
|
+
var dataSourceSelect = config.dataSourceSelectId ? document.getElementById(config.dataSourceSelectId) : document.querySelector(".setting-input[data-setting=\"dataSourceId\"]");
|
|
118
|
+
function toggleDataSourceDependentFields() {
|
|
119
|
+
var hasDataSource = !!(dataSourceSelect && dataSourceSelect.value && dataSourceSelect.value.trim() !== "");
|
|
120
|
+
document.querySelectorAll(".rag-data-source-filter-dependent").forEach(function(element) {
|
|
121
|
+
element.classList.toggle("d-none", !hasDataSource);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (dataSourceSelect) dataSourceSelect.addEventListener("change", toggleDataSourceDependentFields);
|
|
125
|
+
toggleDataSourceDependentFields();
|
|
126
|
+
var connection = new signalR.HubConnectionBuilder().withUrl(hubUrl).withAutomaticReconnect().build();
|
|
127
|
+
var connectionStartPromise = null;
|
|
128
|
+
function ensureConnectionStarted() {
|
|
129
|
+
if (connection.state === signalR.HubConnectionState.Connected) return Promise.resolve();
|
|
130
|
+
if (!connectionStartPromise) connectionStartPromise = connection.start().catch(function(err) {
|
|
131
|
+
console.error("SignalR connection error:", err);
|
|
132
|
+
throw err;
|
|
133
|
+
}).finally(function() {
|
|
134
|
+
connectionStartPromise = null;
|
|
135
|
+
});
|
|
136
|
+
return connectionStartPromise;
|
|
137
|
+
}
|
|
138
|
+
connection.on("SettingsSaved", function(savedItemId) {
|
|
139
|
+
if (savedItemId !== itemId) return;
|
|
140
|
+
showSaveIndicator(statusEl, "Saved ✓", "text-success");
|
|
141
|
+
});
|
|
142
|
+
connection.on("ReceiveError", function(message) {
|
|
143
|
+
console.error("Chat interaction error:", message);
|
|
144
|
+
showSaveIndicator(statusEl, "Save failed", "text-danger");
|
|
145
|
+
});
|
|
146
|
+
ensureConnectionStarted().catch(function() {
|
|
147
|
+
showSaveIndicator(statusEl, "Offline", "text-danger");
|
|
148
|
+
});
|
|
149
|
+
var debounceTimer = null;
|
|
150
|
+
function debounceSave() {
|
|
151
|
+
clearTimeout(debounceTimer);
|
|
152
|
+
if (hasInvalidSettings()) {
|
|
153
|
+
showSaveIndicator(statusEl, "Fix errors", "text-danger");
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
showSaveIndicator(statusEl, "Saving…", "text-warning");
|
|
157
|
+
debounceTimer = setTimeout(function() {
|
|
158
|
+
var settings = collectSettings();
|
|
159
|
+
ensureConnectionStarted().then(function() {
|
|
160
|
+
return connection.invoke("SaveSettings", itemId, settings);
|
|
161
|
+
}).catch(function(err) {
|
|
162
|
+
console.error("Failed to save chat interaction settings:", err);
|
|
163
|
+
showSaveIndicator(statusEl, "Save failed", "text-danger");
|
|
164
|
+
});
|
|
165
|
+
}, 500);
|
|
166
|
+
}
|
|
167
|
+
document.querySelectorAll(".setting-input").forEach(function(el) {
|
|
168
|
+
if (el.type === "number") validateSettingInput(el);
|
|
169
|
+
el.addEventListener("input", debounceSave);
|
|
170
|
+
el.addEventListener("change", debounceSave);
|
|
171
|
+
el.addEventListener("blur", debounceSave);
|
|
172
|
+
});
|
|
173
|
+
document.querySelectorAll(".capability-checkbox").forEach(function(cb) {
|
|
174
|
+
cb.addEventListener("change", debounceSave);
|
|
175
|
+
});
|
|
176
|
+
return {
|
|
177
|
+
scheduleSave: debounceSave,
|
|
178
|
+
collectSettings
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
function parseJsonAttribute(element, attributeName) {
|
|
182
|
+
var rawValue = element.getAttribute(attributeName);
|
|
183
|
+
if (!rawValue) return null;
|
|
184
|
+
try {
|
|
185
|
+
return JSON.parse(rawValue);
|
|
186
|
+
} catch (error) {
|
|
187
|
+
console.error("Failed to parse chat interaction settings config JSON.", error);
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function initializeFromElement(element) {
|
|
192
|
+
if (!element || element.dataset.chatInteractionSettingsInitialized === "true") return element ? element.__chatInteractionSettingsState || null : null;
|
|
193
|
+
var config = parseJsonAttribute(element, "data-chat-interaction-settings-config");
|
|
194
|
+
if (!config) return null;
|
|
195
|
+
var state = window.initializeChatInteractionSettings(config);
|
|
196
|
+
if (!state) return null;
|
|
197
|
+
element.dataset.chatInteractionSettingsInitialized = "true";
|
|
198
|
+
element.__chatInteractionSettingsState = state;
|
|
199
|
+
return state;
|
|
200
|
+
}
|
|
201
|
+
function scanForAutoInitialization(root) {
|
|
202
|
+
if (!root || typeof root.querySelectorAll !== "function") return;
|
|
203
|
+
if (typeof root.matches === "function" && root.matches("[data-chat-interaction-settings-config]")) initializeFromElement(root);
|
|
204
|
+
root.querySelectorAll("[data-chat-interaction-settings-config]").forEach(initializeFromElement);
|
|
205
|
+
}
|
|
206
|
+
function startAutoInitialization() {
|
|
207
|
+
scanForAutoInitialization(document);
|
|
208
|
+
if (typeof MutationObserver === "undefined") return;
|
|
209
|
+
new MutationObserver(function(mutations) {
|
|
210
|
+
mutations.forEach(function(mutation) {
|
|
211
|
+
mutation.addedNodes.forEach(function(node) {
|
|
212
|
+
if (node && node.nodeType === 1) scanForAutoInitialization(node);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}).observe(document.body, {
|
|
216
|
+
childList: true,
|
|
217
|
+
subtree: true
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", startAutoInitialization, { once: true });
|
|
221
|
+
else startAutoInitialization();
|
|
222
|
+
})();
|
|
223
|
+
//#endregion
|
|
296
224
|
})();
|
|
297
225
|
//# sourceMappingURL=chat-interaction-settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["chat-interaction-settings.js"],"names":["getStatusElement","id","document","getElementById","showSaveIndicator","statusEl","text","cssClass","statusClasses","classList","remove","apply","add","textContent","getValidationMessage","input","type","value","trim","numericValue","Number","isNaN","min","getAttribute","max","getOrCreateValidationMessage","message","parentElement","querySelector","createElement","className","dataset","settingValidation","appendChild","validateSettingInput","validation","isValid","toggle","style","display","hasInvalidSettings","querySelectorAll","forEach","collectSettings","settings","el","key","setting","checked","val","parseFloat","groups","cb","group","push","g","promptTemplates","card","idEl","paramsEl","tid","templateId","promptParameters","length","promptTemplateIds","map","t","window","initializeChatInteractionSettings","config","itemId","console","warn","signalR","hubUrl","statusElementId","dataSourceSelect","dataSourceSelectId","toggleDataSourceDependentFields","hasDataSource","element","addEventListener","connection","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","connectionStartPromise","ensureConnectionStarted","state","HubConnectionState","Connected","Promise","resolve","start","err","error","on","savedItemId","debounceTimer","debounceSave","clearTimeout","setTimeout","then","invoke","scheduleSave","parseJsonAttribute","attributeName","rawValue","JSON","parse","initializeFromElement","chatInteractionSettingsInitialized","__chatInteractionSettingsState","scanForAutoInitialization","root","matches","startAutoInitialization","MutationObserver","observer","mutations","mutation","addedNodes","node","nodeType","observe","body","childList","subtree","readyState","once"],"mappings":"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","file":"chat-interaction-settings.js","sourcesContent":["// Autosave + UI plumbing for the Chat Interaction \"Interaction Settings\" pane.\n// This is the source-of-truth shared between Mvc.Web and Blazor.Web so both\n// UIs behave identically.\n//\n// Usage:\n// window.initializeChatInteractionSettings({\n// itemId: 'abc123',\n// hubUrl: '/hubs/chat-interaction',\n// statusElementId: 'chat-settings-save-status',\n// dataSourceSelectId: 'chat-setting-data-source',\n// });\n\n(function () {\n 'use strict';\n\n function getStatusElement(id) {\n return id ? document.getElementById(id) : null;\n }\n\n function showSaveIndicator(statusEl, text, cssClass) {\n if (!statusEl) {\n return;\n }\n\n var statusClasses = ['text-success', 'text-warning', 'text-danger', 'text-bg-light', 'text-bg-success', 'text-bg-warning', 'text-bg-danger'];\n statusEl.classList.remove.apply(statusEl.classList, statusClasses);\n if (cssClass) {\n statusEl.classList.add(cssClass);\n }\n\n statusEl.textContent = text;\n }\n\n function getValidationMessage(input) {\n if (!input || input.type !== 'number') {\n return null;\n }\n\n var value = (input.value || '').trim();\n if (value === '') {\n return null;\n }\n\n var numericValue = Number(value);\n if (Number.isNaN(numericValue)) {\n return 'Enter a valid number.';\n }\n\n var min = input.getAttribute('min');\n if (min !== null && min !== '' && numericValue < Number(min)) {\n return 'Value must be at least ' + min + '.';\n }\n\n var max = input.getAttribute('max');\n if (max !== null && max !== '' && numericValue > Number(max)) {\n return 'Value must be no more than ' + max + '.';\n }\n\n return null;\n }\n\n function getOrCreateValidationMessage(input) {\n var message = input.parentElement.querySelector('.invalid-feedback[data-setting-validation]');\n if (!message) {\n message = document.createElement('div');\n message.className = 'invalid-feedback';\n message.dataset.settingValidation = 'true';\n input.parentElement.appendChild(message);\n }\n\n return message;\n }\n\n function validateSettingInput(input) {\n var message = getValidationMessage(input);\n var validation = getOrCreateValidationMessage(input);\n var isValid = !message;\n\n input.classList.toggle('is-invalid', !isValid);\n validation.textContent = message || '';\n validation.style.display = isValid ? 'none' : 'block';\n\n return isValid;\n }\n\n function hasInvalidSettings() {\n var isValid = true;\n document.querySelectorAll('.setting-input[type=\"number\"]').forEach(function (input) {\n if (!validateSettingInput(input)) {\n isValid = false;\n }\n });\n\n return !isValid;\n }\n\n function collectSettings() {\n var settings = {};\n\n document.querySelectorAll('.setting-input').forEach(function (el) {\n var key = el.dataset.setting;\n if (!key) {\n return;\n }\n\n if (el.type === 'checkbox') {\n settings[key] = el.checked;\n return;\n }\n\n var val = (el.value || '').trim();\n if (el.type === 'number') {\n settings[key] = val === '' ? null : parseFloat(val);\n } else {\n settings[key] = val || null;\n }\n });\n\n var groups = {};\n document.querySelectorAll('.capability-checkbox').forEach(function (cb) {\n var group = cb.dataset.group;\n if (!group) {\n return;\n }\n\n if (!groups[group]) {\n groups[group] = [];\n }\n\n if (cb.checked) {\n groups[group].push(cb.value);\n }\n });\n\n for (var g in groups) {\n settings[g] = groups[g];\n }\n\n // Prompt template cards\n var promptTemplates = [];\n document.querySelectorAll('.prompt-template-card').forEach(function (card) {\n var idEl = card.querySelector('.prompt-template-id-input');\n var paramsEl = card.querySelector('.prompt-template-parameters-input');\n var tid = idEl ? idEl.value : (card.dataset.templateId || '');\n if (!tid) {\n return;\n }\n\n promptTemplates.push({\n templateId: tid,\n promptParameters: paramsEl ? (paramsEl.value || '').trim() : '',\n });\n });\n\n if (promptTemplates.length > 0) {\n settings.promptTemplateIds = promptTemplates.map(function (t) { return t.templateId; });\n settings.promptTemplates = promptTemplates;\n }\n\n return settings;\n }\n\n window.initializeChatInteractionSettings = function (config) {\n config = config || {};\n\n var itemId = config.itemId;\n if (!itemId) {\n console.warn('initializeChatInteractionSettings: itemId is required.');\n return;\n }\n\n if (typeof signalR === 'undefined') {\n console.warn('initializeChatInteractionSettings: SignalR client is not loaded.');\n return;\n }\n\n var hubUrl = config.hubUrl || '/hubs/chat-interaction';\n var statusEl = getStatusElement(config.statusElementId || 'chat-settings-save-status');\n var dataSourceSelect = config.dataSourceSelectId\n ? document.getElementById(config.dataSourceSelectId)\n : document.querySelector('.setting-input[data-setting=\"dataSourceId\"]');\n\n // Source-dependent visibility (Filter field shows only when a data source is selected).\n function toggleDataSourceDependentFields() {\n var hasDataSource = !!(dataSourceSelect && dataSourceSelect.value && dataSourceSelect.value.trim() !== '');\n document.querySelectorAll('.rag-data-source-filter-dependent').forEach(function (element) {\n element.classList.toggle('d-none', !hasDataSource);\n });\n }\n\n if (dataSourceSelect) {\n dataSourceSelect.addEventListener('change', toggleDataSourceDependentFields);\n }\n\n toggleDataSourceDependentFields();\n\n var connection = new signalR.HubConnectionBuilder()\n .withUrl(hubUrl)\n .withAutomaticReconnect()\n .build();\n\n var connectionStartPromise = null;\n\n function ensureConnectionStarted() {\n if (connection.state === signalR.HubConnectionState.Connected) {\n return Promise.resolve();\n }\n\n if (!connectionStartPromise) {\n connectionStartPromise = connection.start()\n .catch(function (err) {\n console.error('SignalR connection error:', err);\n throw err;\n })\n .finally(function () {\n connectionStartPromise = null;\n });\n }\n\n return connectionStartPromise;\n }\n\n connection.on('SettingsSaved', function (savedItemId) {\n if (savedItemId !== itemId) {\n return;\n }\n\n showSaveIndicator(statusEl, 'Saved \\u2713', 'text-success');\n });\n\n connection.on('ReceiveError', function (message) {\n console.error('Chat interaction error:', message);\n showSaveIndicator(statusEl, 'Save failed', 'text-danger');\n });\n\n ensureConnectionStarted().catch(function () {\n showSaveIndicator(statusEl, 'Offline', 'text-danger');\n });\n\n var debounceTimer = null;\n\n function debounceSave() {\n clearTimeout(debounceTimer);\n if (hasInvalidSettings()) {\n showSaveIndicator(statusEl, 'Fix errors', 'text-danger');\n return;\n }\n\n showSaveIndicator(statusEl, 'Saving\\u2026', 'text-warning');\n debounceTimer = setTimeout(function () {\n var settings = collectSettings();\n ensureConnectionStarted()\n .then(function () {\n return connection.invoke('SaveSettings', itemId, settings);\n })\n .catch(function (err) {\n console.error('Failed to save chat interaction settings:', err);\n showSaveIndicator(statusEl, 'Save failed', 'text-danger');\n });\n }, 500);\n }\n\n document.querySelectorAll('.setting-input').forEach(function (el) {\n if (el.type === 'number') {\n validateSettingInput(el);\n }\n\n el.addEventListener('input', debounceSave);\n el.addEventListener('change', debounceSave);\n el.addEventListener('blur', debounceSave);\n });\n\n document.querySelectorAll('.capability-checkbox').forEach(function (cb) {\n cb.addEventListener('change', debounceSave);\n });\n\n // Expose helpers for callers that add/remove rows dynamically (e.g. prompt templates).\n return {\n scheduleSave: debounceSave,\n collectSettings: collectSettings,\n };\n };\n\n function parseJsonAttribute(element, attributeName) {\n var rawValue = element.getAttribute(attributeName);\n if (!rawValue) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n }\n catch (error) {\n console.error('Failed to parse chat interaction settings config JSON.', error);\n return null;\n }\n }\n\n function initializeFromElement(element) {\n if (!element || element.dataset.chatInteractionSettingsInitialized === 'true') {\n return element ? element.__chatInteractionSettingsState || null : null;\n }\n\n var config = parseJsonAttribute(element, 'data-chat-interaction-settings-config');\n if (!config) {\n return null;\n }\n\n var state = window.initializeChatInteractionSettings(config);\n if (!state) {\n return null;\n }\n\n element.dataset.chatInteractionSettingsInitialized = 'true';\n element.__chatInteractionSettingsState = state;\n\n return state;\n }\n\n function scanForAutoInitialization(root) {\n if (!root || typeof root.querySelectorAll !== 'function') {\n return;\n }\n\n if (typeof root.matches === 'function' && root.matches('[data-chat-interaction-settings-config]')) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll('[data-chat-interaction-settings-config]').forEach(initializeFromElement);\n }\n\n function startAutoInitialization() {\n scanForAutoInitialization(document);\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n if (node && node.nodeType === 1) {\n scanForAutoInitialization(node);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', startAutoInitialization, { once: true });\n } else {\n startAutoInitialization();\n }\n})();\n"]}
|
|
1
|
+
{"version":3,"file":"chat-interaction-settings.js","sources":["../../Assets/js/chat-interaction-settings.js"],"sourcesContent":["// Autosave + UI plumbing for the Chat Interaction \"Interaction Settings\" pane.\n// This is the source-of-truth shared between Mvc.Web and Blazor.Web so both\n// UIs behave identically.\n//\n// Usage:\n// window.initializeChatInteractionSettings({\n// itemId: 'abc123',\n// hubUrl: '/hubs/chat-interaction',\n// statusElementId: 'chat-settings-save-status',\n// dataSourceSelectId: 'chat-setting-data-source',\n// });\n\n(function () {\n 'use strict';\n\n function getStatusElement(id) {\n return id ? document.getElementById(id) : null;\n }\n\n function showSaveIndicator(statusEl, text, cssClass) {\n if (!statusEl) {\n return;\n }\n\n var statusClasses = ['text-success', 'text-warning', 'text-danger', 'text-bg-light', 'text-bg-success', 'text-bg-warning', 'text-bg-danger'];\n statusEl.classList.remove.apply(statusEl.classList, statusClasses);\n if (cssClass) {\n statusEl.classList.add(cssClass);\n }\n\n statusEl.textContent = text;\n }\n\n function getValidationMessage(input) {\n if (!input || input.type !== 'number') {\n return null;\n }\n\n var value = (input.value || '').trim();\n if (value === '') {\n return null;\n }\n\n var numericValue = Number(value);\n if (Number.isNaN(numericValue)) {\n return 'Enter a valid number.';\n }\n\n var min = input.getAttribute('min');\n if (min !== null && min !== '' && numericValue < Number(min)) {\n return 'Value must be at least ' + min + '.';\n }\n\n var max = input.getAttribute('max');\n if (max !== null && max !== '' && numericValue > Number(max)) {\n return 'Value must be no more than ' + max + '.';\n }\n\n return null;\n }\n\n function getOrCreateValidationMessage(input) {\n var message = input.parentElement.querySelector('.invalid-feedback[data-setting-validation]');\n if (!message) {\n message = document.createElement('div');\n message.className = 'invalid-feedback';\n message.dataset.settingValidation = 'true';\n input.parentElement.appendChild(message);\n }\n\n return message;\n }\n\n function validateSettingInput(input) {\n var message = getValidationMessage(input);\n var validation = getOrCreateValidationMessage(input);\n var isValid = !message;\n\n input.classList.toggle('is-invalid', !isValid);\n validation.textContent = message || '';\n validation.style.display = isValid ? 'none' : 'block';\n\n return isValid;\n }\n\n function hasInvalidSettings() {\n var isValid = true;\n document.querySelectorAll('.setting-input[type=\"number\"]').forEach(function (input) {\n if (!validateSettingInput(input)) {\n isValid = false;\n }\n });\n\n return !isValid;\n }\n\n function collectSettings() {\n var settings = {};\n\n document.querySelectorAll('.setting-input').forEach(function (el) {\n var key = el.dataset.setting;\n if (!key) {\n return;\n }\n\n if (el.type === 'checkbox') {\n settings[key] = el.checked;\n return;\n }\n\n var val = (el.value || '').trim();\n if (el.type === 'number') {\n settings[key] = val === '' ? null : parseFloat(val);\n } else {\n settings[key] = val || null;\n }\n });\n\n var groups = {};\n document.querySelectorAll('.capability-checkbox').forEach(function (cb) {\n var group = cb.dataset.group;\n if (!group) {\n return;\n }\n\n if (!groups[group]) {\n groups[group] = [];\n }\n\n if (cb.checked) {\n groups[group].push(cb.value);\n }\n });\n\n for (var g in groups) {\n settings[g] = groups[g];\n }\n\n // Prompt template cards\n var promptTemplates = [];\n document.querySelectorAll('.prompt-template-card').forEach(function (card) {\n var idEl = card.querySelector('.prompt-template-id-input');\n var paramsEl = card.querySelector('.prompt-template-parameters-input');\n var tid = idEl ? idEl.value : (card.dataset.templateId || '');\n if (!tid) {\n return;\n }\n\n promptTemplates.push({\n templateId: tid,\n promptParameters: paramsEl ? (paramsEl.value || '').trim() : '',\n });\n });\n\n if (promptTemplates.length > 0) {\n settings.promptTemplateIds = promptTemplates.map(function (t) { return t.templateId; });\n settings.promptTemplates = promptTemplates;\n }\n\n return settings;\n }\n\n window.initializeChatInteractionSettings = function (config) {\n config = config || {};\n\n var itemId = config.itemId;\n if (!itemId) {\n console.warn('initializeChatInteractionSettings: itemId is required.');\n return;\n }\n\n if (typeof signalR === 'undefined') {\n console.warn('initializeChatInteractionSettings: SignalR client is not loaded.');\n return;\n }\n\n var hubUrl = config.hubUrl || '/hubs/chat-interaction';\n var statusEl = getStatusElement(config.statusElementId || 'chat-settings-save-status');\n var dataSourceSelect = config.dataSourceSelectId\n ? document.getElementById(config.dataSourceSelectId)\n : document.querySelector('.setting-input[data-setting=\"dataSourceId\"]');\n\n // Source-dependent visibility (Filter field shows only when a data source is selected).\n function toggleDataSourceDependentFields() {\n var hasDataSource = !!(dataSourceSelect && dataSourceSelect.value && dataSourceSelect.value.trim() !== '');\n document.querySelectorAll('.rag-data-source-filter-dependent').forEach(function (element) {\n element.classList.toggle('d-none', !hasDataSource);\n });\n }\n\n if (dataSourceSelect) {\n dataSourceSelect.addEventListener('change', toggleDataSourceDependentFields);\n }\n\n toggleDataSourceDependentFields();\n\n var connection = new signalR.HubConnectionBuilder()\n .withUrl(hubUrl)\n .withAutomaticReconnect()\n .build();\n\n var connectionStartPromise = null;\n\n function ensureConnectionStarted() {\n if (connection.state === signalR.HubConnectionState.Connected) {\n return Promise.resolve();\n }\n\n if (!connectionStartPromise) {\n connectionStartPromise = connection.start()\n .catch(function (err) {\n console.error('SignalR connection error:', err);\n throw err;\n })\n .finally(function () {\n connectionStartPromise = null;\n });\n }\n\n return connectionStartPromise;\n }\n\n connection.on('SettingsSaved', function (savedItemId) {\n if (savedItemId !== itemId) {\n return;\n }\n\n showSaveIndicator(statusEl, 'Saved \\u2713', 'text-success');\n });\n\n connection.on('ReceiveError', function (message) {\n console.error('Chat interaction error:', message);\n showSaveIndicator(statusEl, 'Save failed', 'text-danger');\n });\n\n ensureConnectionStarted().catch(function () {\n showSaveIndicator(statusEl, 'Offline', 'text-danger');\n });\n\n var debounceTimer = null;\n\n function debounceSave() {\n clearTimeout(debounceTimer);\n if (hasInvalidSettings()) {\n showSaveIndicator(statusEl, 'Fix errors', 'text-danger');\n return;\n }\n\n showSaveIndicator(statusEl, 'Saving\\u2026', 'text-warning');\n debounceTimer = setTimeout(function () {\n var settings = collectSettings();\n ensureConnectionStarted()\n .then(function () {\n return connection.invoke('SaveSettings', itemId, settings);\n })\n .catch(function (err) {\n console.error('Failed to save chat interaction settings:', err);\n showSaveIndicator(statusEl, 'Save failed', 'text-danger');\n });\n }, 500);\n }\n\n document.querySelectorAll('.setting-input').forEach(function (el) {\n if (el.type === 'number') {\n validateSettingInput(el);\n }\n\n el.addEventListener('input', debounceSave);\n el.addEventListener('change', debounceSave);\n el.addEventListener('blur', debounceSave);\n });\n\n document.querySelectorAll('.capability-checkbox').forEach(function (cb) {\n cb.addEventListener('change', debounceSave);\n });\n\n // Expose helpers for callers that add/remove rows dynamically (e.g. prompt templates).\n return {\n scheduleSave: debounceSave,\n collectSettings: collectSettings,\n };\n };\n\n function parseJsonAttribute(element, attributeName) {\n var rawValue = element.getAttribute(attributeName);\n if (!rawValue) {\n return null;\n }\n\n try {\n return JSON.parse(rawValue);\n }\n catch (error) {\n console.error('Failed to parse chat interaction settings config JSON.', error);\n return null;\n }\n }\n\n function initializeFromElement(element) {\n if (!element || element.dataset.chatInteractionSettingsInitialized === 'true') {\n return element ? element.__chatInteractionSettingsState || null : null;\n }\n\n var config = parseJsonAttribute(element, 'data-chat-interaction-settings-config');\n if (!config) {\n return null;\n }\n\n var state = window.initializeChatInteractionSettings(config);\n if (!state) {\n return null;\n }\n\n element.dataset.chatInteractionSettingsInitialized = 'true';\n element.__chatInteractionSettingsState = state;\n\n return state;\n }\n\n function scanForAutoInitialization(root) {\n if (!root || typeof root.querySelectorAll !== 'function') {\n return;\n }\n\n if (typeof root.matches === 'function' && root.matches('[data-chat-interaction-settings-config]')) {\n initializeFromElement(root);\n }\n\n root.querySelectorAll('[data-chat-interaction-settings-config]').forEach(initializeFromElement);\n }\n\n function startAutoInitialization() {\n scanForAutoInitialization(document);\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n if (node && node.nodeType === 1) {\n scanForAutoInitialization(node);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', startAutoInitialization, { once: true });\n } else {\n startAutoInitialization();\n }\n})();\n"],"names":[],"mappings":";;;;;;CAYA,CAAC,WAAY;EACT;EAEA,SAAS,iBAAiB,IAAI;GAC1B,OAAO,KAAK,SAAS,eAAe,EAAE,IAAI;EAC9C;EAEA,SAAS,kBAAkB,UAAU,MAAM,UAAU;GACjD,IAAI,CAAC,UACD;GAIJ,SAAS,UAAU,OAAO,MAAM,SAAS,WAAW;IAD/B;IAAgB;IAAgB;IAAe;IAAiB;IAAmB;IAAmB;GACvE,CAAa;GACjE,IAAI,UACA,SAAS,UAAU,IAAI,QAAQ;GAGnC,SAAS,cAAc;EAC3B;EAEA,SAAS,qBAAqB,OAAO;GACjC,IAAI,CAAC,SAAS,MAAM,SAAS,UACzB,OAAO;GAGX,IAAI,SAAS,MAAM,SAAS,GAAA,CAAI,KAAK;GACrC,IAAI,UAAU,IACV,OAAO;GAGX,IAAI,eAAe,OAAO,KAAK;GAC/B,IAAI,OAAO,MAAM,YAAY,GACzB,OAAO;GAGX,IAAI,MAAM,MAAM,aAAa,KAAK;GAClC,IAAI,QAAQ,QAAQ,QAAQ,MAAM,eAAe,OAAO,GAAG,GACvD,OAAO,4BAA4B,MAAM;GAG7C,IAAI,MAAM,MAAM,aAAa,KAAK;GAClC,IAAI,QAAQ,QAAQ,QAAQ,MAAM,eAAe,OAAO,GAAG,GACvD,OAAO,gCAAgC,MAAM;GAGjD,OAAO;EACX;EAEA,SAAS,6BAA6B,OAAO;GACzC,IAAI,UAAU,MAAM,cAAc,cAAc,4CAA4C;GAC5F,IAAI,CAAC,SAAS;IACV,UAAU,SAAS,cAAc,KAAK;IACtC,QAAQ,YAAY;IACpB,QAAQ,QAAQ,oBAAoB;IACpC,MAAM,cAAc,YAAY,OAAO;GAC3C;GAEA,OAAO;EACX;EAEA,SAAS,qBAAqB,OAAO;GACjC,IAAI,UAAU,qBAAqB,KAAK;GACxC,IAAI,aAAa,6BAA6B,KAAK;GACnD,IAAI,UAAU,CAAC;GAEf,MAAM,UAAU,OAAO,cAAc,CAAC,OAAO;GAC7C,WAAW,cAAc,WAAW;GACpC,WAAW,MAAM,UAAU,UAAU,SAAS;GAE9C,OAAO;EACX;EAEA,SAAS,qBAAqB;GAC1B,IAAI,UAAU;GACd,SAAS,iBAAiB,iCAA+B,CAAC,CAAC,QAAQ,SAAU,OAAO;IAChF,IAAI,CAAC,qBAAqB,KAAK,GAC3B,UAAU;GAElB,CAAC;GAED,OAAO,CAAC;EACZ;EAEA,SAAS,kBAAkB;GACvB,IAAI,WAAW,CAAC;GAEhB,SAAS,iBAAiB,gBAAgB,CAAC,CAAC,QAAQ,SAAU,IAAI;IAC9D,IAAI,MAAM,GAAG,QAAQ;IACrB,IAAI,CAAC,KACD;IAGJ,IAAI,GAAG,SAAS,YAAY;KACxB,SAAS,OAAO,GAAG;KACnB;IACJ;IAEA,IAAI,OAAO,GAAG,SAAS,GAAA,CAAI,KAAK;IAChC,IAAI,GAAG,SAAS,UACZ,SAAS,OAAO,QAAQ,KAAK,OAAO,WAAW,GAAG;SAElD,SAAS,OAAO,OAAO;GAE/B,CAAC;GAED,IAAI,SAAS,CAAC;GACd,SAAS,iBAAiB,sBAAsB,CAAC,CAAC,QAAQ,SAAU,IAAI;IACpE,IAAI,QAAQ,GAAG,QAAQ;IACvB,IAAI,CAAC,OACD;IAGJ,IAAI,CAAC,OAAO,QACR,OAAO,SAAS,CAAC;IAGrB,IAAI,GAAG,SACH,OAAO,MAAM,CAAC,KAAK,GAAG,KAAK;GAEnC,CAAC;GAED,KAAK,IAAI,KAAK,QACV,SAAS,KAAK,OAAO;GAIzB,IAAI,kBAAkB,CAAC;GACvB,SAAS,iBAAiB,uBAAuB,CAAC,CAAC,QAAQ,SAAU,MAAM;IACvE,IAAI,OAAO,KAAK,cAAc,2BAA2B;IACzD,IAAI,WAAW,KAAK,cAAc,mCAAmC;IACrE,IAAI,MAAM,OAAO,KAAK,QAAS,KAAK,QAAQ,cAAc;IAC1D,IAAI,CAAC,KACD;IAGJ,gBAAgB,KAAK;KACjB,YAAY;KACZ,kBAAkB,YAAY,SAAS,SAAS,GAAA,CAAI,KAAK,IAAI;IACjE,CAAC;GACL,CAAC;GAED,IAAI,gBAAgB,SAAS,GAAG;IAC5B,SAAS,oBAAoB,gBAAgB,IAAI,SAAU,GAAG;KAAE,OAAO,EAAE;IAAY,CAAC;IACtF,SAAS,kBAAkB;GAC/B;GAEA,OAAO;EACX;EAEA,OAAO,oCAAoC,SAAU,QAAQ;GACzD,SAAS,UAAU,CAAC;GAEpB,IAAI,SAAS,OAAO;GACpB,IAAI,CAAC,QAAQ;IACT,QAAQ,KAAK,wDAAwD;IACrE;GACJ;GAEA,IAAI,OAAO,YAAY,aAAa;IAChC,QAAQ,KAAK,kEAAkE;IAC/E;GACJ;GAEA,IAAI,SAAS,OAAO,UAAU;GAC9B,IAAI,WAAW,iBAAiB,OAAO,mBAAmB,2BAA2B;GACrF,IAAI,mBAAmB,OAAO,qBACxB,SAAS,eAAe,OAAO,kBAAkB,IACjD,SAAS,cAAc,+CAA6C;GAG1E,SAAS,kCAAkC;IACvC,IAAI,gBAAgB,CAAC,EAAE,oBAAoB,iBAAiB,SAAS,iBAAiB,MAAM,KAAK,MAAM;IACvG,SAAS,iBAAiB,mCAAmC,CAAC,CAAC,QAAQ,SAAU,SAAS;KACtF,QAAQ,UAAU,OAAO,UAAU,CAAC,aAAa;IACrD,CAAC;GACL;GAEA,IAAI,kBACA,iBAAiB,iBAAiB,UAAU,+BAA+B;GAG/E,gCAAgC;GAEhC,IAAI,aAAa,IAAI,QAAQ,qBAAqB,CAAC,CAC9C,QAAQ,MAAM,CAAC,CACf,uBAAuB,CAAC,CACxB,MAAM;GAEX,IAAI,yBAAyB;GAE7B,SAAS,0BAA0B;IAC/B,IAAI,WAAW,UAAU,QAAQ,mBAAmB,WAChD,OAAO,QAAQ,QAAQ;IAG3B,IAAI,CAAC,wBACD,yBAAyB,WAAW,MAAM,CAAC,CACtC,MAAM,SAAU,KAAK;KAClB,QAAQ,MAAM,6BAA6B,GAAG;KAC9C,MAAM;IACV,CAAC,CAAC,CACD,QAAQ,WAAY;KACjB,yBAAyB;IAC7B,CAAC;IAGT,OAAO;GACX;GAEA,WAAW,GAAG,iBAAiB,SAAU,aAAa;IAClD,IAAI,gBAAgB,QAChB;IAGJ,kBAAkB,UAAU,WAAgB,cAAc;GAC9D,CAAC;GAED,WAAW,GAAG,gBAAgB,SAAU,SAAS;IAC7C,QAAQ,MAAM,2BAA2B,OAAO;IAChD,kBAAkB,UAAU,eAAe,aAAa;GAC5D,CAAC;GAED,wBAAwB,CAAC,CAAC,MAAM,WAAY;IACxC,kBAAkB,UAAU,WAAW,aAAa;GACxD,CAAC;GAED,IAAI,gBAAgB;GAEpB,SAAS,eAAe;IACpB,aAAa,aAAa;IAC1B,IAAI,mBAAmB,GAAG;KACtB,kBAAkB,UAAU,cAAc,aAAa;KACvD;IACJ;IAEA,kBAAkB,UAAU,WAAgB,cAAc;IAC1D,gBAAgB,WAAW,WAAY;KACnC,IAAI,WAAW,gBAAgB;KAC/B,wBAAwB,CAAC,CACpB,KAAK,WAAY;MACd,OAAO,WAAW,OAAO,gBAAgB,QAAQ,QAAQ;KAC7D,CAAC,CAAC,CACD,MAAM,SAAU,KAAK;MAClB,QAAQ,MAAM,6CAA6C,GAAG;MAC9D,kBAAkB,UAAU,eAAe,aAAa;KAC5D,CAAC;IACT,GAAG,GAAG;GACV;GAEA,SAAS,iBAAiB,gBAAgB,CAAC,CAAC,QAAQ,SAAU,IAAI;IAC9D,IAAI,GAAG,SAAS,UACZ,qBAAqB,EAAE;IAG3B,GAAG,iBAAiB,SAAS,YAAY;IACzC,GAAG,iBAAiB,UAAU,YAAY;IAC1C,GAAG,iBAAiB,QAAQ,YAAY;GAC5C,CAAC;GAED,SAAS,iBAAiB,sBAAsB,CAAC,CAAC,QAAQ,SAAU,IAAI;IACpE,GAAG,iBAAiB,UAAU,YAAY;GAC9C,CAAC;GAGD,OAAO;IACH,cAAc;IACG;GACrB;EACJ;EAEA,SAAS,mBAAmB,SAAS,eAAe;GAChD,IAAI,WAAW,QAAQ,aAAa,aAAa;GACjD,IAAI,CAAC,UACD,OAAO;GAGX,IAAI;IACA,OAAO,KAAK,MAAM,QAAQ;GAC9B,SACO,OAAO;IACV,QAAQ,MAAM,0DAA0D,KAAK;IAC7E,OAAO;GACX;EACJ;EAEA,SAAS,sBAAsB,SAAS;GACpC,IAAI,CAAC,WAAW,QAAQ,QAAQ,uCAAuC,QACnE,OAAO,UAAU,QAAQ,kCAAkC,OAAO;GAGtE,IAAI,SAAS,mBAAmB,SAAS,uCAAuC;GAChF,IAAI,CAAC,QACD,OAAO;GAGX,IAAI,QAAQ,OAAO,kCAAkC,MAAM;GAC3D,IAAI,CAAC,OACD,OAAO;GAGX,QAAQ,QAAQ,qCAAqC;GACrD,QAAQ,iCAAiC;GAEzC,OAAO;EACX;EAEA,SAAS,0BAA0B,MAAM;GACrC,IAAI,CAAC,QAAQ,OAAO,KAAK,qBAAqB,YAC1C;GAGJ,IAAI,OAAO,KAAK,YAAY,cAAc,KAAK,QAAQ,yCAAyC,GAC5F,sBAAsB,IAAI;GAG9B,KAAK,iBAAiB,yCAAyC,CAAC,CAAC,QAAQ,qBAAqB;EAClG;EAEA,SAAS,0BAA0B;GAC/B,0BAA0B,QAAQ;GAElC,IAAI,OAAO,qBAAqB,aAC5B;GAaJ,IAVmB,iBAAiB,SAAU,WAAW;IACrD,UAAU,QAAQ,SAAU,UAAU;KAClC,SAAS,WAAW,QAAQ,SAAU,MAAM;MACxC,IAAI,QAAQ,KAAK,aAAa,GAC1B,0BAA0B,IAAI;KAEtC,CAAC;IACL,CAAC;GACL,CAEA,CAAA,CAAS,QAAQ,SAAS,MAAM;IAC5B,WAAW;IACX,SAAS;GACb,CAAC;EACL;EAEA,IAAI,SAAS,eAAe,WACxB,SAAS,iBAAiB,oBAAoB,yBAAyB,EAAE,MAAM,KAAK,CAAC;OAErF,wBAAwB;CAEhC,EAAA,CAAG"}
|