@tellaro/tql 0.1.3 → 0.1.4

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.
@@ -443,7 +443,8 @@ function V(e) {
443
443
  { name: "stack", description: "Stack identifier" }
444
444
  ].filter((a) => !e || a.name.toLowerCase().includes(e.toLowerCase())).map((a) => ({
445
445
  label: a.name,
446
- insertText: a.name,
446
+ insertText: a.name + " ",
447
+ // Add trailing space for easier operator typing
447
448
  kind: "field",
448
449
  detail: a.description,
449
450
  sortOrder: 10
@@ -453,7 +454,8 @@ function k(e, t) {
453
454
  const a = t ? `${t}.${e.name}` : e.name;
454
455
  return {
455
456
  label: a,
456
- insertText: a,
457
+ insertText: a + " ",
458
+ // Add trailing space for easier operator typing
457
459
  kind: "field",
458
460
  detail: e.description || `Type: ${e.type}`,
459
461
  documentation: e.examples ? `Examples: ${e.examples.join(", ")}` : void 0,
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .tql-autocomplete-dropdown[data-v-3df9a4be]{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-3df9a4be]{overflow-y:auto;max-height:calc(var(--dropdown-max-height) - 60px)}.tql-completion-item[data-v-3df9a4be]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .15s}.tql-completion-item[data-v-3df9a4be]:hover,.tql-completion-item.selected[data-v-3df9a4be]{background:var(--highlight-bg, #f0f0f0)}.tql-completion-icon[data-v-3df9a4be]{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-3df9a4be]{background:var(--blue-100, #e3f2fd);color:var(--blue-600, #1e88e5)}.tql-completion-icon.tql-completion-kind-operator[data-v-3df9a4be]{background:var(--pink-100, #fce4ec);color:var(--pink-600, #d81b60)}.tql-completion-icon.tql-completion-kind-value[data-v-3df9a4be]{background:var(--green-100, #e8f5e9);color:var(--green-600, #43a047)}.tql-completion-icon.tql-completion-kind-keyword[data-v-3df9a4be]{background:var(--purple-100, #f3e5f5);color:var(--purple-600, #8e24aa)}.tql-completion-icon.tql-completion-kind-snippet[data-v-3df9a4be]{background:var(--orange-100, #fff3e0);color:var(--orange-600, #fb8c00)}.tql-completion-icon.tql-completion-kind-mutator[data-v-3df9a4be]{background:var(--cyan-100, #e0f7fa);color:var(--cyan-600, #00acc1)}.tql-completion-icon.tql-completion-kind-aggregation[data-v-3df9a4be]{background:var(--indigo-100, #e8eaf6);color:var(--indigo-600, #3949ab)}.tql-completion-icon.tql-completion-kind-logicalOp[data-v-3df9a4be]{background:var(--yellow-100, #fffde7);color:var(--yellow-700, #fbc02d)}.tql-completion-icon.tql-completion-kind-typeHint[data-v-3df9a4be]{background:var(--teal-100, #e0f2f1);color:var(--teal-600, #00897b)}.tql-completion-icon.tql-completion-kind-visualization[data-v-3df9a4be]{background:var(--red-100, #ffebee);color:var(--red-600, #e53935)}.tql-completion-content[data-v-3df9a4be]{flex:1;display:flex;flex-direction:column;min-width:0}.tql-completion-label[data-v-3df9a4be]{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-3df9a4be]{font-size:.75rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-kind-badge[data-v-3df9a4be]{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-3df9a4be]{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-0ddc40d6]{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-0ddc40d6],.tql-input-wrapper.tql-input-has-min-height .tql-input[data-v-0ddc40d6]{min-height:var(--tql-min-height)}.tql-input-wrapper.tql-input-focused[data-v-0ddc40d6]{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-0ddc40d6]{border-color:var(--red-500, #ef4444)}.tql-input-wrapper.tql-input-invalid.tql-input-focused[data-v-0ddc40d6]{box-shadow:0 0 0 2px var(--red-100, rgba(239, 68, 68, .2))}.tql-input-wrapper.tql-input-disabled[data-v-0ddc40d6]{opacity:.6;cursor:not-allowed}.tql-highlight-layer[data-v-0ddc40d6]{position:absolute;top:0;left:0;right:0;bottom: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-0ddc40d6]{overflow-y:auto}.tql-input[data-v-0ddc40d6]{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-0ddc40d6]{color:transparent;caret-color:var(--text-color, #333)}.tql-input[data-v-0ddc40d6]::placeholder{color:var(--text-color-secondary, #666);opacity:.7}.tql-input[data-v-0ddc40d6]:disabled{cursor:not-allowed}.tql-token-field[data-v-0ddc40d6]{color:var(--tql-field-color, var(--blue-600, #2563eb))}.tql-token-operator[data-v-0ddc40d6]{color:var(--tql-operator-color, var(--pink-600, #db2777));font-weight:500}.tql-token-logicalOp[data-v-0ddc40d6]{color:var(--tql-logical-color, var(--purple-600, #9333ea));font-weight:600}.tql-token-collectionOp[data-v-0ddc40d6]{color:var(--tql-collection-color, var(--indigo-600, #4f46e5));font-weight:600}.tql-token-string[data-v-0ddc40d6]{color:var(--tql-string-color, var(--green-600, #16a34a))}.tql-token-number[data-v-0ddc40d6]{color:var(--tql-number-color, var(--orange-600, #ea580c))}.tql-token-boolean[data-v-0ddc40d6]{color:var(--tql-boolean-color, var(--cyan-600, #0891b2))}.tql-token-null[data-v-0ddc40d6]{color:var(--tql-null-color, var(--gray-500, #6b7280));font-style:italic}.tql-token-mutator[data-v-0ddc40d6]{color:var(--tql-mutator-color, var(--teal-600, #0d9488));font-style:italic}.tql-token-aggregation[data-v-0ddc40d6]{color:var(--tql-aggregation-color, var(--indigo-600, #4f46e5))}.tql-token-keyword[data-v-0ddc40d6]{color:var(--tql-keyword-color, var(--purple-500, #a855f7))}.tql-token-typeHint[data-v-0ddc40d6]{color:var(--tql-typehint-color, var(--teal-500, #14b8a6))}.tql-token-visualization[data-v-0ddc40d6]{color:var(--tql-viz-color, var(--red-500, #ef4444))}.tql-token-arrow[data-v-0ddc40d6]{color:var(--tql-arrow-color, var(--gray-600, #4b5563));font-weight:600}.tql-token-doubleColon[data-v-0ddc40d6]{color:var(--tql-colon-color, var(--gray-500, #6b7280))}.tql-token-paren[data-v-0ddc40d6],.tql-token-bracket[data-v-0ddc40d6]{color:var(--tql-bracket-color, var(--gray-600, #4b5563))}.tql-token-error[data-v-0ddc40d6]{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-0ddc40d6]{background-color:var(--red-50, #fef2f2)}.tql-token-unknown[data-v-0ddc40d6]{color:var(--text-color-secondary, #666)}.tql-validation-icon[data-v-0ddc40d6]{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-0ddc40d6]{top:.75rem;transform:none}.tql-icon-valid[data-v-0ddc40d6]{color:var(--green-500, #22c55e)}.tql-icon-invalid[data-v-0ddc40d6]{color:var(--red-500, #ef4444)}.tql-icon-clickable[data-v-0ddc40d6]{cursor:pointer;transition:transform .2s}.tql-icon-clickable[data-v-0ddc40d6]:hover{transform:scale(1.2)}.tql-icon-clickable[data-v-0ddc40d6]:focus{outline:2px solid var(--primary-color, #3b82f6);outline-offset:2px;border-radius:50%}.tql-snippet-button[data-v-0ddc40d6]{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-0ddc40d6]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-input-multiline .tql-snippet-button[data-v-0ddc40d6]{top:.75rem;transform:none}.tql-input-resizable-textarea[data-v-0ddc40d6]{resize:vertical;min-height:80px}.tql-input-wrapper.tql-input-resizable[data-v-0ddc40d6]{height:auto}.tql-input-wrapper.tql-input-resizable .tql-highlight-layer[data-v-0ddc40d6]{height:100%}.tql-validation-messages[data-v-0ddc40d6]{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-0ddc40d6],.tql-input-autocomplete-active .tql-complexity-warnings[data-v-0ddc40d6],.tql-input-autocomplete-active .tql-history-dropdown[data-v-0ddc40d6],.tql-input-autocomplete-active .tql-preview-panel[data-v-0ddc40d6]{display:none!important}.tql-error-message[data-v-0ddc40d6]{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-0ddc40d6]{margin-top:.125rem;font-size:.75rem}.tql-error-suggestion[data-v-0ddc40d6]{display:block;color:var(--text-color-secondary, #666);font-style:italic;margin-left:1.25rem}.sr-only[data-v-0ddc40d6]{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-0ddc40d6]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:.25rem}.tql-input-multiline .tql-toolbar[data-v-0ddc40d6]{top:.5rem;transform:none}.tql-toolbar-button[data-v-0ddc40d6]{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-0ddc40d6]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-toolbar-button--active[data-v-0ddc40d6]{color:var(--primary-color, #3b82f6);background:var(--primary-100, rgba(59, 130, 246, .1))}.tql-validation-status[data-v-0ddc40d6]{display:flex;align-items:center}.tql-complexity-badge[data-v-0ddc40d6]{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-0ddc40d6]{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d)}.tql-complexity-medium[data-v-0ddc40d6]{background:var(--yellow-100, #fef9c3);color:var(--yellow-700, #a16207)}.tql-complexity-high[data-v-0ddc40d6]{background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c)}.tql-complexity-count[data-v-0ddc40d6]{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-0ddc40d6]{background:var(--green-600, #16a34a)}.tql-complexity-medium .tql-complexity-count[data-v-0ddc40d6]{background:var(--yellow-600, #ca8a04)}.tql-complexity-high .tql-complexity-count[data-v-0ddc40d6]{background:var(--red-600, #dc2626)}.tql-complexity-warnings[data-v-0ddc40d6]{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-0ddc40d6]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem}.tql-complexity-warning i[data-v-0ddc40d6]{margin-top:.125rem;font-size:.75rem}.tql-complexity-warning--info[data-v-0ddc40d6]{color:var(--blue-600, #2563eb)}.tql-complexity-warning--warning[data-v-0ddc40d6]{color:var(--yellow-600, #ca8a04)}.tql-complexity-warning--error[data-v-0ddc40d6]{color:var(--red-600, #dc2626)}.tql-complexity-suggestions[data-v-0ddc40d6]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--surface-border, #e0e0e0)}.tql-complexity-suggestion[data-v-0ddc40d6]{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-0ddc40d6]{color:var(--yellow-500, #eab308)}.tql-history-dropdown[data-v-0ddc40d6]{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-0ddc40d6]{padding:.5rem;border-bottom:1px solid var(--surface-border, #e0e0e0)}.tql-history-search[data-v-0ddc40d6]{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-0ddc40d6]:focus{border-color:var(--primary-color, #3b82f6)}.tql-history-list[data-v-0ddc40d6]{overflow-y:auto;flex:1}.tql-history-item[data-v-0ddc40d6]{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-0ddc40d6]:hover{background:var(--surface-100, #f5f5f5)}.tql-history-item--favorite[data-v-0ddc40d6]{background:var(--yellow-50, #fefce8)}.tql-history-item--favorite[data-v-0ddc40d6]:hover{background:var(--yellow-100, #fef9c3)}.tql-history-favorite[data-v-0ddc40d6]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #999);cursor:pointer;flex-shrink:0}.tql-history-favorite[data-v-0ddc40d6]:hover,.tql-history-item--favorite .tql-history-favorite[data-v-0ddc40d6]{color:var(--yellow-500, #eab308)}.tql-history-content[data-v-0ddc40d6]{flex:1;min-width:0}.tql-history-label[data-v-0ddc40d6]{font-size:.6875rem;font-weight:600;color:var(--text-color, #333);margin-bottom:.125rem}.tql-history-query[data-v-0ddc40d6]{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-0ddc40d6]{font-size:.625rem;color:var(--text-color-secondary, #999);flex-shrink:0}.tql-history-empty[data-v-0ddc40d6]{padding:1rem;text-align:center;color:var(--text-color-secondary, #666);font-size:.75rem}.tql-preview-panel[data-v-0ddc40d6]{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-0ddc40d6]{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-0ddc40d6]{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-0ddc40d6]:hover{background:var(--surface-100, #f5f5f5);color:var(--text-color, #333)}.tql-preview-panel[data-v-0ddc40d6] .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}
1
+ .tql-autocomplete-dropdown[data-v-3df9a4be]{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-3df9a4be]{overflow-y:auto;max-height:calc(var(--dropdown-max-height) - 60px)}.tql-completion-item[data-v-3df9a4be]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .15s}.tql-completion-item[data-v-3df9a4be]:hover,.tql-completion-item.selected[data-v-3df9a4be]{background:var(--highlight-bg, #f0f0f0)}.tql-completion-icon[data-v-3df9a4be]{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-3df9a4be]{background:var(--blue-100, #e3f2fd);color:var(--blue-600, #1e88e5)}.tql-completion-icon.tql-completion-kind-operator[data-v-3df9a4be]{background:var(--pink-100, #fce4ec);color:var(--pink-600, #d81b60)}.tql-completion-icon.tql-completion-kind-value[data-v-3df9a4be]{background:var(--green-100, #e8f5e9);color:var(--green-600, #43a047)}.tql-completion-icon.tql-completion-kind-keyword[data-v-3df9a4be]{background:var(--purple-100, #f3e5f5);color:var(--purple-600, #8e24aa)}.tql-completion-icon.tql-completion-kind-snippet[data-v-3df9a4be]{background:var(--orange-100, #fff3e0);color:var(--orange-600, #fb8c00)}.tql-completion-icon.tql-completion-kind-mutator[data-v-3df9a4be]{background:var(--cyan-100, #e0f7fa);color:var(--cyan-600, #00acc1)}.tql-completion-icon.tql-completion-kind-aggregation[data-v-3df9a4be]{background:var(--indigo-100, #e8eaf6);color:var(--indigo-600, #3949ab)}.tql-completion-icon.tql-completion-kind-logicalOp[data-v-3df9a4be]{background:var(--yellow-100, #fffde7);color:var(--yellow-700, #fbc02d)}.tql-completion-icon.tql-completion-kind-typeHint[data-v-3df9a4be]{background:var(--teal-100, #e0f2f1);color:var(--teal-600, #00897b)}.tql-completion-icon.tql-completion-kind-visualization[data-v-3df9a4be]{background:var(--red-100, #ffebee);color:var(--red-600, #e53935)}.tql-completion-content[data-v-3df9a4be]{flex:1;display:flex;flex-direction:column;min-width:0}.tql-completion-label[data-v-3df9a4be]{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-3df9a4be]{font-size:.75rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-kind-badge[data-v-3df9a4be]{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-3df9a4be]{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-b6884907]{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-b6884907],.tql-input-wrapper.tql-input-has-min-height .tql-input[data-v-b6884907]{min-height:var(--tql-min-height)}.tql-input-wrapper.tql-input-focused[data-v-b6884907]{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-b6884907]{border-color:var(--red-500, #ef4444)}.tql-input-wrapper.tql-input-invalid.tql-input-focused[data-v-b6884907]{box-shadow:0 0 0 2px var(--red-100, rgba(239, 68, 68, .2))}.tql-input-wrapper.tql-input-disabled[data-v-b6884907]{opacity:.6;cursor:not-allowed}.tql-highlight-layer[data-v-b6884907]{position:absolute;top:0;left:0;right:0;bottom: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-b6884907]{overflow-y:auto}.tql-input[data-v-b6884907]{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-b6884907]{color:transparent;caret-color:var(--text-color, #333)}.tql-input[data-v-b6884907]::placeholder{color:var(--text-color-secondary, #666);opacity:.7}.tql-input[data-v-b6884907]:disabled{cursor:not-allowed}.tql-token-field[data-v-b6884907]{color:var(--tql-field-color, var(--blue-600, #2563eb))}.tql-token-operator[data-v-b6884907]{color:var(--tql-operator-color, var(--pink-600, #db2777));font-weight:500}.tql-token-logicalOp[data-v-b6884907]{color:var(--tql-logical-color, var(--purple-600, #9333ea));font-weight:600}.tql-token-collectionOp[data-v-b6884907]{color:var(--tql-collection-color, var(--indigo-600, #4f46e5));font-weight:600}.tql-token-string[data-v-b6884907]{color:var(--tql-string-color, var(--green-600, #16a34a))}.tql-token-number[data-v-b6884907]{color:var(--tql-number-color, var(--orange-600, #ea580c))}.tql-token-boolean[data-v-b6884907]{color:var(--tql-boolean-color, var(--cyan-600, #0891b2))}.tql-token-null[data-v-b6884907]{color:var(--tql-null-color, var(--gray-500, #6b7280));font-style:italic}.tql-token-mutator[data-v-b6884907]{color:var(--tql-mutator-color, var(--teal-600, #0d9488));font-style:italic}.tql-token-aggregation[data-v-b6884907]{color:var(--tql-aggregation-color, var(--indigo-600, #4f46e5))}.tql-token-keyword[data-v-b6884907]{color:var(--tql-keyword-color, var(--purple-500, #a855f7))}.tql-token-typeHint[data-v-b6884907]{color:var(--tql-typehint-color, var(--teal-500, #14b8a6))}.tql-token-visualization[data-v-b6884907]{color:var(--tql-viz-color, var(--red-500, #ef4444))}.tql-token-arrow[data-v-b6884907]{color:var(--tql-arrow-color, var(--gray-600, #4b5563));font-weight:600}.tql-token-doubleColon[data-v-b6884907]{color:var(--tql-colon-color, var(--gray-500, #6b7280))}.tql-token-paren[data-v-b6884907],.tql-token-bracket[data-v-b6884907]{color:var(--tql-bracket-color, var(--gray-600, #4b5563))}.tql-token-error[data-v-b6884907]{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-b6884907]{background-color:var(--red-50, #fef2f2)}.tql-token-unknown[data-v-b6884907]{color:var(--text-color-secondary, #666)}.tql-validation-icon[data-v-b6884907]{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-b6884907]{top:.75rem;transform:none}.tql-icon-valid[data-v-b6884907]{color:var(--green-500, #22c55e)}.tql-icon-invalid[data-v-b6884907]{color:var(--red-500, #ef4444)}.tql-icon-clickable[data-v-b6884907]{cursor:pointer;transition:transform .2s}.tql-icon-clickable[data-v-b6884907]:hover{transform:scale(1.2)}.tql-icon-clickable[data-v-b6884907]:focus{outline:2px solid var(--primary-color, #3b82f6);outline-offset:2px;border-radius:50%}.tql-snippet-button[data-v-b6884907]{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-b6884907]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-input-multiline .tql-snippet-button[data-v-b6884907]{top:.75rem;transform:none}.tql-input-resizable-textarea[data-v-b6884907]{resize:vertical;min-height:80px}.tql-input-wrapper.tql-input-resizable[data-v-b6884907]{height:auto}.tql-input-wrapper.tql-input-resizable .tql-highlight-layer[data-v-b6884907]{height:100%}.tql-validation-messages[data-v-b6884907]{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-b6884907],.tql-input-autocomplete-active .tql-complexity-warnings[data-v-b6884907],.tql-input-autocomplete-active .tql-history-dropdown[data-v-b6884907],.tql-input-autocomplete-active .tql-preview-panel[data-v-b6884907]{display:none!important}.tql-error-message[data-v-b6884907]{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-b6884907]{margin-top:.125rem;font-size:.75rem}.tql-error-suggestion[data-v-b6884907]{display:block;color:var(--text-color-secondary, #666);font-style:italic;margin-left:1.25rem}.sr-only[data-v-b6884907]{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-b6884907]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:.25rem}.tql-input-multiline .tql-toolbar[data-v-b6884907]{top:.5rem;transform:none}.tql-toolbar-button[data-v-b6884907]{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-b6884907]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-toolbar-button--active[data-v-b6884907]{color:var(--primary-color, #3b82f6);background:var(--primary-100, rgba(59, 130, 246, .1))}.tql-validation-status[data-v-b6884907]{display:flex;align-items:center}.tql-complexity-badge[data-v-b6884907]{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-b6884907]{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d)}.tql-complexity-medium[data-v-b6884907]{background:var(--yellow-100, #fef9c3);color:var(--yellow-700, #a16207)}.tql-complexity-high[data-v-b6884907]{background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c)}.tql-complexity-count[data-v-b6884907]{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-b6884907]{background:var(--green-600, #16a34a)}.tql-complexity-medium .tql-complexity-count[data-v-b6884907]{background:var(--yellow-600, #ca8a04)}.tql-complexity-high .tql-complexity-count[data-v-b6884907]{background:var(--red-600, #dc2626)}.tql-complexity-warnings[data-v-b6884907]{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-b6884907]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem}.tql-complexity-warning i[data-v-b6884907]{margin-top:.125rem;font-size:.75rem}.tql-complexity-warning--info[data-v-b6884907]{color:var(--blue-600, #2563eb)}.tql-complexity-warning--warning[data-v-b6884907]{color:var(--yellow-600, #ca8a04)}.tql-complexity-warning--error[data-v-b6884907]{color:var(--red-600, #dc2626)}.tql-complexity-suggestions[data-v-b6884907]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--surface-border, #e0e0e0)}.tql-complexity-suggestion[data-v-b6884907]{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-b6884907]{color:var(--yellow-500, #eab308)}.tql-history-dropdown[data-v-b6884907]{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-b6884907]{padding:.5rem;border-bottom:1px solid var(--surface-border, #e0e0e0)}.tql-history-search[data-v-b6884907]{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-b6884907]:focus{border-color:var(--primary-color, #3b82f6)}.tql-history-list[data-v-b6884907]{overflow-y:auto;flex:1}.tql-history-item[data-v-b6884907]{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-b6884907]:hover{background:var(--surface-100, #f5f5f5)}.tql-history-item--favorite[data-v-b6884907]{background:var(--yellow-50, #fefce8)}.tql-history-item--favorite[data-v-b6884907]:hover{background:var(--yellow-100, #fef9c3)}.tql-history-favorite[data-v-b6884907]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #999);cursor:pointer;flex-shrink:0}.tql-history-favorite[data-v-b6884907]:hover,.tql-history-item--favorite .tql-history-favorite[data-v-b6884907]{color:var(--yellow-500, #eab308)}.tql-history-content[data-v-b6884907]{flex:1;min-width:0}.tql-history-label[data-v-b6884907]{font-size:.6875rem;font-weight:600;color:var(--text-color, #333);margin-bottom:.125rem}.tql-history-query[data-v-b6884907]{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-b6884907]{font-size:.625rem;color:var(--text-color-secondary, #999);flex-shrink:0}.tql-history-empty[data-v-b6884907]{padding:1rem;text-align:center;color:var(--text-color-secondary, #666);font-size:.75rem}.tql-preview-panel[data-v-b6884907]{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-b6884907]{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-b6884907]{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-b6884907]:hover{background:var(--surface-100, #f5f5f5);color:var(--text-color, #333)}.tql-preview-panel[data-v-b6884907] .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}
@@ -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 _ = /* @__PURE__ */ t(o, [["__scopeId", "data-v-0ddc40d6"]]);
5
+ const a = /* @__PURE__ */ t(o, [["__scopeId", "data-v-b6884907"]]);
6
6
  export {
7
- _ as default
7
+ a as default
8
8
  };
@@ -1,4 +1,4 @@
1
- import { defineComponent as Ge, ref as p, toRef as W, computed as H, watch as ee, onMounted as Je, nextTick as S, onUnmounted as Xe, openBlock as o, createElementBlock as a, normalizeClass as w, unref as u, Fragment as D, renderList as Q, toDisplayString as y, createCommentVNode as v, withDirectives as te, vModelText as le, createElementVNode as r, withModifiers as I, withKeys as ye, createVNode as ge, createBlock as Ye, Teleport as Ze } from "vue";
1
+ import { defineComponent as Ge, ref as f, toRef as W, computed as B, watch as G, onMounted as Je, nextTick as S, onUnmounted as Xe, openBlock as o, createElementBlock as a, normalizeClass as b, unref as u, Fragment as I, renderList as Q, toDisplayString as m, createCommentVNode as v, withDirectives as te, vModelText as le, createElementVNode as r, withModifiers as M, withKeys as me, createVNode as ge, createBlock as Ye, Teleport as Ze } from "vue";
2
2
  import _e from "./TqlAutocomplete.vue.js";
3
3
  import et from "./components/TqlPreview.vue.js";
4
4
  import { useTqlInput as tt } from "./useTqlInput.js";
@@ -18,7 +18,7 @@ const it = {
18
18
  key: 0,
19
19
  class: "pi pi-check-circle tql-icon-valid",
20
20
  "aria-label": "Query is valid"
21
- }, ft = ["aria-label", "aria-expanded"], pt = { class: "tql-history-header" }, ht = { class: "tql-history-list" }, mt = ["onClick"], yt = ["title", "onClick"], gt = { class: "tql-history-content" }, wt = {
21
+ }, pt = ["aria-label", "aria-expanded"], ft = { class: "tql-history-header" }, ht = { class: "tql-history-list" }, yt = ["onClick"], mt = ["title", "onClick"], gt = { class: "tql-history-content" }, wt = {
22
22
  key: 0,
23
23
  class: "tql-history-label"
24
24
  }, bt = { class: "tql-history-query" }, qt = { class: "tql-history-time" }, kt = {
@@ -30,18 +30,18 @@ const it = {
30
30
  }, Ct = {
31
31
  key: 4,
32
32
  class: "tql-complexity-warnings"
33
- }, Vt = {
33
+ }, Pt = {
34
34
  key: 0,
35
35
  class: "tql-complexity-suggestions"
36
- }, Pt = {
36
+ }, Vt = {
37
37
  key: 5,
38
38
  class: "tql-preview-panel"
39
- }, St = { class: "tql-preview-header" }, Rt = {
39
+ }, St = { class: "tql-preview-header" }, $t = {
40
40
  class: "sr-only",
41
41
  role: "status",
42
42
  "aria-live": "polite",
43
43
  "aria-atomic": "true"
44
- }, $t = { key: 0 }, Et = { key: 1 }, Lt = /* @__PURE__ */ Ge({
44
+ }, Et = { key: 0 }, Rt = { key: 1 }, Lt = /* @__PURE__ */ Ge({
45
45
  __name: "TqlInput",
46
46
  props: {
47
47
  modelValue: {},
@@ -72,22 +72,22 @@ const it = {
72
72
  },
73
73
  emits: ["update:modelValue", "validation", "parse", "submit"],
74
74
  setup(i, { expose: we, emit: be }) {
75
- const c = i, b = be, d = p(null), q = p(null), M = p(null), n = p(c.modelValue), k = p(!1), h = p(!1), C = p(!1), V = p(!1), B = p(""), G = `tql-input-${Math.random().toString(36).substring(2, 9)}`, oe = `${G}-input`, J = `${G}-autocomplete`, X = `${G}-errors`, L = p([]), T = p(-1), qe = W(c, "modelValue"), ke = W(c, "fieldSchema"), xe = W(c, "fieldValues"), Ce = W(c, "snippets"), {
76
- tokens: Ve,
77
- cursorPosition: Y,
75
+ const c = i, q = be, d = f(null), g = f(null), L = f(null), n = f(c.modelValue), k = f(!1), h = f(!1), C = f(!1), P = f(!1), H = f(""), J = `tql-input-${Math.random().toString(36).substring(2, 9)}`, oe = `${J}-input`, X = `${J}-autocomplete`, Y = `${J}-errors`, z = f([]), T = f(-1), qe = W(c, "modelValue"), ke = W(c, "fieldSchema"), xe = W(c, "fieldValues"), Ce = W(c, "snippets"), {
76
+ tokens: Pe,
77
+ cursorPosition: Z,
78
78
  completionItems: K,
79
79
  showAutocomplete: x,
80
- isValid: Z,
81
- errors: R,
82
- hasErrors: $,
83
- validate: Pe,
80
+ isValid: _,
81
+ errors: $,
82
+ hasErrors: E,
83
+ validate: Ve,
84
84
  handleInput: ie,
85
- handleCursorChange: E,
85
+ handleCursorChange: R,
86
86
  insertCompletion: Se,
87
- insertSnippet: Re,
87
+ insertSnippet: $e,
88
88
  triggerAutocomplete: ae,
89
89
  hideAutocomplete: A,
90
- getTokenAtCursor: $e
90
+ getTokenAtCursor: Ee
91
91
  } = tt({
92
92
  modelValue: qe,
93
93
  fieldSchema: ke,
@@ -96,54 +96,54 @@ const it = {
96
96
  validateOnInput: c.validateOnInput,
97
97
  debounceMs: c.debounceMs,
98
98
  autocomplete: c.autocomplete,
99
- onValidation: (e) => b("validation", e),
100
- onParse: (e) => b("parse", e)
101
- }), P = c.showHistory ? lt({
99
+ onValidation: (e) => q("validation", e),
100
+ onParse: (e) => q("parse", e)
101
+ }), V = c.showHistory ? lt({
102
102
  storageKey: c.historyStorageKey || "tql-history",
103
103
  ...c.historyOptions
104
- }) : null, m = H(() => !c.showComplexity || !n.value.trim() ? null : ot(n.value, c.complexityThresholds)), Ee = H(() => m.value ? `tql-complexity-${m.value.score}` : ""), se = H(() => m.value && {
104
+ }) : null, y = B(() => !c.showComplexity || !n.value.trim() ? null : ot(n.value, c.complexityThresholds)), Re = B(() => y.value ? `tql-complexity-${y.value.score}` : ""), se = B(() => y.value && {
105
105
  low: "Low",
106
106
  medium: "Medium",
107
107
  high: "High"
108
- }[m.value.score] || ""), ne = H(() => P ? B.value.trim() ? P.searchHistory(B.value).slice(0, 10) : P.getRecentQueries(10) : []);
109
- function He(e) {
110
- n.value = e.query, b("update:modelValue", e.query), ie(e.query), C.value = !1, B.value = "", S(() => {
108
+ }[y.value.score] || ""), ne = B(() => V ? H.value.trim() ? V.searchHistory(H.value).slice(0, 10) : V.getRecentQueries(10) : []);
109
+ function Be(e) {
110
+ n.value = e.query, q("update:modelValue", e.query), ie(e.query), C.value = !1, H.value = "", S(() => {
111
111
  var t;
112
112
  return (t = d.value) == null ? void 0 : t.focus();
113
113
  });
114
114
  }
115
- function Be(e, t) {
116
- t.stopPropagation(), P == null || P.toggleFavorite(e.id);
115
+ function He(e, t) {
116
+ t.stopPropagation(), V == null || V.toggleFavorite(e.id);
117
117
  }
118
118
  function ue() {
119
- P && n.value.trim() && P.addQuery(n.value);
119
+ V && n.value.trim() && V.addQuery(n.value);
120
120
  }
121
121
  function Te() {
122
- C.value = !C.value, C.value && (V.value = !1);
122
+ C.value = !C.value, C.value && (P.value = !1);
123
123
  }
124
124
  function De() {
125
- V.value = !V.value, V.value && (C.value = !1);
125
+ P.value = !P.value, P.value && (C.value = !1);
126
126
  }
127
- ee(
127
+ G(
128
128
  () => c.modelValue,
129
129
  (e) => {
130
130
  e !== n.value && (n.value = e);
131
131
  }
132
- ), ee(
132
+ ), G(
133
133
  () => c.minHeight,
134
134
  (e) => {
135
- q.value && (e ? q.value.style.setProperty("--tql-min-height", e) : q.value.style.removeProperty("--tql-min-height"));
135
+ g.value && (e ? g.value.style.setProperty("--tql-min-height", e) : g.value.style.removeProperty("--tql-min-height"));
136
136
  },
137
137
  { immediate: !0 }
138
138
  );
139
- const Ie = H(() => c.alwaysShowErrors === !0 || c.alwaysShowErrors === void 0 || h.value), F = p({ top: 0, left: 0 }), Me = H(() => F.value.top > 0 || F.value.left > 0), re = p({ top: 0, left: 0, width: 0 }), z = p(null), Le = H(() => {
139
+ const Ie = B(() => c.alwaysShowErrors === !0 || c.alwaysShowErrors === void 0 || h.value), F = f({ top: 0, left: 0 }), Me = B(() => F.value.top > 0 || F.value.left > 0), re = f({ top: 0, left: 0, width: 0 }), D = f(null), Le = B(() => {
140
140
  const e = re.value;
141
141
  return e.top > 0 || e.left > 0 || e.width > 0;
142
142
  });
143
143
  function O() {
144
- if (!q.value)
144
+ if (!g.value)
145
145
  return;
146
- const e = q.value.getBoundingClientRect();
146
+ const e = g.value.getBoundingClientRect();
147
147
  F.value = {
148
148
  top: e.bottom + 4,
149
149
  left: e.left
@@ -151,28 +151,28 @@ const it = {
151
151
  top: e.bottom + 4,
152
152
  left: e.left,
153
153
  width: e.width
154
- }, z.value && (z.value.style.setProperty("--tql-msg-top", `${e.bottom + 4}px`), z.value.style.setProperty("--tql-msg-left", `${e.left}px`), z.value.style.setProperty("--tql-msg-width", `${e.width}px`));
154
+ }, D.value && (D.value.style.setProperty("--tql-msg-top", `${e.bottom + 4}px`), D.value.style.setProperty("--tql-msg-left", `${e.left}px`), D.value.style.setProperty("--tql-msg-width", `${e.width}px`));
155
155
  }
156
156
  function ze(e) {
157
157
  const t = `tql-token tql-token-${e.type}`;
158
- return R.value.some((s) => e.start >= s.start && e.end <= s.end) ? `${t} tql-token-error-range` : t;
158
+ return $.value.some((s) => e.start >= s.start && e.end <= s.end) ? `${t} tql-token-error-range` : t;
159
159
  }
160
160
  function de(e) {
161
161
  const t = e.target;
162
- n.value = t.value, b("update:modelValue", t.value), ie(t.value), S(() => {
163
- d.value && E(d.value.selectionStart || 0);
162
+ n.value = t.value, q("update:modelValue", t.value), ie(t.value), S(() => {
163
+ d.value && R(d.value.selectionStart || 0);
164
164
  });
165
165
  }
166
166
  function N() {
167
167
  if (d.value) {
168
168
  const e = d.value.selectionStart || 0;
169
- e !== Y.value && E(e);
169
+ e !== Z.value && R(e);
170
170
  }
171
171
  }
172
172
  function ce(e) {
173
- var t, l, s, f, g;
173
+ var t, l, s, p, w;
174
174
  if (e.key === "Tab" && !e.shiftKey) {
175
- if (L.value.length > 0 && T.value >= 0) {
175
+ if (z.value.length > 0 && T.value >= 0) {
176
176
  e.preventDefault(), Qe();
177
177
  return;
178
178
  }
@@ -184,55 +184,55 @@ const it = {
184
184
  if (x.value && K.value.length > 0)
185
185
  switch (e.key) {
186
186
  case "ArrowDown":
187
- e.preventDefault(), (t = M.value) == null || t.moveDown();
187
+ e.preventDefault(), (t = L.value) == null || t.moveDown();
188
188
  return;
189
189
  case "ArrowUp":
190
- e.preventDefault(), (l = M.value) == null || l.moveUp();
190
+ e.preventDefault(), (l = L.value) == null || l.moveUp();
191
191
  return;
192
192
  case "Tab":
193
- e.preventDefault(), E(((s = d.value) == null ? void 0 : s.selectionStart) || 0), K.value.length > 0 && ((f = M.value) == null || f.selectCurrent());
193
+ e.preventDefault(), R(((s = d.value) == null ? void 0 : s.selectionStart) || 0), K.value.length > 0 && ((p = L.value) == null || p.selectCurrent());
194
194
  return;
195
195
  case "Enter":
196
196
  if (!c.multiline)
197
197
  break;
198
- e.preventDefault(), (g = M.value) == null || g.selectCurrent();
198
+ e.preventDefault(), (w = L.value) == null || w.selectCurrent();
199
199
  return;
200
200
  case "Escape":
201
- e.preventDefault(), A(), _();
201
+ e.preventDefault(), A(), ee();
202
202
  return;
203
203
  }
204
204
  if (e.key === " " && e.ctrlKey) {
205
205
  e.preventDefault(), ae();
206
206
  return;
207
207
  }
208
- e.key === "Enter" && (c.multiline && e.ctrlKey || !c.multiline && !x.value) && (e.preventDefault(), ue(), b("submit", n.value));
208
+ e.key === "Enter" && (c.multiline && e.ctrlKey || !c.multiline && !x.value) && (e.preventDefault(), ue(), q("submit", n.value));
209
209
  }
210
210
  function Qe() {
211
- if (T.value++, T.value >= L.value.length) {
212
- _();
211
+ if (T.value++, T.value >= z.value.length) {
212
+ ee();
213
213
  return;
214
214
  }
215
- const e = L.value[T.value];
216
- d.value && (d.value.setSelectionRange(e.start, e.end), d.value.focus(), E(e.start));
215
+ const e = z.value[T.value];
216
+ d.value && (d.value.setSelectionRange(e.start, e.end), d.value.focus(), R(e.start));
217
217
  }
218
- function _() {
219
- L.value = [], T.value = -1;
218
+ function ee() {
219
+ z.value = [], T.value = -1;
220
220
  }
221
221
  function Ke() {
222
- const e = Y.value, t = n.value;
222
+ const e = Z.value, t = n.value;
223
223
  let l = !1, s = null;
224
- for (let f = 0; f < e; f++) {
225
- const g = t[f], j = f > 0 ? t[f - 1] : "";
226
- (g === '"' || g === "'") && j !== "\\" && (l ? g === s && (l = !1, s = null) : (l = !0, s = g));
224
+ for (let p = 0; p < e; p++) {
225
+ const w = t[p], j = p > 0 ? t[p - 1] : "";
226
+ (w === '"' || w === "'") && j !== "\\" && (l ? w === s && (l = !1, s = null) : (l = !0, s = w));
227
227
  }
228
228
  return l;
229
229
  }
230
230
  function Ae() {
231
- const e = Y.value, t = n.value;
231
+ const e = Z.value, t = n.value;
232
232
  for (let l = e; l < t.length; l++)
233
233
  if (t[l] === '"' || t[l] === "'") {
234
234
  const s = l + 1;
235
- d.value && (d.value.setSelectionRange(s, s), E(s));
235
+ d.value && (d.value.setSelectionRange(s, s), R(s));
236
236
  return;
237
237
  }
238
238
  }
@@ -241,7 +241,7 @@ const it = {
241
241
  O(), ae();
242
242
  });
243
243
  }
244
- function fe(e) {
244
+ function pe(e) {
245
245
  const l = e.relatedTarget;
246
246
  if (l != null && l.closest(".tql-autocomplete-dropdown")) {
247
247
  setTimeout(() => {
@@ -255,13 +255,13 @@ const it = {
255
255
  }
256
256
  function Fe(e) {
257
257
  const t = Se(e);
258
- n.value = t.query, b("update:modelValue", t.query), t.placeholders.length > 0 ? (L.value = t.placeholders, T.value = 0) : _(), S(() => {
259
- d.value && (d.value.focus(), d.value.setSelectionRange(t.newCursorPosition, t.newCursorPosition), E(t.newCursorPosition));
258
+ n.value = t.query, q("update:modelValue", t.query), t.placeholders.length > 0 ? (z.value = t.placeholders, T.value = 0) : ee(), S(() => {
259
+ d.value && (d.value.focus(), d.value.setSelectionRange(t.newCursorPosition, t.newCursorPosition), R(t.newCursorPosition));
260
260
  });
261
261
  }
262
262
  function Oe(e) {
263
- const t = Re(e);
264
- n.value = t, b("update:modelValue", t), S(() => {
263
+ const t = $e(e);
264
+ n.value = t, q("update:modelValue", t), S(() => {
265
265
  d.value && d.value.focus();
266
266
  });
267
267
  }
@@ -273,63 +273,71 @@ const it = {
273
273
  var e;
274
274
  (e = d.value) == null || e.blur();
275
275
  }
276
- function pe() {
276
+ function fe() {
277
277
  var e;
278
278
  return ((e = d.value) == null ? void 0 : e.selectionStart) || 0;
279
279
  }
280
280
  function he(e) {
281
- d.value && (d.value.setSelectionRange(e, e), E(e));
281
+ d.value && (d.value.setSelectionRange(e, e), R(e));
282
282
  }
283
283
  function je(e) {
284
- const t = pe(), l = n.value.substring(0, t), s = n.value.substring(t), f = l + e + s;
285
- n.value = f, b("update:modelValue", f), S(() => {
284
+ const t = fe(), l = n.value.substring(0, t), s = n.value.substring(t), p = l + e + s;
285
+ n.value = p, q("update:modelValue", p), S(() => {
286
286
  he(t + e.length);
287
287
  });
288
288
  }
289
289
  function We(e) {
290
- const l = Date.now() - e, s = Math.floor(l / 1e3), f = Math.floor(s / 60), g = Math.floor(f / 60), j = Math.floor(g / 24);
291
- return j > 0 ? `${j}d ago` : g > 0 ? `${g}h ago` : f > 0 ? `${f}m ago` : "just now";
290
+ const l = Date.now() - e, s = Math.floor(l / 1e3), p = Math.floor(s / 60), w = Math.floor(p / 60), j = Math.floor(w / 24);
291
+ return j > 0 ? `${j}d ago` : w > 0 ? `${w}h ago` : p > 0 ? `${p}m ago` : "just now";
292
292
  }
293
- function me(e) {
293
+ function ye(e) {
294
294
  var l;
295
295
  const t = e.target;
296
- (l = q.value) != null && l.contains(t) || (C.value = !1, V.value = !1);
296
+ (l = g.value) != null && l.contains(t) || (C.value = !1, P.value = !1);
297
297
  }
298
298
  we({
299
299
  focus: Ne,
300
300
  blur: Ue,
301
- validate: Pe,
301
+ validate: Ve,
302
302
  insertText: je,
303
303
  insertSnippet: Oe,
304
- getTokenAtPosition: $e,
305
- getCursorPosition: pe,
304
+ getTokenAtPosition: Ee,
305
+ getCursorPosition: fe,
306
306
  setCursorPosition: he
307
307
  });
308
308
  function U() {
309
- (x.value || $.value) && k.value && O();
309
+ (x.value || E.value) && k.value && O();
310
310
  }
311
311
  return Je(() => {
312
- document.addEventListener("selectionchange", N), document.addEventListener("click", me), window.addEventListener("scroll", U, !0), window.addEventListener("resize", U), c.minHeight && q.value && q.value.style.setProperty("--tql-min-height", c.minHeight), S(() => {
312
+ document.addEventListener("selectionchange", N), document.addEventListener("click", ye), window.addEventListener("scroll", U, !0), window.addEventListener("resize", U), c.minHeight && g.value && g.value.style.setProperty("--tql-min-height", c.minHeight), S(() => {
313
313
  O();
314
314
  });
315
- }), ee(
316
- () => $.value,
315
+ }), G(
316
+ () => E.value,
317
317
  (e) => {
318
318
  e && S(() => {
319
319
  O();
320
320
  });
321
321
  },
322
322
  { immediate: !0 }
323
+ ), G(
324
+ D,
325
+ (e) => {
326
+ if (e && g.value) {
327
+ const t = g.value.getBoundingClientRect();
328
+ e.style.setProperty("--tql-msg-top", `${t.bottom + 4}px`), e.style.setProperty("--tql-msg-left", `${t.left}px`), e.style.setProperty("--tql-msg-width", `${t.width}px`);
329
+ }
330
+ }
323
331
  ), Xe(() => {
324
- document.removeEventListener("selectionchange", N), document.removeEventListener("click", me), window.removeEventListener("scroll", U, !0), window.removeEventListener("resize", U);
332
+ document.removeEventListener("selectionchange", N), document.removeEventListener("click", ye), window.removeEventListener("scroll", U, !0), window.removeEventListener("resize", U);
325
333
  }), (e, t) => (o(), a("div", {
326
334
  ref_key: "wrapperRef",
327
- ref: q,
328
- class: w([
335
+ ref: g,
336
+ class: b([
329
337
  "tql-input-wrapper",
330
338
  {
331
339
  "tql-input-focused": k.value,
332
- "tql-input-invalid": u($) && i.showValidation,
340
+ "tql-input-invalid": u(E) && i.showValidation,
333
341
  "tql-input-disabled": i.disabled,
334
342
  "tql-input-multiline": i.multiline,
335
343
  "tql-input-autocomplete-active": u(x),
@@ -339,10 +347,10 @@ const it = {
339
347
  ])
340
348
  }, [
341
349
  i.syntaxHighlighting ? (o(), a("div", it, [
342
- (o(!0), a(D, null, Q(u(Ve), (l, s) => (o(), a("span", {
350
+ (o(!0), a(I, null, Q(u(Pe), (l, s) => (o(), a("span", {
343
351
  key: s,
344
- class: w(ze(l))
345
- }, y(l.raw || l.value), 3))), 128))
352
+ class: b(ze(l))
353
+ }, m(l.raw || l.value), 3))), 128))
346
354
  ])) : v("", !0),
347
355
  i.multiline ? te((o(), a("textarea", {
348
356
  key: 1,
@@ -350,16 +358,16 @@ const it = {
350
358
  ref_key: "inputRef",
351
359
  ref: d,
352
360
  "onUpdate:modelValue": t[0] || (t[0] = (l) => n.value = l),
353
- class: w(["tql-input", { "tql-input-highlighted": i.syntaxHighlighting, "tql-input-resizable-textarea": i.resizable }]),
361
+ class: b(["tql-input", { "tql-input-highlighted": i.syntaxHighlighting, "tql-input-resizable-textarea": i.resizable }]),
354
362
  placeholder: i.placeholder,
355
363
  disabled: i.disabled,
356
364
  readonly: i.readonly,
357
365
  rows: i.rows,
358
366
  role: "combobox",
359
367
  "aria-expanded": u(x) && k.value,
360
- "aria-controls": J,
361
- "aria-invalid": u($) && i.showValidation,
362
- "aria-describedby": u($) && h.value ? X : void 0,
368
+ "aria-controls": X,
369
+ "aria-invalid": u(E) && i.showValidation,
370
+ "aria-describedby": u(E) && h.value ? Y : void 0,
363
371
  "aria-autocomplete": "list",
364
372
  "aria-haspopup": "listbox",
365
373
  spellcheck: "false",
@@ -368,7 +376,7 @@ const it = {
368
376
  onInput: de,
369
377
  onKeydown: ce,
370
378
  onFocus: ve,
371
- onBlur: fe,
379
+ onBlur: pe,
372
380
  onClick: N
373
381
  }, null, 42, at)), [
374
382
  [le, n.value]
@@ -379,15 +387,15 @@ const it = {
379
387
  ref: d,
380
388
  "onUpdate:modelValue": t[1] || (t[1] = (l) => n.value = l),
381
389
  type: "text",
382
- class: w(["tql-input", { "tql-input-highlighted": i.syntaxHighlighting }]),
390
+ class: b(["tql-input", { "tql-input-highlighted": i.syntaxHighlighting }]),
383
391
  placeholder: i.placeholder,
384
392
  disabled: i.disabled,
385
393
  readonly: i.readonly,
386
394
  role: "combobox",
387
395
  "aria-expanded": u(x) && k.value,
388
- "aria-controls": J,
389
- "aria-invalid": u($) && i.showValidation,
390
- "aria-describedby": u($) && h.value ? X : void 0,
396
+ "aria-controls": X,
397
+ "aria-invalid": u(E) && i.showValidation,
398
+ "aria-describedby": u(E) && h.value ? Y : void 0,
391
399
  "aria-autocomplete": "list",
392
400
  "aria-haspopup": "listbox",
393
401
  spellcheck: "false",
@@ -396,35 +404,35 @@ const it = {
396
404
  onInput: de,
397
405
  onKeydown: ce,
398
406
  onFocus: ve,
399
- onBlur: fe,
407
+ onBlur: pe,
400
408
  onClick: N
401
409
  }, null, 42, st)), [
402
410
  [le, n.value]
403
411
  ]),
404
412
  r("div", nt, [
405
- i.showComplexity && m.value && n.value.trim() ? (o(), a("div", {
413
+ i.showComplexity && y.value && n.value.trim() ? (o(), a("div", {
406
414
  key: 0,
407
- class: w(["tql-complexity-badge", Ee.value]),
408
- title: `${se.value} complexity - ${m.value.warnings.length} warning(s)`
415
+ class: b(["tql-complexity-badge", Re.value]),
416
+ title: `${se.value} complexity - ${y.value.warnings.length} warning(s)`
409
417
  }, [
410
- r("span", rt, y(se.value), 1),
411
- m.value.warnings.length > 0 ? (o(), a("span", dt, y(m.value.warnings.length), 1)) : v("", !0)
418
+ r("span", rt, m(se.value), 1),
419
+ y.value.warnings.length > 0 ? (o(), a("span", dt, m(y.value.warnings.length), 1)) : v("", !0)
412
420
  ], 10, ut)) : v("", !0),
413
421
  i.showHistory ? (o(), a("button", {
414
422
  key: 1,
415
423
  type: "button",
416
- class: w(["tql-toolbar-button", { "tql-toolbar-button--active": C.value }]),
424
+ class: b(["tql-toolbar-button", { "tql-toolbar-button--active": C.value }]),
417
425
  title: "Query history",
418
- onClick: I(Te, ["stop"])
426
+ onClick: M(Te, ["stop"])
419
427
  }, [...t[10] || (t[10] = [
420
428
  r("i", { class: "pi pi-history" }, null, -1)
421
429
  ])], 2)) : v("", !0),
422
430
  i.showPreview ? (o(), a("button", {
423
431
  key: 2,
424
432
  type: "button",
425
- class: w(["tql-toolbar-button", { "tql-toolbar-button--active": V.value }]),
433
+ class: b(["tql-toolbar-button", { "tql-toolbar-button--active": P.value }]),
426
434
  title: "Preview query structure",
427
- onClick: I(De, ["stop"])
435
+ onClick: M(De, ["stop"])
428
436
  }, [...t[11] || (t[11] = [
429
437
  r("i", { class: "pi pi-sitemap" }, null, -1)
430
438
  ])], 2)) : v("", !0),
@@ -433,75 +441,75 @@ const it = {
433
441
  type: "button",
434
442
  class: "tql-toolbar-button tql-snippet-button",
435
443
  title: "Insert snippet",
436
- onClick: t[2] || (t[2] = I(() => {
444
+ onClick: t[2] || (t[2] = M(() => {
437
445
  }, ["stop"]))
438
446
  }, [...t[12] || (t[12] = [
439
447
  r("i", { class: "pi pi-code" }, null, -1)
440
448
  ])])) : v("", !0),
441
449
  i.showValidation && n.value ? (o(), a("div", ct, [
442
- u(Z) ? (o(), a("i", vt)) : (o(), a("i", {
450
+ u(_) ? (o(), a("i", vt)) : (o(), a("i", {
443
451
  key: 1,
444
452
  class: "pi pi-exclamation-circle tql-icon-invalid tql-icon-clickable",
445
453
  role: "button",
446
454
  tabindex: "0",
447
455
  title: "Click to show/hide errors",
448
- "aria-label": `Query has ${u(R).length} error${u(R).length === 1 ? "" : "s"}. Click to ${h.value ? "hide" : "show"} details.`,
456
+ "aria-label": `Query has ${u($).length} error${u($).length === 1 ? "" : "s"}. Click to ${h.value ? "hide" : "show"} details.`,
449
457
  "aria-expanded": h.value,
450
458
  onClick: t[3] || (t[3] = (l) => h.value = !h.value),
451
459
  onKeydown: [
452
- t[4] || (t[4] = ye((l) => h.value = !h.value, ["enter"])),
453
- t[5] || (t[5] = ye(I((l) => h.value = !h.value, ["prevent"]), ["space"]))
460
+ t[4] || (t[4] = me((l) => h.value = !h.value, ["enter"])),
461
+ t[5] || (t[5] = me(M((l) => h.value = !h.value, ["prevent"]), ["space"]))
454
462
  ]
455
- }, null, 40, ft))
463
+ }, null, 40, pt))
456
464
  ])) : v("", !0)
457
465
  ]),
458
466
  i.showHistory && C.value ? (o(), a("div", {
459
467
  key: 3,
460
468
  class: "tql-history-dropdown",
461
- onClick: t[8] || (t[8] = I(() => {
469
+ onClick: t[8] || (t[8] = M(() => {
462
470
  }, ["stop"]))
463
471
  }, [
464
- r("div", pt, [
472
+ r("div", ft, [
465
473
  te(r("input", {
466
- "onUpdate:modelValue": t[6] || (t[6] = (l) => B.value = l),
474
+ "onUpdate:modelValue": t[6] || (t[6] = (l) => H.value = l),
467
475
  type: "text",
468
476
  class: "tql-history-search",
469
477
  placeholder: "Search history...",
470
- onKeydown: t[7] || (t[7] = I(() => {
478
+ onKeydown: t[7] || (t[7] = M(() => {
471
479
  }, ["stop"]))
472
480
  }, null, 544), [
473
- [le, B.value]
481
+ [le, H.value]
474
482
  ])
475
483
  ]),
476
484
  r("div", ht, [
477
- (o(!0), a(D, null, Q(ne.value, (l) => (o(), a("div", {
485
+ (o(!0), a(I, null, Q(ne.value, (l) => (o(), a("div", {
478
486
  key: l.id,
479
- class: w(["tql-history-item", { "tql-history-item--favorite": l.isFavorite }]),
480
- onClick: (s) => He(l)
487
+ class: b(["tql-history-item", { "tql-history-item--favorite": l.isFavorite }]),
488
+ onClick: (s) => Be(l)
481
489
  }, [
482
490
  r("button", {
483
491
  type: "button",
484
492
  class: "tql-history-favorite",
485
493
  title: l.isFavorite ? "Remove from favorites" : "Add to favorites",
486
- onClick: (s) => Be(l, s)
494
+ onClick: (s) => He(l, s)
487
495
  }, [
488
496
  r("i", {
489
- class: w(l.isFavorite ? "pi pi-star-fill" : "pi pi-star")
497
+ class: b(l.isFavorite ? "pi pi-star-fill" : "pi pi-star")
490
498
  }, null, 2)
491
- ], 8, yt),
499
+ ], 8, mt),
492
500
  r("div", gt, [
493
- l.label ? (o(), a("div", wt, y(l.label), 1)) : v("", !0),
494
- r("div", bt, y(l.query), 1)
501
+ l.label ? (o(), a("div", wt, m(l.label), 1)) : v("", !0),
502
+ r("div", bt, m(l.query), 1)
495
503
  ]),
496
- r("div", qt, y(We(l.timestamp)), 1)
497
- ], 10, mt))), 128)),
498
- ne.value.length === 0 ? (o(), a("div", kt, y(B.value ? "No matching queries" : "No query history"), 1)) : v("", !0)
504
+ r("div", qt, m(We(l.timestamp)), 1)
505
+ ], 10, yt))), 128)),
506
+ ne.value.length === 0 ? (o(), a("div", kt, m(H.value ? "No matching queries" : "No query history"), 1)) : v("", !0)
499
507
  ])
500
508
  ])) : v("", !0),
501
509
  ge(_e, {
502
- id: J,
510
+ id: X,
503
511
  ref_key: "autocompleteRef",
504
- ref: M,
512
+ ref: L,
505
513
  items: u(K),
506
514
  visible: u(x) && k.value && Me.value,
507
515
  position: F.value,
@@ -509,16 +517,16 @@ const it = {
509
517
  onClose: u(A)
510
518
  }, null, 8, ["items", "visible", "position", "onClose"]),
511
519
  (o(), Ye(Ze, { to: "body" }, [
512
- i.showValidation && !u(Z) && Ie.value && n.value && u(R).length > 0 && !(u(x) && u(K).length > 0) && Le.value ? (o(), a("div", {
520
+ i.showValidation && !u(_) && Ie.value && n.value && u($).length > 0 && !(u(x) && u(K).length > 0) && Le.value ? (o(), a("div", {
513
521
  key: 0,
514
522
  ref_key: "validationMessagesRef",
515
- ref: z,
516
- id: X,
523
+ ref: D,
524
+ id: Y,
517
525
  class: "tql-validation-messages-portal",
518
526
  role: "alert",
519
527
  "aria-live": "polite"
520
528
  }, [
521
- (o(!0), a(D, null, Q(u(R).slice(0, 3), (l, s) => (o(), a("div", {
529
+ (o(!0), a(I, null, Q(u($).slice(0, 3), (l, s) => (o(), a("div", {
522
530
  key: s,
523
531
  class: "tql-error-message"
524
532
  }, [
@@ -526,24 +534,24 @@ const it = {
526
534
  class: "pi pi-exclamation-triangle",
527
535
  "aria-hidden": "true"
528
536
  }, null, -1)),
529
- r("span", null, y(l.message), 1),
530
- l.suggestion ? (o(), a("span", xt, y(l.suggestion), 1)) : v("", !0)
537
+ r("span", null, m(l.message), 1),
538
+ l.suggestion ? (o(), a("span", xt, m(l.suggestion), 1)) : v("", !0)
531
539
  ]))), 128))
532
540
  ], 512)) : v("", !0)
533
541
  ])),
534
- i.showComplexity && m.value && m.value.warnings.length > 0 && !u(x) ? (o(), a("div", Ct, [
535
- (o(!0), a(D, null, Q(m.value.warnings.slice(0, 3), (l, s) => (o(), a("div", {
542
+ i.showComplexity && y.value && y.value.warnings.length > 0 && !u(x) ? (o(), a("div", Ct, [
543
+ (o(!0), a(I, null, Q(y.value.warnings.slice(0, 3), (l, s) => (o(), a("div", {
536
544
  key: s,
537
- class: w(["tql-complexity-warning", `tql-complexity-warning--${l.severity}`])
545
+ class: b(["tql-complexity-warning", `tql-complexity-warning--${l.severity}`])
538
546
  }, [
539
547
  t[14] || (t[14] = r("i", {
540
548
  class: "pi pi-info-circle",
541
549
  "aria-hidden": "true"
542
550
  }, null, -1)),
543
- r("span", null, y(l.message), 1)
551
+ r("span", null, m(l.message), 1)
544
552
  ], 2))), 128)),
545
- m.value.suggestions.length > 0 ? (o(), a("div", Vt, [
546
- (o(!0), a(D, null, Q(m.value.suggestions.slice(0, 2), (l, s) => (o(), a("div", {
553
+ y.value.suggestions.length > 0 ? (o(), a("div", Pt, [
554
+ (o(!0), a(I, null, Q(y.value.suggestions.slice(0, 2), (l, s) => (o(), a("div", {
547
555
  key: s,
548
556
  class: "tql-complexity-suggestion"
549
557
  }, [
@@ -551,18 +559,18 @@ const it = {
551
559
  class: "pi pi-lightbulb",
552
560
  "aria-hidden": "true"
553
561
  }, null, -1)),
554
- r("span", null, y(l), 1)
562
+ r("span", null, m(l), 1)
555
563
  ]))), 128))
556
564
  ])) : v("", !0)
557
565
  ])) : v("", !0),
558
- i.showPreview && V.value && n.value.trim() ? (o(), a("div", Pt, [
566
+ i.showPreview && P.value && n.value.trim() ? (o(), a("div", Vt, [
559
567
  r("div", St, [
560
568
  t[17] || (t[17] = r("span", null, "Query Structure", -1)),
561
569
  r("button", {
562
570
  type: "button",
563
571
  class: "tql-preview-close",
564
572
  title: "Close preview",
565
- onClick: t[9] || (t[9] = (l) => V.value = !1)
573
+ onClick: t[9] || (t[9] = (l) => P.value = !1)
566
574
  }, [...t[16] || (t[16] = [
567
575
  r("i", { class: "pi pi-times" }, null, -1)
568
576
  ])])
@@ -575,9 +583,9 @@ const it = {
575
583
  compact: ""
576
584
  }, null, 8, ["query"])
577
585
  ])) : v("", !0),
578
- r("div", Rt, [
579
- i.showValidation && n.value ? (o(), a(D, { key: 0 }, [
580
- u(Z) ? (o(), a("span", $t, "Query syntax is valid")) : (o(), a("span", Et, "Query has " + y(u(R).length) + " validation error" + y(u(R).length === 1 ? "" : "s"), 1))
586
+ r("div", $t, [
587
+ i.showValidation && n.value ? (o(), a(I, { key: 0 }, [
588
+ u(_) ? (o(), a("span", Et, "Query syntax is valid")) : (o(), a("span", Rt, "Query has " + m(u($).length) + " validation error" + m(u($).length === 1 ? "" : "s"), 1))
581
589
  ], 64)) : v("", !0)
582
590
  ])
583
591
  ], 2));
@@ -1,132 +1,138 @@
1
- import { useDebounceFn as O } from "@vueuse/core";
2
- import { ref as p, computed as T, watch as oe } from "vue";
3
- import { getCompletions as re, shouldTriggerCompletion as ue } from "../src/completionProvider.js";
4
- import { parseTql as le } from "../src/parser.js";
5
- import { findTokenAtPosition as R, tokenizeTql as ae } from "../src/tokenizer.js";
6
- import { validateTql as ie } from "../src/validator.js";
7
- function he(V) {
1
+ import { useDebounceFn as R } from "@vueuse/core";
2
+ import { ref as v, computed as T, watch as re } from "vue";
3
+ import { getCompletions as ue, shouldTriggerCompletion as le } from "../src/completionProvider.js";
4
+ import { parseTql as ae } from "../src/parser.js";
5
+ import { findTokenAtPosition as U, tokenizeTql as ie } from "../src/tokenizer.js";
6
+ import { validateTql as ce } from "../src/validator.js";
7
+ function Te(V) {
8
8
  const {
9
9
  modelValue: i,
10
10
  fieldSchema: u,
11
11
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
- snippets: ce,
12
+ snippets: pe,
13
13
  // Reserved for future snippet support
14
- fieldValues: y,
14
+ fieldValues: x,
15
15
  validateOnInput: j = !0,
16
16
  debounceMs: Q = 300,
17
- completionDebounceMs: U = 50,
17
+ completionDebounceMs: _ = 50,
18
18
  // Faster debounce for completions
19
- autocomplete: A = !0,
20
- onValidation: C,
21
- onParse: k
22
- } = V, v = p([]), w = p(null), m = p(null), c = p(0), g = p([]), f = p(!1), q = p(!1), _ = T(() => {
19
+ autocomplete: k = !0,
20
+ onValidation: y,
21
+ onParse: A
22
+ } = V, f = v([]), q = v(null), g = v(null), c = v(0), d = v([]), p = v(!1), C = v(!1);
23
+ let P = 0;
24
+ const $ = T(() => {
23
25
  var e;
24
- return ((e = m.value) == null ? void 0 : e.valid) ?? !0;
26
+ return ((e = g.value) == null ? void 0 : e.valid) ?? !0;
25
27
  }), b = T(() => {
26
28
  var e;
27
- return ((e = m.value) == null ? void 0 : e.errors) ?? [];
28
- }), P = T(() => {
29
+ return ((e = g.value) == null ? void 0 : e.errors) ?? [];
30
+ }), D = T(() => {
29
31
  var e;
30
- return ((e = m.value) == null ? void 0 : e.warnings) ?? [];
31
- }), $ = T(() => b.value.length > 0), B = T(() => P.value.length > 0);
32
+ return ((e = g.value) == null ? void 0 : e.warnings) ?? [];
33
+ }), B = T(() => b.value.length > 0), G = T(() => D.value.length > 0);
32
34
  function M() {
33
- return v.value = ae(i.value), v.value;
35
+ return f.value = ie(i.value), f.value;
34
36
  }
35
- function G() {
36
- const e = le(i.value);
37
- return w.value = e, k == null || k(e), e;
37
+ function H() {
38
+ const e = ae(i.value);
39
+ return q.value = e, A == null || A(e), e;
38
40
  }
39
41
  function E() {
40
42
  var s, r;
41
- q.value = !0;
43
+ C.value = !0;
42
44
  const e = (s = u == null ? void 0 : u.value) == null ? void 0 : s.map((l) => l.name), t = (r = u == null ? void 0 : u.value) == null ? void 0 : r.reduce(
43
- (l, d) => (l[d.name] = d.type, l),
45
+ (l, m) => (l[m.name] = m.type, l),
44
46
  {}
45
- ), n = ie(i.value, {
47
+ ), n = ce(i.value, {
46
48
  availableFields: e,
47
49
  fieldTypes: t,
48
50
  strictMode: !1
49
51
  });
50
- return m.value = n, q.value = !1, C == null || C(n), n;
52
+ return g.value = n, C.value = !1, y == null || y(n), n;
51
53
  }
52
- const H = O(E, Q), J = O(I, U);
54
+ const J = R(E, Q), K = R(I, _);
53
55
  function I() {
54
- if (!A) {
55
- g.value = [], f.value = !1;
56
+ if (!k) {
57
+ d.value = [], p.value = !1;
56
58
  return;
57
59
  }
58
- const e = re(
60
+ if (Date.now() < P) {
61
+ d.value = [], p.value = !1;
62
+ return;
63
+ }
64
+ const e = ue(
59
65
  {
60
66
  query: i.value,
61
67
  cursorPosition: c.value
62
68
  },
63
69
  {
64
70
  fields: u == null ? void 0 : u.value,
65
- fieldValues: y == null ? void 0 : y.value,
71
+ fieldValues: x == null ? void 0 : x.value,
66
72
  includeSnippets: !0,
67
73
  maxItems: 15
68
74
  }
69
75
  );
70
- g.value = e, f.value = e.length > 0;
76
+ d.value = e, p.value = e.length > 0;
71
77
  }
72
- function K() {
73
- I(), f.value = g.value.length > 0;
78
+ function L() {
79
+ I(), p.value = d.value.length > 0;
74
80
  }
75
81
  function W() {
76
- f.value = !1;
82
+ p.value = !1;
77
83
  }
78
84
  function z(e) {
79
- M(), j && H(), A && ue(e, c.value) && (J(), g.value.length > 0 && (f.value = !0));
85
+ M(), j && J(), k && le(e, c.value) && (K(), d.value.length > 0 && (p.value = !0));
80
86
  }
81
- function L(e) {
87
+ function N(e) {
82
88
  c.value = e, I();
83
89
  }
84
- function N(e) {
85
- const t = i.value, n = c.value, s = R(v.value, n);
90
+ function X(e) {
91
+ const t = i.value, n = c.value, s = U(f.value, n);
86
92
  let r = n, l = n;
87
93
  if (s && s.type !== "whitespace")
88
94
  r = s.start, l = s.end;
89
95
  else {
90
- const a = v.value.filter((o) => o.end <= n && o.type !== "whitespace");
96
+ const a = f.value.filter((o) => o.end <= n && o.type !== "whitespace");
91
97
  if (a.length > 0) {
92
98
  const o = a[a.length - 1];
93
99
  o.end === n && (r = o.start, l = o.end);
94
100
  }
95
101
  }
96
- const d = t.substring(0, r), ee = t.substring(l), x = [];
102
+ const m = t.substring(0, r), te = t.substring(l), w = [];
97
103
  let h = e.insertText;
98
- const te = [...e.insertText.matchAll(/\$(\d+)/g)].sort(
104
+ const ne = [...e.insertText.matchAll(/\$(\d+)/g)].sort(
99
105
  (a, o) => parseInt(a[1]) - parseInt(o[1])
100
106
  );
101
- let D = 0;
102
- for (const a of te) {
107
+ let F = 0;
108
+ for (const a of ne) {
103
109
  const o = h.indexOf(a[0]);
104
110
  if (o !== -1) {
105
- const F = r + o - D;
106
- x.push({
107
- start: F,
108
- end: F
111
+ const O = r + o - F;
112
+ w.push({
113
+ start: O,
114
+ end: O
109
115
  // Zero-width cursor position
110
- }), h = h.replace(a[0], ""), D += a[0].length;
116
+ }), h = h.replace(a[0], ""), F += a[0].length;
111
117
  }
112
118
  }
113
- const ne = d + h + ee, se = x.length > 0 ? x[0].start : r + h.length;
114
- return W(), { query: ne, newCursorPosition: se, placeholders: x };
119
+ const se = m + h + te, oe = w.length > 0 ? w[0].start : r + h.length;
120
+ return W(), P = Date.now() + 150, { query: se, newCursorPosition: oe, placeholders: w };
115
121
  }
116
- function X(e) {
117
- const t = i.value, n = c.value, s = t.substring(0, n), r = t.substring(n), d = s.length > 0 && !s.endsWith(" ") && !s.endsWith("(") ? " " : "";
118
- return s + d + e.insertText + r;
122
+ function Y(e) {
123
+ const t = i.value, n = c.value, s = t.substring(0, n), r = t.substring(n), m = s.length > 0 && !s.endsWith(" ") && !s.endsWith("(") ? " " : "";
124
+ return s + m + e.insertText + r;
119
125
  }
120
- function Y() {
121
- return R(v.value, c.value);
126
+ function Z() {
127
+ return U(f.value, c.value);
122
128
  }
123
- function Z(e) {
129
+ function S(e) {
124
130
  return b.value.some((t) => e >= t.start && e < t.end);
125
131
  }
126
- function S(e) {
132
+ function ee(e) {
127
133
  return b.value.filter((t) => e >= t.start && e < t.end);
128
134
  }
129
- return oe(
135
+ return re(
130
136
  i,
131
137
  (e) => {
132
138
  e !== void 0 && z(e);
@@ -134,35 +140,35 @@ function he(V) {
134
140
  { immediate: !0 }
135
141
  ), {
136
142
  // State
137
- tokens: v,
138
- parseResult: w,
139
- validationResult: m,
143
+ tokens: f,
144
+ parseResult: q,
145
+ validationResult: g,
140
146
  cursorPosition: c,
141
- completionItems: g,
142
- showAutocomplete: f,
143
- isValidating: q,
147
+ completionItems: d,
148
+ showAutocomplete: p,
149
+ isValidating: C,
144
150
  // Computed
145
- isValid: _,
151
+ isValid: $,
146
152
  errors: b,
147
- warnings: P,
148
- hasErrors: $,
149
- hasWarnings: B,
153
+ warnings: D,
154
+ hasErrors: B,
155
+ hasWarnings: G,
150
156
  // Methods
151
157
  tokenize: M,
152
- parse: G,
158
+ parse: H,
153
159
  validate: E,
154
160
  updateCompletions: I,
155
- triggerAutocomplete: K,
161
+ triggerAutocomplete: L,
156
162
  hideAutocomplete: W,
157
163
  handleInput: z,
158
- handleCursorChange: L,
159
- insertCompletion: N,
160
- insertSnippet: X,
161
- getTokenAtCursor: Y,
162
- isPositionInError: Z,
163
- getErrorsAtPosition: S
164
+ handleCursorChange: N,
165
+ insertCompletion: X,
166
+ insertSnippet: Y,
167
+ getTokenAtCursor: Z,
168
+ isPositionInError: S,
169
+ getErrorsAtPosition: ee
164
170
  };
165
171
  }
166
172
  export {
167
- he as useTqlInput
173
+ Te as useTqlInput
168
174
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tellaro/tql",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Tellaro Query Language (TQL) parser, validator, and autocomplete for JavaScript/TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",