@tellaro/tql 1.4.1 → 1.4.2

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.
@@ -1,4 +1,4 @@
1
- import { tokenizeTql as x, COMPARISON_OPERATORS as S, LOGICAL_OPERATORS as N, AGGREGATION_FUNCTIONS as I, VISUALIZATION_TYPES as L, TYPE_HINTS as A, MUTATORS as R } from "./tokenizer.js";
1
+ import { tokenizeTql as x, COMPARISON_OPERATORS as N, LOGICAL_OPERATORS as S, AGGREGATION_FUNCTIONS as I, VISUALIZATION_TYPES as A, TYPE_HINTS as L, MUTATORS as R } from "./tokenizer.js";
2
2
  import { fuzzyMatch as w } from "./fuzzyMatcher.js";
3
3
  import { getSchemaCache as $ } from "./schemaCache.js";
4
4
  const P = [
@@ -120,6 +120,7 @@ const P = [
120
120
  regexp: { detail: "Regular expression", documentation: "Match using regex pattern" },
121
121
  regex: { detail: "Regular expression", documentation: "Alias for regexp" },
122
122
  not_regexp: { detail: "Not matching regex", documentation: "Negative regex match" },
123
+ not_regex: { detail: "Not matching regex", documentation: "Alias for not_regexp" },
123
124
  matches: { detail: "Pattern match", documentation: "Match using pattern" },
124
125
  not_matches: { detail: "Not matching pattern", documentation: "Negative pattern match" },
125
126
  between: { detail: "Between range", documentation: "Usage: field between A AND B" },
@@ -228,6 +229,7 @@ const P = [
228
229
  regexp: ["text", "keyword"],
229
230
  regex: ["text", "keyword"],
230
231
  not_regexp: ["text", "keyword"],
232
+ not_regex: ["text", "keyword"],
231
233
  matches: ["text", "keyword"],
232
234
  not_matches: ["text", "keyword"],
233
235
  // IP-specific operators
@@ -260,14 +262,14 @@ class E {
260
262
  this.cache.clear();
261
263
  }
262
264
  }
263
- const v = new E();
265
+ const k = new E();
264
266
  function U(e, t, i) {
265
267
  if (!e) return { type: "start", partialText: "" };
266
- const o = `${e.substring(0, t)}|${t}`, a = v.get(o);
268
+ const o = `${e.substring(0, t)}|${t}`, a = k.get(o);
267
269
  if (a)
268
270
  return a.fieldName && !a.fieldType && i && (a.fieldType = p(a.fieldName, i)), a;
269
271
  const n = F(e, t, i);
270
- return v.set(o, n), n;
272
+ return k.set(o, n), n;
271
273
  }
272
274
  function F(e, t, i) {
273
275
  const a = x(e.substring(0, t)).filter((l) => l.type !== "whitespace");
@@ -381,9 +383,7 @@ function p(e, t) {
381
383
  return t ? $().getFieldType(t, e) : void 0;
382
384
  }
383
385
  function Q(e, t = {}) {
384
- const { query: i, cursorPosition: o } = e;
385
- if (!i) return [];
386
- const a = U(i, o, t.fields), n = [];
386
+ const { query: i, cursorPosition: o } = e, a = U(i, o, t.fields), n = [];
387
387
  switch (a.type) {
388
388
  case "start":
389
389
  case "after_paren":
@@ -489,10 +489,10 @@ function g(e, t) {
489
489
  return G(t);
490
490
  const i = [];
491
491
  for (const o of e) {
492
- const a = k(o);
492
+ const a = v(o);
493
493
  if (i.push(a), o.nested)
494
494
  for (const n of o.nested) {
495
- const s = k(n, o.name);
495
+ const s = v(n, o.name);
496
496
  i.push(s);
497
497
  }
498
498
  }
@@ -524,7 +524,7 @@ function G(e) {
524
524
  sortOrder: 10
525
525
  }));
526
526
  }
527
- function k(e, t) {
527
+ function v(e, t) {
528
528
  const i = t ? `${t}.${e.name}` : e.name;
529
529
  return {
530
530
  label: i,
@@ -537,7 +537,7 @@ function k(e, t) {
537
537
  };
538
538
  }
539
539
  function y(e, t) {
540
- let i = [...S];
540
+ let i = [...N];
541
541
  return t && (i = i.filter((o) => {
542
542
  const a = z[o];
543
543
  return !a || a.includes(t);
@@ -564,6 +564,7 @@ function q(e, t) {
564
564
  "regexp",
565
565
  "regex",
566
566
  "not_regexp",
567
+ "not_regex",
567
568
  "matches",
568
569
  "not_matches"
569
570
  ], o = ["exists", "not_exists"], a = ["is", "is_not"];
@@ -608,7 +609,7 @@ function T(e) {
608
609
  return e === "long" || e === "integer" || e === "double" || e === "float" || e === "short" || e === "byte" || e === "half_float" || e === "scaled_float" || e === "unsigned_long";
609
610
  }
610
611
  function _() {
611
- return N.filter((e) => e !== "NOT").map(
612
+ return S.filter((e) => e !== "NOT").map(
612
613
  (e, t) => O(e, t)
613
614
  );
614
615
  }
@@ -699,7 +700,7 @@ function C(e) {
699
700
  }));
700
701
  }
701
702
  function H(e) {
702
- return A.filter(
703
+ return L.filter(
703
704
  (t) => !e || t.toLowerCase().includes(e.toLowerCase())
704
705
  ).map((t, i) => ({
705
706
  label: t,
@@ -710,7 +711,7 @@ function H(e) {
710
711
  }));
711
712
  }
712
713
  function Y(e) {
713
- return L.filter(
714
+ return A.filter(
714
715
  (t) => !e || t.toLowerCase().includes(e.toLowerCase())
715
716
  ).map((t, i) => ({
716
717
  label: t,
@@ -96,7 +96,7 @@ class c {
96
96
  }));
97
97
  }
98
98
  const s = e.operator.toLowerCase();
99
- if ((s === "regexp" || s === "regex" || s === "matches" || s === "not_regexp" || s === "not_matches") && t.regexCount++, this.analyzeValue(e.value, t, a, e), (s === "in" || s === "not_in") && Array.isArray(e.value)) {
99
+ if ((s === "regexp" || s === "regex" || s === "matches" || s === "not_regexp" || s === "not_regex" || s === "not_matches") && t.regexCount++, this.analyzeValue(e.value, t, a, e), (s === "in" || s === "not_in") && Array.isArray(e.value)) {
100
100
  const i = e.value.length;
101
101
  t.inListMaxSize = Math.max(t.inListMaxSize, i);
102
102
  }
@@ -444,6 +444,7 @@ class v {
444
444
  "!startswith": "not_startswith",
445
445
  "!endswith": "not_endswith",
446
446
  "!regexp": "not_regexp",
447
+ "!regex": "not_regex",
447
448
  "!matches": "not_matches",
448
449
  "!between": "not_between",
449
450
  "!exists": "not_exists",
@@ -1,11 +1,11 @@
1
- import { parseTql as g } from "./parser.js";
1
+ import { parseTql as f } from "./parser.js";
2
2
  import { analyzeComplexity as m } from "./complexityAnalyzer.js";
3
3
  class u {
4
4
  /**
5
5
  * Generate a complete preview for a TQL query
6
6
  */
7
7
  generatePreview(t) {
8
- const r = g(t), i = m(t), n = [], s = {};
8
+ const r = f(t), i = m(t), n = [], s = {};
9
9
  if (!r.ast)
10
10
  return {
11
11
  fields: [],
@@ -96,7 +96,7 @@ class u {
96
96
  return "null_check";
97
97
  if (t === "cidr" || t === "not_cidr")
98
98
  return "cidr";
99
- if (t === "regexp" || t === "regex" || t === "matches" || t === "not_regexp" || t === "not_matches")
99
+ if (t === "regexp" || t === "regex" || t === "matches" || t === "not_regexp" || t === "not_regex" || t === "not_matches")
100
100
  return "regex";
101
101
  if (t === "between" || t === "not_between" || t === "gt" || t === "gte" || t === "lt" || t === "lte")
102
102
  return "range";
@@ -190,13 +190,13 @@ function F(e) {
190
190
  }
191
191
  function h(e) {
192
192
  if (e.type === "comparison") {
193
- const t = e.mutators?.length ? ` | ${e.mutators.join(" | ")}` : "", r = f(e.value);
193
+ const t = e.mutators?.length ? ` | ${e.mutators.join(" | ")}` : "", r = g(e.value);
194
194
  return `${e.field}${t} ${e.operator} ${r}`;
195
195
  }
196
196
  return e.type === "NOT" && e.children?.length === 1 ? `NOT (${h(e.children[0])})` : e.type === "group" && e.children?.length === 1 ? `(${h(e.children[0])})` : (e.type === "AND" || e.type === "OR") && e.children ? e.children.map(h).join(` ${e.type} `) : "";
197
197
  }
198
- function f(e) {
199
- return e === null ? "null" : e === void 0 ? "" : typeof e == "string" ? `"${e}"` : Array.isArray(e) ? `[${e.map(f).join(", ")}]` : String(e);
198
+ function g(e) {
199
+ return e === null ? "null" : e === void 0 ? "" : typeof e == "string" ? `"${e}"` : Array.isArray(e) ? `[${e.map(g).join(", ")}]` : String(e);
200
200
  }
201
201
  function N(e, t = "") {
202
202
  if (!e)
@@ -208,7 +208,7 @@ function N(e, t = "") {
208
208
  function l(e, t, r, i) {
209
209
  const n = i ? "└── " : "├── ", s = i ? " " : "│ ";
210
210
  if (e.type === "comparison") {
211
- const a = e.mutators?.length ? ` | ${e.mutators.join(" | ")}` : "", c = f(e.value);
211
+ const a = e.mutators?.length ? ` | ${e.mutators.join(" | ")}` : "", c = g(e.value);
212
212
  t.push(`${r}${n}${e.field}${a} ${e.operator} ${c}`);
213
213
  } else e.type === "NOT" ? (t.push(`${r}${n}NOT`), e.children?.length && l(e.children[0], t, r + s, !0)) : e.type === "group" ? (t.push(`${r}${n}GROUP`), e.children?.length && l(e.children[0], t, r + s, !0)) : e.children && (t.push(`${r}${n}${e.type}`), e.children.forEach((a, c) => {
214
214
  const o = c === e.children.length - 1;
@@ -26,6 +26,7 @@ const l = [
26
26
  "regexp",
27
27
  "regex",
28
28
  "not_regexp",
29
+ "not_regex",
29
30
  "matches",
30
31
  "not_matches",
31
32
  // Range operators
@@ -68,6 +69,7 @@ const l = [
68
69
  "!startswith": "not_startswith",
69
70
  "!endswith": "not_endswith",
70
71
  "!regexp": "not_regexp",
72
+ "!regex": "not_regex",
71
73
  "!matches": "not_matches",
72
74
  "!between": "not_between",
73
75
  "!exists": "not_exists",
@@ -114,7 +116,7 @@ const l = [
114
116
  "sum",
115
117
  "min",
116
118
  "max"
117
- ], f = [
119
+ ], _ = [
118
120
  // Counting
119
121
  "count",
120
122
  "unique_count",
@@ -143,7 +145,7 @@ const l = [
143
145
  "values",
144
146
  "unique",
145
147
  "distinct"
146
- ], _ = [
148
+ ], f = [
147
149
  "string",
148
150
  "str",
149
151
  "number",
@@ -355,7 +357,7 @@ class g {
355
357
  */
356
358
  classifyIdentifier(t) {
357
359
  const n = t.toUpperCase(), i = t.toLowerCase();
358
- return d.includes(n) ? "logicalOp" : p.includes(n) ? "collectionOp" : i === "true" || i === "false" ? "boolean" : i === "null" ? "null" : i === "stats" ? "keyword" : l.includes(i) ? "operator" : f.includes(i) ? "aggregation" : k.includes(i) ? "mutator" : _.includes(i) ? "typeHint" : m.includes(i) ? "visualization" : w.includes(i) ? "keyword" : "field";
360
+ return d.includes(n) ? "logicalOp" : p.includes(n) ? "collectionOp" : i === "true" || i === "false" ? "boolean" : i === "null" ? "null" : i === "stats" ? "keyword" : l.includes(i) ? "operator" : _.includes(i) ? "aggregation" : k.includes(i) ? "mutator" : f.includes(i) ? "typeHint" : m.includes(i) ? "visualization" : w.includes(i) ? "keyword" : "field";
359
361
  }
360
362
  // ============================================================================
361
363
  // Helper Methods
@@ -440,7 +442,7 @@ function E(o, t, n = !0) {
440
442
  return e;
441
443
  }
442
444
  export {
443
- f as AGGREGATION_FUNCTIONS,
445
+ _ as AGGREGATION_FUNCTIONS,
444
446
  p as COLLECTION_OPERATORS,
445
447
  l as COMPARISON_OPERATORS,
446
448
  w as KEYWORDS,
@@ -448,7 +450,7 @@ export {
448
450
  k as MUTATORS,
449
451
  u as NEGATION_SYMBOL_OPERATORS,
450
452
  h as SYMBOL_OPERATORS,
451
- _ as TYPE_HINTS,
453
+ f as TYPE_HINTS,
452
454
  g as TqlTokenizer,
453
455
  m as VISUALIZATION_TYPES,
454
456
  E as findPreviousToken,
@@ -97,7 +97,7 @@ export interface TqlFieldReference {
97
97
  start: number;
98
98
  end: number;
99
99
  }
100
- export type TqlComparisonOperator = "eq" | "ne" | "=" | "!=" | "==" | "eq_ci" | "gt" | "gte" | "lt" | "lte" | ">" | ">=" | "<" | "<=" | "contains" | "not_contains" | "!contains" | "startswith" | "not_startswith" | "!startswith" | "endswith" | "not_endswith" | "!endswith" | "contains_cs" | "not_contains_cs" | "!contains_cs" | "startswith_cs" | "not_startswith_cs" | "!startswith_cs" | "endswith_cs" | "not_endswith_cs" | "!endswith_cs" | "regexp" | "regex" | "not_regexp" | "!regexp" | "matches" | "not_matches" | "!matches" | "between" | "not_between" | "!between" | "in" | "not_in" | "!in" | "in_cs" | "not_in_cs" | "!in_cs" | "exists" | "not_exists" | "!exists" | "is" | "is_not" | "!is" | "cidr" | "not_cidr" | "!cidr" | "any" | "all" | "none" | "not_any" | "not_all" | "not_none" | "!any" | "!all" | "!none";
100
+ export type TqlComparisonOperator = "eq" | "ne" | "=" | "!=" | "==" | "eq_ci" | "gt" | "gte" | "lt" | "lte" | ">" | ">=" | "<" | "<=" | "contains" | "not_contains" | "!contains" | "startswith" | "not_startswith" | "!startswith" | "endswith" | "not_endswith" | "!endswith" | "contains_cs" | "not_contains_cs" | "!contains_cs" | "startswith_cs" | "not_startswith_cs" | "!startswith_cs" | "endswith_cs" | "not_endswith_cs" | "!endswith_cs" | "regexp" | "regex" | "not_regexp" | "not_regex" | "!regexp" | "!regex" | "matches" | "not_matches" | "!matches" | "between" | "not_between" | "!between" | "in" | "not_in" | "!in" | "in_cs" | "not_in_cs" | "!in_cs" | "exists" | "not_exists" | "!exists" | "is" | "is_not" | "!is" | "cidr" | "not_cidr" | "!cidr" | "any" | "all" | "none" | "not_any" | "not_all" | "not_none" | "!any" | "!all" | "!none";
101
101
  export type TqlLogicalOperator = "AND" | "OR" | "NOT";
102
102
  export type TqlCollectionOperator = "ANY" | "ALL" | "NONE";
103
103
  export type TqlMutator = "lowercase" | "uppercase" | "trim" | "split" | "length" | "replace" | "b64encode" | "b64decode" | "urldecode" | "hexencode" | "hexdecode" | "md5" | "sha256" | "refang" | "defang" | "is_private" | "is_global" | "is_multicast" | "is_loopback" | "is_link_local" | "nslookup" | "geoip_lookup" | "geoip" | "geo" | "any" | "all" | "avg" | "average" | "sum" | "min" | "max";
@@ -38,7 +38,9 @@ const c = {
38
38
  regexp: ["text", "keyword"],
39
39
  regex: ["text", "keyword"],
40
40
  not_regexp: ["text", "keyword"],
41
+ not_regex: ["text", "keyword"],
41
42
  "!regexp": ["text", "keyword"],
43
+ "!regex": ["text", "keyword"],
42
44
  matches: ["text", "keyword"],
43
45
  not_matches: ["text", "keyword"],
44
46
  "!matches": ["text", "keyword"],
@@ -114,7 +116,9 @@ const c = {
114
116
  regexp: ["string"],
115
117
  regex: ["string"],
116
118
  not_regexp: ["string"],
119
+ not_regex: ["string"],
117
120
  "!regexp": ["string"],
121
+ "!regex": ["string"],
118
122
  matches: ["string"],
119
123
  not_matches: ["string"],
120
124
  "!matches": ["string"],
@@ -239,7 +243,7 @@ class b {
239
243
  "TYPE_MISMATCH"
240
244
  );
241
245
  }
242
- if ((e.operator === "regexp" || e.operator === "regex" || e.operator === "not_regexp" || e.operator === "matches" || e.operator === "not_matches") && !Array.isArray(e.value) && e.value.valueType === "string" && typeof e.value.value == "string")
246
+ if ((e.operator === "regexp" || e.operator === "regex" || e.operator === "not_regexp" || e.operator === "not_regex" || e.operator === "matches" || e.operator === "not_matches") && !Array.isArray(e.value) && e.value.valueType === "string" && typeof e.value.value == "string")
243
247
  try {
244
248
  new RegExp(e.value.value);
245
249
  } catch {
@@ -313,7 +317,7 @@ class b {
313
317
  function d(s, e) {
314
318
  return new b(e).validate(s);
315
319
  }
316
- function w(s) {
320
+ function h(s) {
317
321
  return d(s).valid;
318
322
  }
319
323
  function y(s, e) {
@@ -334,6 +338,6 @@ export {
334
338
  b as TqlValidator,
335
339
  f as formatValidationResult,
336
340
  y as getTqlIssues,
337
- w as isValidTqlSyntax,
341
+ h as isValidTqlSyntax,
338
342
  d as validateTql
339
343
  };
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-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}
1
+ .tql-autocomplete-dropdown[data-v-e29dd6a7]{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-e29dd6a7]{overflow-y:auto;max-height:calc(var(--dropdown-max-height) - 60px)}.tql-completion-item[data-v-e29dd6a7]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .15s}.tql-completion-item[data-v-e29dd6a7]:hover,.tql-completion-item.selected[data-v-e29dd6a7]{background:var(--highlight-bg, #f0f0f0)}.tql-completion-icon[data-v-e29dd6a7]{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-e29dd6a7]{background:var(--blue-100, #e3f2fd);color:var(--blue-600, #1e88e5)}.tql-completion-icon.tql-completion-kind-operator[data-v-e29dd6a7]{background:var(--pink-100, #fce4ec);color:var(--pink-600, #d81b60)}.tql-completion-icon.tql-completion-kind-value[data-v-e29dd6a7]{background:var(--green-100, #e8f5e9);color:var(--green-600, #43a047)}.tql-completion-icon.tql-completion-kind-keyword[data-v-e29dd6a7]{background:var(--purple-100, #f3e5f5);color:var(--purple-600, #8e24aa)}.tql-completion-icon.tql-completion-kind-snippet[data-v-e29dd6a7]{background:var(--orange-100, #fff3e0);color:var(--orange-600, #fb8c00)}.tql-completion-icon.tql-completion-kind-mutator[data-v-e29dd6a7]{background:var(--cyan-100, #e0f7fa);color:var(--cyan-600, #00acc1)}.tql-completion-icon.tql-completion-kind-aggregation[data-v-e29dd6a7]{background:var(--indigo-100, #e8eaf6);color:var(--indigo-600, #3949ab)}.tql-completion-icon.tql-completion-kind-logicalOp[data-v-e29dd6a7]{background:var(--yellow-100, #fffde7);color:var(--yellow-700, #fbc02d)}.tql-completion-icon.tql-completion-kind-typeHint[data-v-e29dd6a7]{background:var(--teal-100, #e0f2f1);color:var(--teal-600, #00897b)}.tql-completion-icon.tql-completion-kind-visualization[data-v-e29dd6a7]{background:var(--red-100, #ffebee);color:var(--red-600, #e53935)}.tql-completion-content[data-v-e29dd6a7]{flex:1;display:flex;flex-direction:column;min-width:0}.tql-completion-label[data-v-e29dd6a7]{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-e29dd6a7]{font-size:.75rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-kind-badge[data-v-e29dd6a7]{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-e29dd6a7]{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-b501ae88]{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-b501ae88],.tql-input-wrapper.tql-input-has-min-height .tql-input[data-v-b501ae88]{min-height:var(--tql-min-height)}.tql-input-wrapper.tql-input-focused[data-v-b501ae88]{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-b501ae88]{border-color:var(--red-500, #ef4444)}.tql-input-wrapper.tql-input-invalid.tql-input-focused[data-v-b501ae88]{box-shadow:0 0 0 2px var(--red-100, rgba(239, 68, 68, .2))}.tql-input-wrapper.tql-input-disabled[data-v-b501ae88]{opacity:.6;cursor:not-allowed}.tql-highlight-layer[data-v-b501ae88]{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-b501ae88]{overflow-y:auto}.tql-input[data-v-b501ae88]{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-b501ae88]{color:transparent;caret-color:var(--text-color, #333)}.tql-input[data-v-b501ae88]::placeholder{color:var(--text-color-secondary, #666);opacity:.7}.tql-input[data-v-b501ae88]:disabled{cursor:not-allowed}.tql-token-field[data-v-b501ae88]{color:var(--tql-field-color, var(--blue-600, #2563eb))}.tql-token-operator[data-v-b501ae88]{color:var(--tql-operator-color, var(--pink-600, #db2777));font-weight:500}.tql-token-logicalOp[data-v-b501ae88]{color:var(--tql-logical-color, var(--purple-600, #9333ea));font-weight:600}.tql-token-collectionOp[data-v-b501ae88]{color:var(--tql-collection-color, var(--indigo-600, #4f46e5));font-weight:600}.tql-token-string[data-v-b501ae88]{color:var(--tql-string-color, var(--green-600, #16a34a))}.tql-token-number[data-v-b501ae88]{color:var(--tql-number-color, var(--orange-600, #ea580c))}.tql-token-boolean[data-v-b501ae88]{color:var(--tql-boolean-color, var(--cyan-600, #0891b2))}.tql-token-null[data-v-b501ae88]{color:var(--tql-null-color, var(--gray-500, #6b7280));font-style:italic}.tql-token-mutator[data-v-b501ae88]{color:var(--tql-mutator-color, var(--teal-600, #0d9488));font-style:italic}.tql-token-aggregation[data-v-b501ae88]{color:var(--tql-aggregation-color, var(--indigo-600, #4f46e5))}.tql-token-keyword[data-v-b501ae88]{color:var(--tql-keyword-color, var(--purple-500, #a855f7))}.tql-token-typeHint[data-v-b501ae88]{color:var(--tql-typehint-color, var(--teal-500, #14b8a6))}.tql-token-visualization[data-v-b501ae88]{color:var(--tql-viz-color, var(--red-500, #ef4444))}.tql-token-arrow[data-v-b501ae88]{color:var(--tql-arrow-color, var(--gray-600, #4b5563));font-weight:600}.tql-token-doubleColon[data-v-b501ae88]{color:var(--tql-colon-color, var(--gray-500, #6b7280))}.tql-token-paren[data-v-b501ae88],.tql-token-bracket[data-v-b501ae88]{color:var(--tql-bracket-color, var(--gray-600, #4b5563))}.tql-token-error[data-v-b501ae88]{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-b501ae88]{background-color:var(--red-50, #fef2f2)}.tql-token-unknown[data-v-b501ae88]{color:var(--text-color-secondary, #666)}.tql-validation-icon[data-v-b501ae88]{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-b501ae88]{top:.75rem;transform:none}.tql-icon-valid[data-v-b501ae88]{color:var(--green-500, #22c55e)}.tql-icon-invalid[data-v-b501ae88]{color:var(--red-500, #ef4444)}.tql-icon-clickable[data-v-b501ae88]{cursor:pointer;transition:transform .2s}.tql-icon-clickable[data-v-b501ae88]:hover{transform:scale(1.2)}.tql-icon-clickable[data-v-b501ae88]:focus{outline:2px solid var(--primary-color, #3b82f6);outline-offset:2px;border-radius:50%}.tql-snippet-button[data-v-b501ae88]{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-b501ae88]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-input-multiline .tql-snippet-button[data-v-b501ae88]{top:.75rem;transform:none}.tql-input-resizable-textarea[data-v-b501ae88]{resize:vertical;min-height:80px}.tql-input-wrapper.tql-input-resizable[data-v-b501ae88]{height:auto}.tql-input-wrapper.tql-input-resizable .tql-highlight-layer[data-v-b501ae88]{height:100%}.tql-validation-messages[data-v-b501ae88]{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-b501ae88],.tql-input-autocomplete-active .tql-complexity-warnings[data-v-b501ae88],.tql-input-autocomplete-active .tql-history-dropdown[data-v-b501ae88],.tql-input-autocomplete-active .tql-preview-panel[data-v-b501ae88]{display:none!important}.tql-error-message[data-v-b501ae88]{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-b501ae88]{margin-top:.125rem;font-size:.75rem}.tql-error-suggestion[data-v-b501ae88]{display:block;color:var(--text-color-secondary, #666);font-style:italic;margin-left:1.25rem}.sr-only[data-v-b501ae88]{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-b501ae88]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:.25rem}.tql-input-multiline .tql-toolbar[data-v-b501ae88]{top:.5rem;transform:none}.tql-toolbar-button[data-v-b501ae88]{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-b501ae88]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-toolbar-button--active[data-v-b501ae88]{color:var(--primary-color, #3b82f6);background:var(--primary-100, rgba(59, 130, 246, .1))}.tql-validation-status[data-v-b501ae88]{display:flex;align-items:center}.tql-complexity-badge[data-v-b501ae88]{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-b501ae88]{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d)}.tql-complexity-medium[data-v-b501ae88]{background:var(--yellow-100, #fef9c3);color:var(--yellow-700, #a16207)}.tql-complexity-high[data-v-b501ae88]{background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c)}.tql-complexity-count[data-v-b501ae88]{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-b501ae88]{background:var(--green-600, #16a34a)}.tql-complexity-medium .tql-complexity-count[data-v-b501ae88]{background:var(--yellow-600, #ca8a04)}.tql-complexity-high .tql-complexity-count[data-v-b501ae88]{background:var(--red-600, #dc2626)}.tql-complexity-warnings[data-v-b501ae88]{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-b501ae88]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem}.tql-complexity-warning i[data-v-b501ae88]{margin-top:.125rem;font-size:.75rem}.tql-complexity-warning--info[data-v-b501ae88]{color:var(--blue-600, #2563eb)}.tql-complexity-warning--warning[data-v-b501ae88]{color:var(--yellow-600, #ca8a04)}.tql-complexity-warning--error[data-v-b501ae88]{color:var(--red-600, #dc2626)}.tql-complexity-suggestions[data-v-b501ae88]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--surface-border, #e0e0e0)}.tql-complexity-suggestion[data-v-b501ae88]{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-b501ae88]{color:var(--yellow-500, #eab308)}.tql-history-dropdown[data-v-b501ae88]{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-b501ae88]{padding:.5rem;border-bottom:1px solid var(--surface-border, #e0e0e0)}.tql-history-search[data-v-b501ae88]{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-b501ae88]:focus{border-color:var(--primary-color, #3b82f6)}.tql-history-list[data-v-b501ae88]{overflow-y:auto;flex:1}.tql-history-item[data-v-b501ae88]{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-b501ae88]:hover{background:var(--surface-100, #f5f5f5)}.tql-history-item--favorite[data-v-b501ae88]{background:var(--yellow-50, #fefce8)}.tql-history-item--favorite[data-v-b501ae88]:hover{background:var(--yellow-100, #fef9c3)}.tql-history-favorite[data-v-b501ae88]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #999);cursor:pointer;flex-shrink:0}.tql-history-favorite[data-v-b501ae88]:hover,.tql-history-item--favorite .tql-history-favorite[data-v-b501ae88]{color:var(--yellow-500, #eab308)}.tql-history-content[data-v-b501ae88]{flex:1;min-width:0}.tql-history-label[data-v-b501ae88]{font-size:.6875rem;font-weight:600;color:var(--text-color, #333);margin-bottom:.125rem}.tql-history-query[data-v-b501ae88]{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-b501ae88]{font-size:.625rem;color:var(--text-color-secondary, #999);flex-shrink:0}.tql-history-empty[data-v-b501ae88]{padding:1rem;text-align:center;color:var(--text-color-secondary, #666);font-size:.75rem}.tql-preview-panel[data-v-b501ae88]{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-b501ae88]{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-b501ae88]{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-b501ae88]:hover{background:var(--surface-100, #f5f5f5);color:var(--text-color, #333)}.tql-preview-panel[data-v-b501ae88] .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-dc05ff8b]{position:relative;width:100%;background:#12121e;border-radius:10px;overflow:hidden}.tql-chart__canvas[data-v-dc05ff8b]{display:block;width:100%!important;height:100%!important}.tql-chart__metric[data-v-dc05ff8b]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px}.tql-chart__metric-value[data-v-dc05ff8b]{font-size:3.5rem;font-weight:700;letter-spacing:-.02em;color:#818cf8;line-height:1}.tql-chart__metric-title[data-v-dc05ff8b]{font-size:.9rem;color:#888;letter-spacing:.03em}.tql-chart__tooltip[data-v-dc05ff8b]{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-dc05ff8b] .tt-title{color:#e0e0e0;font-weight:600;margin-bottom:2px}.tql-chart__tooltip[data-v-dc05ff8b] .tt-val{color:#a0a0b0;margin-bottom:6px}.tql-chart__tooltip[data-v-dc05ff8b] .tt-link{color:#818cf8;text-decoration:none;font-weight:500}.tql-chart__tooltip[data-v-dc05ff8b] .tt-link:hover{text-decoration:underline}
@@ -1,7 +1,7 @@
1
1
  import o from "./TqlAutocomplete.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../_virtual/_plugin-vue_export-helper.js";
4
- const e = /* @__PURE__ */ t(o, [["__scopeId", "data-v-7d19214b"]]);
4
+ const r = /* @__PURE__ */ t(o, [["__scopeId", "data-v-e29dd6a7"]]);
5
5
  export {
6
- e as default
6
+ r as default
7
7
  };
@@ -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 m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-8c2e8a6c"]]);
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-dc05ff8b"]]);
5
5
  export {
6
6
  m as default
7
7
  };
@@ -2,7 +2,7 @@ import o from "./TqlInput.vue2.js";
2
2
  /* empty css */
3
3
  /* empty css */
4
4
  import t from "../_virtual/_plugin-vue_export-helper.js";
5
- const a = /* @__PURE__ */ t(o, [["__scopeId", "data-v-2eb7c399"]]);
5
+ const _ = /* @__PURE__ */ t(o, [["__scopeId", "data-v-b501ae88"]]);
6
6
  export {
7
- a as default
7
+ _ as default
8
8
  };
package/package.json CHANGED
@@ -1,126 +1,127 @@
1
- {
2
- "name": "@tellaro/tql",
3
- "version": "1.4.1",
4
- "description": "Tellaro Query Language (TQL) parser, validator, and autocomplete for JavaScript/TypeScript",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "import": "./dist/index.js",
12
- "types": "./dist/index.d.ts"
13
- },
14
- "./vue": {
15
- "import": "./dist/vue/index.js",
16
- "types": "./dist/vue/index.d.ts"
17
- },
18
- "./chart": {
19
- "import": "./dist/src/chart/index.js",
20
- "types": "./dist/src/chart/index.d.ts"
21
- },
22
- "./style.css": "./dist/tql.css",
23
- "./dist/style.css": "./dist/tql.css",
24
- "./dist/tql.css": "./dist/tql.css"
25
- },
26
- "files": [
27
- "dist",
28
- "README.md"
29
- ],
30
- "scripts": {
31
- "build": "vite build",
32
- "test": "vitest run",
33
- "test:watch": "vitest",
34
- "test:shared": "vitest run --grep 'shared-fixtures'",
35
- "test:e2e": "playwright test",
36
- "test:e2e:ui": "playwright test --ui",
37
- "playground:serve": "vite --config vite.playground.config.ts --port 5174",
38
- "playground:dev": "vite --config vite.playground.config.ts",
39
- "lint": "eslint src vue tests --ext .ts,.vue",
40
- "typecheck": "vue-tsc --noEmit",
41
- "prepublishOnly": "npm run build"
42
- },
43
- "repository": {
44
- "type": "git",
45
- "url": "git+https://github.com/h-a-security-solutions-llc/tellaro-query-language.git",
46
- "directory": "js"
47
- },
48
- "keywords": [
49
- "tql",
50
- "tellaro",
51
- "query",
52
- "language",
53
- "parser",
54
- "validator",
55
- "autocomplete",
56
- "vue"
57
- ],
58
- "author": "H&A Security Solutions LLC",
59
- "license": "MIT",
60
- "peerDependencies": {
61
- "@vueuse/core": "^10.0.0",
62
- "chart.js": "^3.9.0 || ^4.0.0",
63
- "chartjs-adapter-luxon": "^1.3.0",
64
- "chartjs-plugin-annotation": "^3.0.0",
65
- "chartjs-plugin-datalabels": "^2.0.0",
66
- "luxon": "^3.0.0",
67
- "vue": "^3.4.0"
68
- },
69
- "peerDependenciesMeta": {
70
- "vue": {
71
- "optional": true
72
- },
73
- "@vueuse/core": {
74
- "optional": true
75
- },
76
- "chart.js": {
77
- "optional": true
78
- },
79
- "chartjs-adapter-luxon": {
80
- "optional": true
81
- },
82
- "chartjs-plugin-annotation": {
83
- "optional": true
84
- },
85
- "chartjs-plugin-datalabels": {
86
- "optional": true
87
- },
88
- "luxon": {
89
- "optional": true
90
- }
91
- },
92
- "devDependencies": {
93
- "@playwright/test": "^1.40.0",
94
- "@types/js-yaml": "^4.0.9",
95
- "@types/node": "^20.11.0",
96
- "@vitejs/plugin-vue": "^6.0.4",
97
- "@vue/test-utils": "^2.4.0",
98
- "@vue/tsconfig": "^0.5.1",
99
- "@vueuse/core": "^10.0.0",
100
- "ajv": "^8.17.1",
101
- "chart.js": "^4.5.1",
102
- "chartjs-adapter-luxon": "^1.3.1",
103
- "chartjs-plugin-annotation": "^3.1.0",
104
- "chartjs-plugin-datalabels": "^2.2.0",
105
- "eslint": "^8.56.0",
106
- "js-yaml": "^4.1.0",
107
- "jsdom": "^24.0.0",
108
- "luxon": "^3.7.2",
109
- "typescript": "^5.3.0",
110
- "vite": "^7.3.2",
111
- "vite-plugin-dts": "^4.5.4",
112
- "vitest": "^4.0.18",
113
- "vue": "^3.4.0",
114
- "vue-tsc": "^3.2.4"
115
- },
116
- "engines": {
117
- "node": ">=18.0.0"
118
- },
119
- "overrides": {
120
- "@microsoft/api-extractor": {
121
- "minimatch": ">=10.2.3"
122
- },
123
- "flatted": ">=3.4.0",
124
- "lodash": ">=4.18.0"
125
- }
126
- }
1
+ {
2
+ "name": "@tellaro/tql",
3
+ "version": "1.4.2",
4
+ "description": "Tellaro Query Language (TQL) parser, validator, and autocomplete for JavaScript/TypeScript",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./vue": {
15
+ "import": "./dist/vue/index.js",
16
+ "types": "./dist/vue/index.d.ts"
17
+ },
18
+ "./chart": {
19
+ "import": "./dist/src/chart/index.js",
20
+ "types": "./dist/src/chart/index.d.ts"
21
+ },
22
+ "./style.css": "./dist/tql.css",
23
+ "./dist/style.css": "./dist/tql.css",
24
+ "./dist/tql.css": "./dist/tql.css"
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "README.md"
29
+ ],
30
+ "scripts": {
31
+ "build": "vite build",
32
+ "test": "vitest run",
33
+ "test:watch": "vitest",
34
+ "test:shared": "vitest run --grep 'shared-fixtures'",
35
+ "test:e2e": "playwright test",
36
+ "test:e2e:ui": "playwright test --ui",
37
+ "playground:serve": "vite --config vite.playground.config.ts --port 5174",
38
+ "playground:dev": "vite --config vite.playground.config.ts",
39
+ "lint": "eslint src vue tests --ext .ts,.vue",
40
+ "typecheck": "vue-tsc --noEmit",
41
+ "prepublishOnly": "npm run build"
42
+ },
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/h-a-security-solutions-llc/tellaro-query-language.git",
46
+ "directory": "js"
47
+ },
48
+ "keywords": [
49
+ "tql",
50
+ "tellaro",
51
+ "query",
52
+ "language",
53
+ "parser",
54
+ "validator",
55
+ "autocomplete",
56
+ "vue"
57
+ ],
58
+ "author": "H&A Security Solutions LLC",
59
+ "license": "MIT",
60
+ "peerDependencies": {
61
+ "@vueuse/core": "^10.0.0",
62
+ "chart.js": "^3.9.0 || ^4.0.0",
63
+ "chartjs-adapter-luxon": "^1.3.0",
64
+ "chartjs-plugin-annotation": "^3.0.0",
65
+ "chartjs-plugin-datalabels": "^2.0.0",
66
+ "luxon": "^3.0.0",
67
+ "vue": "^3.4.0"
68
+ },
69
+ "peerDependenciesMeta": {
70
+ "vue": {
71
+ "optional": true
72
+ },
73
+ "@vueuse/core": {
74
+ "optional": true
75
+ },
76
+ "chart.js": {
77
+ "optional": true
78
+ },
79
+ "chartjs-adapter-luxon": {
80
+ "optional": true
81
+ },
82
+ "chartjs-plugin-annotation": {
83
+ "optional": true
84
+ },
85
+ "chartjs-plugin-datalabels": {
86
+ "optional": true
87
+ },
88
+ "luxon": {
89
+ "optional": true
90
+ }
91
+ },
92
+ "devDependencies": {
93
+ "@playwright/test": "^1.40.0",
94
+ "@types/js-yaml": "^4.0.9",
95
+ "@types/node": "^20.11.0",
96
+ "@vitejs/plugin-vue": "^6.0.4",
97
+ "@vue/test-utils": "^2.4.0",
98
+ "@vue/tsconfig": "^0.5.1",
99
+ "@vueuse/core": "^10.0.0",
100
+ "ajv": "^8.17.1",
101
+ "chart.js": "^4.5.1",
102
+ "chartjs-adapter-luxon": "^1.3.1",
103
+ "chartjs-plugin-annotation": "^3.1.0",
104
+ "chartjs-plugin-datalabels": "^2.2.0",
105
+ "eslint": "^8.56.0",
106
+ "js-yaml": "^4.1.0",
107
+ "jsdom": "^24.0.0",
108
+ "luxon": "^3.7.2",
109
+ "typescript": "^5.3.0",
110
+ "vite": "^7.3.2",
111
+ "vite-plugin-dts": "^4.5.4",
112
+ "vitest": "^4.0.18",
113
+ "vue": "^3.4.0",
114
+ "vue-tsc": "^3.2.4"
115
+ },
116
+ "engines": {
117
+ "node": ">=18.0.0"
118
+ },
119
+ "overrides": {
120
+ "@microsoft/api-extractor": {
121
+ "minimatch": ">=10.2.3"
122
+ },
123
+ "flatted": ">=3.4.0",
124
+ "lodash": ">=4.18.0",
125
+ "postcss": ">=8.5.10"
126
+ }
127
+ }