@tellaro/tql 0.1.4 → 0.1.5

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