@tellaro/tql 3.3.0 → 4.0.0

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/tql.css CHANGED
@@ -1 +1 @@
1
- .tql-autocomplete-dropdown[data-v-e29dd6a7]{position:fixed;top:var(--dropdown-top);left:var(--dropdown-left);z-index:9999;min-width:280px;max-width:450px;max-height:var(--dropdown-max-height);background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #ddd);border-radius:var(--border-radius, 6px);box-shadow:0 4px 16px #00000026;overflow:hidden;display:flex;flex-direction:column}.tql-completion-list[data-v-e29dd6a7]{overflow-y:auto;max-height:calc(var(--dropdown-max-height) - 60px)}.tql-completion-item[data-v-e29dd6a7]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .15s}.tql-completion-item[data-v-e29dd6a7]:hover,.tql-completion-item.selected[data-v-e29dd6a7]{background:var(--highlight-bg, #f0f0f0)}.tql-completion-icon[data-v-e29dd6a7]{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:4px;font-size:.75rem}.tql-completion-icon.tql-completion-kind-field[data-v-e29dd6a7]{background:var(--blue-100, #e3f2fd);color:var(--blue-600, #1e88e5)}.tql-completion-icon.tql-completion-kind-operator[data-v-e29dd6a7]{background:var(--pink-100, #fce4ec);color:var(--pink-600, #d81b60)}.tql-completion-icon.tql-completion-kind-value[data-v-e29dd6a7]{background:var(--green-100, #e8f5e9);color:var(--green-600, #43a047)}.tql-completion-icon.tql-completion-kind-keyword[data-v-e29dd6a7]{background:var(--purple-100, #f3e5f5);color:var(--purple-600, #8e24aa)}.tql-completion-icon.tql-completion-kind-snippet[data-v-e29dd6a7]{background:var(--orange-100, #fff3e0);color:var(--orange-600, #fb8c00)}.tql-completion-icon.tql-completion-kind-mutator[data-v-e29dd6a7]{background:var(--cyan-100, #e0f7fa);color:var(--cyan-600, #00acc1)}.tql-completion-icon.tql-completion-kind-aggregation[data-v-e29dd6a7]{background:var(--indigo-100, #e8eaf6);color:var(--indigo-600, #3949ab)}.tql-completion-icon.tql-completion-kind-logicalOp[data-v-e29dd6a7]{background:var(--yellow-100, #fffde7);color:var(--yellow-700, #fbc02d)}.tql-completion-icon.tql-completion-kind-typeHint[data-v-e29dd6a7]{background:var(--teal-100, #e0f2f1);color:var(--teal-600, #00897b)}.tql-completion-icon.tql-completion-kind-visualization[data-v-e29dd6a7]{background:var(--red-100, #ffebee);color:var(--red-600, #e53935)}.tql-completion-content[data-v-e29dd6a7]{flex:1;display:flex;flex-direction:column;min-width:0}.tql-completion-label[data-v-e29dd6a7]{font-family:Courier New,monospace;font-size:.875rem;font-weight:500;color:var(--text-color, #333);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-detail[data-v-e29dd6a7]{font-size:.75rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-kind-badge[data-v-e29dd6a7]{font-size:.625rem;padding:.125rem .375rem;background:var(--surface-100, #f5f5f5);border-radius:3px;color:var(--text-color-secondary, #666);text-transform:uppercase;letter-spacing:.025em}.tql-completion-docs[data-v-e29dd6a7]{padding:.5rem .75rem;border-top:1px solid var(--surface-border, #ddd);background:var(--surface-50, #fafafa);font-size:.75rem;color:var(--text-color-secondary, #666);max-height:60px;overflow-y:auto}.tql-preview[data-v-53107944]{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-53107944]{padding:8px;font-size:12px}.tql-preview--empty[data-v-53107944]{color:var(--tql-preview-muted, #888)}.tql-preview__empty[data-v-53107944]{text-align:center;padding:20px}.tql-preview__complexity[data-v-53107944]{display:flex;align-items:center;gap:12px;margin-bottom:12px}.tql-preview__complexity-badge[data-v-53107944]{padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase}.tql-preview--low .tql-preview__complexity-badge[data-v-53107944]{background:var(--tql-preview-low-bg, #e8f5e9);color:var(--tql-preview-low-text, #2e7d32)}.tql-preview--medium .tql-preview__complexity-badge[data-v-53107944]{background:var(--tql-preview-medium-bg, #fff3e0);color:var(--tql-preview-medium-text, #e65100)}.tql-preview--high .tql-preview__complexity-badge[data-v-53107944]{background:var(--tql-preview-high-bg, #ffebee);color:var(--tql-preview-high-text, #c62828)}.tql-preview__field-count[data-v-53107944]{color:var(--tql-preview-muted, #666);font-size:12px}.tql-preview__warnings[data-v-53107944]{margin-bottom:12px}.tql-preview__warning[data-v-53107944]{display:flex;align-items:flex-start;gap:8px;padding:6px 8px;border-radius:4px;margin-bottom:4px}.tql-preview__warning--info[data-v-53107944]{background:var(--tql-preview-info-bg, #e3f2fd);color:var(--tql-preview-info-text, #1565c0)}.tql-preview__warning--warning[data-v-53107944]{background:var(--tql-preview-warning-bg, #fff3e0);color:var(--tql-preview-warning-text, #e65100)}.tql-preview__warning--error[data-v-53107944]{background:var(--tql-preview-error-bg, #ffebee);color:var(--tql-preview-error-text, #c62828)}.tql-preview__warning-icon[data-v-53107944]{font-weight:700;width:16px;text-align:center}.tql-preview__warning-text[data-v-53107944]{flex:1}.tql-preview__suggestions[data-v-53107944]{margin-bottom:12px;padding:8px;background:var(--tql-preview-suggestion-bg, #f5f5f5);border-radius:4px}.tql-preview__suggestions-header[data-v-53107944]{font-weight:600;margin-bottom:4px;color:var(--tql-preview-header, #333)}.tql-preview__suggestions-list[data-v-53107944]{margin:0;padding-left:20px}.tql-preview__suggestion[data-v-53107944]{color:var(--tql-preview-muted, #666);margin:2px 0}.tql-preview__tree[data-v-53107944]{margin-bottom:12px}.tql-preview__tree-header[data-v-53107944],.tql-preview__fields-header[data-v-53107944],.tql-preview__operators-header[data-v-53107944]{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-53107944]{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-53107944]{margin:2px 0}.tql-preview__node-content[data-v-53107944]{display:flex;align-items:center;gap:4px;padding:2px 4px;border-radius:3px;cursor:pointer}.tql-preview__node-content[data-v-53107944]:hover{background:var(--tql-preview-node-hover, #f0f0f0)}.tql-preview__node-toggle[data-v-53107944]{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-53107944]:hover{background:var(--tql-preview-toggle-hover, #d0d0d0)}.tql-preview__node-toggle--leaf[data-v-53107944]{visibility:hidden}.tql-preview__node-type[data-v-53107944]{font-weight:600;color:var(--tql-preview-node-type, #666)}.tql-preview__node--and .tql-preview__node-type[data-v-53107944]{color:var(--tql-preview-and, #1976d2)}.tql-preview__node--or .tql-preview__node-type[data-v-53107944]{color:var(--tql-preview-or, #7b1fa2)}.tql-preview__node--not .tql-preview__node-type[data-v-53107944]{color:var(--tql-preview-not, #c62828)}.tql-preview__node--group .tql-preview__node-type[data-v-53107944]{color:var(--tql-preview-group, #666)}.tql-preview__node-label[data-v-53107944]{flex:1}.tql-preview__fields-list[data-v-53107944]{display:flex;flex-direction:column;gap:4px}.tql-preview__field[data-v-53107944]{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-53107944]:hover{background:var(--tql-preview-field-hover, #f5f5f5)}.tql-preview__field-name[data-v-53107944]{font-weight:600;color:var(--tql-preview-field-name, #1976d2)}.tql-preview__field-mutators[data-v-53107944]{color:var(--tql-preview-mutator, #7b1fa2)}.tql-preview__field-operator[data-v-53107944]{color:var(--tql-preview-operator, #666)}.tql-preview__field-value[data-v-53107944]{color:var(--tql-preview-value, #2e7d32)}.tql-preview__match-type[data-v-53107944]{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-53107944]{background:var(--tql-preview-match-exact-bg, #e8f5e9);color:var(--tql-preview-match-exact, #2e7d32)}.tql-preview__match-type--wildcard[data-v-53107944]{background:var(--tql-preview-match-wildcard-bg, #fff3e0);color:var(--tql-preview-match-wildcard, #e65100)}.tql-preview__match-type--regex[data-v-53107944]{background:var(--tql-preview-match-regex-bg, #fce4ec);color:var(--tql-preview-match-regex, #c2185b)}.tql-preview__match-type--range[data-v-53107944]{background:var(--tql-preview-match-range-bg, #e3f2fd);color:var(--tql-preview-match-range, #1565c0)}.tql-preview__match-type--cidr[data-v-53107944]{background:var(--tql-preview-match-cidr-bg, #f3e5f5);color:var(--tql-preview-match-cidr, #7b1fa2)}.tql-preview__operators-list[data-v-53107944]{display:flex;flex-wrap:wrap;gap:8px}.tql-preview__operator[data-v-53107944]{padding:2px 6px;background:var(--tql-preview-op-bg, #f0f0f0);border-radius:3px;font-size:11px}.tql-input-wrapper[data-v-d513cd4d]{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-d513cd4d],.tql-input-wrapper.tql-input-has-min-height .tql-input[data-v-d513cd4d]{min-height:var(--tql-min-height)}.tql-input-wrapper.tql-input-focused[data-v-d513cd4d]{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-d513cd4d]{border-color:var(--red-500, #ef4444)}.tql-input-wrapper.tql-input-invalid.tql-input-focused[data-v-d513cd4d]{box-shadow:0 0 0 2px var(--red-100, rgba(239, 68, 68, .2))}.tql-input-wrapper.tql-input-disabled[data-v-d513cd4d]{opacity:.6;cursor:not-allowed}.tql-highlight-layer[data-v-d513cd4d]{position:absolute;inset:0;box-sizing:border-box;padding:.5rem 8rem .5rem .75rem;border:none;pointer-events:none;white-space:pre;font-family:Courier New,monospace;font-size:.875rem;line-height:1.5;overflow:hidden}.tql-input-multiline .tql-highlight-layer[data-v-d513cd4d]{overflow-y:auto;white-space:pre-wrap;word-wrap:break-word}.tql-input[data-v-d513cd4d]{flex:1;width:100%;box-sizing:border-box;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-d513cd4d]{color:transparent;caret-color:var(--text-color, #333)}.tql-input[data-v-d513cd4d]::placeholder{color:var(--text-color-secondary, #666);opacity:.7}.tql-input[data-v-d513cd4d]:disabled{cursor:not-allowed}.tql-token-field[data-v-d513cd4d]{color:var(--tql-field-color, var(--blue-600, #2563eb))}.tql-token-operator[data-v-d513cd4d]{color:var(--tql-operator-color, var(--pink-600, #db2777));font-weight:500}.tql-token-logicalOp[data-v-d513cd4d]{color:var(--tql-logical-color, var(--purple-600, #9333ea));font-weight:600}.tql-token-collectionOp[data-v-d513cd4d]{color:var(--tql-collection-color, var(--indigo-600, #4f46e5));font-weight:600}.tql-token-string[data-v-d513cd4d]{color:var(--tql-string-color, var(--green-600, #16a34a))}.tql-token-number[data-v-d513cd4d]{color:var(--tql-number-color, var(--orange-600, #ea580c))}.tql-token-boolean[data-v-d513cd4d]{color:var(--tql-boolean-color, var(--cyan-600, #0891b2))}.tql-token-null[data-v-d513cd4d]{color:var(--tql-null-color, var(--gray-500, #6b7280));font-style:italic}.tql-token-mutator[data-v-d513cd4d]{color:var(--tql-mutator-color, var(--teal-600, #0d9488));font-style:italic}.tql-token-aggregation[data-v-d513cd4d]{color:var(--tql-aggregation-color, var(--indigo-600, #4f46e5))}.tql-token-keyword[data-v-d513cd4d]{color:var(--tql-keyword-color, var(--purple-500, #a855f7))}.tql-token-typeHint[data-v-d513cd4d]{color:var(--tql-typehint-color, var(--teal-500, #14b8a6))}.tql-token-visualization[data-v-d513cd4d]{color:var(--tql-viz-color, var(--red-500, #ef4444))}.tql-token-arrow[data-v-d513cd4d]{color:var(--tql-arrow-color, var(--gray-600, #4b5563));font-weight:600}.tql-token-doubleColon[data-v-d513cd4d]{color:var(--tql-colon-color, var(--gray-500, #6b7280))}.tql-token-paren[data-v-d513cd4d],.tql-token-bracket[data-v-d513cd4d]{color:var(--tql-bracket-color, var(--gray-600, #4b5563))}.tql-token-error[data-v-d513cd4d]{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-d513cd4d]{background-color:var(--red-50, #fef2f2)}.tql-token-unknown[data-v-d513cd4d]{color:var(--text-color-secondary, #666)}.tql-validation-icon[data-v-d513cd4d]{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-d513cd4d]{top:.75rem;transform:none}.tql-icon-valid[data-v-d513cd4d]{color:var(--green-500, #22c55e)}.tql-icon-invalid[data-v-d513cd4d]{color:var(--red-500, #ef4444)}.tql-icon-clickable[data-v-d513cd4d]{cursor:pointer;transition:transform .2s}.tql-icon-clickable[data-v-d513cd4d]:hover{transform:scale(1.2)}.tql-icon-clickable[data-v-d513cd4d]:focus{outline:2px solid var(--primary-color, #3b82f6);outline-offset:2px;border-radius:50%}.tql-snippet-button[data-v-d513cd4d]{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-d513cd4d]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-input-multiline .tql-snippet-button[data-v-d513cd4d]{top:.75rem;transform:none}.tql-input-resizable-textarea[data-v-d513cd4d]{resize:vertical;min-height:80px}.tql-input-wrapper.tql-input-resizable[data-v-d513cd4d]{height:auto}.tql-input-wrapper.tql-input-resizable .tql-highlight-layer[data-v-d513cd4d]{height:100%}.tql-validation-messages[data-v-d513cd4d]{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-d513cd4d],.tql-input-autocomplete-active .tql-complexity-warnings[data-v-d513cd4d],.tql-input-autocomplete-active .tql-history-dropdown[data-v-d513cd4d],.tql-input-autocomplete-active .tql-preview-panel[data-v-d513cd4d]{display:none!important}.tql-error-message[data-v-d513cd4d]{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-d513cd4d]{margin-top:.125rem;font-size:.75rem}.tql-error-suggestion[data-v-d513cd4d]{display:block;color:var(--text-color-secondary, #666);font-style:italic;margin-left:1.25rem}.sr-only[data-v-d513cd4d]{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-d513cd4d]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:.25rem}.tql-input-multiline .tql-toolbar[data-v-d513cd4d]{top:.5rem;transform:none}.tql-toolbar-button[data-v-d513cd4d]{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-d513cd4d]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-toolbar-button--active[data-v-d513cd4d]{color:var(--primary-color, #3b82f6);background:var(--primary-100, rgba(59, 130, 246, .1))}.tql-validation-status[data-v-d513cd4d]{display:flex;align-items:center}.tql-complexity-badge[data-v-d513cd4d]{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-d513cd4d]{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d)}.tql-complexity-medium[data-v-d513cd4d]{background:var(--yellow-100, #fef9c3);color:var(--yellow-700, #a16207)}.tql-complexity-high[data-v-d513cd4d]{background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c)}.tql-complexity-count[data-v-d513cd4d]{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-d513cd4d]{background:var(--green-600, #16a34a)}.tql-complexity-medium .tql-complexity-count[data-v-d513cd4d]{background:var(--yellow-600, #ca8a04)}.tql-complexity-high .tql-complexity-count[data-v-d513cd4d]{background:var(--red-600, #dc2626)}.tql-complexity-warnings[data-v-d513cd4d]{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-d513cd4d]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem}.tql-complexity-warning i[data-v-d513cd4d]{margin-top:.125rem;font-size:.75rem}.tql-complexity-warning--info[data-v-d513cd4d]{color:var(--blue-600, #2563eb)}.tql-complexity-warning--warning[data-v-d513cd4d]{color:var(--yellow-600, #ca8a04)}.tql-complexity-warning--error[data-v-d513cd4d]{color:var(--red-600, #dc2626)}.tql-complexity-suggestions[data-v-d513cd4d]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--surface-border, #e0e0e0)}.tql-complexity-suggestion[data-v-d513cd4d]{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-d513cd4d]{color:var(--yellow-500, #eab308)}.tql-history-dropdown[data-v-d513cd4d]{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-d513cd4d]{padding:.5rem;border-bottom:1px solid var(--surface-border, #e0e0e0)}.tql-history-search[data-v-d513cd4d]{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-d513cd4d]:focus{border-color:var(--primary-color, #3b82f6)}.tql-history-list[data-v-d513cd4d]{overflow-y:auto;flex:1}.tql-history-item[data-v-d513cd4d]{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-d513cd4d]:hover{background:var(--surface-100, #f5f5f5)}.tql-history-item--favorite[data-v-d513cd4d]{background:var(--yellow-50, #fefce8)}.tql-history-item--favorite[data-v-d513cd4d]:hover{background:var(--yellow-100, #fef9c3)}.tql-history-favorite[data-v-d513cd4d]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #999);cursor:pointer;flex-shrink:0}.tql-history-favorite[data-v-d513cd4d]:hover,.tql-history-item--favorite .tql-history-favorite[data-v-d513cd4d]{color:var(--yellow-500, #eab308)}.tql-history-content[data-v-d513cd4d]{flex:1;min-width:0}.tql-history-label[data-v-d513cd4d]{font-size:.6875rem;font-weight:600;color:var(--text-color, #333);margin-bottom:.125rem}.tql-history-query[data-v-d513cd4d]{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-d513cd4d]{font-size:.625rem;color:var(--text-color-secondary, #999);flex-shrink:0}.tql-history-empty[data-v-d513cd4d]{padding:1rem;text-align:center;color:var(--text-color-secondary, #666);font-size:.75rem}.tql-preview-panel[data-v-d513cd4d]{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-d513cd4d]{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-d513cd4d]{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-d513cd4d]:hover{background:var(--surface-100, #f5f5f5);color:var(--text-color, #333)}.tql-preview-panel[data-v-d513cd4d] .tql-preview{border:none;border-radius:0;max-height:350px;overflow-y:auto}.tql-validation-messages-portal{position:fixed;top:var(--tql-msg-top, 0);left:var(--tql-msg-left, 0);width:var(--tql-msg-width, auto);z-index:9998;background:var(--surface-overlay, #fff);border:2px solid var(--red-500, #ef4444);border-radius:var(--border-radius, 6px);padding:.5rem;box-shadow:0 4px 12px #00000026}.tql-validation-messages-portal .tql-error-message{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem;color:var(--red-600, #dc2626)}.tql-validation-messages-portal .tql-error-message i{margin-top:.125rem;font-size:.75rem}.tql-validation-messages-portal .tql-error-suggestion{display:block;color:var(--text-color-secondary, #6b7280);font-style:italic;margin-left:1.25rem}.tql-chart[data-v-9f8e5a68]{position:relative;width:100%;background:#12121e;border-radius:10px;overflow:hidden}.tql-chart__canvas[data-v-9f8e5a68]{display:block;width:100%!important;height:100%!important}.tql-chart__metric[data-v-9f8e5a68]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px}.tql-chart__metric-value[data-v-9f8e5a68]{font-size:3.5rem;font-weight:700;letter-spacing:-.02em;color:#818cf8;line-height:1}.tql-chart__metric-title[data-v-9f8e5a68]{font-size:.9rem;color:#888;letter-spacing:.03em}.tql-chart__tooltip[data-v-9f8e5a68]{position:absolute;opacity:0;pointer-events:auto;background:#1e1e2e;border:1px solid #333;border-radius:8px;padding:10px 14px;font-size:.8rem;transition:opacity .15s;z-index:10;transform:translate(-50%,-110%)}.tql-chart__tooltip[data-v-9f8e5a68] .tt-title{color:#e0e0e0;font-weight:600;margin-bottom:2px}.tql-chart__tooltip[data-v-9f8e5a68] .tt-val{color:#a0a0b0;margin-bottom:6px}.tql-chart__tooltip[data-v-9f8e5a68] .tt-link{color:#818cf8;text-decoration:none;font-weight:500}.tql-chart__tooltip[data-v-9f8e5a68] .tt-link:hover{text-decoration:underline}
1
+ .tql-autocomplete-dropdown[data-v-e29dd6a7]{position:fixed;top:var(--dropdown-top);left:var(--dropdown-left);z-index:9999;min-width:280px;max-width:450px;max-height:var(--dropdown-max-height);background:var(--surface-overlay, #fff);border:1px solid var(--surface-border, #ddd);border-radius:var(--border-radius, 6px);box-shadow:0 4px 16px #00000026;overflow:hidden;display:flex;flex-direction:column}.tql-completion-list[data-v-e29dd6a7]{overflow-y:auto;max-height:calc(var(--dropdown-max-height) - 60px)}.tql-completion-item[data-v-e29dd6a7]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .15s}.tql-completion-item[data-v-e29dd6a7]:hover,.tql-completion-item.selected[data-v-e29dd6a7]{background:var(--highlight-bg, #f0f0f0)}.tql-completion-icon[data-v-e29dd6a7]{display:flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:4px;font-size:.75rem}.tql-completion-icon.tql-completion-kind-field[data-v-e29dd6a7]{background:var(--blue-100, #e3f2fd);color:var(--blue-600, #1e88e5)}.tql-completion-icon.tql-completion-kind-operator[data-v-e29dd6a7]{background:var(--pink-100, #fce4ec);color:var(--pink-600, #d81b60)}.tql-completion-icon.tql-completion-kind-value[data-v-e29dd6a7]{background:var(--green-100, #e8f5e9);color:var(--green-600, #43a047)}.tql-completion-icon.tql-completion-kind-keyword[data-v-e29dd6a7]{background:var(--purple-100, #f3e5f5);color:var(--purple-600, #8e24aa)}.tql-completion-icon.tql-completion-kind-snippet[data-v-e29dd6a7]{background:var(--orange-100, #fff3e0);color:var(--orange-600, #fb8c00)}.tql-completion-icon.tql-completion-kind-mutator[data-v-e29dd6a7]{background:var(--cyan-100, #e0f7fa);color:var(--cyan-600, #00acc1)}.tql-completion-icon.tql-completion-kind-aggregation[data-v-e29dd6a7]{background:var(--indigo-100, #e8eaf6);color:var(--indigo-600, #3949ab)}.tql-completion-icon.tql-completion-kind-logicalOp[data-v-e29dd6a7]{background:var(--yellow-100, #fffde7);color:var(--yellow-700, #fbc02d)}.tql-completion-icon.tql-completion-kind-typeHint[data-v-e29dd6a7]{background:var(--teal-100, #e0f2f1);color:var(--teal-600, #00897b)}.tql-completion-icon.tql-completion-kind-visualization[data-v-e29dd6a7]{background:var(--red-100, #ffebee);color:var(--red-600, #e53935)}.tql-completion-content[data-v-e29dd6a7]{flex:1;display:flex;flex-direction:column;min-width:0}.tql-completion-label[data-v-e29dd6a7]{font-family:Courier New,monospace;font-size:.875rem;font-weight:500;color:var(--text-color, #333);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-detail[data-v-e29dd6a7]{font-size:.75rem;color:var(--text-color-secondary, #666);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tql-completion-kind-badge[data-v-e29dd6a7]{font-size:.625rem;padding:.125rem .375rem;background:var(--surface-100, #f5f5f5);border-radius:3px;color:var(--text-color-secondary, #666);text-transform:uppercase;letter-spacing:.025em}.tql-completion-docs[data-v-e29dd6a7]{padding:.5rem .75rem;border-top:1px solid var(--surface-border, #ddd);background:var(--surface-50, #fafafa);font-size:.75rem;color:var(--text-color-secondary, #666);max-height:60px;overflow-y:auto}.tql-preview[data-v-53107944]{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-53107944]{padding:8px;font-size:12px}.tql-preview--empty[data-v-53107944]{color:var(--tql-preview-muted, #888)}.tql-preview__empty[data-v-53107944]{text-align:center;padding:20px}.tql-preview__complexity[data-v-53107944]{display:flex;align-items:center;gap:12px;margin-bottom:12px}.tql-preview__complexity-badge[data-v-53107944]{padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase}.tql-preview--low .tql-preview__complexity-badge[data-v-53107944]{background:var(--tql-preview-low-bg, #e8f5e9);color:var(--tql-preview-low-text, #2e7d32)}.tql-preview--medium .tql-preview__complexity-badge[data-v-53107944]{background:var(--tql-preview-medium-bg, #fff3e0);color:var(--tql-preview-medium-text, #e65100)}.tql-preview--high .tql-preview__complexity-badge[data-v-53107944]{background:var(--tql-preview-high-bg, #ffebee);color:var(--tql-preview-high-text, #c62828)}.tql-preview__field-count[data-v-53107944]{color:var(--tql-preview-muted, #666);font-size:12px}.tql-preview__warnings[data-v-53107944]{margin-bottom:12px}.tql-preview__warning[data-v-53107944]{display:flex;align-items:flex-start;gap:8px;padding:6px 8px;border-radius:4px;margin-bottom:4px}.tql-preview__warning--info[data-v-53107944]{background:var(--tql-preview-info-bg, #e3f2fd);color:var(--tql-preview-info-text, #1565c0)}.tql-preview__warning--warning[data-v-53107944]{background:var(--tql-preview-warning-bg, #fff3e0);color:var(--tql-preview-warning-text, #e65100)}.tql-preview__warning--error[data-v-53107944]{background:var(--tql-preview-error-bg, #ffebee);color:var(--tql-preview-error-text, #c62828)}.tql-preview__warning-icon[data-v-53107944]{font-weight:700;width:16px;text-align:center}.tql-preview__warning-text[data-v-53107944]{flex:1}.tql-preview__suggestions[data-v-53107944]{margin-bottom:12px;padding:8px;background:var(--tql-preview-suggestion-bg, #f5f5f5);border-radius:4px}.tql-preview__suggestions-header[data-v-53107944]{font-weight:600;margin-bottom:4px;color:var(--tql-preview-header, #333)}.tql-preview__suggestions-list[data-v-53107944]{margin:0;padding-left:20px}.tql-preview__suggestion[data-v-53107944]{color:var(--tql-preview-muted, #666);margin:2px 0}.tql-preview__tree[data-v-53107944]{margin-bottom:12px}.tql-preview__tree-header[data-v-53107944],.tql-preview__fields-header[data-v-53107944],.tql-preview__operators-header[data-v-53107944]{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-53107944]{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-53107944]{margin:2px 0}.tql-preview__node-content[data-v-53107944]{display:flex;align-items:center;gap:4px;padding:2px 4px;border-radius:3px;cursor:pointer}.tql-preview__node-content[data-v-53107944]:hover{background:var(--tql-preview-node-hover, #f0f0f0)}.tql-preview__node-toggle[data-v-53107944]{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-53107944]:hover{background:var(--tql-preview-toggle-hover, #d0d0d0)}.tql-preview__node-toggle--leaf[data-v-53107944]{visibility:hidden}.tql-preview__node-type[data-v-53107944]{font-weight:600;color:var(--tql-preview-node-type, #666)}.tql-preview__node--and .tql-preview__node-type[data-v-53107944]{color:var(--tql-preview-and, #1976d2)}.tql-preview__node--or .tql-preview__node-type[data-v-53107944]{color:var(--tql-preview-or, #7b1fa2)}.tql-preview__node--not .tql-preview__node-type[data-v-53107944]{color:var(--tql-preview-not, #c62828)}.tql-preview__node--group .tql-preview__node-type[data-v-53107944]{color:var(--tql-preview-group, #666)}.tql-preview__node-label[data-v-53107944]{flex:1}.tql-preview__fields-list[data-v-53107944]{display:flex;flex-direction:column;gap:4px}.tql-preview__field[data-v-53107944]{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-53107944]:hover{background:var(--tql-preview-field-hover, #f5f5f5)}.tql-preview__field-name[data-v-53107944]{font-weight:600;color:var(--tql-preview-field-name, #1976d2)}.tql-preview__field-mutators[data-v-53107944]{color:var(--tql-preview-mutator, #7b1fa2)}.tql-preview__field-operator[data-v-53107944]{color:var(--tql-preview-operator, #666)}.tql-preview__field-value[data-v-53107944]{color:var(--tql-preview-value, #2e7d32)}.tql-preview__match-type[data-v-53107944]{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-53107944]{background:var(--tql-preview-match-exact-bg, #e8f5e9);color:var(--tql-preview-match-exact, #2e7d32)}.tql-preview__match-type--wildcard[data-v-53107944]{background:var(--tql-preview-match-wildcard-bg, #fff3e0);color:var(--tql-preview-match-wildcard, #e65100)}.tql-preview__match-type--regex[data-v-53107944]{background:var(--tql-preview-match-regex-bg, #fce4ec);color:var(--tql-preview-match-regex, #c2185b)}.tql-preview__match-type--range[data-v-53107944]{background:var(--tql-preview-match-range-bg, #e3f2fd);color:var(--tql-preview-match-range, #1565c0)}.tql-preview__match-type--cidr[data-v-53107944]{background:var(--tql-preview-match-cidr-bg, #f3e5f5);color:var(--tql-preview-match-cidr, #7b1fa2)}.tql-preview__operators-list[data-v-53107944]{display:flex;flex-wrap:wrap;gap:8px}.tql-preview__operator[data-v-53107944]{padding:2px 6px;background:var(--tql-preview-op-bg, #f0f0f0);border-radius:3px;font-size:11px}.tql-input-wrapper[data-v-d513cd4d]{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-d513cd4d],.tql-input-wrapper.tql-input-has-min-height .tql-input[data-v-d513cd4d]{min-height:var(--tql-min-height)}.tql-input-wrapper.tql-input-focused[data-v-d513cd4d]{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-d513cd4d]{border-color:var(--red-500, #ef4444)}.tql-input-wrapper.tql-input-invalid.tql-input-focused[data-v-d513cd4d]{box-shadow:0 0 0 2px var(--red-100, rgba(239, 68, 68, .2))}.tql-input-wrapper.tql-input-disabled[data-v-d513cd4d]{opacity:.6;cursor:not-allowed}.tql-highlight-layer[data-v-d513cd4d]{position:absolute;inset:0;box-sizing:border-box;padding:.5rem 8rem .5rem .75rem;border:none;pointer-events:none;white-space:pre;font-family:Courier New,monospace;font-size:.875rem;line-height:1.5;overflow:hidden}.tql-input-multiline .tql-highlight-layer[data-v-d513cd4d]{overflow-y:auto;white-space:pre-wrap;word-wrap:break-word}.tql-input[data-v-d513cd4d]{flex:1;width:100%;box-sizing:border-box;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-d513cd4d]{color:transparent;caret-color:var(--text-color, #333)}.tql-input[data-v-d513cd4d]::placeholder{color:var(--text-color-secondary, #666);opacity:.7}.tql-input[data-v-d513cd4d]:disabled{cursor:not-allowed}.tql-token-field[data-v-d513cd4d]{color:var(--tql-field-color, var(--blue-600, #2563eb))}.tql-token-operator[data-v-d513cd4d]{color:var(--tql-operator-color, var(--pink-600, #db2777));font-weight:500}.tql-token-logicalOp[data-v-d513cd4d]{color:var(--tql-logical-color, var(--purple-600, #9333ea));font-weight:600}.tql-token-collectionOp[data-v-d513cd4d]{color:var(--tql-collection-color, var(--indigo-600, #4f46e5));font-weight:600}.tql-token-string[data-v-d513cd4d]{color:var(--tql-string-color, var(--green-600, #16a34a))}.tql-token-number[data-v-d513cd4d]{color:var(--tql-number-color, var(--orange-600, #ea580c))}.tql-token-boolean[data-v-d513cd4d]{color:var(--tql-boolean-color, var(--cyan-600, #0891b2))}.tql-token-null[data-v-d513cd4d]{color:var(--tql-null-color, var(--gray-500, #6b7280));font-style:italic}.tql-token-mutator[data-v-d513cd4d]{color:var(--tql-mutator-color, var(--teal-600, #0d9488));font-style:italic}.tql-token-aggregation[data-v-d513cd4d]{color:var(--tql-aggregation-color, var(--indigo-600, #4f46e5))}.tql-token-keyword[data-v-d513cd4d]{color:var(--tql-keyword-color, var(--purple-500, #a855f7))}.tql-token-typeHint[data-v-d513cd4d]{color:var(--tql-typehint-color, var(--teal-500, #14b8a6))}.tql-token-visualization[data-v-d513cd4d]{color:var(--tql-viz-color, var(--red-500, #ef4444))}.tql-token-arrow[data-v-d513cd4d]{color:var(--tql-arrow-color, var(--gray-600, #4b5563));font-weight:600}.tql-token-doubleColon[data-v-d513cd4d]{color:var(--tql-colon-color, var(--gray-500, #6b7280))}.tql-token-paren[data-v-d513cd4d],.tql-token-bracket[data-v-d513cd4d]{color:var(--tql-bracket-color, var(--gray-600, #4b5563))}.tql-token-error[data-v-d513cd4d]{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-d513cd4d]{background-color:var(--red-50, #fef2f2)}.tql-token-unknown[data-v-d513cd4d]{color:var(--text-color-secondary, #666)}.tql-validation-icon[data-v-d513cd4d]{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-d513cd4d]{top:.75rem;transform:none}.tql-icon-valid[data-v-d513cd4d]{color:var(--green-500, #22c55e)}.tql-icon-invalid[data-v-d513cd4d]{color:var(--red-500, #ef4444)}.tql-icon-clickable[data-v-d513cd4d]{cursor:pointer;transition:transform .2s}.tql-icon-clickable[data-v-d513cd4d]:hover{transform:scale(1.2)}.tql-icon-clickable[data-v-d513cd4d]:focus{outline:2px solid var(--primary-color, #3b82f6);outline-offset:2px;border-radius:50%}.tql-snippet-button[data-v-d513cd4d]{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-d513cd4d]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-input-multiline .tql-snippet-button[data-v-d513cd4d]{top:.75rem;transform:none}.tql-input-resizable-textarea[data-v-d513cd4d]{resize:vertical;min-height:80px}.tql-input-wrapper.tql-input-resizable[data-v-d513cd4d]{height:auto}.tql-input-wrapper.tql-input-resizable .tql-highlight-layer[data-v-d513cd4d]{height:100%}.tql-validation-messages[data-v-d513cd4d]{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-d513cd4d],.tql-input-autocomplete-active .tql-complexity-warnings[data-v-d513cd4d],.tql-input-autocomplete-active .tql-history-dropdown[data-v-d513cd4d],.tql-input-autocomplete-active .tql-preview-panel[data-v-d513cd4d]{display:none!important}.tql-error-message[data-v-d513cd4d]{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-d513cd4d]{margin-top:.125rem;font-size:.75rem}.tql-error-suggestion[data-v-d513cd4d]{display:block;color:var(--text-color-secondary, #666);font-style:italic;margin-left:1.25rem}.sr-only[data-v-d513cd4d]{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-d513cd4d]{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:.25rem}.tql-input-multiline .tql-toolbar[data-v-d513cd4d]{top:.5rem;transform:none}.tql-toolbar-button[data-v-d513cd4d]{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-d513cd4d]:hover{color:var(--primary-color, #3b82f6);background:var(--surface-100, #f5f5f5)}.tql-toolbar-button--active[data-v-d513cd4d]{color:var(--primary-color, #3b82f6);background:var(--primary-100, rgba(59, 130, 246, .1))}.tql-validation-status[data-v-d513cd4d]{display:flex;align-items:center}.tql-complexity-badge[data-v-d513cd4d]{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-d513cd4d]{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d)}.tql-complexity-medium[data-v-d513cd4d]{background:var(--yellow-100, #fef9c3);color:var(--yellow-700, #a16207)}.tql-complexity-high[data-v-d513cd4d]{background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c)}.tql-complexity-count[data-v-d513cd4d]{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-d513cd4d]{background:var(--green-600, #16a34a)}.tql-complexity-medium .tql-complexity-count[data-v-d513cd4d]{background:var(--yellow-600, #ca8a04)}.tql-complexity-high .tql-complexity-count[data-v-d513cd4d]{background:var(--red-600, #dc2626)}.tql-complexity-warnings[data-v-d513cd4d]{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-d513cd4d]{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem}.tql-complexity-warning i[data-v-d513cd4d]{margin-top:.125rem;font-size:.75rem}.tql-complexity-warning--info[data-v-d513cd4d]{color:var(--blue-600, #2563eb)}.tql-complexity-warning--warning[data-v-d513cd4d]{color:var(--yellow-600, #ca8a04)}.tql-complexity-warning--error[data-v-d513cd4d]{color:var(--red-600, #dc2626)}.tql-complexity-suggestions[data-v-d513cd4d]{margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--surface-border, #e0e0e0)}.tql-complexity-suggestion[data-v-d513cd4d]{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-d513cd4d]{color:var(--yellow-500, #eab308)}.tql-history-dropdown[data-v-d513cd4d]{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-d513cd4d]{padding:.5rem;border-bottom:1px solid var(--surface-border, #e0e0e0)}.tql-history-search[data-v-d513cd4d]{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-d513cd4d]:focus{border-color:var(--primary-color, #3b82f6)}.tql-history-list[data-v-d513cd4d]{overflow-y:auto;flex:1}.tql-history-item[data-v-d513cd4d]{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-d513cd4d]:hover{background:var(--surface-100, #f5f5f5)}.tql-history-item--favorite[data-v-d513cd4d]{background:var(--yellow-50, #fefce8)}.tql-history-item--favorite[data-v-d513cd4d]:hover{background:var(--yellow-100, #fef9c3)}.tql-history-favorite[data-v-d513cd4d]{padding:.125rem;border:none;background:transparent;color:var(--text-color-secondary, #999);cursor:pointer;flex-shrink:0}.tql-history-favorite[data-v-d513cd4d]:hover,.tql-history-item--favorite .tql-history-favorite[data-v-d513cd4d]{color:var(--yellow-500, #eab308)}.tql-history-content[data-v-d513cd4d]{flex:1;min-width:0}.tql-history-label[data-v-d513cd4d]{font-size:.6875rem;font-weight:600;color:var(--text-color, #333);margin-bottom:.125rem}.tql-history-query[data-v-d513cd4d]{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-d513cd4d]{font-size:.625rem;color:var(--text-color-secondary, #999);flex-shrink:0}.tql-history-empty[data-v-d513cd4d]{padding:1rem;text-align:center;color:var(--text-color-secondary, #666);font-size:.75rem}.tql-preview-panel[data-v-d513cd4d]{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-d513cd4d]{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-d513cd4d]{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-d513cd4d]:hover{background:var(--surface-100, #f5f5f5);color:var(--text-color, #333)}.tql-preview-panel[data-v-d513cd4d] .tql-preview{border:none;border-radius:0;max-height:350px;overflow-y:auto}.tql-validation-messages-portal{position:fixed;top:var(--tql-msg-top, 0);left:var(--tql-msg-left, 0);width:var(--tql-msg-width, auto);z-index:9998;background:var(--surface-overlay, #fff);border:2px solid var(--red-500, #ef4444);border-radius:var(--border-radius, 6px);padding:.5rem;box-shadow:0 4px 12px #00000026}.tql-validation-messages-portal .tql-error-message{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.75rem;color:var(--red-600, #dc2626)}.tql-validation-messages-portal .tql-error-message i{margin-top:.125rem;font-size:.75rem}.tql-validation-messages-portal .tql-error-suggestion{display:block;color:var(--text-color-secondary, #6b7280);font-style:italic;margin-left:1.25rem}.tql-chart[data-v-1e9e88bd]{position:relative;width:100%;background:#12121e;border-radius:10px;overflow:hidden}.tql-chart__canvas[data-v-1e9e88bd]{display:block;width:100%!important;height:100%!important}.tql-chart__metric[data-v-1e9e88bd]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px}.tql-chart__metric-value[data-v-1e9e88bd]{font-size:3.5rem;font-weight:700;letter-spacing:-.02em;color:#818cf8;line-height:1}.tql-chart__metric-title[data-v-1e9e88bd]{font-size:.9rem;color:#888;letter-spacing:.03em}.tql-chart__unsupported[data-v-1e9e88bd]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:6px;padding:16px;text-align:center}.tql-chart__unsupported-title[data-v-1e9e88bd]{font-size:1rem;font-weight:600;color:silver}.tql-chart__unsupported-reason[data-v-1e9e88bd]{font-size:.85rem;color:#888}.tql-chart__tooltip[data-v-1e9e88bd]{position:absolute;opacity:0;pointer-events:auto;background:#1e1e2e;border:1px solid #333;border-radius:8px;padding:10px 14px;font-size:.8rem;transition:opacity .15s;z-index:10;transform:translate(-50%,-110%)}.tql-chart__tooltip[data-v-1e9e88bd] .tt-title{color:#e0e0e0;font-weight:600;margin-bottom:2px}.tql-chart__tooltip[data-v-1e9e88bd] .tt-val{color:#a0a0b0;margin-bottom:6px}.tql-chart__tooltip[data-v-1e9e88bd] .tt-link{color:#818cf8;text-decoration:none;font-weight:500}.tql-chart__tooltip[data-v-1e9e88bd] .tt-link:hover{text-decoration:underline}
@@ -1,7 +1,7 @@
1
1
  import o from "./TqlChart.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../_virtual/_plugin-vue_export-helper.js";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-9f8e5a68"]]);
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-1e9e88bd"]]);
5
5
  export {
6
6
  m as default
7
7
  };
@@ -1,14 +1,18 @@
1
- import { defineComponent as at, ref as $, computed as S, onMounted as st, watch as nt, openBlock as M, createElementBlock as w, normalizeStyle as rt, createElementVNode as D, toDisplayString as O, createCommentVNode as it, nextTick as ot } from "vue";
2
- import { Chart as x, Title as ct, Tooltip as ut, Legend as ft, Filler as pt, BarElement as dt, BarController as mt, LineElement as ht, LineController as yt, PointElement as gt, ArcElement as vt, PieController as bt, DoughnutController as xt, CategoryScale as kt, LinearScale as _t, TimeScale as St } from "../node_modules/chart.js/dist/chart.js";
3
- import { formatValue as G } from "../src/chart/formatters.js";
4
- import { extractScalarValue as J, buildChartData as Tt, buildChartOptions as Ct, isTimeSeriesData as Mt, isLinkTemplateSafe as wt, expandLinkTemplate as Lt, chartJsType as K } from "../src/chart/mappers.js";
5
- const Pt = {
1
+ import { defineComponent as it, ref as J, computed as v, onMounted as ct, watch as ut, openBlock as S, createElementBlock as T, normalizeStyle as pt, createElementVNode as R, toDisplayString as I, createCommentVNode as ft, nextTick as dt } from "vue";
2
+ import { Chart as b, Title as mt, Tooltip as ht, Legend as yt, Filler as gt, BarElement as vt, BarController as bt, LineElement as _t, LineController as xt, PointElement as kt, ArcElement as Ct, PieController as St, DoughnutController as Tt, CategoryScale as Mt, LinearScale as Lt, TimeScale as wt } from "../node_modules/chart.js/dist/chart.js";
3
+ import { formatValue as K } from "../src/chart/formatters.js";
4
+ import { groupLevels as Pt, extractScalarValue as Y, chartJsType as z, buildChartData as Et, buildChartOptions as Nt, isUnsupportedChart as Q, isLinkTemplateSafe as At, expandLinkTemplate as Rt } from "../src/chart/mappers.js";
5
+ const Ft = {
6
6
  key: 0,
7
7
  class: "tql-chart__metric"
8
- }, Ft = { class: "tql-chart__metric-value" }, Nt = {
8
+ }, qt = { class: "tql-chart__metric-value" }, Bt = {
9
9
  key: 0,
10
10
  class: "tql-chart__metric-title"
11
- }, Ht = /* @__PURE__ */ at({
11
+ }, It = {
12
+ key: 1,
13
+ class: "tql-chart__unsupported",
14
+ role: "status"
15
+ }, zt = { class: "tql-chart__unsupported-reason" }, jt = /* @__PURE__ */ it({
12
16
  __name: "TqlChart",
13
17
  props: {
14
18
  result: {},
@@ -17,192 +21,206 @@ const Pt = {
17
21
  drilldown: { type: Boolean, default: !0 }
18
22
  },
19
23
  emits: ["drilldown"],
20
- setup(E, { emit: U }) {
21
- x.register(
22
- ct,
23
- ut,
24
- ft,
25
- pt,
26
- dt,
24
+ setup($, { emit: Z }) {
25
+ b.register(
27
26
  mt,
28
27
  ht,
29
28
  yt,
30
29
  gt,
31
30
  vt,
32
31
  bt,
32
+ _t,
33
33
  xt,
34
34
  kt,
35
- _t,
36
- St
35
+ Ct,
36
+ St,
37
+ Tt,
38
+ Mt,
39
+ Lt,
40
+ wt
37
41
  );
38
- let L = null, P = !1, I = !1;
39
- async function X() {
40
- if (!I) {
41
- I = !0;
42
+ let F = null, M = !1, V = !1;
43
+ async function tt() {
44
+ if (!V) {
45
+ V = !0;
42
46
  try {
43
- L = (await import("../node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js")).default;
47
+ F = (await import("../node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js")).default;
44
48
  } catch {
45
49
  }
46
- if (!P)
50
+ if (!M)
47
51
  try {
48
- await import("../node_modules/chartjs-adapter-luxon/dist/chartjs-adapter-luxon.esm.js"), P = !0;
52
+ await import("../node_modules/chartjs-adapter-luxon/dist/chartjs-adapter-luxon.esm.js"), M = !0;
49
53
  } catch {
50
54
  }
51
55
  }
52
56
  }
53
- x.defaults.color = "#888", x.defaults.borderColor = "#ffffff0a", x.defaults.font.family = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
54
- const e = E, Y = U, m = $(null), F = $(null);
55
- let u = null;
56
- const T = S(() => {
57
- if (e.chartType && e.chartType !== "auto") return e.chartType;
58
- if (e.result.viz_hint) return e.result.viz_hint;
59
- const l = e.result.stats;
60
- return l && l.type === "stats" && !l.group_by ? "number" : "bar";
61
- }), N = S(() => T.value === "number"), j = S(() => T.value === "gauge"), Q = S(() => {
62
- if (!N.value) return "";
63
- const l = e.result.stats, t = J(l), a = e.result.viz_params?.format;
64
- return a ? G(t, a) : t >= 1e6 ? (t / 1e6).toFixed(1) + "M" : t >= 1e4 ? (t / 1e3).toFixed(1) + "K" : Number.isInteger(t) ? t.toLocaleString() : t.toFixed(2);
65
- }), B = S(() => e.result.viz_params?.title || "");
66
- function Z(l) {
67
- if (!e.drilldown || !u) return;
68
- const t = u.getElementsAtEventForMode(l, "nearest", { intersect: !0 }, !1);
57
+ b.defaults.color = "#888", b.defaults.borderColor = "#ffffff0a", b.defaults.font.family = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
58
+ const l = $, et = Z, g = J(null), q = J(null);
59
+ let f = null;
60
+ const k = v(() => {
61
+ if (l.chartType && l.chartType !== "auto") return l.chartType;
62
+ if (l.result.viz_hint) return l.result.viz_hint;
63
+ const e = l.result.stats;
64
+ return e && e.type === "stats" && !e.group_by ? "number" : "bar";
65
+ }), L = v(() => k.value === "number"), O = v(() => k.value === "gauge"), W = {
66
+ matrix: "chartjs-chart-matrix (Chart.register(MatrixController, MatrixElement))",
67
+ bubbleMap: "chartjs-chart-geo (Chart.register(BubbleMapController, GeoFeature, ProjectionScale, SizeScale))"
68
+ };
69
+ function lt(e) {
70
+ try {
71
+ return !!b.registry.getController(e);
72
+ } catch {
73
+ return !1;
74
+ }
75
+ }
76
+ const B = v(() => {
77
+ if (L.value || O.value) return null;
78
+ const e = k.value, t = z(e);
79
+ return t === null ? `Chart type "${e}" is not supported` : W[t] && !lt(t) ? `Chart type "${e}" needs ${W[t]} registered by the application` : null;
80
+ }), j = v(() => Pt(l.result.stats ?? {})[0]?.key), at = v(() => {
81
+ if (!L.value) return "";
82
+ const e = l.result.stats, t = Y(e), s = l.result.viz_params?.format;
83
+ return s ? K(t, s) : t >= 1e6 ? (t / 1e6).toFixed(1) + "M" : t >= 1e4 ? (t / 1e3).toFixed(1) + "K" : Number.isInteger(t) ? t.toLocaleString() : t.toFixed(2);
84
+ }), D = v(() => l.result.viz_params?.title || "");
85
+ function rt(e) {
86
+ if (!l.drilldown || !f) return;
87
+ const t = f.getElementsAtEventForMode(e, "nearest", { intersect: !0 }, !1);
69
88
  if (t.length === 0) return;
70
- const a = t[0], o = a.datasetIndex, n = a.index, d = String(u.data.labels?.[n] ?? ""), v = Number(u.data.datasets[o]?.data?.[n] ?? 0);
71
- Y("drilldown", {
89
+ const s = t[0], n = s.datasetIndex, a = s.index, d = String(f.data.labels?.[a] ?? ""), m = Number(f.data.datasets[n]?.data?.[a] ?? 0);
90
+ et("drilldown", {
72
91
  label: d,
73
- value: v,
74
- index: n,
75
- field: e.result.stats.group_by?.[0],
76
- chartType: T.value
92
+ value: m,
93
+ index: a,
94
+ field: j.value,
95
+ chartType: k.value
77
96
  });
78
97
  }
79
- function tt() {
80
- const l = m.value;
81
- if (!l) return;
82
- const t = l.getContext("2d");
98
+ function nt() {
99
+ const e = g.value;
100
+ if (!e) return;
101
+ const t = e.getContext("2d");
83
102
  if (!t) return;
84
- const a = e.result.viz_params || {}, o = J(e.result.stats), n = Number(a.y_min ?? 0), d = Number(a.y_max ?? 100), v = Math.max(0, Math.min(1, (o - n) / (d - n))), k = a.ranges, h = [];
85
- if (k)
86
- for (const p of k.split(",")) {
87
- const [C, b] = p.split(":");
88
- if (C && b) {
89
- const [V, W] = C.split("-").map(Number);
90
- !isNaN(V) && !isNaN(W) && h.push({ from: V, to: W, color: b.startsWith("#") ? b : `#${b}` });
103
+ const s = l.result.viz_params || {}, n = Y(l.result.stats), a = Number(s.y_min ?? 0), d = Number(s.y_max ?? 100), m = Math.max(0, Math.min(1, (n - a) / (d - a))), w = s.ranges, h = [];
104
+ if (w)
105
+ for (const y of w.split(",")) {
106
+ const [A, x] = y.split(":");
107
+ if (A && x) {
108
+ const [U, X] = A.split("-").map(Number);
109
+ !isNaN(U) && !isNaN(X) && h.push({ from: U, to: X, color: x.startsWith("#") ? x : `#${x}` });
91
110
  }
92
111
  }
93
- const r = l.width = l.parentElement?.clientWidth || 400, y = l.height = 240, i = r / 2, s = y - 40, g = Math.min(r / 2 - 30, y - 60), c = Math.PI, f = 2 * Math.PI;
94
- if (t.clearRect(0, 0, r, y), t.beginPath(), t.arc(i, s, g, c, f), t.lineWidth = 24, t.strokeStyle = "#333", t.lineCap = "round", t.stroke(), h.length > 0)
95
- for (const p of h) {
96
- const C = c + (p.from - n) / (d - n) * Math.PI, b = c + (p.to - n) / (d - n) * Math.PI;
97
- t.beginPath(), t.arc(i, s, g, C, Math.min(b, f)), t.lineWidth = 24, t.strokeStyle = p.color + "66", t.lineCap = "butt", t.stroke();
112
+ const C = e.width = e.parentElement?.clientWidth || 400, o = e.height = 240, u = C / 2, c = o - 40, i = Math.min(C / 2 - 30, o - 60), r = Math.PI, P = 2 * Math.PI;
113
+ if (t.clearRect(0, 0, C, o), t.beginPath(), t.arc(u, c, i, r, P), t.lineWidth = 24, t.strokeStyle = "#333", t.lineCap = "round", t.stroke(), h.length > 0)
114
+ for (const y of h) {
115
+ const A = r + (y.from - a) / (d - a) * Math.PI, x = r + (y.to - a) / (d - a) * Math.PI;
116
+ t.beginPath(), t.arc(u, c, i, A, Math.min(x, P)), t.lineWidth = 24, t.strokeStyle = y.color + "66", t.lineCap = "butt", t.stroke();
98
117
  }
99
- const A = c + v * Math.PI;
100
- let _ = "#818cf8";
118
+ const _ = r + m * Math.PI;
119
+ let p = "#818cf8";
101
120
  if (h.length > 0) {
102
- for (const p of h)
103
- if (o >= p.from && o <= p.to) {
104
- _ = p.color;
121
+ for (const y of h)
122
+ if (n >= y.from && n <= y.to) {
123
+ p = y.color;
105
124
  break;
106
125
  }
107
126
  }
108
- t.beginPath(), t.arc(i, s, g, c, A), t.lineWidth = 24, t.strokeStyle = _, t.lineCap = "round", t.stroke();
109
- const q = a.title || "", z = a.format, lt = z ? G(o, z) : Number.isInteger(o) ? o.toLocaleString() : o.toFixed(1);
110
- t.fillStyle = _, t.font = "bold 36px -apple-system, BlinkMacSystemFont, sans-serif", t.textAlign = "center", t.fillText(String(lt), i, s - 10), q && (t.fillStyle = "#888", t.font = "13px -apple-system, BlinkMacSystemFont, sans-serif", t.fillText(q, i, s + 18)), t.fillStyle = "#555", t.font = "11px -apple-system, BlinkMacSystemFont, sans-serif", t.textAlign = "left", t.fillText(String(n), i - g - 5, s + 18), t.textAlign = "right", t.fillText(String(d), i + g + 5, s + 18);
127
+ t.beginPath(), t.arc(u, c, i, r, _), t.lineWidth = 24, t.strokeStyle = p, t.lineCap = "round", t.stroke();
128
+ const E = s.title || "", N = s.format, ot = N ? K(n, N) : Number.isInteger(n) ? n.toLocaleString() : n.toFixed(1);
129
+ t.fillStyle = p, t.font = "bold 36px -apple-system, BlinkMacSystemFont, sans-serif", t.textAlign = "center", t.fillText(String(ot), u, c - 10), E && (t.fillStyle = "#888", t.font = "13px -apple-system, BlinkMacSystemFont, sans-serif", t.fillText(E, u, c + 18)), t.fillStyle = "#555", t.font = "11px -apple-system, BlinkMacSystemFont, sans-serif", t.textAlign = "left", t.fillText(String(a), u - i - 5, c + 18), t.textAlign = "right", t.fillText(String(d), u + i + 5, c + 18);
111
130
  }
112
- function et() {
113
- if (!m.value || N.value) return;
114
- if (j.value) {
115
- tt();
131
+ function st() {
132
+ if (f && (f.destroy(), f = null), !g.value || L.value || B.value) return;
133
+ if (O.value) {
134
+ nt();
116
135
  return;
117
136
  }
118
- u && (u.destroy(), u = null);
119
- const l = T.value, t = Tt(e.result, l), a = Ct(e.result, l);
120
- e.drilldown && (a.onClick = Z, m.value && (m.value.style.cursor = "pointer"));
121
- const o = [], n = e.result.viz_params || {}, d = n.labels === !0 || n.labels === "true" || n.labels === "minmax";
122
- L && d && o.push(L);
123
- const v = [...t.labels], k = a.indexAxis === "y", h = P && Mt(e.result.stats), r = a;
124
- h && r?.scales?.x && !k ? r.scales.x = {
125
- ...r.scales.x,
126
- type: "time",
127
- time: { tooltipFormat: "HH:mm", displayFormats: { minute: "HH:mm", hour: "HH:mm", day: "MMM d" } },
128
- ticks: { ...r.scales.x.ticks, maxRotation: 0, autoSkip: !0, maxTicksLimit: 10 }
129
- } : k ? r?.scales?.y && !r.scales.y.ticks?.callback && (r.scales.y.ticks = {
130
- ...r.scales.y.ticks,
131
- callback: function(i, s) {
132
- return v[s] ?? s;
137
+ const e = k.value, t = Et(l.result, e, { timeAxis: M }), s = Nt(l.result, e, { timeAxis: M });
138
+ if (Q(t) || Q(s)) return;
139
+ const n = t, a = s;
140
+ l.drilldown && (a.onClick = rt, g.value && (g.value.style.cursor = "pointer"));
141
+ const d = [], m = l.result.viz_params || {}, w = m.labels === !0 || m.labels === "true" || m.labels === "minmax";
142
+ F && w && d.push(F);
143
+ const h = [...n.labels], C = a.indexAxis === "y", o = a, u = o?.scales?.x?.type;
144
+ u === "time" || u === "category" || h.length === 0 || (C ? o?.scales?.y && !o.scales.y.ticks?.callback && (o.scales.y.ticks = {
145
+ ...o.scales.y.ticks,
146
+ callback: function(i, r) {
147
+ return h[r] ?? r;
133
148
  }
134
- }) : r?.scales?.x && !r.scales.x.ticks?.callback && (r.scales.x.ticks = {
135
- ...r.scales.x.ticks,
136
- callback: function(i, s) {
137
- return v[s] ?? s;
149
+ }) : o?.scales?.x && !o.scales.x.ticks?.callback && (o.scales.x.ticks = {
150
+ ...o.scales.x.ticks,
151
+ callback: function(i, r) {
152
+ return h[r] ?? r;
138
153
  }
139
- });
140
- const y = n.link;
141
- if (y && wt(y) && F.value) {
142
- const i = n.link_target || "_self", s = F.value;
154
+ }));
155
+ const c = m.link;
156
+ if (c && At(c) && q.value) {
157
+ const i = m.link_target || "_self", r = q.value;
143
158
  a.plugins = {
144
159
  ...a.plugins,
145
160
  tooltip: {
146
161
  enabled: !1,
147
- external: (g) => {
148
- const { tooltip: c } = g;
149
- if (c.opacity === 0) {
150
- s.style.opacity = "0";
162
+ external: (P) => {
163
+ const { tooltip: _ } = P;
164
+ if (_.opacity === 0) {
165
+ r.style.opacity = "0";
151
166
  return;
152
167
  }
153
- const f = c.dataPoints?.[0];
154
- if (!f) return;
155
- const A = Lt(y, {
156
- value: f.label,
157
- label: f.label,
158
- field: e.result.stats.group_by?.[0],
159
- count: f.raw
160
- }), _ = i === "_blank" ? ' rel="noopener noreferrer"' : "";
161
- s.innerHTML = `<div class="tt-title">${f.label}</div><div class="tt-val">${f.formattedValue}</div><a href="${A}" target="${i}"${_} class="tt-link">Open link &rarr;</a>`, s.style.opacity = "1", s.style.left = c.caretX + "px", s.style.top = c.caretY + "px";
168
+ const p = _.dataPoints?.[0];
169
+ if (!p) return;
170
+ const E = Rt(c, {
171
+ value: p.label,
172
+ label: p.label,
173
+ field: j.value,
174
+ count: p.raw
175
+ }), N = i === "_blank" ? ' rel="noopener noreferrer"' : "";
176
+ r.innerHTML = `<div class="tt-title">${p.label}</div><div class="tt-val">${p.formattedValue}</div><a href="${E}" target="${i}"${N} class="tt-link">Open link &rarr;</a>`, r.style.opacity = "1", r.style.left = _.caretX + "px", r.style.top = _.caretY + "px";
162
177
  }
163
178
  }
164
179
  };
165
180
  }
166
181
  try {
167
- u = new x(m.value, {
168
- type: K(l),
169
- data: { labels: t.labels, datasets: t.datasets },
182
+ f = new b(g.value, {
183
+ type: z(e),
184
+ data: { labels: n.labels, datasets: n.datasets },
170
185
  options: a,
171
- plugins: o
186
+ plugins: d
172
187
  });
173
188
  } catch (i) {
174
- console.warn("[TqlChart] Plugin error, rendering without plugins:", i), u = new x(m.value, {
175
- type: K(l),
176
- data: { labels: t.labels, datasets: t.datasets },
189
+ console.warn("[TqlChart] Plugin error, rendering without plugins:", i), f = new b(g.value, {
190
+ type: z(e),
191
+ data: { labels: n.labels, datasets: n.datasets },
177
192
  options: a
178
193
  });
179
194
  }
180
195
  }
181
- let H = !1;
182
- async function R() {
183
- H || (await X(), H = !0), ot(et);
196
+ let G = !1;
197
+ async function H() {
198
+ G || (await tt(), G = !0), dt(st);
184
199
  }
185
- return st(R), nt(() => [e.result, e.chartType], () => R(), { deep: !0 }), (l, t) => (M(), w("div", {
200
+ return ct(H), ut(() => [l.result, l.chartType], () => H(), { deep: !0 }), (e, t) => (S(), T("div", {
186
201
  class: "tql-chart",
187
- style: rt({ height: E.height })
202
+ style: pt({ height: $.height })
188
203
  }, [
189
- N.value ? (M(), w("div", Pt, [
190
- D("span", Ft, O(Q.value), 1),
191
- B.value ? (M(), w("span", Nt, O(B.value), 1)) : it("", !0)
192
- ])) : (M(), w("canvas", {
193
- key: 1,
204
+ L.value ? (S(), T("div", Ft, [
205
+ R("span", qt, I(at.value), 1),
206
+ D.value ? (S(), T("span", Bt, I(D.value), 1)) : ft("", !0)
207
+ ])) : B.value ? (S(), T("div", It, [
208
+ t[0] || (t[0] = R("span", { class: "tql-chart__unsupported-title" }, "Not supported", -1)),
209
+ R("span", zt, I(B.value), 1)
210
+ ])) : (S(), T("canvas", {
211
+ key: 2,
194
212
  ref_key: "canvasRef",
195
- ref: m,
213
+ ref: g,
196
214
  class: "tql-chart__canvas"
197
215
  }, null, 512)),
198
- D("div", {
216
+ R("div", {
199
217
  ref_key: "tooltipRef",
200
- ref: F,
218
+ ref: q,
201
219
  class: "tql-chart__tooltip"
202
220
  }, null, 512)
203
221
  ], 4));
204
222
  }
205
223
  });
206
224
  export {
207
- Ht as default
225
+ jt as default
208
226
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tellaro/tql",
3
- "version": "3.3.0",
3
+ "version": "4.0.0",
4
4
  "description": "Tellaro Query Language (TQL) parser, validator, and autocomplete for JavaScript/TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",