@tellaro/tql 1.4.0 → 1.4.1
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/src/completionProvider.js +1 -1
- package/dist/src/parser.js +1 -1
- package/dist/src/semanticPreview.d.ts +1 -1
- package/dist/src/validator.js +40 -14
- package/dist/tql.css +1 -1
- package/dist/vue/TqlChart.vue.js +2 -2
- package/dist/vue/TqlChart.vue2.js +109 -113
- package/dist/vue/components/TqlPreview.vue.js +4 -4
- package/dist/vue/useTqlInput.d.ts +54 -0
- package/package.json +1 -1
- package/dist/node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js +0 -1655
|
@@ -281,7 +281,7 @@ function F(e, t, i) {
|
|
|
281
281
|
if (r && r.type === "visualization")
|
|
282
282
|
return { type: "in_viz_params" };
|
|
283
283
|
}
|
|
284
|
-
if (n.type === "comma" ||
|
|
284
|
+
if (n.type === "comma" || n.type === "field" && u) {
|
|
285
285
|
const l = a.indexOf(n);
|
|
286
286
|
for (let r = l - 1; r >= 0; r--) {
|
|
287
287
|
if (a[r].type === "paren" && a[r].value === "(") {
|
package/dist/src/parser.js
CHANGED
|
@@ -572,7 +572,7 @@ class v {
|
|
|
572
572
|
}
|
|
573
573
|
}
|
|
574
574
|
function l(i) {
|
|
575
|
-
return i ? new v(i).parse() : { ast: null, errors: [], warnings: [], tokens: [] };
|
|
575
|
+
return i ? new v(i).parse() : { ast: null, errors: [], warnings: [], tokens: [], success: !0 };
|
|
576
576
|
}
|
|
577
577
|
function f(i) {
|
|
578
578
|
return l(i).success;
|
|
@@ -60,7 +60,7 @@ export declare function formatLogicTreeNode(node: LogicTreeNode): string;
|
|
|
60
60
|
/**
|
|
61
61
|
* Generate an ASCII tree representation of the logic tree
|
|
62
62
|
*/
|
|
63
|
-
export declare function formatLogicTreeAscii(node: LogicTreeNode | null,
|
|
63
|
+
export declare function formatLogicTreeAscii(node: LogicTreeNode | null, _indent?: string): string;
|
|
64
64
|
/**
|
|
65
65
|
* Flatten a logic tree to just the comparison nodes
|
|
66
66
|
*/
|
package/dist/src/validator.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { parseTql as g } from "./parser.js";
|
|
2
|
-
const
|
|
2
|
+
const c = {
|
|
3
3
|
// Equality (all types)
|
|
4
4
|
eq: ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip", "nested", "object", "geo_point"],
|
|
5
5
|
ne: ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip", "nested", "object", "geo_point"],
|
|
6
6
|
"=": ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip", "nested", "object", "geo_point"],
|
|
7
7
|
"==": ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip", "nested", "object", "geo_point"],
|
|
8
8
|
"!=": ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip", "nested", "object", "geo_point"],
|
|
9
|
+
eq_ci: ["text", "keyword"],
|
|
9
10
|
// Comparison (numeric and dates)
|
|
10
11
|
gt: ["long", "integer", "double", "float", "date"],
|
|
11
12
|
gte: ["long", "integer", "double", "float", "date"],
|
|
@@ -19,12 +20,21 @@ const u = {
|
|
|
19
20
|
contains: ["text", "keyword"],
|
|
20
21
|
not_contains: ["text", "keyword"],
|
|
21
22
|
"!contains": ["text", "keyword"],
|
|
23
|
+
contains_cs: ["text", "keyword"],
|
|
24
|
+
not_contains_cs: ["text", "keyword"],
|
|
25
|
+
"!contains_cs": ["text", "keyword"],
|
|
22
26
|
startswith: ["text", "keyword"],
|
|
23
27
|
not_startswith: ["text", "keyword"],
|
|
24
28
|
"!startswith": ["text", "keyword"],
|
|
29
|
+
startswith_cs: ["text", "keyword"],
|
|
30
|
+
not_startswith_cs: ["text", "keyword"],
|
|
31
|
+
"!startswith_cs": ["text", "keyword"],
|
|
25
32
|
endswith: ["text", "keyword"],
|
|
26
33
|
not_endswith: ["text", "keyword"],
|
|
27
34
|
"!endswith": ["text", "keyword"],
|
|
35
|
+
endswith_cs: ["text", "keyword"],
|
|
36
|
+
not_endswith_cs: ["text", "keyword"],
|
|
37
|
+
"!endswith_cs": ["text", "keyword"],
|
|
28
38
|
regexp: ["text", "keyword"],
|
|
29
39
|
regex: ["text", "keyword"],
|
|
30
40
|
not_regexp: ["text", "keyword"],
|
|
@@ -39,6 +49,9 @@ const u = {
|
|
|
39
49
|
in: ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip"],
|
|
40
50
|
not_in: ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip"],
|
|
41
51
|
"!in": ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip"],
|
|
52
|
+
in_cs: ["text", "keyword"],
|
|
53
|
+
not_in_cs: ["text", "keyword"],
|
|
54
|
+
"!in_cs": ["text", "keyword"],
|
|
42
55
|
// Existence (all types)
|
|
43
56
|
exists: ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip", "nested", "object", "geo_point"],
|
|
44
57
|
not_exists: ["text", "keyword", "long", "integer", "double", "float", "date", "boolean", "ip", "nested", "object", "geo_point"],
|
|
@@ -65,12 +78,13 @@ const u = {
|
|
|
65
78
|
cidr: ["ip"],
|
|
66
79
|
not_cidr: ["ip"],
|
|
67
80
|
"!cidr": ["ip"]
|
|
68
|
-
},
|
|
81
|
+
}, u = {
|
|
69
82
|
eq: ["string", "number", "boolean"],
|
|
70
83
|
ne: ["string", "number", "boolean"],
|
|
71
84
|
"=": ["string", "number", "boolean"],
|
|
72
85
|
"==": ["string", "number", "boolean"],
|
|
73
86
|
"!=": ["string", "number", "boolean"],
|
|
87
|
+
eq_ci: ["string"],
|
|
74
88
|
gt: ["number", "string"],
|
|
75
89
|
gte: ["number", "string"],
|
|
76
90
|
lt: ["number", "string"],
|
|
@@ -82,12 +96,21 @@ const u = {
|
|
|
82
96
|
contains: ["string"],
|
|
83
97
|
not_contains: ["string"],
|
|
84
98
|
"!contains": ["string"],
|
|
99
|
+
contains_cs: ["string"],
|
|
100
|
+
not_contains_cs: ["string"],
|
|
101
|
+
"!contains_cs": ["string"],
|
|
85
102
|
startswith: ["string"],
|
|
86
103
|
not_startswith: ["string"],
|
|
87
104
|
"!startswith": ["string"],
|
|
105
|
+
startswith_cs: ["string"],
|
|
106
|
+
not_startswith_cs: ["string"],
|
|
107
|
+
"!startswith_cs": ["string"],
|
|
88
108
|
endswith: ["string"],
|
|
89
109
|
not_endswith: ["string"],
|
|
90
110
|
"!endswith": ["string"],
|
|
111
|
+
endswith_cs: ["string"],
|
|
112
|
+
not_endswith_cs: ["string"],
|
|
113
|
+
"!endswith_cs": ["string"],
|
|
91
114
|
regexp: ["string"],
|
|
92
115
|
regex: ["string"],
|
|
93
116
|
not_regexp: ["string"],
|
|
@@ -101,6 +124,9 @@ const u = {
|
|
|
101
124
|
in: ["string", "number", "boolean"],
|
|
102
125
|
not_in: ["string", "number", "boolean"],
|
|
103
126
|
"!in": ["string", "number", "boolean"],
|
|
127
|
+
in_cs: ["string"],
|
|
128
|
+
not_in_cs: ["string"],
|
|
129
|
+
"!in_cs": ["string"],
|
|
104
130
|
exists: ["boolean"],
|
|
105
131
|
not_exists: ["boolean"],
|
|
106
132
|
"!exists": ["boolean"],
|
|
@@ -120,7 +146,7 @@ const u = {
|
|
|
120
146
|
"!all": ["string", "number", "boolean"],
|
|
121
147
|
"!none": ["string", "number", "boolean"]
|
|
122
148
|
};
|
|
123
|
-
class
|
|
149
|
+
class b {
|
|
124
150
|
options;
|
|
125
151
|
errors;
|
|
126
152
|
warnings;
|
|
@@ -132,7 +158,7 @@ class c {
|
|
|
132
158
|
*/
|
|
133
159
|
validate(e) {
|
|
134
160
|
if (this.errors = [], this.warnings = [], !e)
|
|
135
|
-
return {
|
|
161
|
+
return { valid: !0, errors: [], warnings: [] };
|
|
136
162
|
const t = g(e);
|
|
137
163
|
return this.errors.push(...t.errors), this.warnings.push(...t.warnings), t.ast && this.validateExpression(t.ast), {
|
|
138
164
|
valid: this.errors.length === 0,
|
|
@@ -190,7 +216,7 @@ class c {
|
|
|
190
216
|
if (this.options.fieldTypes && e.field.type === "field") {
|
|
191
217
|
const o = this.options.fieldTypes[t];
|
|
192
218
|
if (o) {
|
|
193
|
-
const n =
|
|
219
|
+
const n = c[e.operator];
|
|
194
220
|
!l[e.operator] && n && !n.includes(o) && this.addWarning(
|
|
195
221
|
`Operator '${e.operator}' may not work well with field type '${o}'`,
|
|
196
222
|
e.start,
|
|
@@ -203,7 +229,7 @@ class c {
|
|
|
203
229
|
}
|
|
204
230
|
}
|
|
205
231
|
if (!Array.isArray(e.value) && e.value.type === "literal") {
|
|
206
|
-
const o =
|
|
232
|
+
const o = u[e.operator];
|
|
207
233
|
o && !o.includes(e.value.valueType) && this.addWarning(
|
|
208
234
|
`Operator '${e.operator}' expects ${o.join(" or ")} value`,
|
|
209
235
|
e.value.start,
|
|
@@ -285,16 +311,16 @@ class c {
|
|
|
285
311
|
}
|
|
286
312
|
}
|
|
287
313
|
function d(s, e) {
|
|
288
|
-
return new
|
|
314
|
+
return new b(e).validate(s);
|
|
289
315
|
}
|
|
290
|
-
function
|
|
316
|
+
function w(s) {
|
|
291
317
|
return d(s).valid;
|
|
292
318
|
}
|
|
293
|
-
function
|
|
319
|
+
function y(s, e) {
|
|
294
320
|
const t = d(s, e);
|
|
295
321
|
return [...t.errors, ...t.warnings];
|
|
296
322
|
}
|
|
297
|
-
function
|
|
323
|
+
function f(s) {
|
|
298
324
|
const e = [];
|
|
299
325
|
s.valid ? e.push("Query is valid") : e.push("Query has errors:");
|
|
300
326
|
for (const t of s.errors)
|
|
@@ -305,9 +331,9 @@ function y(s) {
|
|
|
305
331
|
`);
|
|
306
332
|
}
|
|
307
333
|
export {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
334
|
+
b as TqlValidator,
|
|
335
|
+
f as formatValidationResult,
|
|
336
|
+
y as getTqlIssues,
|
|
337
|
+
w as isValidTqlSyntax,
|
|
312
338
|
d as validateTql
|
|
313
339
|
};
|
package/dist/tql.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.tql-autocomplete-dropdown[data-v-7d19214b]{position:fixed;top:var(--dropdown-top);left:var(--dropdown-left);z-index:9999;min-width:280px;max-width:450px;max-height:var(--dropdown-max-height);background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #ddd);border-radius:var(--border-radius, 6px);box-shadow:0 4px 16px #00000026;overflow:hidden;display:flex;flex-direction:column}.tql-completion-list[data-v-7d19214b]{overflow-y:auto;max-height:calc(var(--dropdown-max-height) - 60px)}.tql-completion-item[data-v-7d19214b]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .15s}.tql-completion-item[data-v-7d19214b]:hover,.tql-completion-item.selected[data-v-7d19214b]{background:var(--highlight-bg, #f0f0f0)}.tql-completion-icon[data-v-7d19214b]{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:4px;font-size:.75rem}.tql-completion-icon.tql-completion-kind-field[data-v-7d19214b]{background:var(--blue-100, #e3f2fd);color:var(--blue-600, #1e88e5)}.tql-completion-icon.tql-completion-kind-operator[data-v-7d19214b]{background:var(--pink-100, #fce4ec);color:var(--pink-600, #d81b60)}.tql-completion-icon.tql-completion-kind-value[data-v-7d19214b]{background:var(--green-100, #e8f5e9);color:var(--green-600, #43a047)}.tql-completion-icon.tql-completion-kind-keyword[data-v-7d19214b]{background:var(--purple-100, #f3e5f5);color:var(--purple-600, #8e24aa)}.tql-completion-icon.tql-completion-kind-snippet[data-v-7d19214b]{background:var(--orange-100, #fff3e0);color:var(--orange-600, #fb8c00)}.tql-completion-icon.tql-completion-kind-mutator[data-v-7d19214b]{background:var(--cyan-100, #e0f7fa);color:var(--cyan-600, #00acc1)}.tql-completion-icon.tql-completion-kind-aggregation[data-v-7d19214b]{background:var(--indigo-100, #e8eaf6);color:var(--indigo-600, #3949ab)}.tql-completion-icon.tql-completion-kind-logicalOp[data-v-7d19214b]{background:var(--yellow-100, #fffde7);color:var(--yellow-700, #fbc02d)}.tql-completion-icon.tql-completion-kind-typeHint[data-v-7d19214b]{background:var(--teal-100, #e0f2f1);color:var(--teal-600, #00897b)}.tql-completion-icon.tql-completion-kind-visualization[data-v-7d19214b]{background:var(--red-100, #ffebee);color:var(--red-600, #e53935)}.tql-completion-content[data-v-7d19214b]{flex:1;display:flex;flex-direction:column;min-width:0}.tql-completion-label[data-v-7d19214b]{font-family:Courier New,monospace;font-size:.875rem;font-weight:500;color:var(--text-color, #333);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-detail[data-v-7d19214b]{font-size:.75rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-kind-badge[data-v-7d19214b]{font-size:.625rem;padding:.125rem .375rem;background:var(--surface-100, #f5f5f5);border-radius:3px;color:var(--text-color-secondary, #666);text-transform:uppercase;letter-spacing:.025em}.tql-completion-docs[data-v-7d19214b]{padding:.5rem .75rem;border-top:1px solid var(--surface-border, #ddd);background:var(--surface-50, #fafafa);font-size:.75rem;color:var(--text-color-secondary, #666);max-height:60px;overflow-y:auto}.tql-preview[data-v-bae811e6]{font-family:ui-monospace,monospace;font-size:13px;line-height:1.5;padding:12px;border:1px solid var(--tql-preview-border, #e0e0e0);border-radius:6px;background:var(--tql-preview-bg, #fafafa)}.tql-preview--compact[data-v-bae811e6]{padding:8px;font-size:12px}.tql-preview--empty[data-v-bae811e6]{color:var(--tql-preview-muted, #888)}.tql-preview__empty[data-v-bae811e6]{text-align:center;padding:20px}.tql-preview__complexity[data-v-bae811e6]{display:flex;align-items:center;gap:12px;margin-bottom:12px}.tql-preview__complexity-badge[data-v-bae811e6]{padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase}.tql-preview--low .tql-preview__complexity-badge[data-v-bae811e6]{background:var(--tql-preview-low-bg, #e8f5e9);color:var(--tql-preview-low-text, #2e7d32)}.tql-preview--medium .tql-preview__complexity-badge[data-v-bae811e6]{background:var(--tql-preview-medium-bg, #fff3e0);color:var(--tql-preview-medium-text, #e65100)}.tql-preview--high .tql-preview__complexity-badge[data-v-bae811e6]{background:var(--tql-preview-high-bg, #ffebee);color:var(--tql-preview-high-text, #c62828)}.tql-preview__field-count[data-v-bae811e6]{color:var(--tql-preview-muted, #666);font-size:12px}.tql-preview__warnings[data-v-bae811e6]{margin-bottom:12px}.tql-preview__warning[data-v-bae811e6]{display:flex;align-items:flex-start;gap:8px;padding:6px 8px;border-radius:4px;margin-bottom:4px}.tql-preview__warning--info[data-v-bae811e6]{background:var(--tql-preview-info-bg, #e3f2fd);color:var(--tql-preview-info-text, #1565c0)}.tql-preview__warning--warning[data-v-bae811e6]{background:var(--tql-preview-warning-bg, #fff3e0);color:var(--tql-preview-warning-text, #e65100)}.tql-preview__warning--error[data-v-bae811e6]{background:var(--tql-preview-error-bg, #ffebee);color:var(--tql-preview-error-text, #c62828)}.tql-preview__warning-icon[data-v-bae811e6]{font-weight:700;width:16px;text-align:center}.tql-preview__warning-text[data-v-bae811e6]{flex:1}.tql-preview__suggestions[data-v-bae811e6]{margin-bottom:12px;padding:8px;background:var(--tql-preview-suggestion-bg, #f5f5f5);border-radius:4px}.tql-preview__suggestions-header[data-v-bae811e6]{font-weight:600;margin-bottom:4px;color:var(--tql-preview-header, #333)}.tql-preview__suggestions-list[data-v-bae811e6]{margin:0;padding-left:20px}.tql-preview__suggestion[data-v-bae811e6]{color:var(--tql-preview-muted, #666);margin:2px 0}.tql-preview__tree[data-v-bae811e6]{margin-bottom:12px}.tql-preview__tree-header[data-v-bae811e6],.tql-preview__fields-header[data-v-bae811e6],.tql-preview__operators-header[data-v-bae811e6]{font-weight:600;margin-bottom:8px;color:var(--tql-preview-header, #333);font-size:12px;text-transform:uppercase;letter-spacing:.5px}.tql-preview__tree-content[data-v-bae811e6]{border:1px solid var(--tql-preview-tree-border, #e0e0e0);border-radius:4px;background:var(--tql-preview-tree-bg, #fff);padding:8px}.tql-preview__node[data-v-bae811e6]{margin:2px 0}.tql-preview__node-content[data-v-bae811e6]{display:flex;align-items:center;gap:4px;padding:2px 4px;border-radius:3px;cursor:pointer}.tql-preview__node-content[data-v-bae811e6]:hover{background:var(--tql-preview-node-hover, #f0f0f0)}.tql-preview__node-toggle[data-v-bae811e6]{width:16px;height:16px;border:none;background:var(--tql-preview-toggle-bg, #e0e0e0);border-radius:3px;cursor:pointer;font-size:12px;line-height:1;display:flex;align-items:center;justify-content:center}.tql-preview__node-toggle[data-v-bae811e6]:hover{background:var(--tql-preview-toggle-hover, #d0d0d0)}.tql-preview__node-toggle--leaf[data-v-bae811e6]{visibility:hidden}.tql-preview__node-type[data-v-bae811e6]{font-weight:600;color:var(--tql-preview-node-type, #666)}.tql-preview__node--and .tql-preview__node-type[data-v-bae811e6]{color:var(--tql-preview-and, #1976d2)}.tql-preview__node--or .tql-preview__node-type[data-v-bae811e6]{color:var(--tql-preview-or, #7b1fa2)}.tql-preview__node--not .tql-preview__node-type[data-v-bae811e6]{color:var(--tql-preview-not, #c62828)}.tql-preview__node--group .tql-preview__node-type[data-v-bae811e6]{color:var(--tql-preview-group, #666)}.tql-preview__node-label[data-v-bae811e6]{flex:1}.tql-preview__fields-list[data-v-bae811e6]{display:flex;flex-direction:column;gap:4px}.tql-preview__field[data-v-bae811e6]{display:flex;align-items:center;gap:6px;padding:4px 8px;background:var(--tql-preview-field-bg, #fff);border:1px solid var(--tql-preview-field-border, #e0e0e0);border-radius:4px;cursor:pointer}.tql-preview__field[data-v-bae811e6]:hover{background:var(--tql-preview-field-hover, #f5f5f5)}.tql-preview__field-name[data-v-bae811e6]{font-weight:600;color:var(--tql-preview-field-name, #1976d2)}.tql-preview__field-mutators[data-v-bae811e6]{color:var(--tql-preview-mutator, #7b1fa2)}.tql-preview__field-operator[data-v-bae811e6]{color:var(--tql-preview-operator, #666)}.tql-preview__field-value[data-v-bae811e6]{color:var(--tql-preview-value, #2e7d32)}.tql-preview__match-type[data-v-bae811e6]{margin-left:auto;padding:1px 4px;border-radius:3px;font-size:10px;font-weight:600;background:var(--tql-preview-match-bg, #f0f0f0)}.tql-preview__match-type--exact[data-v-bae811e6]{background:var(--tql-preview-match-exact-bg, #e8f5e9);color:var(--tql-preview-match-exact, #2e7d32)}.tql-preview__match-type--wildcard[data-v-bae811e6]{background:var(--tql-preview-match-wildcard-bg, #fff3e0);color:var(--tql-preview-match-wildcard, #e65100)}.tql-preview__match-type--regex[data-v-bae811e6]{background:var(--tql-preview-match-regex-bg, #fce4ec);color:var(--tql-preview-match-regex, #c2185b)}.tql-preview__match-type--range[data-v-bae811e6]{background:var(--tql-preview-match-range-bg, #e3f2fd);color:var(--tql-preview-match-range, #1565c0)}.tql-preview__match-type--cidr[data-v-bae811e6]{background:var(--tql-preview-match-cidr-bg, #f3e5f5);color:var(--tql-preview-match-cidr, #7b1fa2)}.tql-preview__operators-list[data-v-bae811e6]{display:flex;flex-wrap:wrap;gap:8px}.tql-preview__operator[data-v-bae811e6]{padding:2px 6px;background:var(--tql-preview-op-bg, #f0f0f0);border-radius:3px;font-size:11px}.tql-input-wrapper[data-v-2eb7c399]{position:relative;display:flex;align-items:flex-start;border:1px solid var(--surface-border, #ddd);border-radius:var(--border-radius, 6px);background:var(--surface-ground, #fff);transition:border-color .2s,box-shadow .2s}.tql-input-wrapper.tql-input-has-min-height[data-v-2eb7c399],.tql-input-wrapper.tql-input-has-min-height .tql-input[data-v-2eb7c399]{min-height:var(--tql-min-height)}.tql-input-wrapper.tql-input-focused[data-v-2eb7c399]{border-color:var(--primary-color, #3b82f6);box-shadow:0 0 0 2px var(--primary-100, rgba(59, 130, 246, .2))}.tql-input-wrapper.tql-input-invalid[data-v-2eb7c399]{border-color:var(--red-500, #ef4444)}.tql-input-wrapper.tql-input-invalid.tql-input-focused[data-v-2eb7c399]{box-shadow:0 0 0 2px var(--red-100, rgba(239, 68, 68, .2))}.tql-input-wrapper.tql-input-disabled[data-v-2eb7c399]{opacity:.6;cursor:not-allowed}.tql-highlight-layer[data-v-2eb7c399]{position:absolute;inset:0;padding:.5rem .75rem;pointer-events:none;white-space:pre-wrap;word-wrap:break-word;font-family:Courier New,monospace;font-size:.875rem;line-height:1.5;overflow:hidden}.tql-input-multiline .tql-highlight-layer[data-v-2eb7c399]{overflow-y:auto}.tql-input[data-v-2eb7c399]{flex:1;width:100%;padding:.5rem 8rem .5rem .75rem;border:none;background:transparent;font-family:Courier New,monospace;font-size:.875rem;line-height:1.5;color:var(--text-color, #333);outline:none;resize:none}.tql-input.tql-input-highlighted[data-v-2eb7c399]{color:transparent;caret-color:var(--text-color, #333)}.tql-input[data-v-2eb7c399]::placeholder{color:var(--text-color-secondary, #666);opacity:.7}.tql-input[data-v-2eb7c399]:disabled{cursor:not-allowed}.tql-token-field[data-v-2eb7c399]{color:var(--tql-field-color, var(--blue-600, #2563eb))}.tql-token-operator[data-v-2eb7c399]{color:var(--tql-operator-color, var(--pink-600, #db2777));font-weight:500}.tql-token-logicalOp[data-v-2eb7c399]{color:var(--tql-logical-color, var(--purple-600, #9333ea));font-weight:600}.tql-token-collectionOp[data-v-2eb7c399]{color:var(--tql-collection-color, var(--indigo-600, #4f46e5));font-weight:600}.tql-token-string[data-v-2eb7c399]{color:var(--tql-string-color, var(--green-600, #16a34a))}.tql-token-number[data-v-2eb7c399]{color:var(--tql-number-color, var(--orange-600, #ea580c))}.tql-token-boolean[data-v-2eb7c399]{color:var(--tql-boolean-color, var(--cyan-600, #0891b2))}.tql-token-null[data-v-2eb7c399]{color:var(--tql-null-color, var(--gray-500, #6b7280));font-style:italic}.tql-token-mutator[data-v-2eb7c399]{color:var(--tql-mutator-color, var(--teal-600, #0d9488));font-style:italic}.tql-token-aggregation[data-v-2eb7c399]{color:var(--tql-aggregation-color, var(--indigo-600, #4f46e5))}.tql-token-keyword[data-v-2eb7c399]{color:var(--tql-keyword-color, var(--purple-500, #a855f7))}.tql-token-typeHint[data-v-2eb7c399]{color:var(--tql-typehint-color, var(--teal-500, #14b8a6))}.tql-token-visualization[data-v-2eb7c399]{color:var(--tql-viz-color, var(--red-500, #ef4444))}.tql-token-arrow[data-v-2eb7c399]{color:var(--tql-arrow-color, var(--gray-600, #4b5563));font-weight:600}.tql-token-doubleColon[data-v-2eb7c399]{color:var(--tql-colon-color, var(--gray-500, #6b7280))}.tql-token-paren[data-v-2eb7c399],.tql-token-bracket[data-v-2eb7c399]{color:var(--tql-bracket-color, var(--gray-600, #4b5563))}.tql-token-error[data-v-2eb7c399]{color:var(--tql-error-color, var(--red-600, #dc2626));text-decoration:wavy underline;text-decoration-color:var(--red-400, #f87171)}.tql-token-error-range[data-v-2eb7c399]{background-color:var(--red-50, #fef2f2)}.tql-token-unknown[data-v-2eb7c399]{color:var(--text-color-secondary, #666)}.tql-validation-icon[data-v-2eb7c399]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center}.tql-input-multiline .tql-validation-icon[data-v-2eb7c399]{top:.75rem;transform:none}.tql-icon-valid[data-v-2eb7c399]{color:var(--green-500, #22c55e)}.tql-icon-invalid[data-v-2eb7c399]{color:var(--red-500, #ef4444)}.tql-icon-clickable[data-v-2eb7c399]{cursor:pointer;transition:transform .2s}.tql-icon-clickable[data-v-2eb7c399]:hover{transform:scale(1.2)}.tql-icon-clickable[data-v-2eb7c399]:focus{outline:2px solid var(--primary-color, #3b82f6);outline-offset:2px;border-radius:50%}.tql-snippet-button[data-v-2eb7c399]{position:absolute;right:2rem;top:50%;transform:translateY(-50%);padding:.25rem;border:none;background:transparent;color:var(--text-color-secondary, #666);cursor:pointer;border-radius:var(--border-radius, 6px);transition:color .2s,background-color .2s}.tql-snippet-button[data-v-2eb7c399]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-input-multiline .tql-snippet-button[data-v-2eb7c399]{top:.75rem;transform:none}.tql-input-resizable-textarea[data-v-2eb7c399]{resize:vertical;min-height:80px}.tql-input-wrapper.tql-input-resizable[data-v-2eb7c399]{height:auto}.tql-input-wrapper.tql-input-resizable .tql-highlight-layer[data-v-2eb7c399]{height:100%}.tql-validation-messages[data-v-2eb7c399]{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:var(--surface-overlay, #fff);border:1px solid var(--red-200, #fecaca);border-radius:var(--border-radius, 6px);padding:.5rem;z-index:10;box-shadow:0 2px 8px #0000001a}.tql-input-autocomplete-active .tql-validation-messages[data-v-2eb7c399],.tql-input-autocomplete-active .tql-complexity-warnings[data-v-2eb7c399],.tql-input-autocomplete-active .tql-history-dropdown[data-v-2eb7c399],.tql-input-autocomplete-active .tql-preview-panel[data-v-2eb7c399]{display:none!important}.tql-error-message[data-v-2eb7c399]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem;color:var(--red-600, #dc2626)}.tql-error-message i[data-v-2eb7c399]{margin-top:.125rem;font-size:.75rem}.tql-error-suggestion[data-v-2eb7c399]{display:block;color:var(--text-color-secondary, #666);font-style:italic;margin-left:1.25rem}.sr-only[data-v-2eb7c399]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.tql-toolbar[data-v-2eb7c399]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:.25rem}.tql-input-multiline .tql-toolbar[data-v-2eb7c399]{top:.5rem;transform:none}.tql-toolbar-button[data-v-2eb7c399]{padding:.25rem;border:none;background:transparent;color:var(--text-color-secondary, #666);cursor:pointer;border-radius:var(--border-radius, 4px);transition:color .2s,background-color .2s;display:flex;align-items:center;justify-content:center}.tql-toolbar-button[data-v-2eb7c399]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-toolbar-button--active[data-v-2eb7c399]{color:var(--primary-color, #3b82f6);background:var(--primary-100, rgba(59, 130, 246, .1))}.tql-validation-status[data-v-2eb7c399]{display:flex;align-items:center}.tql-complexity-badge[data-v-2eb7c399]{display:flex;align-items:center;gap:.25rem;padding:.125rem .5rem;border-radius:9999px;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em}.tql-complexity-low[data-v-2eb7c399]{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d)}.tql-complexity-medium[data-v-2eb7c399]{background:var(--yellow-100, #fef9c3);color:var(--yellow-700, #a16207)}.tql-complexity-high[data-v-2eb7c399]{background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c)}.tql-complexity-count[data-v-2eb7c399]{display:inline-flex;align-items:center;justify-content:center;min-width:1rem;height:1rem;padding:0 .25rem;border-radius:9999px;background:currentColor;color:#fff;font-size:.5rem}.tql-complexity-low .tql-complexity-count[data-v-2eb7c399]{background:var(--green-600, #16a34a)}.tql-complexity-medium .tql-complexity-count[data-v-2eb7c399]{background:var(--yellow-600, #ca8a04)}.tql-complexity-high .tql-complexity-count[data-v-2eb7c399]{background:var(--red-600, #dc2626)}.tql-complexity-warnings[data-v-2eb7c399]{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #e0e0e0);border-radius:var(--border-radius, 6px);padding:.5rem;z-index:9;box-shadow:0 2px 8px #0000001a}.tql-complexity-warning[data-v-2eb7c399]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem}.tql-complexity-warning i[data-v-2eb7c399]{margin-top:.125rem;font-size:.75rem}.tql-complexity-warning--info[data-v-2eb7c399]{color:var(--blue-600, #2563eb)}.tql-complexity-warning--warning[data-v-2eb7c399]{color:var(--yellow-600, #ca8a04)}.tql-complexity-warning--error[data-v-2eb7c399]{color:var(--red-600, #dc2626)}.tql-complexity-suggestions[data-v-2eb7c399]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--surface-border, #e0e0e0)}.tql-complexity-suggestion[data-v-2eb7c399]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem;color:var(--text-color-secondary, #666)}.tql-complexity-suggestion i[data-v-2eb7c399]{color:var(--yellow-500, #eab308)}.tql-history-dropdown[data-v-2eb7c399]{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #e0e0e0);border-radius:var(--border-radius, 6px);z-index:20;box-shadow:0 4px 12px #00000026;max-height:300px;overflow:hidden;display:flex;flex-direction:column}.tql-history-header[data-v-2eb7c399]{padding:.5rem;border-bottom:1px solid var(--surface-border, #e0e0e0)}.tql-history-search[data-v-2eb7c399]{width:100%;padding:.375rem .5rem;border:1px solid var(--surface-border, #e0e0e0);border-radius:var(--border-radius, 4px);font-size:.75rem;outline:none}.tql-history-search[data-v-2eb7c399]:focus{border-color:var(--primary-color, #3b82f6)}.tql-history-list[data-v-2eb7c399]{overflow-y:auto;flex:1}.tql-history-item[data-v-2eb7c399]{display:flex;align-items:flex-start;gap:.5rem;padding:.5rem;cursor:pointer;border-bottom:1px solid var(--surface-50, #f9fafb);transition:background-color .15s}.tql-history-item[data-v-2eb7c399]:hover{background:var(--surface-100, #f5f5f5)}.tql-history-item--favorite[data-v-2eb7c399]{background:var(--yellow-50, #fefce8)}.tql-history-item--favorite[data-v-2eb7c399]:hover{background:var(--yellow-100, #fef9c3)}.tql-history-favorite[data-v-2eb7c399]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #999);cursor:pointer;flex-shrink:0}.tql-history-favorite[data-v-2eb7c399]:hover,.tql-history-item--favorite .tql-history-favorite[data-v-2eb7c399]{color:var(--yellow-500, #eab308)}.tql-history-content[data-v-2eb7c399]{flex:1;min-width:0}.tql-history-label[data-v-2eb7c399]{font-size:.6875rem;font-weight:600;color:var(--text-color, #333);margin-bottom:.125rem}.tql-history-query[data-v-2eb7c399]{font-family:Courier New,monospace;font-size:.6875rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-history-time[data-v-2eb7c399]{font-size:.625rem;color:var(--text-color-secondary, #999);flex-shrink:0}.tql-history-empty[data-v-2eb7c399]{padding:1rem;text-align:center;color:var(--text-color-secondary, #666);font-size:.75rem}.tql-preview-panel[data-v-2eb7c399]{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #e0e0e0);border-radius:var(--border-radius, 6px);z-index:15;box-shadow:0 4px 12px #00000026;max-height:400px;overflow:hidden;display:flex;flex-direction:column}.tql-preview-header[data-v-2eb7c399]{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-bottom:1px solid var(--surface-border, #e0e0e0);font-size:.75rem;font-weight:600;color:var(--text-color, #333)}.tql-preview-close[data-v-2eb7c399]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #666);cursor:pointer;border-radius:var(--border-radius, 4px)}.tql-preview-close[data-v-2eb7c399]:hover{background:var(--surface-100, #f5f5f5);color:var(--text-color, #333)}.tql-preview-panel[data-v-2eb7c399] .tql-preview{border:none;border-radius:0;max-height:350px;overflow-y:auto}.tql-validation-messages-portal{position:fixed;top:var(--tql-msg-top, 0);left:var(--tql-msg-left, 0);width:var(--tql-msg-width, auto);z-index:9998;background:var(--surface-overlay, #fff);border:2px solid var(--red-500, #ef4444);border-radius:var(--border-radius, 6px);padding:.5rem;box-shadow:0 4px 12px #00000026}.tql-validation-messages-portal .tql-error-message{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem;color:var(--red-600, #dc2626)}.tql-validation-messages-portal .tql-error-message i{margin-top:.125rem;font-size:.75rem}.tql-validation-messages-portal .tql-error-suggestion{display:block;color:var(--text-color-secondary, #6b7280);font-style:italic;margin-left:1.25rem}.tql-chart[data-v-64309e12]{position:relative;width:100%;background:#12121e;border-radius:10px;overflow:hidden}.tql-chart__canvas[data-v-64309e12]{display:block;width:100%!important;height:100%!important}.tql-chart__metric[data-v-64309e12]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px}.tql-chart__metric-value[data-v-64309e12]{font-size:3.5rem;font-weight:700;letter-spacing:-.02em;color:#818cf8;line-height:1}.tql-chart__metric-title[data-v-64309e12]{font-size:.9rem;color:#888;letter-spacing:.03em}.tql-chart__tooltip[data-v-64309e12]{position:absolute;opacity:0;pointer-events:auto;background:#1e1e2e;border:1px solid #333;border-radius:8px;padding:10px 14px;font-size:.8rem;transition:opacity .15s;z-index:10;transform:translate(-50%,-110%)}.tql-chart__tooltip[data-v-64309e12] .tt-title{color:#e0e0e0;font-weight:600;margin-bottom:2px}.tql-chart__tooltip[data-v-64309e12] .tt-val{color:#a0a0b0;margin-bottom:6px}.tql-chart__tooltip[data-v-64309e12] .tt-link{color:#818cf8;text-decoration:none;font-weight:500}.tql-chart__tooltip[data-v-64309e12] .tt-link:hover{text-decoration:underline}
|
|
1
|
+
.tql-autocomplete-dropdown[data-v-7d19214b]{position:fixed;top:var(--dropdown-top);left:var(--dropdown-left);z-index:9999;min-width:280px;max-width:450px;max-height:var(--dropdown-max-height);background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #ddd);border-radius:var(--border-radius, 6px);box-shadow:0 4px 16px #00000026;overflow:hidden;display:flex;flex-direction:column}.tql-completion-list[data-v-7d19214b]{overflow-y:auto;max-height:calc(var(--dropdown-max-height) - 60px)}.tql-completion-item[data-v-7d19214b]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .15s}.tql-completion-item[data-v-7d19214b]:hover,.tql-completion-item.selected[data-v-7d19214b]{background:var(--highlight-bg, #f0f0f0)}.tql-completion-icon[data-v-7d19214b]{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:4px;font-size:.75rem}.tql-completion-icon.tql-completion-kind-field[data-v-7d19214b]{background:var(--blue-100, #e3f2fd);color:var(--blue-600, #1e88e5)}.tql-completion-icon.tql-completion-kind-operator[data-v-7d19214b]{background:var(--pink-100, #fce4ec);color:var(--pink-600, #d81b60)}.tql-completion-icon.tql-completion-kind-value[data-v-7d19214b]{background:var(--green-100, #e8f5e9);color:var(--green-600, #43a047)}.tql-completion-icon.tql-completion-kind-keyword[data-v-7d19214b]{background:var(--purple-100, #f3e5f5);color:var(--purple-600, #8e24aa)}.tql-completion-icon.tql-completion-kind-snippet[data-v-7d19214b]{background:var(--orange-100, #fff3e0);color:var(--orange-600, #fb8c00)}.tql-completion-icon.tql-completion-kind-mutator[data-v-7d19214b]{background:var(--cyan-100, #e0f7fa);color:var(--cyan-600, #00acc1)}.tql-completion-icon.tql-completion-kind-aggregation[data-v-7d19214b]{background:var(--indigo-100, #e8eaf6);color:var(--indigo-600, #3949ab)}.tql-completion-icon.tql-completion-kind-logicalOp[data-v-7d19214b]{background:var(--yellow-100, #fffde7);color:var(--yellow-700, #fbc02d)}.tql-completion-icon.tql-completion-kind-typeHint[data-v-7d19214b]{background:var(--teal-100, #e0f2f1);color:var(--teal-600, #00897b)}.tql-completion-icon.tql-completion-kind-visualization[data-v-7d19214b]{background:var(--red-100, #ffebee);color:var(--red-600, #e53935)}.tql-completion-content[data-v-7d19214b]{flex:1;display:flex;flex-direction:column;min-width:0}.tql-completion-label[data-v-7d19214b]{font-family:Courier New,monospace;font-size:.875rem;font-weight:500;color:var(--text-color, #333);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-detail[data-v-7d19214b]{font-size:.75rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-kind-badge[data-v-7d19214b]{font-size:.625rem;padding:.125rem .375rem;background:var(--surface-100, #f5f5f5);border-radius:3px;color:var(--text-color-secondary, #666);text-transform:uppercase;letter-spacing:.025em}.tql-completion-docs[data-v-7d19214b]{padding:.5rem .75rem;border-top:1px solid var(--surface-border, #ddd);background:var(--surface-50, #fafafa);font-size:.75rem;color:var(--text-color-secondary, #666);max-height:60px;overflow-y:auto}.tql-preview[data-v-3521fa37]{font-family:ui-monospace,monospace;font-size:13px;line-height:1.5;padding:12px;border:1px solid var(--tql-preview-border, #e0e0e0);border-radius:6px;background:var(--tql-preview-bg, #fafafa)}.tql-preview--compact[data-v-3521fa37]{padding:8px;font-size:12px}.tql-preview--empty[data-v-3521fa37]{color:var(--tql-preview-muted, #888)}.tql-preview__empty[data-v-3521fa37]{text-align:center;padding:20px}.tql-preview__complexity[data-v-3521fa37]{display:flex;align-items:center;gap:12px;margin-bottom:12px}.tql-preview__complexity-badge[data-v-3521fa37]{padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase}.tql-preview--low .tql-preview__complexity-badge[data-v-3521fa37]{background:var(--tql-preview-low-bg, #e8f5e9);color:var(--tql-preview-low-text, #2e7d32)}.tql-preview--medium .tql-preview__complexity-badge[data-v-3521fa37]{background:var(--tql-preview-medium-bg, #fff3e0);color:var(--tql-preview-medium-text, #e65100)}.tql-preview--high .tql-preview__complexity-badge[data-v-3521fa37]{background:var(--tql-preview-high-bg, #ffebee);color:var(--tql-preview-high-text, #c62828)}.tql-preview__field-count[data-v-3521fa37]{color:var(--tql-preview-muted, #666);font-size:12px}.tql-preview__warnings[data-v-3521fa37]{margin-bottom:12px}.tql-preview__warning[data-v-3521fa37]{display:flex;align-items:flex-start;gap:8px;padding:6px 8px;border-radius:4px;margin-bottom:4px}.tql-preview__warning--info[data-v-3521fa37]{background:var(--tql-preview-info-bg, #e3f2fd);color:var(--tql-preview-info-text, #1565c0)}.tql-preview__warning--warning[data-v-3521fa37]{background:var(--tql-preview-warning-bg, #fff3e0);color:var(--tql-preview-warning-text, #e65100)}.tql-preview__warning--error[data-v-3521fa37]{background:var(--tql-preview-error-bg, #ffebee);color:var(--tql-preview-error-text, #c62828)}.tql-preview__warning-icon[data-v-3521fa37]{font-weight:700;width:16px;text-align:center}.tql-preview__warning-text[data-v-3521fa37]{flex:1}.tql-preview__suggestions[data-v-3521fa37]{margin-bottom:12px;padding:8px;background:var(--tql-preview-suggestion-bg, #f5f5f5);border-radius:4px}.tql-preview__suggestions-header[data-v-3521fa37]{font-weight:600;margin-bottom:4px;color:var(--tql-preview-header, #333)}.tql-preview__suggestions-list[data-v-3521fa37]{margin:0;padding-left:20px}.tql-preview__suggestion[data-v-3521fa37]{color:var(--tql-preview-muted, #666);margin:2px 0}.tql-preview__tree[data-v-3521fa37]{margin-bottom:12px}.tql-preview__tree-header[data-v-3521fa37],.tql-preview__fields-header[data-v-3521fa37],.tql-preview__operators-header[data-v-3521fa37]{font-weight:600;margin-bottom:8px;color:var(--tql-preview-header, #333);font-size:12px;text-transform:uppercase;letter-spacing:.5px}.tql-preview__tree-content[data-v-3521fa37]{border:1px solid var(--tql-preview-tree-border, #e0e0e0);border-radius:4px;background:var(--tql-preview-tree-bg, #fff);padding:8px}.tql-preview__node[data-v-3521fa37]{margin:2px 0}.tql-preview__node-content[data-v-3521fa37]{display:flex;align-items:center;gap:4px;padding:2px 4px;border-radius:3px;cursor:pointer}.tql-preview__node-content[data-v-3521fa37]:hover{background:var(--tql-preview-node-hover, #f0f0f0)}.tql-preview__node-toggle[data-v-3521fa37]{width:16px;height:16px;border:none;background:var(--tql-preview-toggle-bg, #e0e0e0);border-radius:3px;cursor:pointer;font-size:12px;line-height:1;display:flex;align-items:center;justify-content:center}.tql-preview__node-toggle[data-v-3521fa37]:hover{background:var(--tql-preview-toggle-hover, #d0d0d0)}.tql-preview__node-toggle--leaf[data-v-3521fa37]{visibility:hidden}.tql-preview__node-type[data-v-3521fa37]{font-weight:600;color:var(--tql-preview-node-type, #666)}.tql-preview__node--and .tql-preview__node-type[data-v-3521fa37]{color:var(--tql-preview-and, #1976d2)}.tql-preview__node--or .tql-preview__node-type[data-v-3521fa37]{color:var(--tql-preview-or, #7b1fa2)}.tql-preview__node--not .tql-preview__node-type[data-v-3521fa37]{color:var(--tql-preview-not, #c62828)}.tql-preview__node--group .tql-preview__node-type[data-v-3521fa37]{color:var(--tql-preview-group, #666)}.tql-preview__node-label[data-v-3521fa37]{flex:1}.tql-preview__fields-list[data-v-3521fa37]{display:flex;flex-direction:column;gap:4px}.tql-preview__field[data-v-3521fa37]{display:flex;align-items:center;gap:6px;padding:4px 8px;background:var(--tql-preview-field-bg, #fff);border:1px solid var(--tql-preview-field-border, #e0e0e0);border-radius:4px;cursor:pointer}.tql-preview__field[data-v-3521fa37]:hover{background:var(--tql-preview-field-hover, #f5f5f5)}.tql-preview__field-name[data-v-3521fa37]{font-weight:600;color:var(--tql-preview-field-name, #1976d2)}.tql-preview__field-mutators[data-v-3521fa37]{color:var(--tql-preview-mutator, #7b1fa2)}.tql-preview__field-operator[data-v-3521fa37]{color:var(--tql-preview-operator, #666)}.tql-preview__field-value[data-v-3521fa37]{color:var(--tql-preview-value, #2e7d32)}.tql-preview__match-type[data-v-3521fa37]{margin-left:auto;padding:1px 4px;border-radius:3px;font-size:10px;font-weight:600;background:var(--tql-preview-match-bg, #f0f0f0)}.tql-preview__match-type--exact[data-v-3521fa37]{background:var(--tql-preview-match-exact-bg, #e8f5e9);color:var(--tql-preview-match-exact, #2e7d32)}.tql-preview__match-type--wildcard[data-v-3521fa37]{background:var(--tql-preview-match-wildcard-bg, #fff3e0);color:var(--tql-preview-match-wildcard, #e65100)}.tql-preview__match-type--regex[data-v-3521fa37]{background:var(--tql-preview-match-regex-bg, #fce4ec);color:var(--tql-preview-match-regex, #c2185b)}.tql-preview__match-type--range[data-v-3521fa37]{background:var(--tql-preview-match-range-bg, #e3f2fd);color:var(--tql-preview-match-range, #1565c0)}.tql-preview__match-type--cidr[data-v-3521fa37]{background:var(--tql-preview-match-cidr-bg, #f3e5f5);color:var(--tql-preview-match-cidr, #7b1fa2)}.tql-preview__operators-list[data-v-3521fa37]{display:flex;flex-wrap:wrap;gap:8px}.tql-preview__operator[data-v-3521fa37]{padding:2px 6px;background:var(--tql-preview-op-bg, #f0f0f0);border-radius:3px;font-size:11px}.tql-input-wrapper[data-v-2eb7c399]{position:relative;display:flex;align-items:flex-start;border:1px solid var(--surface-border, #ddd);border-radius:var(--border-radius, 6px);background:var(--surface-ground, #fff);transition:border-color .2s,box-shadow .2s}.tql-input-wrapper.tql-input-has-min-height[data-v-2eb7c399],.tql-input-wrapper.tql-input-has-min-height .tql-input[data-v-2eb7c399]{min-height:var(--tql-min-height)}.tql-input-wrapper.tql-input-focused[data-v-2eb7c399]{border-color:var(--primary-color, #3b82f6);box-shadow:0 0 0 2px var(--primary-100, rgba(59, 130, 246, .2))}.tql-input-wrapper.tql-input-invalid[data-v-2eb7c399]{border-color:var(--red-500, #ef4444)}.tql-input-wrapper.tql-input-invalid.tql-input-focused[data-v-2eb7c399]{box-shadow:0 0 0 2px var(--red-100, rgba(239, 68, 68, .2))}.tql-input-wrapper.tql-input-disabled[data-v-2eb7c399]{opacity:.6;cursor:not-allowed}.tql-highlight-layer[data-v-2eb7c399]{position:absolute;inset:0;padding:.5rem .75rem;pointer-events:none;white-space:pre-wrap;word-wrap:break-word;font-family:Courier New,monospace;font-size:.875rem;line-height:1.5;overflow:hidden}.tql-input-multiline .tql-highlight-layer[data-v-2eb7c399]{overflow-y:auto}.tql-input[data-v-2eb7c399]{flex:1;width:100%;padding:.5rem 8rem .5rem .75rem;border:none;background:transparent;font-family:Courier New,monospace;font-size:.875rem;line-height:1.5;color:var(--text-color, #333);outline:none;resize:none}.tql-input.tql-input-highlighted[data-v-2eb7c399]{color:transparent;caret-color:var(--text-color, #333)}.tql-input[data-v-2eb7c399]::placeholder{color:var(--text-color-secondary, #666);opacity:.7}.tql-input[data-v-2eb7c399]:disabled{cursor:not-allowed}.tql-token-field[data-v-2eb7c399]{color:var(--tql-field-color, var(--blue-600, #2563eb))}.tql-token-operator[data-v-2eb7c399]{color:var(--tql-operator-color, var(--pink-600, #db2777));font-weight:500}.tql-token-logicalOp[data-v-2eb7c399]{color:var(--tql-logical-color, var(--purple-600, #9333ea));font-weight:600}.tql-token-collectionOp[data-v-2eb7c399]{color:var(--tql-collection-color, var(--indigo-600, #4f46e5));font-weight:600}.tql-token-string[data-v-2eb7c399]{color:var(--tql-string-color, var(--green-600, #16a34a))}.tql-token-number[data-v-2eb7c399]{color:var(--tql-number-color, var(--orange-600, #ea580c))}.tql-token-boolean[data-v-2eb7c399]{color:var(--tql-boolean-color, var(--cyan-600, #0891b2))}.tql-token-null[data-v-2eb7c399]{color:var(--tql-null-color, var(--gray-500, #6b7280));font-style:italic}.tql-token-mutator[data-v-2eb7c399]{color:var(--tql-mutator-color, var(--teal-600, #0d9488));font-style:italic}.tql-token-aggregation[data-v-2eb7c399]{color:var(--tql-aggregation-color, var(--indigo-600, #4f46e5))}.tql-token-keyword[data-v-2eb7c399]{color:var(--tql-keyword-color, var(--purple-500, #a855f7))}.tql-token-typeHint[data-v-2eb7c399]{color:var(--tql-typehint-color, var(--teal-500, #14b8a6))}.tql-token-visualization[data-v-2eb7c399]{color:var(--tql-viz-color, var(--red-500, #ef4444))}.tql-token-arrow[data-v-2eb7c399]{color:var(--tql-arrow-color, var(--gray-600, #4b5563));font-weight:600}.tql-token-doubleColon[data-v-2eb7c399]{color:var(--tql-colon-color, var(--gray-500, #6b7280))}.tql-token-paren[data-v-2eb7c399],.tql-token-bracket[data-v-2eb7c399]{color:var(--tql-bracket-color, var(--gray-600, #4b5563))}.tql-token-error[data-v-2eb7c399]{color:var(--tql-error-color, var(--red-600, #dc2626));text-decoration:wavy underline;text-decoration-color:var(--red-400, #f87171)}.tql-token-error-range[data-v-2eb7c399]{background-color:var(--red-50, #fef2f2)}.tql-token-unknown[data-v-2eb7c399]{color:var(--text-color-secondary, #666)}.tql-validation-icon[data-v-2eb7c399]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center}.tql-input-multiline .tql-validation-icon[data-v-2eb7c399]{top:.75rem;transform:none}.tql-icon-valid[data-v-2eb7c399]{color:var(--green-500, #22c55e)}.tql-icon-invalid[data-v-2eb7c399]{color:var(--red-500, #ef4444)}.tql-icon-clickable[data-v-2eb7c399]{cursor:pointer;transition:transform .2s}.tql-icon-clickable[data-v-2eb7c399]:hover{transform:scale(1.2)}.tql-icon-clickable[data-v-2eb7c399]:focus{outline:2px solid var(--primary-color, #3b82f6);outline-offset:2px;border-radius:50%}.tql-snippet-button[data-v-2eb7c399]{position:absolute;right:2rem;top:50%;transform:translateY(-50%);padding:.25rem;border:none;background:transparent;color:var(--text-color-secondary, #666);cursor:pointer;border-radius:var(--border-radius, 6px);transition:color .2s,background-color .2s}.tql-snippet-button[data-v-2eb7c399]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-input-multiline .tql-snippet-button[data-v-2eb7c399]{top:.75rem;transform:none}.tql-input-resizable-textarea[data-v-2eb7c399]{resize:vertical;min-height:80px}.tql-input-wrapper.tql-input-resizable[data-v-2eb7c399]{height:auto}.tql-input-wrapper.tql-input-resizable .tql-highlight-layer[data-v-2eb7c399]{height:100%}.tql-validation-messages[data-v-2eb7c399]{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:var(--surface-overlay, #fff);border:1px solid var(--red-200, #fecaca);border-radius:var(--border-radius, 6px);padding:.5rem;z-index:10;box-shadow:0 2px 8px #0000001a}.tql-input-autocomplete-active .tql-validation-messages[data-v-2eb7c399],.tql-input-autocomplete-active .tql-complexity-warnings[data-v-2eb7c399],.tql-input-autocomplete-active .tql-history-dropdown[data-v-2eb7c399],.tql-input-autocomplete-active .tql-preview-panel[data-v-2eb7c399]{display:none!important}.tql-error-message[data-v-2eb7c399]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem;color:var(--red-600, #dc2626)}.tql-error-message i[data-v-2eb7c399]{margin-top:.125rem;font-size:.75rem}.tql-error-suggestion[data-v-2eb7c399]{display:block;color:var(--text-color-secondary, #666);font-style:italic;margin-left:1.25rem}.sr-only[data-v-2eb7c399]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.tql-toolbar[data-v-2eb7c399]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:.25rem}.tql-input-multiline .tql-toolbar[data-v-2eb7c399]{top:.5rem;transform:none}.tql-toolbar-button[data-v-2eb7c399]{padding:.25rem;border:none;background:transparent;color:var(--text-color-secondary, #666);cursor:pointer;border-radius:var(--border-radius, 4px);transition:color .2s,background-color .2s;display:flex;align-items:center;justify-content:center}.tql-toolbar-button[data-v-2eb7c399]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-toolbar-button--active[data-v-2eb7c399]{color:var(--primary-color, #3b82f6);background:var(--primary-100, rgba(59, 130, 246, .1))}.tql-validation-status[data-v-2eb7c399]{display:flex;align-items:center}.tql-complexity-badge[data-v-2eb7c399]{display:flex;align-items:center;gap:.25rem;padding:.125rem .5rem;border-radius:9999px;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em}.tql-complexity-low[data-v-2eb7c399]{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d)}.tql-complexity-medium[data-v-2eb7c399]{background:var(--yellow-100, #fef9c3);color:var(--yellow-700, #a16207)}.tql-complexity-high[data-v-2eb7c399]{background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c)}.tql-complexity-count[data-v-2eb7c399]{display:inline-flex;align-items:center;justify-content:center;min-width:1rem;height:1rem;padding:0 .25rem;border-radius:9999px;background:currentColor;color:#fff;font-size:.5rem}.tql-complexity-low .tql-complexity-count[data-v-2eb7c399]{background:var(--green-600, #16a34a)}.tql-complexity-medium .tql-complexity-count[data-v-2eb7c399]{background:var(--yellow-600, #ca8a04)}.tql-complexity-high .tql-complexity-count[data-v-2eb7c399]{background:var(--red-600, #dc2626)}.tql-complexity-warnings[data-v-2eb7c399]{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #e0e0e0);border-radius:var(--border-radius, 6px);padding:.5rem;z-index:9;box-shadow:0 2px 8px #0000001a}.tql-complexity-warning[data-v-2eb7c399]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem}.tql-complexity-warning i[data-v-2eb7c399]{margin-top:.125rem;font-size:.75rem}.tql-complexity-warning--info[data-v-2eb7c399]{color:var(--blue-600, #2563eb)}.tql-complexity-warning--warning[data-v-2eb7c399]{color:var(--yellow-600, #ca8a04)}.tql-complexity-warning--error[data-v-2eb7c399]{color:var(--red-600, #dc2626)}.tql-complexity-suggestions[data-v-2eb7c399]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--surface-border, #e0e0e0)}.tql-complexity-suggestion[data-v-2eb7c399]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem;color:var(--text-color-secondary, #666)}.tql-complexity-suggestion i[data-v-2eb7c399]{color:var(--yellow-500, #eab308)}.tql-history-dropdown[data-v-2eb7c399]{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #e0e0e0);border-radius:var(--border-radius, 6px);z-index:20;box-shadow:0 4px 12px #00000026;max-height:300px;overflow:hidden;display:flex;flex-direction:column}.tql-history-header[data-v-2eb7c399]{padding:.5rem;border-bottom:1px solid var(--surface-border, #e0e0e0)}.tql-history-search[data-v-2eb7c399]{width:100%;padding:.375rem .5rem;border:1px solid var(--surface-border, #e0e0e0);border-radius:var(--border-radius, 4px);font-size:.75rem;outline:none}.tql-history-search[data-v-2eb7c399]:focus{border-color:var(--primary-color, #3b82f6)}.tql-history-list[data-v-2eb7c399]{overflow-y:auto;flex:1}.tql-history-item[data-v-2eb7c399]{display:flex;align-items:flex-start;gap:.5rem;padding:.5rem;cursor:pointer;border-bottom:1px solid var(--surface-50, #f9fafb);transition:background-color .15s}.tql-history-item[data-v-2eb7c399]:hover{background:var(--surface-100, #f5f5f5)}.tql-history-item--favorite[data-v-2eb7c399]{background:var(--yellow-50, #fefce8)}.tql-history-item--favorite[data-v-2eb7c399]:hover{background:var(--yellow-100, #fef9c3)}.tql-history-favorite[data-v-2eb7c399]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #999);cursor:pointer;flex-shrink:0}.tql-history-favorite[data-v-2eb7c399]:hover,.tql-history-item--favorite .tql-history-favorite[data-v-2eb7c399]{color:var(--yellow-500, #eab308)}.tql-history-content[data-v-2eb7c399]{flex:1;min-width:0}.tql-history-label[data-v-2eb7c399]{font-size:.6875rem;font-weight:600;color:var(--text-color, #333);margin-bottom:.125rem}.tql-history-query[data-v-2eb7c399]{font-family:Courier New,monospace;font-size:.6875rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-history-time[data-v-2eb7c399]{font-size:.625rem;color:var(--text-color-secondary, #999);flex-shrink:0}.tql-history-empty[data-v-2eb7c399]{padding:1rem;text-align:center;color:var(--text-color-secondary, #666);font-size:.75rem}.tql-preview-panel[data-v-2eb7c399]{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #e0e0e0);border-radius:var(--border-radius, 6px);z-index:15;box-shadow:0 4px 12px #00000026;max-height:400px;overflow:hidden;display:flex;flex-direction:column}.tql-preview-header[data-v-2eb7c399]{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-bottom:1px solid var(--surface-border, #e0e0e0);font-size:.75rem;font-weight:600;color:var(--text-color, #333)}.tql-preview-close[data-v-2eb7c399]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #666);cursor:pointer;border-radius:var(--border-radius, 4px)}.tql-preview-close[data-v-2eb7c399]:hover{background:var(--surface-100, #f5f5f5);color:var(--text-color, #333)}.tql-preview-panel[data-v-2eb7c399] .tql-preview{border:none;border-radius:0;max-height:350px;overflow-y:auto}.tql-validation-messages-portal{position:fixed;top:var(--tql-msg-top, 0);left:var(--tql-msg-left, 0);width:var(--tql-msg-width, auto);z-index:9998;background:var(--surface-overlay, #fff);border:2px solid var(--red-500, #ef4444);border-radius:var(--border-radius, 6px);padding:.5rem;box-shadow:0 4px 12px #00000026}.tql-validation-messages-portal .tql-error-message{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem;color:var(--red-600, #dc2626)}.tql-validation-messages-portal .tql-error-message i{margin-top:.125rem;font-size:.75rem}.tql-validation-messages-portal .tql-error-suggestion{display:block;color:var(--text-color-secondary, #6b7280);font-style:italic;margin-left:1.25rem}.tql-chart[data-v-8c2e8a6c]{position:relative;width:100%;background:#12121e;border-radius:10px;overflow:hidden}.tql-chart__canvas[data-v-8c2e8a6c]{display:block;width:100%!important;height:100%!important}.tql-chart__metric[data-v-8c2e8a6c]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px}.tql-chart__metric-value[data-v-8c2e8a6c]{font-size:3.5rem;font-weight:700;letter-spacing:-.02em;color:#818cf8;line-height:1}.tql-chart__metric-title[data-v-8c2e8a6c]{font-size:.9rem;color:#888;letter-spacing:.03em}.tql-chart__tooltip[data-v-8c2e8a6c]{position:absolute;opacity:0;pointer-events:auto;background:#1e1e2e;border:1px solid #333;border-radius:8px;padding:10px 14px;font-size:.8rem;transition:opacity .15s;z-index:10;transform:translate(-50%,-110%)}.tql-chart__tooltip[data-v-8c2e8a6c] .tt-title{color:#e0e0e0;font-weight:600;margin-bottom:2px}.tql-chart__tooltip[data-v-8c2e8a6c] .tt-val{color:#a0a0b0;margin-bottom:6px}.tql-chart__tooltip[data-v-8c2e8a6c] .tt-link{color:#818cf8;text-decoration:none;font-weight:500}.tql-chart__tooltip[data-v-8c2e8a6c] .tt-link:hover{text-decoration:underline}
|
package/dist/vue/TqlChart.vue.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import o from "./TqlChart.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import t from "../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const
|
|
4
|
+
const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-8c2e8a6c"]]);
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
m as default
|
|
7
7
|
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { Chart as
|
|
1
|
+
import { defineComponent as at, ref as $, computed as S, onMounted as st, watch as nt, openBlock as M, createElementBlock as w, normalizeStyle as rt, createElementVNode as D, toDisplayString as O, createCommentVNode as it, nextTick as ot } from "vue";
|
|
2
|
+
import { Chart as x, Title as ct, Tooltip as ut, Legend as ft, Filler as pt, BarElement as dt, BarController as mt, LineElement as ht, LineController as yt, PointElement as gt, ArcElement as vt, PieController as bt, DoughnutController as xt, CategoryScale as kt, LinearScale as _t, TimeScale as St } from "../node_modules/chart.js/dist/chart.js";
|
|
3
3
|
import { formatValue as G } from "../src/chart/formatters.js";
|
|
4
|
-
import { extractScalarValue as J, buildChartData as
|
|
5
|
-
const
|
|
4
|
+
import { extractScalarValue as J, buildChartData as Tt, buildChartOptions as Ct, isTimeSeriesData as Mt, isLinkTemplateSafe as wt, expandLinkTemplate as Lt, chartJsType as K } from "../src/chart/mappers.js";
|
|
5
|
+
const Pt = {
|
|
6
6
|
key: 0,
|
|
7
7
|
class: "tql-chart__metric"
|
|
8
8
|
}, Ft = { class: "tql-chart__metric-value" }, Nt = {
|
|
9
9
|
key: 0,
|
|
10
10
|
class: "tql-chart__metric-title"
|
|
11
|
-
},
|
|
11
|
+
}, Ht = /* @__PURE__ */ at({
|
|
12
12
|
__name: "TqlChart",
|
|
13
13
|
props: {
|
|
14
14
|
result: {},
|
|
@@ -18,7 +18,8 @@ const At = {
|
|
|
18
18
|
},
|
|
19
19
|
emits: ["drilldown"],
|
|
20
20
|
setup(E, { emit: U }) {
|
|
21
|
-
|
|
21
|
+
x.register(
|
|
22
|
+
ct,
|
|
22
23
|
ut,
|
|
23
24
|
ft,
|
|
24
25
|
pt,
|
|
@@ -32,19 +33,14 @@ const At = {
|
|
|
32
33
|
xt,
|
|
33
34
|
kt,
|
|
34
35
|
_t,
|
|
35
|
-
St
|
|
36
|
-
Tt
|
|
36
|
+
St
|
|
37
37
|
);
|
|
38
|
-
let
|
|
39
|
-
async function
|
|
38
|
+
let L = null, P = !1, I = !1;
|
|
39
|
+
async function X() {
|
|
40
40
|
if (!I) {
|
|
41
41
|
I = !0;
|
|
42
42
|
try {
|
|
43
|
-
|
|
44
|
-
} catch {
|
|
45
|
-
}
|
|
46
|
-
try {
|
|
47
|
-
X = (await import("../node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js")).default;
|
|
43
|
+
L = (await import("../node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js")).default;
|
|
48
44
|
} catch {
|
|
49
45
|
}
|
|
50
46
|
if (!P)
|
|
@@ -54,146 +50,146 @@ const At = {
|
|
|
54
50
|
}
|
|
55
51
|
}
|
|
56
52
|
}
|
|
57
|
-
|
|
58
|
-
const
|
|
53
|
+
x.defaults.color = "#888", x.defaults.borderColor = "#ffffff0a", x.defaults.font.family = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
|
|
54
|
+
const e = E, Y = U, m = $(null), F = $(null);
|
|
59
55
|
let u = null;
|
|
60
|
-
const
|
|
61
|
-
if (
|
|
62
|
-
if (
|
|
63
|
-
const
|
|
64
|
-
return
|
|
65
|
-
}),
|
|
66
|
-
if (!
|
|
67
|
-
const
|
|
68
|
-
return
|
|
69
|
-
}), B =
|
|
70
|
-
function
|
|
71
|
-
if (!
|
|
72
|
-
const t = u.getElementsAtEventForMode(
|
|
56
|
+
const T = S(() => {
|
|
57
|
+
if (e.chartType && e.chartType !== "auto") return e.chartType;
|
|
58
|
+
if (e.result.viz_hint) return e.result.viz_hint;
|
|
59
|
+
const l = e.result.stats;
|
|
60
|
+
return l && l.type === "stats" && !l.group_by ? "number" : "bar";
|
|
61
|
+
}), N = S(() => T.value === "number"), j = S(() => T.value === "gauge"), Q = S(() => {
|
|
62
|
+
if (!N.value) return "";
|
|
63
|
+
const l = e.result.stats, t = J(l), a = e.result.viz_params?.format;
|
|
64
|
+
return a ? G(t, a) : t >= 1e6 ? (t / 1e6).toFixed(1) + "M" : t >= 1e4 ? (t / 1e3).toFixed(1) + "K" : Number.isInteger(t) ? t.toLocaleString() : t.toFixed(2);
|
|
65
|
+
}), B = S(() => e.result.viz_params?.title || "");
|
|
66
|
+
function Z(l) {
|
|
67
|
+
if (!e.drilldown || !u) return;
|
|
68
|
+
const t = u.getElementsAtEventForMode(l, "nearest", { intersect: !0 }, !1);
|
|
73
69
|
if (t.length === 0) return;
|
|
74
|
-
const
|
|
75
|
-
|
|
70
|
+
const a = t[0], o = a.datasetIndex, n = a.index, d = String(u.data.labels?.[n] ?? ""), v = Number(u.data.datasets[o]?.data?.[n] ?? 0);
|
|
71
|
+
Y("drilldown", {
|
|
76
72
|
label: d,
|
|
77
|
-
value:
|
|
73
|
+
value: v,
|
|
78
74
|
index: n,
|
|
79
|
-
field:
|
|
80
|
-
chartType:
|
|
75
|
+
field: e.result.stats.group_by?.[0],
|
|
76
|
+
chartType: T.value
|
|
81
77
|
});
|
|
82
78
|
}
|
|
83
|
-
function
|
|
84
|
-
const
|
|
85
|
-
if (!
|
|
86
|
-
const t =
|
|
79
|
+
function tt() {
|
|
80
|
+
const l = m.value;
|
|
81
|
+
if (!l) return;
|
|
82
|
+
const t = l.getContext("2d");
|
|
87
83
|
if (!t) return;
|
|
88
|
-
const
|
|
89
|
-
if (
|
|
90
|
-
for (const p of
|
|
91
|
-
const [
|
|
92
|
-
if (
|
|
93
|
-
const [V, W] =
|
|
94
|
-
!isNaN(V) && !isNaN(W) &&
|
|
84
|
+
const a = e.result.viz_params || {}, o = J(e.result.stats), n = Number(a.y_min ?? 0), d = Number(a.y_max ?? 100), v = Math.max(0, Math.min(1, (o - n) / (d - n))), k = a.ranges, h = [];
|
|
85
|
+
if (k)
|
|
86
|
+
for (const p of k.split(",")) {
|
|
87
|
+
const [C, b] = p.split(":");
|
|
88
|
+
if (C && b) {
|
|
89
|
+
const [V, W] = C.split("-").map(Number);
|
|
90
|
+
!isNaN(V) && !isNaN(W) && h.push({ from: V, to: W, color: b.startsWith("#") ? b : `#${b}` });
|
|
95
91
|
}
|
|
96
92
|
}
|
|
97
|
-
const
|
|
98
|
-
if (t.clearRect(0, 0,
|
|
99
|
-
for (const p of
|
|
100
|
-
const
|
|
101
|
-
t.beginPath(), t.arc(
|
|
93
|
+
const r = l.width = l.parentElement?.clientWidth || 400, y = l.height = 240, i = r / 2, s = y - 40, g = Math.min(r / 2 - 30, y - 60), c = Math.PI, f = 2 * Math.PI;
|
|
94
|
+
if (t.clearRect(0, 0, r, y), t.beginPath(), t.arc(i, s, g, c, f), t.lineWidth = 24, t.strokeStyle = "#333", t.lineCap = "round", t.stroke(), h.length > 0)
|
|
95
|
+
for (const p of h) {
|
|
96
|
+
const C = c + (p.from - n) / (d - n) * Math.PI, b = c + (p.to - n) / (d - n) * Math.PI;
|
|
97
|
+
t.beginPath(), t.arc(i, s, g, C, Math.min(b, f)), t.lineWidth = 24, t.strokeStyle = p.color + "66", t.lineCap = "butt", t.stroke();
|
|
102
98
|
}
|
|
103
|
-
const
|
|
104
|
-
let
|
|
105
|
-
if (
|
|
106
|
-
for (const p of
|
|
107
|
-
if (
|
|
108
|
-
|
|
99
|
+
const A = c + v * Math.PI;
|
|
100
|
+
let _ = "#818cf8";
|
|
101
|
+
if (h.length > 0) {
|
|
102
|
+
for (const p of h)
|
|
103
|
+
if (o >= p.from && o <= p.to) {
|
|
104
|
+
_ = p.color;
|
|
109
105
|
break;
|
|
110
106
|
}
|
|
111
107
|
}
|
|
112
|
-
t.beginPath(), t.arc(s,
|
|
113
|
-
const q =
|
|
114
|
-
t.fillStyle =
|
|
108
|
+
t.beginPath(), t.arc(i, s, g, c, A), t.lineWidth = 24, t.strokeStyle = _, t.lineCap = "round", t.stroke();
|
|
109
|
+
const q = a.title || "", z = a.format, lt = z ? G(o, z) : Number.isInteger(o) ? o.toLocaleString() : o.toFixed(1);
|
|
110
|
+
t.fillStyle = _, t.font = "bold 36px -apple-system, BlinkMacSystemFont, sans-serif", t.textAlign = "center", t.fillText(String(lt), i, s - 10), q && (t.fillStyle = "#888", t.font = "13px -apple-system, BlinkMacSystemFont, sans-serif", t.fillText(q, i, s + 18)), t.fillStyle = "#555", t.font = "11px -apple-system, BlinkMacSystemFont, sans-serif", t.textAlign = "left", t.fillText(String(n), i - g - 5, s + 18), t.textAlign = "right", t.fillText(String(d), i + g + 5, s + 18);
|
|
115
111
|
}
|
|
116
|
-
function
|
|
117
|
-
if (!m.value ||
|
|
118
|
-
if (
|
|
119
|
-
|
|
112
|
+
function et() {
|
|
113
|
+
if (!m.value || N.value) return;
|
|
114
|
+
if (j.value) {
|
|
115
|
+
tt();
|
|
120
116
|
return;
|
|
121
117
|
}
|
|
122
118
|
u && (u.destroy(), u = null);
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
...
|
|
119
|
+
const l = T.value, t = Tt(e.result, l), a = Ct(e.result, l);
|
|
120
|
+
e.drilldown && (a.onClick = Z, m.value && (m.value.style.cursor = "pointer"));
|
|
121
|
+
const o = [], n = e.result.viz_params || {}, d = n.labels === !0 || n.labels === "true" || n.labels === "minmax";
|
|
122
|
+
L && d && o.push(L);
|
|
123
|
+
const v = [...t.labels], k = a.indexAxis === "y", h = P && Mt(e.result.stats), r = a;
|
|
124
|
+
h && r?.scales?.x && !k ? r.scales.x = {
|
|
125
|
+
...r.scales.x,
|
|
130
126
|
type: "time",
|
|
131
127
|
time: { tooltipFormat: "HH:mm", displayFormats: { minute: "HH:mm", hour: "HH:mm", day: "MMM d" } },
|
|
132
|
-
ticks: { ...
|
|
133
|
-
} :
|
|
134
|
-
...
|
|
135
|
-
callback: function(
|
|
136
|
-
return
|
|
128
|
+
ticks: { ...r.scales.x.ticks, maxRotation: 0, autoSkip: !0, maxTicksLimit: 10 }
|
|
129
|
+
} : k ? r?.scales?.y && !r.scales.y.ticks?.callback && (r.scales.y.ticks = {
|
|
130
|
+
...r.scales.y.ticks,
|
|
131
|
+
callback: function(i, s) {
|
|
132
|
+
return v[s] ?? s;
|
|
137
133
|
}
|
|
138
|
-
}) :
|
|
139
|
-
...
|
|
140
|
-
callback: function(
|
|
141
|
-
return
|
|
134
|
+
}) : r?.scales?.x && !r.scales.x.ticks?.callback && (r.scales.x.ticks = {
|
|
135
|
+
...r.scales.x.ticks,
|
|
136
|
+
callback: function(i, s) {
|
|
137
|
+
return v[s] ?? s;
|
|
142
138
|
}
|
|
143
139
|
});
|
|
144
|
-
const
|
|
145
|
-
if (
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
...
|
|
140
|
+
const y = n.link;
|
|
141
|
+
if (y && wt(y) && F.value) {
|
|
142
|
+
const i = n.link_target || "_self", s = F.value;
|
|
143
|
+
a.plugins = {
|
|
144
|
+
...a.plugins,
|
|
149
145
|
tooltip: {
|
|
150
146
|
enabled: !1,
|
|
151
|
-
external: (
|
|
152
|
-
const { tooltip: c } =
|
|
147
|
+
external: (g) => {
|
|
148
|
+
const { tooltip: c } = g;
|
|
153
149
|
if (c.opacity === 0) {
|
|
154
150
|
s.style.opacity = "0";
|
|
155
151
|
return;
|
|
156
152
|
}
|
|
157
|
-
const
|
|
158
|
-
if (!
|
|
159
|
-
const
|
|
160
|
-
value:
|
|
161
|
-
label:
|
|
162
|
-
field:
|
|
163
|
-
count:
|
|
164
|
-
}),
|
|
165
|
-
s.innerHTML = `<div class="tt-title">${
|
|
153
|
+
const f = c.dataPoints?.[0];
|
|
154
|
+
if (!f) return;
|
|
155
|
+
const A = Lt(y, {
|
|
156
|
+
value: f.label,
|
|
157
|
+
label: f.label,
|
|
158
|
+
field: e.result.stats.group_by?.[0],
|
|
159
|
+
count: f.raw
|
|
160
|
+
}), _ = i === "_blank" ? ' rel="noopener noreferrer"' : "";
|
|
161
|
+
s.innerHTML = `<div class="tt-title">${f.label}</div><div class="tt-val">${f.formattedValue}</div><a href="${A}" target="${i}"${_} class="tt-link">Open link →</a>`, s.style.opacity = "1", s.style.left = c.caretX + "px", s.style.top = c.caretY + "px";
|
|
166
162
|
}
|
|
167
163
|
}
|
|
168
164
|
};
|
|
169
165
|
}
|
|
170
166
|
try {
|
|
171
|
-
u = new
|
|
172
|
-
type: K(
|
|
167
|
+
u = new x(m.value, {
|
|
168
|
+
type: K(l),
|
|
173
169
|
data: { labels: t.labels, datasets: t.datasets },
|
|
174
|
-
options:
|
|
175
|
-
plugins:
|
|
170
|
+
options: a,
|
|
171
|
+
plugins: o
|
|
176
172
|
});
|
|
177
|
-
} catch (
|
|
178
|
-
console.warn("[TqlChart] Plugin error, rendering without plugins:",
|
|
179
|
-
type: K(
|
|
173
|
+
} catch (i) {
|
|
174
|
+
console.warn("[TqlChart] Plugin error, rendering without plugins:", i), u = new x(m.value, {
|
|
175
|
+
type: K(l),
|
|
180
176
|
data: { labels: t.labels, datasets: t.datasets },
|
|
181
|
-
options:
|
|
177
|
+
options: a
|
|
182
178
|
});
|
|
183
179
|
}
|
|
184
180
|
}
|
|
185
181
|
let H = !1;
|
|
186
182
|
async function R() {
|
|
187
|
-
H || (await
|
|
183
|
+
H || (await X(), H = !0), ot(et);
|
|
188
184
|
}
|
|
189
|
-
return
|
|
185
|
+
return st(R), nt(() => [e.result, e.chartType], () => R(), { deep: !0 }), (l, t) => (M(), w("div", {
|
|
190
186
|
class: "tql-chart",
|
|
191
|
-
style:
|
|
187
|
+
style: rt({ height: E.height })
|
|
192
188
|
}, [
|
|
193
|
-
|
|
194
|
-
D("span", Ft, O(
|
|
195
|
-
B.value ? (
|
|
196
|
-
])) : (
|
|
189
|
+
N.value ? (M(), w("div", Pt, [
|
|
190
|
+
D("span", Ft, O(Q.value), 1),
|
|
191
|
+
B.value ? (M(), w("span", Nt, O(B.value), 1)) : it("", !0)
|
|
192
|
+
])) : (M(), w("canvas", {
|
|
197
193
|
key: 1,
|
|
198
194
|
ref_key: "canvasRef",
|
|
199
195
|
ref: m,
|
|
@@ -201,12 +197,12 @@ const At = {
|
|
|
201
197
|
}, null, 512)),
|
|
202
198
|
D("div", {
|
|
203
199
|
ref_key: "tooltipRef",
|
|
204
|
-
ref:
|
|
200
|
+
ref: F,
|
|
205
201
|
class: "tql-chart__tooltip"
|
|
206
202
|
}, null, 512)
|
|
207
203
|
], 4));
|
|
208
204
|
}
|
|
209
205
|
});
|
|
210
206
|
export {
|
|
211
|
-
|
|
207
|
+
Ht as default
|
|
212
208
|
};
|