import { ExecutePivotQueryParams, ExecuteQueryParams } from '../../../domains/query-execution/index.js';
import { DynamicChartType } from '../../../domains/visualizations/core/chart-options-processor/translations/types.js';
import { ChartWidgetProps } from '../../../domains/widgets/components/chart-widget/types';
import { PivotTableWidgetProps } from '../../../domains/widgets/components/pivot-table-widget/types';
import { ExpandedQueryModel, SimpleQueryModel } from '../types.js';
export declare function toKebabCase(str: string): string;
export declare function capitalizeFirstLetter(str: string): string;
/**
 * Sanitize ID of a dimension
 *
 * @param str - input string
 * @return sanitized ID
 */
export declare function sanitizeDimensionId(str: string): string;
export declare function validateQueryModel(model: any): SimpleQueryModel;
export declare function isEmptyQueryModel(queryModel: ExpandedQueryModel | undefined | null): boolean;
export declare function validateChartType(chartType: DynamicChartType | 'pivot' | 'pivot2'): void;
export declare function checkIfMeasuresExist(props: ChartWidgetProps | PivotTableWidgetProps | ExecuteQueryParams | ExecutePivotQueryParams): boolean;
export declare function isNonEmptyArray<T>(array: T[]): boolean;
/**
 * Removes the first empty line or string if the next line contains "import *" or "import {".
 *
 * The `stringifyExtraImports` function can return an empty string if there are no measures or filters, then
 * `filterFactory` or `measureFactory` are not required for import.
 * In our code templates, we use the `{{extraImportsString}}` placeholder, and
 * if it is replaced with an empty string, our tests may break.
 * This function ensures that such invalid empty lines before imports are removed to maintain proper formatting.
 *
 * @param input - the populated template
 * @returns The modified string with the first empty line removed if the next line contains "import *" or "import {". If no such condition is met, the input remains unchanged.
 */
export declare function removeEmptyLineBeforeImport(input: string): string;
/**
 * Returns a new object where any "unsafe" keys (i.e., keys that contain
 * characters not allowed in JavaScript dot notation — such as spaces, slashes, dashes, etc.)
 * are wrapped in double quotes.
 *
 * If the object contains a `composeCode` field, it is returned as-is without modification.
 *
 * Safe keys (valid JS identifiers) are left unchanged.
 *
 * @param obj - The input object with arbitrary string keys
 * @returns A new object with the same values, but with unsafe keys wrapped in quotes,
 *          unless the object has a `composeCode` field
 *
 * @example
 * quoteUnsafeKeys({ "user-id": true, normalKey: 42 })
 * // => { '"user-id"': true, normalKey: 42 }
 */
export declare function quoteUnsafeKeys<T extends Record<string, any>>(obj: T): Record<string, any>;
