{"version":3,"file":"index.cjs","sources":["../src/ReportingVersion.ts","../src/ApiUtils.ts","../src/IcEvent.ts","../src/IThemeManager.ts","../src/PublicTidyTableTypes.ts","../src/PublicAmchartsData.ts","../src/ITypes.ts","../src/PublicContext.ts","../src/PublicTemplate.ts","../src/PublicTemplateForm.ts","../src/PublicTheme.ts","../src/PublicTidyColumn.ts","../src/PublicTidyTableInteractions.ts","../src/PublicTidyTree.ts","../src/PublicTidyHistogram.ts","../src/RemoteContainerUtils.ts","../src/theme/ThemeAlertDialog.ts","../src/theme/ThemeAmCharts4.ts","../src/theme/ThemeApp.ts","../src/theme/ThemeBaseTable.ts","../src/theme/ThemeDatePicker.ts","../src/theme/ThemeEmbeddedReport.ts","../src/theme/ThemeErrorRenderer.ts","../src/theme/ThemeFilterAutocomplete.ts","../src/theme/ThemeFilterButtons.ts","../src/theme/ThemeFilterCheckboxRadio.ts","../src/theme/ThemeFilterPanel.ts","../src/theme/ThemeRegexFilter.ts","../src/theme/ThemeFilterSlider.ts","../src/theme/ThemeLazyTreeClasses.ts","../src/theme/ThemeFilterTree.ts","../src/theme/ThemeGlobal.ts","../src/theme/ThemeGoogle.ts","../src/theme/ThemeHtmlBox.ts","../src/theme/ThemeImage.ts","../src/theme/ThemeKpiCard.ts","../src/theme/ThemeLayout.ts","../src/theme/ThemeLayoutPage.ts","../src/theme/ThemePivotTable.ts","../src/theme/ThemePrintButton.ts","../src/theme/ThemeReportAppBar.ts","../src/theme/ThemeTable.ts","../src/theme/ThemeReportAppLeftPanel.ts","../src/theme/ThemeWidgetBox.ts","../src/theme/ThemeWidgetBoxContentMessage.ts","../src/theme/ThemeWidgetFilteredBy.ts","../src/theme/ThemeIc3TableCell.ts","../src/theme/ThemeIc3WidgetBoxSpinner.ts","../src/theme/ThemeHomeCard.ts","../src/theme/ThemeHomeConsole.ts","../src/theme/ThemeFilterPanelViewsMenu.ts","../src/theme/ThemeIc3CustomDrilldownMenu.ts"],"sourcesContent":["export default class ReportingVersion {\n\n    /**\n     * e.g., 8.0.0-alpha.1\n     */\n    public readonly version: string;\n\n    public readonly timestamp: string;\n\n    constructor(version: string | undefined, timestamp: string | undefined) {\n\n        this.version = version ?? \"-\";\n        this.timestamp = timestamp ?? \"-\";\n    }\n\n    public getInfo() {\n        return this.version + \" (\" + this.timestamp + \")\";\n    }\n\n}\n","import {IPluginDefinition} from \"./IPluginDefinition\";\nimport {IVersionedPluginDefinition} from \"./IVersionedPluginDefinition\";\nimport ReportingVersion from \"./ReportingVersion\";\nimport {FormFieldObject} from \"./PublicTemplateForm\";\nimport {\n    IPublicWidgetJsTemplateDefinition,\n    IPublicWidgetTemplateDefinition,\n    IWrappedWidgetTemplateDefinition\n} from \"./PublicTemplate\";\nimport {IWidgetPublicContext} from \"./PublicContext\";\nimport {WidgetTemplateIDs} from \"./PublicTemplates\";\n\nexport interface AmCharts4WrappedDefinition<WIDGET extends WidgetTemplateIDs> {\n\n    /**\n     * Some free text used while registering the wrapper (e.g., error purpose).\n     */\n    readonly registrationInfo: string;\n\n    /**\n     * e.g., amCharts4.AmCharts4DonutChart\n     */\n    readonly wrappedWidgetTemplateId: WIDGET;\n\n    /**\n     * New overall meta-information (e.g., id, groupId, image, etc...).\n     */\n    readonly props: Partial<IPublicWidgetTemplateDefinition<FormFieldObject>>;\n\n    /**\n     * Meta-information for the editing of the widget options as well as the actual processing of those options\n     * (i.e., AmCharts 4 chart configuration). Lazy-loaded (and the underlying AmCharts 4 library) once required.\n     *\n     * <pre>\n     *      export default {\n     *\n     *          hookChartOptionsMeta: () => {\n     *              ...\n     *          },\n     *\n     *          hookChartOptions: () => {\n     *              ...\n     *          },\n     *\n     *      }\n     * </pre>\n     */\n    readonly hooks: Promise<any>;\n\n}\n\nexport class ApiUtils {\n\n    /**\n     * Define the form field as being localized.\n     */\n    public static readonly TAG_I18N_FIELD = \"ic3t_\";\n\n    public static makePlugin(definition: IPluginDefinition): () => IVersionedPluginDefinition {\n\n        return (): IVersionedPluginDefinition => {\n\n            return {\n\n                apiVersion: new ReportingVersion(\n                    \"9.1.1\",\n                    \"Fri, 06 Mar 2026 04:48:23 GMT\"\n                ),\n\n                ...definition,\n\n            }\n\n        }\n    }\n\n    /**\n     * A helper method to create a widget template using the resolveDefinition method.\n     * Webpack lazy load of dependencies.\n     *\n     * @see IPublicWidgetJsTemplateDefinition#resolveDefinition\n     */\n    public static createLazyJsWidgetTemplateDefinition<OPTIONS extends FormFieldObject>(definition: Omit<IPublicWidgetJsTemplateDefinition<OPTIONS>, \"jsCode\">): IPublicWidgetJsTemplateDefinition<OPTIONS> {\n\n        return {\n\n            ...definition,\n\n            jsCode: (context: IWidgetPublicContext, container: HTMLDivElement) => {\n                throw new Error(\"JS Lazy: unexpected jsCode() call!\");\n            },\n\n            reactComponent: false,\n\n            withDrilldownPivotTableLikeAs: false,\n\n        }\n\n    }\n\n    public static resolveAmCharts4WidgetTemplateDefinition<OPTIONS extends FormFieldObject>(definition: IPublicWidgetTemplateDefinition<OPTIONS>, wrapped: IPublicWidgetTemplateDefinition<any>): IPublicWidgetTemplateDefinition<OPTIONS> {\n\n        return {\n\n            ...wrapped,\n            ...definition as any /* since TypeScript 5.0.2 */,\n\n            resolveDefinition: undefined,\n            jsCode: wrapped.jsCode,\n\n        } as IPublicWidgetTemplateDefinition<OPTIONS>\n\n    }\n\n    /**\n     * A utility function creating a wrapper widget template definition for existing AmCharts 4 widgets.\n     */\n    public static makeAmCharts4WrappedWidgetTemplateDefinition<WIDGET extends WidgetTemplateIDs>(props: AmCharts4WrappedDefinition<WIDGET>): IWrappedWidgetTemplateDefinition<WIDGET> {\n\n        return {\n\n            registrationInfo: props.registrationInfo,\n            wrappedWidgetTemplateId: props.wrappedWidgetTemplateId,\n\n            wrapper: (wrapped) => {\n\n                return {\n\n                    ...wrapped /* unresolved */,\n\n                    ...props.props /* e.g., id, groupId, etc... */,\n\n                    /**\n                     * amCharts 4 widgets are loading the amCharts 4 JavaScript library on the fly.\n                     *\n                     * This extended widget has to use the resolveDefinition() mechanism as well to be able to re-use\n                     * the lazy-loaded jsCode (widgets are implemented as IPublicWidgetJsTemplateDefinition).\n                     */\n                    resolveDefinition: function (wrappedR) {\n\n                        const wrappedResolved = ApiUtils.resolveAmCharts4WidgetTemplateDefinition(this, wrappedR!);\n\n                        return new Promise((resolve, reject) => {\n\n                            props.hooks.then(definition => resolve({\n\n                                ...wrappedResolved,\n\n                                // our (lazy-loaded) widget meta-information and options hook.\n\n                                chartOptionsMeta: definition.default.hookChartOptionsMeta(wrappedResolved.chartOptionsMeta),\n                                hookChartOptions: definition.default.hookChartOptions,\n\n                            })).catch(err => reject(err))\n                        });\n\n                    }\n                }\n            }\n\n        } as IWrappedWidgetTemplateDefinition<WIDGET>;\n\n    }\n\n}","export const emptySet = \"∅\"\n\nexport enum IcEventType {\n    TIDY_SELECTION,\n    TIDY_FIRE,\n    TIDY_ACTION,\n    API,\n    IC3_CORE,\n}\n\n/**\n * Event mandatory events as sent by the widgets -> @{eventName}\n */\nexport interface PublicIcEvent {\n\n    /**\n     * The value of the event\n     */\n    readonly value: string;\n\n    /**\n     * The MDX version of the events\n     */\n    readonly mdx: string;\n\n    /**\n     * If available the key of the MDX member\n     */\n    readonly key?: any | any[];\n\n    /**\n     * These two strings together define an unique id for a widget in a report\n     */\n    sourceNid?: string;\n    sourceWid?: string;\n\n    /**\n     * special 'tag' to\n     */\n    isEmpty?: boolean;\n\n    /**\n     * the type of event\n     */\n    readonly type?: IcEventType;\n}\n\nexport interface TidyActionEvent extends PublicIcEvent {\n\n    readonly type: IcEventType.TIDY_ACTION;\n\n    readonly tidyIdxHint: number\n\n}\n\nexport enum WidgetNotificationType {\n\n    doAllEvents = \"ic3doAllEvents\",\n\n    doCustomAction = \"ic3doCustomAction\",\n\n    doExportWidgetData = \"ic3exportWidgetData\",\n\n    doExportToExcel = \"ic3exportToExcel\",\n    doExportToPNG = \"ic3exportToPNG\",\n    doExportToSVG = \"ic3exportToSVG\",\n\n    toInitialSelection = 'ic3toInitialSelection',\n\n    clearSelection = \"ic3clearSelection\",\n    clearState = \"ic3clearState\",\n\n    doTemplateUserMenuAction = \"ic3doTemplateUserMenuAction\",\n\n    doPrintReport = \"ic3doPrintReport\",\n    onWidgetZoom = \"ic3onWidgetZoom\"\n}\n\nexport type WidgetNotificationHandler = { type: WidgetNotificationType; handler: (type: WidgetNotificationType, event: PublicIcEvent) => void }\n","import {CSSInterpolation} from \"@mui/system\";\nimport {Components} from \"@mui/material/styles\";\n\nexport enum EmbeddedThemeNames {\n\n    Statos = \"ic3-statos\",\n\n}\n\n/**\n * Default values (e.g., box options, chart options, etc...).\n */\nexport interface IThemeWidgetDefaults {\n\n    /**\n     * Default values for widget boxes. Lookup order:\n     *\n     * <pre>\n     *      plugin-id.template-id.option\n     *      plugin-id.option\n     *      option\n     * </pre>\n     *\n     * @see WidgetBoxOptions (ThemeWidgetBox.ts)\n     */\n    box?: Record<string, any>;\n\n    /**\n     * Default values for widget chart options. Lookup order:\n     *\n     * <pre>\n     *      plugin-id.template-id.option\n     *      plugin-id.option\n     *      option\n     * </pre>\n     *\n     * @see IWidgetTemplateChartOptions (PublicTemplates.ts)\n     */\n    options?: Record<string, any>;\n\n    /**\n     * Default values for widget icons. These settings override the defaults set in the theme in `widgetIcons`.\n     *\n     * Lookup order:\n     *\n     * <pre>\n     *      plugin-id.template-id.option\n     *      plugin-id.option\n     *      option\n     * </pre>\n     *\n     * @see IWidgetIcons (PublicTheme.ts)\n     */\n    widgetIcons?: Record<string, any>;\n}\n\n/**\n * Sort of named set of predefined options.\n */\n\nexport type IThemeWidgetVariant = {\n    props: { variant: string } & Record<string, string>;\n    style: CSSInterpolation;\n    defaultProps?: Record<string, any>;\n} | {\n    props: { variant: string } & Record<string, string>;\n    defaultProps: Record<string, any>;\n}\n\n/**\n * Examples:\n * - Change the primary color of the theme to red: `theme.palette.primary.main = \"#ff0000\";`\n * - Change default chart color: `theme.palette.ic3.chartSingleColors.default = \"#ff0000\";`\n * - Change background: `theme.palette.ic3.pageBackgroundColor = \"#ff0000\";`\n * - Change selected color: `theme.palette.ic3.selected = \"#ff0000\";`\n */\nexport type IThemeProcessor = (theme: any, params?: any) => void;\n\nexport interface IThemeManager {\n\n    /**\n     * Used by IReportDefinition.setThemeProcessorCall().\n     */\n    registerThemeProcessor(name: string, processor: IThemeProcessor): void;\n\n    /**\n     * The theme decorator allows to setup the Theme.components and Theme.ic3 using the theme\n     * created from its partial options (e.g., using palette, typography, spacing, etc...)\n     */\n    registerTheme(themeOptions: any, themeDecorator?: (theme: any) => Components, baseTheme?: EmbeddedThemeNames): void;\n\n    /**\n     * Register editor themes. Change the editor theme in ic3report-config.js by setting defaultEditorThemeId to a\n     * themeId from a theme using this method.\n     */\n    registerEditorTheme(themeOptions: any, themeDecorator?: (theme: any) => Components): void;\n\n}","/**\n * Tidy Column Types\n */\n\nimport {TidyHistogramBucketType} from \"./PublicTidyHistogram\";\nimport {ITidyColumn, ITidyColumnAddValueCopyRow, ITidyColumnAddValueInsert} from \"./PublicTidyColumn\";\nimport {MdxNodeIdentifier} from \"./PublicTidyTable\";\nimport {SelectionMode} from \"./PublicTidyTableInteractions\";\n\nexport enum TidyColumnsType {\n    /**\n     * Values represent a color, e.g. 'red', 'rbg(10, 10, 10)' or '#fff'. Can be null.\n     */\n    COLOR = 'color',\n\n    LONGITUDE = 'longitude',\n    LATITUDE = 'latitude',\n\n    /**\n     * ISO2 location (country, region, city...) codes\n     */\n    ISO2_LOCATION_CODE = 'iso2Location',\n\n    /**\n     * date, time or combination of the two. Can be null.\n     */\n    DATETIME = 'datetime',\n\n    /**\n     * numeric data, e.g., double, float, integer, etc. Can be null.\n     */\n    NUMERIC = 'numeric',\n\n    /**\n     * Textual data, string type. Can be null.\n     */\n    CHARACTER = 'character',\n\n    /**\n     * Boolean data type, true, false. Can be null.\n     */\n    LOGICAL = 'logical',\n\n    /**\n     * array of values. Can be null.\n     */\n    LIST = 'list',\n\n    /**\n     * Column has values of multiple types\n     */\n    MIXED = 'mixed',\n\n    /**\n     * The column type is not known\n     */\n    UNKNOWN = 'unknown',\n\n    /**\n     * The column has null values only\n     */\n    NULL = 'null',\n\n    /**\n     * Use any to opt-out of type checking\n     */\n    ANY = 'any'\n}\n\nexport type TidyColumnsSubType =\n    \"YEAR\" |\n    \"HALF_YEAR\" |\n    \"QUARTER\" |\n    \"MONTH\" |\n    \"WEEK\" |\n    \"DAY\" |\n    \"DAY_MONTH\" |\n    \"DAY_YEAR\" |\n    \"HOUR\" |\n    \"HALF_HOUR\" |\n    \"QUARTER_HOUR\" |\n    \"MINUTE\" |\n    \"SECOND\"\n    ;\n\nexport enum ITidyColumnsSource {\n    QUERY = 'query',\n    TRANSFORMATION = 'transformation',\n    UNKNOWN = 'unknown'\n}\n\n/**\n * Defines a mapping that maps columns to the coordinate system of the widget.\n * The key represents the internal lowercase-name for the mapping, e.g., axis, group, rows, columns.\n * Note that a mapping can have multiple columns, for example, on the Rows.\n */\nexport type ChartTemplateDataMapping = Record<string, ITidyColumn[] | undefined>;\n\n/**\n * Defines an index from column tag (name, mapping, role, etc..) to the name or index of the column in the table.\n * The column tag is converted to lower case.\n */\nexport type TidyColumnIndex = Record<string, string | number>;\n\nexport enum TidyTableMappingColumnSelectorOptions {\n\n    ALL = '@IC3_ALL',\n    ALL_NUMERIC = '@IC3_ALL_NUMERIC',\n    ALL_CHARACTER = '@IC3_ALL_CHARACTER',\n    ALL_MEASURES = '@IC3_ALL_MEASURES',\n    ALL_AXIS = '@IC3_ALL_AXIS',\n\n}\n\nexport interface TidyTableColumnIdentifier {\n    /**\n     * Search column by name\n     */\n    name: string;\n\n    /**\n     * If we want a property, the name of the column's property.\n     */\n    property?: string;\n}\n\nexport interface TidyTableRoleSelector {\n    /**\n     * Search columns by role\n     */\n    role: string;\n}\n\nexport type TidyTableColumnSelector =\n    TidyTableColumnIdentifier\n    | TidyTableMappingColumnSelectorOptions\n    | TidyTableRoleSelector;\n\nexport type IFormFieldGranularityItem = IFormFieldGranularityItemColumn | IFormFieldGranularityItemRole\n    | IFormFieldGranularityItemHierarchy | IFormFieldGranularityColumns;\n\nexport interface IFormFieldGranularityItemColumn {\n    type: \"column\";\n\n    /**\n     * For selecting columns from the tidy table\n     */\n    name: string;\n}\n\nexport interface IFormFieldGranularityItemRole {\n    type: \"role\";\n\n    /**\n     * For selecting mapping/roles in a chart\n     */\n    role: string;\n}\n\n/**\n * Only include columns info from this hierarchy in the selection.\n */\nexport interface IFormFieldGranularityItemHierarchy {\n    type: \"hierarchy\";\n\n    /**\n     * Show in editor.\n     */\n    caption: string;\n\n    /**\n     * Hierarchy for entity items in columns\n     */\n    hierarchyIdx: number;\n}\n\n/**\n * When selected, include all column info in the selection.\n */\nexport interface IFormFieldGranularityColumns {\n    type: \"all_columns\";\n}\n\n\n/**\n * The coordinate of an MDX axis. If and only if the columns source is from ON 0, the hierIdx is defined.\n */\nexport interface AxisCoordinate {\n    /**\n     * Object keeping track of the transformation from the original axis to the current column.\n     * If this object is undefined, then the column can not be constructed using a coordinate transformation of the axis.\n     */\n    repetitionInfo?: MdxRepetitionInfo;\n\n    /**\n     * index of the axis. ON 0, ON 1, etc...\n     */\n    axisIdx: number;\n\n    /**\n     * index of the tuple in the axis. E.g. (AF, 2009) in [AF, 2008, AF, 2009, AF, 2010] has index 1.\n     */\n    tupleIdx?: number;\n\n    /**\n     * index of the member in the tuple. E.g. AF in (AF, 2009) has index 0 and 2009 has index 1.\n     * undefined means use the whole tuple.\n     */\n    hierIdx?: number;\n}\n\nexport interface MdxRepetitionInfo {\n    /**\n     * The number of members in the axis (From 'len' in the json axis guts).\n     */\n    axisLength: number;\n\n    /**\n     * Number of repetitions for each member. See ITidyBaseColumn > repeat.\n     */\n    repetition: number;\n}\n\n/**\n * identifier of a column value ( uniqueName if it´s an axis or idx if measure )\n */\nexport type TidyColumnCoordinateUniqueName = MdxNodeIdentifier['uid'];\n\nexport enum IAmcharts4DataKey {\n\n    /**\n     * Data key for the date/string value of the axis.\n     */\n    AXIS = \"axis\",\n\n    /**\n     * Data key for the tidy-row number.\n     */\n    ROW = \"row\",\n\n    /**\n     * Data key for accessing the value of a dataItem. Used when there are no groups or levels in the data.\n     */\n    NULL = \"_\"\n\n}\n\n/**\n * Objects that have this type are used in chart.data in amCharts.\n */\nexport interface IAmCharts4Data {\n\n    /**\n     * The date/string value of the axis.\n     */\n    axis: Date | string;\n\n    /**\n     * The row number of the axis. Uses first row if multiple rows are in the dataItem for the axis.\n     */\n    row: number;\n\n    /**\n     * Other values for the series\n     */\n    [key: string]: any;\n\n}\n\nexport interface IAmCharts4DataTreeMap {\n    children: {\n        [key: string]: any;\n    }[];\n\n    [key: string]: any;\n}\n\nexport type ITidyRow = any[];\n\nexport interface MdxInfo {\n\n    uniqueName: string;\n    // uniqueNameCS: boolean;\n\n    /**\n     * The key parsed as date|time.\n     */\n    key: any;\n    /**\n     * The key as converted to string in the client.\n     */\n    keyS: string | undefined;\n\n    name: string;\n    caption: string;\n\n    isAll?: boolean;\n\n    pun?: string;\n    // punCS?: boolean;\n\n    /**\n     * Children count\n     */\n    cc?: number;\n\n    levelCaption?: string;\n\n    /**\n     * Relative: starts at 0 + visual depths for ragged dimension.\n     */\n    levelDepthR: number;\n\n    /**\n     * Actual MDX level depth\n     */\n    levelDepth: number;\n\n    /**\n     * hierUN\n     */\n    hierUN: string;\n\n}\n\nexport type MdxLevelType =\n    \"date\" |\n    \"time\"\n    ;\n\nexport type MdxLevelSubType =\n    \"YEAR\" |\n    \"HALF_YEAR\" |\n    \"QUARTER\" |\n    \"MONTH\" |\n    \"WEEK\" |\n    \"DAY\" |\n    \"DAY_MONTH\" |\n    \"DAY_YEAR\" |\n    \"HOUR\" |\n    \"HALF_HOUR\" |\n    \"QUARTER_HOUR\" |\n    \"MINUTE\" |\n    \"SECOND\"\n    ;\n\nexport interface IMdxAxisSeriesInfo {\n\n    hierarchyName?: string;\n    hierarchyUN?: string;\n    hierarchyType?: string;\n\n    /**\n     * A single level name is being specified in the guts for all the axis values.\n     */\n    levelUN?: string;\n    levelName?: string;\n    levelCaption?: string;\n    levelType?: MdxLevelType;\n    levelSubType?: MdxLevelSubType;\n\n    /**\n     * The unique name of the default member of the dimension.\n     */\n    defaultMemberUN?: string;\n    defaultMemberName?: string;\n    defaultMemberCaption?: string;\n    defaultMemberKey?: string;\n}\n\nexport interface EntityItem {\n\n    uniqueName: string;\n    // uniqueNameCS: boolean;\n\n    key?: any;\n\n    name: string;\n    caption: string;\n\n    parentUN?: string;\n    // parentUNCS?: boolean;\n\n    hierUN?: string;\n\n    selected?: boolean;\n    empty?: boolean;\n\n    tupleUNames?: string[];\n}\n\nexport interface TidyCellError {\n    errorCode: string;\n    errorDescription: string;\n}\n\n/**\n * This is produced by a hit (click) event\n *\n * it might actually 'select' one or multiple rows in a Tidy table (e.g. all rows for [Time].[2010])\n * it can be defined using one or multiple TidyColumns ( kinda forEachMatchingRow)\n *\n * uniqueNames are used so it survives drill-downs, filter or new queries, in this\n * scenario a coordinate might not longer match any rowIdx\n */\nexport interface ITidyTableSelection {\n    /**\n     * Fired event value. Arrays are combined into a single event.\n     */\n    items: EntityItem[];\n}\n\nexport enum SelectionBehaviour {\n    /**\n     * Clear the event value. Default behaviour.\n     */\n    CLEAR_EVENT = \"CLEAR_EVENT\",\n\n    /**\n     * Select all items in the filter.\n     */\n    SELECT_ALL = \"SELECT_ALL\",\n\n    /**\n     * Easy to guess\n     */\n    SELECT_FIRST = \"SELECT_FIRST\",\n\n    SELECT_LAST = \"SELECT_LAST\",\n\n    /**\n     * Select no items in the filter and clear the event.\n     */\n    SELECT_NONE = \"SELECT_NONE\",\n\n    /**\n     * Fire the default member. The selection remains empty.\n     */\n    MDX_DEFAULT = \"MDX_DEFAULT\",\n\n    /**\n     * Fire the empty set in the event. The selection remains empty.\n     */\n    EMPTY_SET = \"EMPTY_SET\",\n\n    /**\n     * The filter can not be empty. The click is canceled. If no initial selection, the first value is used.\n     */\n    NOT_ALLOW_EMPTY = \"NOT_ALLOW_EMPTY\",\n}\n\nexport enum SortingType {\n    ASCENDING = 'ASCENDING',\n    DESCENDING = 'DESCENDING',\n    KEEP_ORDER = \"KEEP_ORDER\"\n}\n\nexport interface HistogramBucket {\n    /**\n     * Bucket start range. Undefined = -Infinity.\n     */\n    from?: number;\n\n    /**\n     * Bucket end range. Undefined = Infinity.\n     */\n    to?: number;\n\n    /**\n     * The name of the bucket\n     */\n    name?: string;\n}\n\nexport interface HistogramData extends HistogramBucket {\n    /**\n     * Number of values that fall in the range [from, to).\n     */\n    count: number;\n\n    /**\n     * Row indices where the value falls in the bucket\n     */\n    rows: number[];\n}\n\nexport interface HistogramOptions {\n    /**\n     * The number of bins to use in the histogram or an object with custom bins. Default = 10.\n     *\n     * If bins is a number, then the algorithm generates the bins. The included endpoint of the bin is rounded with\n     * a precision of 1e10 in the direction that makes the bin larger.\n     */\n    bins: number | HistogramBucket[];\n\n    /**\n     * The type of interval. Default = RIGHT_CLOSED.\n     */\n    intervalType: TidyHistogramBucketType;\n\n    /**\n     * If true, put the minimum value in the first bucket if intervalType = (from, to] or put the maximum value\n     * in the last bucket if intervalType = [from, to).\n     * If false, exclude the minimum or maximum value in the above scenario.\n     * Default = true.\n     */\n    includeEndPoints: boolean;\n\n\n}\n\nexport enum InterpolationType {\n    NONE = 'none',\n    RGB = 'rgb',\n    HCL = 'hcl',\n    HSL = 'hsl',\n    LAB = 'lab'\n}\n\nexport enum InterpolationAppliedTo {\n    COLUMNS = \"COLUMNS\",\n    ROWS = \"ROWS\",\n    TABLE = \"TABLE\"\n}\n\nexport enum SortingMethod {\n    NONE = \"NONE\",\n    COLUMN = \"COLUMN\"\n}\n\nexport interface ConvertToTypeParseSettings {\n    locale?: string;\n    dateFormat?: string;\n    listSeparator?: string;\n}\n\n/**\n * Interface for adding a single row to a tidy table\n */\nexport interface ITotalRowValues {\n\n    /**\n     * Keys as column names.\n     */\n    totalValues: Record<string, ITidyColumnAddValueInsert>;\n\n    /**\n     * Keys as column names.\n     */\n    totalTexts: Record<string, ITidyColumnAddValueInsert | ITidyColumnAddValueCopyRow>;\n\n}\n\n/**\n * If we have (date)times available, then\n * YES -> always use them\n * NO -> never use them\n * AUTO -> use them if the level is a date or datetime (in MDX, these are levels of type DAY, HOUR, MINUTE, SECOND).\n */\nexport enum UseDatetimeAxis {\n    YES = \"YES\",\n    NO = \"NO\",\n    AUTO = \"AUTO\"\n}\n\nexport interface ITidyColumnIndex {\n    /**\n     * Name of the node in the index\n     */\n    name: string;\n\n    /**\n     * Display label for index\n     */\n    label: string;\n\n    /**\n     * Unique name of mdx member\n     */\n    mdxUniqueName?: string;\n\n    /**\n     * Level of mdx member\n     */\n    mdxLevel?: string;\n}\n\nexport interface WidgetTidySelectionOptions {\n    /**\n     * If true, the widget responds to selection events.\n     */\n    isSelectionActive: boolean;\n\n    /**\n     * User can set the selection mode in the interaction-settings.\n     */\n    selectionMode: SelectionMode;\n\n    /**\n     * These columns are considered in the selection.\n     */\n    selectionGranularity?: IFormFieldGranularityItem[];\n\n    /**\n     * Behaviour when all items in the filter are selected.\n     */\n    selectionAllBehaviour?: SelectionBehaviour;\n\n    /**\n     * Behaviour when the selection is empty, e.g. when no items are selected.\n     */\n    selectionEmptyBehaviour?: SelectionBehaviour;\n\n    /**\n     * List with items in the initial selection.\n     */\n    initSelectionUserDefined?: string[] | string;\n\n    /**\n     * Column with items in the initial selection. The column has a truthy value for items that are in the initial\n     * selection.\n     */\n    initSelectionColumn?: TidyTableColumnSelector;\n\n\n    /**\n     * Initialize selection on new query\n     */\n    initSelectionOnNewQuery?: boolean;\n\n    /**\n     * Add a chip in the widget header that shows what items are selected.\n     */\n    showSelectionInWidgetHeader?: boolean;\n\n    /**\n     * Normally, the widget clears the selection if it is not anymore in the data. Enable this to keep the selection.\n     */\n    keepSelectionWhenNotInData?:boolean;\n}\n\n// Array with first value always defined. Groups consist of at least one index row.\nexport type GroupRowIndices = [number, ...number[]];\n\nexport interface TreeRowPropsTreeData {\n    rowIndex: number;\n    nodeId: string;\n    isCollapsed: boolean;\n    hasChildren: boolean;\n    isSelected: boolean;\n}\n\n/**\n * Function filtering the rows of a column / table. Returns true if the row is included, false if the row is excluded.\n */\nexport type TidyRowFilter = (rowIdx: number) => boolean;","import {ITidyColorColumn, ITidyColumn, ITidyNumericColumn} from \"./PublicTidyColumn\";\nimport {ITidyTable} from \"./PublicTidyTable\";\nimport {GroupRowIndices, IAmCharts4Data, IAmcharts4DataKey, TidyColumnsType} from \"./PublicTidyTableTypes\";\n\nexport enum ISeriesValuesType {\n    LINE,\n    COLUMN,\n    TREND,\n    DIVERGENT,\n    LEFT_SERIES,\n    RIGHT_SERIES\n}\n\n\nexport interface ISeriesValues {\n\n    type: ISeriesValuesType;\n\n    /**\n     * Value column.\n     * @see {PublicAmchartsData.TAG_VALUE}.\n     */\n    values: ITidyColumn;\n\n    /**\n     * Color column.\n     * @see {PublicAmchartsData.TAG_COLOR}.\n     */\n    colors?: ITidyColorColumn;\n\n    /**\n     * Extra values.\n     * @see {PublicAmchartsData.TAG_ADDITIONAL_VALUE}.\n     */\n    additionalValues?: ITidyColumn;\n\n    // Used to identify the parent series value col for trend columns.\n    parentValueColIdx?: number;\n\n}\n\n/**\n * Used for managing amcharts data in the Amcharts plugin. This class controls both the creation of the charts\n * data and the creation of the series of that chart.\n */\nexport class PublicAmchartsData {\n\n    public static readonly TAG_VALUE = 'v';\n    public static readonly TAG_COLOR = 'c';\n    public static readonly TAG_ADDITIONAL_VALUE = 'v2';\n\n    private readonly onValues: ISeriesValues[];\n    private readonly onAxis: ITidyColumn;\n    private readonly onLevel: ITidyColumn | undefined;\n    private readonly onGroup: ITidyColumn | undefined;\n    private readonly table: ITidyTable;\n    private readonly disableGroupRecords?: boolean;\n\n    constructor(table: ITidyTable, onValues: ISeriesValues[], onAxis: ITidyColumn, onGroup?: ITidyColumn,\n                onLevel?: ITidyColumn, disableGroupRecords?: boolean) {\n        this.onValues = onValues;\n        this.onAxis = onAxis;\n        this.onGroup = onGroup;\n        this.onLevel = onLevel;\n        this.table = table;\n        this.disableGroupRecords = disableGroupRecords;\n    }\n\n    static getSeriesId(groupKey: string, valueColIdx: number): string {\n        return groupKey + \".\" + String(valueColIdx);\n    }\n\n    /**\n     * Get the data for the chart.\n     */\n    getChartData(): IAmCharts4Data[] {\n\n        const chartValues: Record<string, ITidyColumn> = {};\n        this.onValues.forEach((value, idx) => {\n\n            /*\n            Divergent series needs to have negative values, but show a positive value when hovered. Thus, the values\n            in chart data are set to negative, but the values in the column are not.\n             */\n            let valueColumn: ITidyColumn;\n            if (value.type === ISeriesValuesType.DIVERGENT) {\n                valueColumn = value.values.mapToColumn(v => v != null ? -v : null, \"rightValue\", TidyColumnsType.NUMERIC);\n            } else {\n                valueColumn = value.values;\n            }\n\n            chartValues[String(idx) + PublicAmchartsData.TAG_VALUE] = valueColumn;\n\n            if (value.colors) {\n                chartValues[String(idx) + PublicAmchartsData.TAG_COLOR] = value.colors;\n            }\n\n            if (value.additionalValues) {\n                chartValues[String(idx) + PublicAmchartsData.TAG_ADDITIONAL_VALUE] = value.additionalValues;\n            }\n\n        });\n\n        return this.table.toAmcharts4Data(this.onAxis, chartValues, this.onGroup, this.onLevel, undefined, this.disableGroupRecords);\n\n    }\n\n    /**\n     * Create, update and remove series in the chart.\n     * @param itemControl map keeping track of current series in the chart.\n     * @param seriesControl object controlling the adding/removing/updating of series.\n     * @param firstGroupOnly only call the first group.\n     */\n    updateSeries<T>(itemControl: Map<string, T>, seriesControl: IAmchartsSeriesControl<T>, firstGroupOnly?: boolean): void {\n        const group = this.onGroup;\n        const updated = new Set<string>();\n\n        const forEachSeries = (groupKey: string, groupIdx: GroupRowIndices) => {\n            this.onValues.forEach((onValue, idx) => {\n\n                if (seriesControl.typeFilter != null && !seriesControl.typeFilter(onValue.type)) {\n                    return;\n                }\n\n                const seriesKey = PublicAmchartsData.getSeriesId(groupKey, idx);\n                let item = itemControl.get(seriesKey);\n                if (item == null) {\n                    const newItem = seriesControl.create(seriesKey, groupKey,\n                        seriesKey + PublicAmchartsData.TAG_VALUE,\n                        seriesKey + PublicAmchartsData.TAG_COLOR, onValue);\n                    itemControl.set(seriesKey, newItem);\n                    item = newItem;\n                }\n\n                seriesControl.update(seriesKey, groupKey, item, onValue, groupIdx);\n                updated.add(seriesKey);\n\n            });\n        };\n\n        if (group != null && !this.disableGroupRecords) {\n            const index = group.groupBy(true);\n            if (firstGroupOnly) {\n                const groupIdx = index.values().next();\n                if (!groupIdx.done) {\n                    const firstIndex = groupIdx.value[0];\n                    const groupKey = group.getAmcharts4GroupKey(firstIndex);\n                    forEachSeries(groupKey, groupIdx.value);\n                }\n            } else {\n                index.forEach(groupIdx => {\n                    const groupKey = group.getAmcharts4GroupKey(groupIdx[0]);\n                    forEachSeries(groupKey, groupIdx);\n                });\n            }\n        } else {\n            const groupKey = IAmcharts4DataKey.NULL;\n            forEachSeries(groupKey, [0]);\n        }\n\n        itemControl.forEach((item, key) => {\n            if (!updated.has(key)) {\n                itemControl.delete(key);\n                seriesControl.remove(item);\n            }\n        });\n    }\n\n    getAxis(): ITidyColumn {\n        return this.onAxis;\n    }\n\n    getLevel(): ITidyColumn | undefined {\n        return this.onLevel;\n    }\n\n    getGroup(): ITidyColumn | undefined {\n        return this.onGroup;\n    }\n\n    /**\n     * Return the nth value column.\n     * @param idx n\n     */\n    getValueColumn(idx: number): ITidyNumericColumn {\n        return this.onValues[idx].values;\n    }\n\n    getValueColumns(): ITidyNumericColumn[] {\n        return this.onValues.map(i => i.values);\n    }\n\n    /**\n     * Call a function on each series, and its column\n     * @param itemControl map keeping track of current series in the chart.\n     */\n    forEachSeries<T>(itemControl: Map<string, T>, callback: (col: ITidyNumericColumn, seriesId: string, series: T) => void): void {\n\n        this.updateSeries(itemControl, {\n            create: () => {\n                throw Error(\"SNBH series cannot be created\");\n            },\n            update: (seriesId, _groupKey, series, sValue, _groupRows) => {\n                callback(sValue.values, seriesId, series);\n            },\n            remove: () => {\n                throw Error(\"SNBH series cannot be removed\");\n            },\n            typeFilter: type => type !== ISeriesValuesType.TREND\n        }, true);\n    }\n\n    /**\n     * Returns the first item in the onValues argument of the constructor.\n     */\n    getFirstValue(): ITidyNumericColumn {\n        return this.onValues[0].values;\n    }\n\n    /**\n     * Returns true if and only if multiple non-trend measures are in the chart.\n     */\n    isMultiMeasure(): boolean {\n        return this.onValues.filter(i => i.type !== ISeriesValuesType.TREND).length > 1;\n    }\n\n    /**\n     * Returns the first column used for a series type.\n     */\n    getFirstColumnOfType(seriesType: ISeriesValuesType): ITidyColumn | undefined {\n        return this.onValues.find(i => i.type === seriesType)?.values;\n    }\n\n}\n\n/**\n * Controls when to add / remove / dispose / update series. This class exists because using chart.setSeries removes\n * trend-series. This class handles the adding and removing of series and keeps the series in the order of the data.\n */\nexport interface IAmchartsSeriesControl<T> {\n\n    /**\n     * If defined, only call create, update and remove where `typeFilter(type)` returns true.\n     */\n    typeFilter?: (type: ISeriesValuesType) => boolean,\n\n    /**\n     * Create a new series if it is not in itemControl. Use 'add' to add it to the chart.\n     * @param seriesId unique id of the series\n     * @param groupKey key for the group by (if defined). If not defined, use _\n     * @param valueKey series value dataField\n     * @param fillKey series fill dataField\n     * @param sValue the onValues part used.\n     */\n    create: (seriesId: string, groupKey: string, valueKey: string, fillKey: string, sValue: ISeriesValues) => T,\n\n    /**\n     * Update a series.\n     * @param seriesId unique id of the series\n     * @param groupKey key for the group by (if defined). If not defined, use _\n     * @param series the charts series to update\n     * @param sValue the onValues part used\n     * @param groupRows row indices of the group. Length >= 1.\n     */\n    update: (seriesId: string, groupKey: string, series: T, sValue: ISeriesValues, groupRows: GroupRowIndices) => void,\n\n    /**\n     * Destroy an item. Called when the item can be cleared from memory. E.g., dispose() on the series.\n     */\n    remove: (item: T) => void,\n\n}","export type PaperSizeName = \"A5\" | \"A4\" | \"A3\" | \"B5\" | \"B4\" | \"Letter\" | \"Legal\" | \"Ledger\" | \"JIS-B5\" | \"JIS-B4\";\nexport type PaperOrientation = \"portrait\" | \"landscape\";\nexport type PaperSizeUnits = \"px\" | \"mm\" | \"cm\" | \"in\";\n\nexport enum CompareTextInterpretationType {\n    MORE = \"more=better\",\n    LESS = \"less=better\",\n    NONE = \"none\"\n}\n\nexport enum TargetTextPosition {\n    DISABLE = \"DISABLE\",\n    ALIGN_TOP = \"ALIGN_TOP\",\n    ALIGN_BOTTOM = \"ALIGN_BOTTOM\",\n}\n\nexport enum TargetTextIconSet {\n    TREND_ICONS = \"TREND_ICONS\",\n    TRIANGLE_ICONS = \"TRIANGLE_ICONS\",\n}\n\nexport enum SparkChartType {\n    LINE = 'line',\n    COLUMN = 'column'\n}\n\nexport enum SparklinePosition {\n    BELOW_VALUE = \"BELOW_VALUE\",\n    RIGHT_OF_VALUE = \"RIGHT_OF_VALUE\"\n}\n\nexport enum QueryType {\n    MDX = \"mdx\",\n    SQL = 'sql',\n    EMBEDDED = 'embedded',\n    HTTP_CSV = \"HTTP_CSV\"\n}\n\n/**\n * Set to `true` to hide the icon.\n */\nexport interface IWidgetBoxIconsDefinition {\n    disableQueryFilter?: boolean;\n    disableQueryCellOnError?: boolean;\n    disableQueryMaxRowsReached?: boolean;\n    // Disable the drilldown back button.\n    disableDrilldown?: boolean;\n    disableHelp?: boolean;\n    disableInteractionSwitch?: boolean;\n}\n\nexport type IUserMenuOptions =\n    'editGadget' |\n    'editWidget' |\n    'deleteWidget' |\n    'deleteGadget' |\n    'convertGadgetToWidget' |\n    'addEventToAllQueries' |\n    'migrateWidget' |\n    'maximize' |\n    'clearSorting' |\n    'showData' |\n    'resetDrilldown' |\n    'clearState' |\n    'clearSelection' |\n    'toInitialSelectionOnEditing' |\n    'toInitialSelection' |\n    'export_xls' |\n    'export_csv' |\n    'export_png' |\n    'export_svg';\n\n\n","import {LazyTreeViewProps} from \"./LazyTreeView\";\nimport {ITidyTable} from \"./PublicTidyTable\";\nimport {ITidyTableTransformation} from \"./ITidyTableTransformation\";\nimport {Theme} from \"@mui/material/styles\";\nimport {ThemeFormatters, ThemeTextFormatter} from \"./PublicTheme\";\nimport {ITidyColumn, ITidyNumericColumn} from \"./PublicTidyColumn\";\nimport {IPublicWidgetTemplateDefinition} from \"./PublicTemplate\";\nimport {ITidyMath} from \"./PublicTidyMath\";\nimport {ILogger} from \"@ic3/common-api\"\nimport {AppNotification} from \"./INotification\";\nimport {WidgetNotificationHandler} from \"./IcEvent\";\nimport {TidyRowFilter} from \"./PublicTidyTableTypes\";\nimport {FormFieldTidyTableExprType} from \"./PublicTemplateForm\";\n\nexport enum WidgetRenderLayoutStatus {\n    RENDERING = \"RENDERING\",\n    RENDERED = \"RENDERED\",\n}\n\nexport enum WidgetWarningSeverity {\n    WARNING,\n    ERROR\n}\n\nexport enum IContentMessageType { info, error}\n\nexport interface IPublicContext {\n\n    logger(): ILogger;\n\n    /**\n     * It is the reporting console.\n     */\n    isAppConsole(): boolean;\n\n    /**\n     * It is the dashboard viewer.\n     */\n    isAppReportViewer(): boolean;\n\n    /**\n     * Is an application in viewer mode.\n     */\n    isAppReportAppViewer(): boolean;\n\n    /**\n     * Is an application or dashboard in viewer mode.\n     */\n    isAppViewer(): boolean;\n\n    /**\n     * It is the dashboard editor.\n     */\n    isAppReportEditor(): boolean;\n\n    /**\n     * It is the dashboard editor with the dashboard in preview mode.\n     */\n    isAppReportEditorPreview(): boolean;\n\n    /**\n     * It is the application editor.\n     */\n    isAppReportAppEditor(): boolean;\n\n    /**\n     * It is the gadget editor.\n     */\n    isAppGadgetEditor(): boolean;\n\n    /**\n     * React, returns true when loaded\n     */\n    useGoogleMapHook(): boolean | Error;\n\n    getTheme(): Theme;\n\n    /**\n     * Return the formatter for the current user's locale.\n     */\n    getThemeFormatter(): ThemeFormatters;\n\n    getUserName(): string;\n\n    getReportName(): string;\n\n    getReportPath(): string;\n\n    getReportFolderName(): string;\n\n    getReportLocale(): string;\n\n    /**\n     * @param format Formatter. Defaults to `defaultNumber` from the theme.\n     */\n    getNumberFormatter(format: ThemeTextFormatter | null | undefined): (value: any | undefined) => string;\n\n    /**\n     * @param format Formatter. Defaults to `defaultDate` or `defaultDatetime` from the theme.\n     */\n    getDateFormatter(format: ThemeTextFormatter | null | undefined): (value: any | undefined) => string;\n\n    /**\n     * translate the content of a report (the title of widgets, content of some widgets...). This does use another file\n     *\n     * aka content localization\n     */\n    translateContent(content: string, ...args: any[]): string;\n\n    /**\n     * localized report application tags (e.g. edit, write, save.. )\n     */\n    localize(name: string, ...args: any[]): string;\n\n    /**\n     * localized report application error tags\n     */\n    localizeError(name: string, ...args: any[]): string;\n\n    /**\n     * Localization for transformations\n     */\n    localizeTransformationCaption(template: ITidyTableTransformation<any>): { info: string, description?: string };\n\n    localizeFormField(pluginId: string, widgetTemplateId: string, name: string, ...args: any[]): [string, string | undefined, string | undefined];\n\n    /**\n     * markdown to sanitized html\n     */\n    markdownToHtml(markDown: string): string;\n\n    /**\n     * A bunch of mathematical functions related to the tidy table.\n     */\n    tidyMath(): ITidyMath;\n\n    /**\n     * Create an expression from a field.\n     *\n     * @param expression typically coming from a widget field so it cannot be null if there is a default value.\n     * To prevent usage of the default, pass a string with a single space to make this method return undefined.\n     * @param selectedColumns get the row of these columns using `_rowOfSelectedColumns` or `_selectedColumns`.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     */\n    createExpression<T extends FormFieldTidyTableExprType>(fieldType: T, field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter):\n        T extends \"tidyTableColorRowExpr\" | \"tidyTableScaleRowExpr\" | \"tidyTableHtmlRowExpr\" | \"tidyTableNumericRowExpr\" | \"tidyTableStringRowExpr\" | \"tidyTableTextRowExpr\" ? ((rowIdx: number) => string) | undefined : (() => string) | undefined;\n\n    /**\n     * Not in widget public context because of transformation not applied from a widget context always.\n     *\n     * @param expression typically coming from a widget field so it cannot be null if there is a default value.\n     * To prevent usage of the default, pass an \"empty\" string that makes this method returns\n     * undefined.\n     * @param selectedColumns get the row of these columns using `_rowOfSelectedColumns` or `_selectedColumns`.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableRowTextExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): ((rowIdx: number) => string) | undefined;\n\n    /**\n     * Not in widget public context because of transformation not applied from a widget context always.\n     *\n     * @param expression typically coming from a widget field so it cannot be null if there is a default value.\n     * To prevent usage of the default, pass an \"empty\" string that makes this method returns\n     * undefined.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableTextExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, isRowSelected?: TidyRowFilter): (() => string) | undefined;\n\n    /**\n     * Not in widget public context because of transformation not applied from a widget context always.\n     *\n     * @param expression typically coming from a widget field so it cannot be null if there is a default value.\n     * To prevent usage of the default, pass an \"empty\" string that makes this method returns\n     * undefined.\n     * @param selectedColumns get the row of these columns using `_rowOfSelectedColumns` or `_selectedColumns`.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableRowMarkdownExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): ((rowIdx: number) => string) | undefined;\n\n    /**\n     * Not in widget public context because of transformation not applied from a widget context always.\n     *\n     * @param expression typically coming from a widget field so it cannot be null if there is a default value.\n     * To prevent usage of the default, pass an \"empty\" string that makes this method returns\n     * undefined.\n     * @param selectedColumns get the row of these columns using `_rowOfSelectedColumns` or `_selectedColumns`.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableMarkdownExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): (() => string) | undefined;\n\n    /**\n     * Not in widget public context because of transformation not applied from a widget context always.\n     *\n     * @param expression typically coming from a widget field so it cannot be null if there is a default value.\n     * To prevent usage of the default, pass an \"empty\" string that makes this method returns\n     * undefined.\n     * @param selectedColumns get the row of these columns using `_rowOfSelectedColumns` or `_selectedColumns`.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableRowNumericExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): ((rowIdx: number) => number | undefined) | undefined;\n\n    /**\n     * same as  createTableRowNumericExpr but returning a string\n     * @param selectedColumns get the row of these columns using `_rowOfSelectedColumns` or `_selectedColumns`.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableRowNumericStringExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): ((rowIdx: number) => string | undefined) | undefined;\n\n    /**\n     * @param selectedColumns get the row of these columns using `_rowOfSelectedColumns` or `_selectedColumns`.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableScaleRowNumericExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): ((rowIdx: number) => number | undefined) | undefined;\n\n    /**\n     * Not in widget public context because of transformation not applied from a widget context always.\n     *\n     * @param expression typically coming from a widget field so it cannot be null if there is a default value.\n     * To prevent usage of the default, pass an \"empty\" string that makes this method returns\n     * undefined.\n     * @param selectedColumns get the row of these columns using `_rowOfSelectedColumns` or `_selectedColumns`.\n     * @param isRowSelected function for usage with `totalSelectedOrTotal`. Use tableInter.isSelected(rowIdx).\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableNumericExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): (() => number | undefined) | undefined;\n\n    /**\n     * same as  createTableNumericExpr but returning a javascript object\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableNumericStringExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): (() => any | undefined) | undefined;\n\n\n    /**\n     * same as  createTableNumericExpr but returning a javascript object\n     *\n     * @deprecated will be removed in version >=9.1.0. Use `createExpression` instead.\n     */\n    createTableNumericJSExpr(field: string, table: ITidyTable, currentColumn: ITidyColumn | undefined, expression: string | undefined, selectedColumns: ITidyColumn[] | undefined, isRowSelected?: TidyRowFilter): (() => any | undefined) | undefined;\n\n    /**\n     * Event methods that do not depend on a Table\n     *\n     * @see ITidyTableInteractionEvent for more\n     */\n\n    /**\n     * actionName if the action is bound to a channel, clears the event (has no value)\n     */\n    fireClearEventName(actionName: string): void;\n\n    /**\n     * actionName if the action is bound to a channel, send an Mdx Event (value,mdx)\n     */\n    fireMdxEventName(actionName: string, value: string, mdx: string): void;\n\n    /**\n     * Used for publishing app notifications (e.g., print the report).\n     */\n    fireAppNotification(notification: AppNotification): void;\n\n    formatDate(value: Date | string | undefined | null, format: ThemeTextFormatter | null | undefined, locale?: string): string;\n\n    formatNumber(value: number | string | undefined | null, format: ThemeTextFormatter | null | undefined, locale?: string): string;\n\n    /**\n     * A shortcut for formatNumber( theme.formatter.defaultNumber )\n     */\n    formatAmount(value: number | string | undefined | null, locale?: string): string;\n\n    /**\n     * A shortcut for formatNumber( theme.formatter.defaultPercent )\n     */\n    formatPercent(value: number | string | undefined | null, locale?: string): string;\n\n}\n\nexport interface IWidgetStableContext extends IPublicContext {\n\n    getTemplateId(): string;\n\n    getNsId(): string;\n\n    getWidgetId(): string;\n\n    getTemplateId(): string;\n\n    isPrintingMode(): boolean;\n\n    renderWidgetContentMessage(type: IContentMessageType, message: string): any;\n\n    renderLazyTreeView<T>(props: LazyTreeViewProps): T;\n\n    wrapWithTooltip(tooltip: string | undefined, wrappedElement: React.ReactElement): React.ReactElement;\n\n    onWidgetRenderStatusChange(status: WidgetRenderLayoutStatus): void;\n\n    /**\n     * Event methods that do not depend on a Table\n     *\n     * @see ITidyTableInteractionEvent for more\n     */\n\n    /**\n     * returns true if the actionName in bound to a channel\n     */\n    firesEvent(actionName: string): boolean;\n\n    /**\n     * actionName if the action is bound to a channel, clears the event (has no value)\n     */\n    fireClearEvent(actionName: string): void;\n\n    /**\n     * actionName if the action is bound to a channel, send an Mdx Event (value,mdx)\n     */\n    fireMdxEvent(actionName: string, value: string, mdx: string): void;\n\n    fireMdxEvents(events: { actionName: string, value: string, mdx: string }[]): void;\n\n    /**\n     * Cypress testing purpose, after a rendering of the chart\n     */\n    incrementWidgetContentRendering(): void;\n\n    getWidgetTemplateDefinition(qualifiedId: string): IPublicWidgetTemplateDefinition<any>;\n\n    resolveWidgetTemplateDefinition(definition: IPublicWidgetTemplateDefinition<any>): Promise<IPublicWidgetTemplateDefinition<any>>;\n\n    /**\n     * React -> combines useReduxOwnProps and setReduxOwnProps with a similar syntax to Redux.useState\n     *\n     * Note it's NOT the initial value but value if undefined\n     */\n    useReduxOwnPropsState<T>(fieldName: string, valueIfUndefined?: T): [T, (newValue: T | undefined) => void];\n\n    /**\n     * React -> useSelector on widgetOwnProps[fieldName]\n     */\n    useReduxOwnProps<T>(fieldName: string): T;\n\n    /**\n     * Redux -> set in Redux value in widgetOwnProps[fieldName]\n     */\n    setReduxOwnProps(fieldName: string, value: any): void;\n\n\n    /**\n     * Google map\n     */\n\n    /**\n     * React only, like an use function\n     *\n     * Loads Google map library with the API key as set\n     *\n     * return\n     *          true when the google map is ready (lib loaded)\n     *          error when\n     */\n    reactUseGoogleMap(): boolean | Error;\n\n    /**\n     * React only, like an use function\n     *\n     * reactUseGoogleMap() + rendered the map into the div referenced by ref with mapOptions\n     *\n     * @param mapOptions google.maps.MapOptions\n     * @param ref ref React.RefObject<HTMLDivElement>\n     *\n     * return\n     *          undefined if loading\n     *          {map} google.maps.Map instance when loaded\n     *          {error} if loaded on error\n     */\n    reactUseGoogleMapPlus(mapOptions: any, ref: any): undefined | { map?: any; error?: Error };\n\n    /**\n     * Returns latitude and longitude with the same logic as for internal maps\n     *\n     *\n     */\n    getMapCoordinates(table: ITidyTable): [ITidyNumericColumn, ITidyNumericColumn] | [];\n\n    getGoogleMapRenderedDelayMS(): number;\n\n    /**\n     * Displays an warning icon in the widget header showing the warning when the user hovers the icon.\n     * Be sure to clear all warnings before rendering using {@see widgetClearWarnings}\n     */\n    addWidgetWarning(warning: string, severity?: WidgetWarningSeverity): void;\n\n    /**\n     * Clear the warnings in the widget.\n     */\n    widgetClearWarnings(): void;\n\n    /**\n     * Notification\n     *\n     * like a listener on the components, for React the implementation uses a useEffect, it should\n     * NOT be called conditionally.\n     */\n    useNotification(notifications: WidgetNotificationHandler | WidgetNotificationHandler[], deps: ReadonlyArray<unknown> | undefined): void;\n\n    useUserMenu(handler: (userMenu: string) => any | void, deps: ReadonlyArray<unknown> | undefined): void;\n\n    /**\n     * doExport callback is called on each exportToExcel from the userMenu of the widget\n     *\n     * if the callback returns a tidyTable, this table will be exported\n     * if undefined is returned no further action\n     *\n     * disabled === true, the doExport function is not used\n     */\n    onExportToExcel(doExport: undefined | (() => ITidyTable | undefined | null), disabled?: boolean): void;\n\n    /**\n     * Export the widget data to Excel or CSV.\n     * @param table data in the widget (with transformations applied).\n     * @param asPivotForExcel If true, convert hierarchical structures to flat columns. Default = false for Excel\n     * exports and true for CSV exports.\n     * @param rows filter the table by these rows before exporting.\n     * @param event object. If `event.format = 'csv'` then this method makes a CSV export. Default is Excel.\n     * `event.value` (optional) is the file name of the export.\n     */\n    exportToExcel(table: ITidyTable, asPivotForExcel: boolean | undefined, rows: number[] | undefined, event?: {\n        format?: 'csv' | 'xlsx';\n        value?: string;\n    }): void;\n\n    useUserMenuWidth(): number | undefined;\n\n    /**\n     * Get the (translated) file name for exporting. Does not include file extension. Method returns 'export-file'\n     * if no file name is found.\n     * @param defaultName if not undefined, method returns this.\n     * @param defaultFileName\n     */\n    getExportFileName(defaultFileName?: string): string;\n\n    /**\n     * Returns the report name of the report defining this widget (i.e. could be the embedding)\n     */\n    getDefiningReportName(): string;\n\n    /**\n     * Returns the report path of the report defining this widget (i.e. could be the embedding)\n     */\n    getDefiningReportPath(): string;\n\n    /**\n     * Returns the report folder name of the report defining this widget (i.e. could be the embedding)\n     */\n    getDefiningReportFolderName(): string;\n\n}\n\nexport interface IWidgetPublicContext extends IPublicContext {\n    /**\n     * Context unlikely to change during the lifecycle of a widget\n     * more appropriate to use in a React hook context.\n     */\n    getStableContext(): IWidgetStableContext;\n\n    /**\n     * Get the width of the widget box in pixels.\n     */\n    getWidgetWidth(): number | undefined;\n\n    /**\n     * Get the height of the widget box in pixels.\n     */\n    getWidgetHeight(): number | undefined;\n\n    getWidgetPageNb(): number;\n\n    /**\n     * Returns true if and only if the widgets has a header (from the chart box settings).\n     */\n    widgetHasHeader(): boolean;\n\n    getBoxSettings(): IPublicWidgetBoxSettings;\n\n    /**\n     * True if and only if the widget is invisible, e.g., it has display none.\n     */\n    isInvisible(): boolean;\n\n}\n\nexport interface IPublicWidgetBoxSettings {\n    widgetId: string;\n    waitingEventOrResult?: string;\n    emptyResult?: string;\n}\n\nexport interface IWidgetEditorPublicContext {\n\n    /**\n     * The variants available in the theme for the edited widget.\n     */\n    getWidgetVariantIds(componentName?: string): string[];\n\n}","import {ITidyTable} from \"./PublicTidyTable\";\nimport {ITidyTableInteraction} from \"./PublicTidyTableInteractions\";\nimport {IWidgetPublicContext} from \"./PublicContext\";\nimport {FormFieldObject, FormFields, IFormColumnChooserFieldDef} from \"./PublicTemplateForm\";\nimport {IWidgetVariantManager} from \"./IWidgetVariantManager\";\nimport {ReactElement} from \"react\";\nimport {Theme} from \"@mui/material/styles\";\nimport {WidgetTemplateChartOptions, WidgetTemplateIDs} from \"./PublicTemplates\";\nimport {ChartTemplateDataMapping, IFormFieldGranularityItem} from \"./PublicTidyTableTypes\";\nimport {PositionModeOptions, ResizingConstraintOptions} from \"./theme/ThemeWidgetBox\";\nimport {QueryType} from \"./ITypes\";\nimport {ILogger} from \"@ic3/common-api\"\n\nexport interface IRectanglePosition {\n    top: number;\n    left: number;\n}\n\nexport interface IRectangleSize {\n    height: number;\n    width: number;\n}\n\nexport interface IRectangle extends IRectanglePosition, IRectangleSize {\n}\n\n/**\n * Widget box configuration when the widget is rendered in the responsive grid layout.\n * This is used instead of the regular rectangle and positionOrder configuration.\n */\nexport interface IWidgetBoxGridLayoutInfo {\n\n    /**\n     * Handy (same as in IWidgetDefinition).\n     */\n    widgetId: string;\n\n    /**\n     * The responsive grid layout is made of a single flex (row) box.\n     * The index in the only row of the 'flex' layout.\n     */\n    position: number;\n\n    /**\n     * A part of the total number of columns in the 'flex' layout.\n     */\n    colSpan: number;\n\n    /**\n     * The actual physical height.\n     */\n    height: number;\n\n    /**\n     * The group (i.e., nested grid layout) this widget belongs to.\n     */\n    group?: IWidgetBoxGroupGridLayoutInfo;\n\n}\n\n/**\n * Support for nested grid layout : a grid item can be a group of widgets rendered as a grid layout.\n *\n * The actual number of columns of this nested grid layout is the colSpan of the group seen as a regular\n * item of the containing grid layout. The group inherit both the column and row spacing of its containing\n * grid layout and has no margin.\n *\n * For the sake of simplicity a group cannot contain a group.\n */\nexport interface IWidgetBoxGroupGridLayoutInfo {\n\n    groupId: string;\n\n    /**\n     * A group is a regular item of its containing grid layout.\n     * @see IWidgetBoxGridLayoutInfo\n     */\n    position: number;\n\n    /**\n     * A group is a regular item of its containing grid layout.\n     * @see IWidgetBoxGridLayoutInfo\n     */\n    colSpan: number;\n\n    /**\n     * A group is a regular item of its containing grid layout.\n     * @see IWidgetBoxGridLayoutInfo\n     */\n    height: number;\n\n}\n\nexport interface IWidgetLayoutData {\n\n    /**\n     * Keep box header settings for additional (i.e., generated) pages.\n     */\n    keepBoxHeader: boolean;\n\n    /**\n     * Keep box header settings for additional (i.e., generated) pages.\n     */\n    keepTableHeader: boolean;\n\n    startRow: number;\n    endRow: number;\n\n}\n\nexport interface IWidgetLayoutInfo extends IRectangle {\n\n    pageNb: number;\n\n    positionOrder: number;\n\n    gridLayoutInfo?: IWidgetBoxGridLayoutInfo;\n\n    data?: IWidgetLayoutData;\n\n    resizingConstraint?: ResizingConstraintOptions;\n\n    positionMode?: PositionModeOptions;\n\n    /**\n     * When _ printing _, the widget's layout has been converted and this scale has been applied to compute\n     * the new widget size.\n     */\n    widgetContentScaled?: number;\n\n}\n\nexport type IPublicWidgetTemplateDefinition<T extends FormFieldObject> =\n    IPublicWidgetReactTemplateDefinition<T> | IPublicWidgetJsTemplateDefinition<T>;\n\nexport enum IWidgetTemplateMdxBuilderAxisPropsConstraint {\n    DateType = 'DateType',\n    GeoLatLong = 'GeoLatLong',\n    GeoIso2Code = 'GeoIso2Code',\n}\n\nexport interface IWidgetTemplateMdxBuilderAxisProps {\n\n    /**\n     * Unique name used in the UI and if mdxAxisName not defined for building the query.\n     * If name is 'rows' for example, then in the query it will use 'ON \"rows\"'.\n     */\n    name: string,\n\n    /**\n     * The axis can be empty\n     */\n    isOptional?: true;\n\n    /**\n     * All axes with the same (not null) value for mdxAxisName are put as a tuple on the same axis. And the roles are\n     * comma separated.\n     */\n    mdxAxisName?: string,\n\n    /**\n     * Disable empty\n     */\n    disableNonEmpty?: true;\n\n    /**\n     * For filters add lazy load feature to the axis.\n     */\n    withLazySearch?: true;\n\n    /**\n     * Allow only a single member\n     */\n    singleMember?: true,\n\n    /**\n     * Allow a multiple hierarchies to build a crossjoin\n     */\n    multipleHierarchy?: true,\n\n    /**\n     * Additional constraints for the set/members\n     */\n    constraint?: IWidgetTemplateMdxBuilderAxisPropsConstraint;\n\n    decoration?: {\n        with?: string,\n        set: string,\n    }\n\n    /**\n     * Show the mdxAxis names in this order in the builder\n     */\n    showOrder?: number;\n\n    /**\n     * Allows to overwrite the ON \"rows\"in the MDX query  (to be used on modifyDefinition function)\n     */\n    overwriteAxisName?: string;\n\n    /**\n     * This is used to give end customers information on the limit of the query (column have 1000 by default, rows 100'000)\n     */\n    infoForSizing?: \"TIDY_ROW\" | \"TIDY_COL\";\n\n}\n\nexport interface IWidgetTemplateMdxBuilderMapping {\n\n    /**\n     * The order determines the order of the statements in the query. E.g., the first position is ON 0, the second ON 1,\n     * etc., where '0' and '1' are replaced by the name.\n     */\n    mdxAxis: Readonly<IWidgetTemplateMdxBuilderAxisProps[]>;\n\n    /**\n     * The generated MDX is for a filter (the cell values are not of interest).\n     */\n    mdxIsForFilter?: true;\n\n    /**\n     * The cell values are not needed.\n     */\n    withoutCellValues?: true;\n\n    /**\n     * The cell values are not needed if there is a single axis in the query.\n     */\n    withoutCellValuesSingleAxis?: true;\n\n    /**\n     * An MDX query if the builder is empty.\n     */\n    mdxQueryIfEmpty?: boolean;\n\n\n    /**\n     *  model is a IMdxQueryBuilderModel, that is not shared publicly yet\n     *\n     *  returns a modified definition or an MDX statement in a string\n     *\n     *  If we return a string (MDX Statement), the Filters are still going to be appended to the end\n     */\n    modifyDefinition?: (model: any, definition: IWidgetTemplateMdxBuilderMapping) => IWidgetTemplateMdxBuilderMapping | string,\n}\n\n/**\n * A widget that renders using React.\n *\n * @see FormFieldObject\n */\nexport interface IPublicReactChartTemplate<T extends FormFieldObject> {\n\n    /**\n     * @param data the actual result of the widget's query\n     * @param options the options (possibly edited and/or from the theme) of this widget\n     * @param header aka. widget title\n     */\n    reactElement: (data: IWidgetTemplateTidyData, options: T, header: string) => ReactElement;\n\n}\n\n/**\n * A widget that renders using plain JavaScript/TypeScript.\n *\n * @see FormFieldObject\n */\nexport interface IPublicJsChartTemplate<T extends FormFieldObject> {\n\n    /**\n     * @param data the actual result of the widget's query\n     * @param options the options (possibly edited and/or from the theme) of this widget\n     * @param header aka. widget title\n     */\n    renderJS: (data: IWidgetTemplateTidyData, options: T, header: string) => void;\n\n    renderOnResizeJS?: (data: IWidgetTemplateTidyData, options: T, header: string, info: IWidgetLayoutInfo) => void;\n\n    dispose: () => void;\n\n}\n\nexport interface IPublicWidgetReactProps<OPTIONS> {\n    wContext: IWidgetPublicContext,\n    data: IWidgetTemplateTidyData,\n    options: OPTIONS,\n    widgetHeader: string\n}\n\nexport interface IPublicErrorDefinition {\n\n    /**\n     * e.g. a user defined javascript error vs a programming error\n     */\n    expected?: boolean;\n\n    name: string;\n    args?: any[];\n\n    cause?: any;\n\n}\n\nexport interface IPublicWidgetReactMdxResultOnErrorProps {\n\n    error: IPublicErrorDefinition;\n\n}\n\n/**\n *\n *\n * @see IPublicReactChartTemplate\n * @see FormFieldObject\n */\nexport interface IPublicWidgetReactTemplateDefinition<OPTIONS extends FormFieldObject> extends IPublicCommonWidgetTemplateDefinition<OPTIONS> {\n\n    /**\n     * Deprecated: use reactEl instead.\n     */\n    jsCode?: (context: IWidgetPublicContext) => IPublicReactChartTemplate<OPTIONS>;\n\n    /**\n     * The React Hook component  (function with props as parameter)\n     */\n    reactEl?: React.FunctionComponent<IPublicWidgetReactProps<OPTIONS>>;\n\n    reactElMdxResultOnError? : React.FunctionComponent<IPublicWidgetReactMdxResultOnErrorProps>;\n\n    reactComponent: true;\n\n    /**\n     * Only the widget template meta information is required when starting the application.\n     *\n     * This method gives the opportunity for a widget template to load (Webpack) its actual jsCode logic when required.\n     * For example, AmCharts 4 widgets are loading the AmCharts 4 actual JS libraries once their rendering is actually\n     * required.\n     *\n     * @param definitionW a resolved wrapped widget (extending widget).\n     */\n    resolveDefinition?: (definitionW?: IPublicWidgetTemplateDefinition<any>) => Promise<IPublicWidgetTemplateDefinition<OPTIONS>>;\n\n}\n\n/**\n * The definition of a widget that renders using plain JavaScript/TypeScript.\n *\n * @see IPublicJsChartTemplate\n * @see FormFieldObject\n */\nexport interface IPublicWidgetJsTemplateDefinition<OPTIONS extends FormFieldObject> extends IPublicCommonWidgetTemplateDefinition<OPTIONS> {\n\n    /**\n     * Actual widget rendering logic.\n     */\n    jsCode: (context: IWidgetPublicContext, container: HTMLDivElement) => IPublicJsChartTemplate<OPTIONS>;\n\n    reactComponent?: false;\n\n    /**\n     * Only the widget template meta information is required when starting the application.\n     *\n     * This method gives the opportunity for a widget template to load (Webpack) its actual jsCode logic when required.\n     * For example, AmCharts 4 widgets are loading the AmCharts 4 actual JS libraries once their rendering is actually\n     * required.\n     *\n     * @param definitionW a resolved wrapped widget (extending widget).\n     */\n    resolveDefinition?: (definitionW?: IPublicWidgetTemplateDefinition<any>) => Promise<IPublicWidgetTemplateDefinition<OPTIONS>>;\n\n}\n\n/**\n * Definition - static - of a widget template\n */\ninterface IPublicCommonWidgetTemplateDefinition<OPTIONS extends FormFieldObject> {\n\n    /**\n     * [BETA]\n     *\n     * Introduced to tag a template as part of the AI [BETA] features.\n     * Currently used to filter out the template when AI not enabled.\n     */\n    ai?: true;\n\n    /**\n     * Used for finding the right documentation of `typeForHelp` is not defined.\n     * Determine the widget icon in the widget infos.\n     */\n    type: WidgetTemplateDefinitionType;\n\n    /**\n     * Used for finding the right documentation (override `type`).\n     */\n    typeForHelp?: WidgetTemplateDefinitionType;\n\n    /**\n     * Unique within the plugin. Must not contain any dot (this is NOT the templateId)\n     *\n     * The widget chooser is using that id to localize its name and description.\n     *\n     * <pre>\n     *     plugin-id.id.$caption, ...\n     *     plugin-id.id.$caption.description, ...\n     * </pre>\n     */\n    id: string;\n\n    /**\n     * Internal usage: while investigating lazy registration (setup upon registration).\n     */\n    debug?: string;\n\n    /**\n     * Internal usage: the wrapped pluginId.templateId (setup upon registration).\n     */\n    wrapped?: string;\n\n    /**\n     * Internal usage: pluginId.templateId (setup upon registration).\n     */\n    qualifiedId?: string;\n\n    /**\n     * Internal usage: pluginId (setup upon registration).\n     */\n    pluginId?: string;\n\n    /**\n     * Used for localization right now.\n     *\n     * The widget chooser is using that id to localize its name.\n     *\n     * <pre>\n     *     plugin-id.$groupId, ...\n     * </pre>\n     *\n     * Should you like to reuse an existing group, localize the group using an existing one:\n     *\n     * <pre>\n     *     MyPlugin.$myMaps, Maps\n     * </pre>\n     *\n     * then widgets defined ih the group \"myMaps\" of the plugin whose id=MyPlugin will be shown\n     * in the \"Maps\" group in the widget chooser.\n     */\n    groupId: string;\n\n    /**\n     * A way to ensure we do not display in the widget chooser templates that cannot\n     * be used because the rendering depends on a given theme.\n     */\n    dependsOnTheme?: string;\n\n    /**\n     * A sort of \"preview\" of the widget in the widget chooser. Providing an empty string will display a default image.\n     *\n     * <pre>\n     *     import donut from \"./images/donut.svg\";\n     *\n     *     {\n     *          image: \"donut\",\n     *     }\n     * </pre>\n     */\n    image: string;\n\n    /**\n     * No widget box decoration.\n     */\n    noDecoration?: boolean;\n\n    /**\n     * No widget *** box *** header (aka. title) is rendered. This widget template is taking care of it.\n     */\n    withoutHeader?: boolean;\n\n    /**\n     * No title is being edited/rendered.\n     */\n    withoutTitle?: boolean;\n\n    /**\n     * This widget does not require any query for rendering.\n     */\n    withoutQuery?: boolean;\n\n    withoutSelection?: boolean;\n    withoutInitialSelection?: boolean;\n    withoutDrilldown?: boolean;\n    withoutEvents?: boolean;\n\n    withoutUserMenu?: boolean;\n    withoutGlobalFilter?: boolean;\n\n    /**\n     * Otherwise the widget box is rendering a floating icon to mention some data errors.\n     */\n    handleCellsOnError?: boolean;\n\n    renderIfNotInViewport?: boolean;\n\n    /**\n     * This widget needs to render even if its query has not been executed yet. The default is false.\n     */\n    renderIfQueryNotExecuted?: boolean;\n\n    /**\n     * Whether or not this widget can expand vertically according to its actual data\n     * (e.g., table, repetition widget).\n     */\n    withOptionAutoExpand?: boolean;\n\n    /**\n     * When auto-expand applies and the layout is multi-page, this options controls whether the table\n     * header is repeating on each page.\n     */\n    withOptionAutoExpandKeepTableHeader?: boolean;\n\n    withOptionAutoExpandHeightNotDependingOnWidth?: boolean;\n\n    /**\n     * If and only if not null, hide option 'Interactions' > 'Drilldown' > 'Pivot Table Like' and set it default value to withDrilldownPivotTableLikeAs.\n     */\n    withDrilldownPivotTableLikeAs?: boolean;\n\n    /**\n     * Extra options for in the widgets user menu when in viewer mode.\n     */\n    userMenuOptions?: string[];\n\n    /**\n     * Additional widget user menu options when in editing mode.\n     */\n    userMenuOptionsOnEditing?: string[];\n\n    /**\n     * Disables the user menu option to switch between selection and drilldown\n     *\n     * E.g a Pivot table can manage both modes\n     */\n    userMenuDisableInteractionMode?: boolean;\n\n    /**\n     * This widget knows how to render a result without any data.\n     */\n    handlesNoData?: boolean;\n\n    /**\n     * This widget knows how to render when it has an empty query result.\n     */\n    handlesEmptyQuery?: boolean;\n\n    /**\n     * When the widget is just created, it shows an edit widget button. Set true here to show the widget instead.\n     */\n    canRenderWithoutUserConfig?: boolean;\n\n    /**\n     * This widget is responsible to notify its rendered status. Required with asynchronous rendering\n     * (e.g., Google maps).\n     *\n     * @see IWidgetPublicContext#onWidgetRenderStatusChange\n     */\n    handlesWidgetStatus?: boolean;\n\n    eventRoles?: ITemplateEventActionDef;\n\n    selection?: {\n        /**\n         * The default selection granularity.\n         */\n        defaultGranularityItems?: IFormFieldGranularityItem[];\n\n        /**\n         * The list of columns/roles that can be part of the selection granularity. The granularity editor shows\n         * when there are 2 or more roles.\n         */\n        granularityItems?: (table: ITidyTable) => IFormFieldGranularityItem[];\n    }\n\n    mdxBuilderSettings?: IWidgetTemplateMdxBuilderMapping;\n\n    /**\n     * Setup how to get default mappings from the table and options for this widget.\n     * If undefined, it uses the default fallback logic.\n     *\n     * Note, the mapping keys must be in lower case.\n     */\n    defaultMapping?: (data: IWidgetTemplateTidyOptions<OPTIONS>) => ChartTemplateDataMapping;\n\n    /**\n     * The meta information required for editing the widget options.\n     */\n    chartOptionsMeta?: FormFields<OPTIONS>;\n\n    /**\n     * An optional hook that allows for modifying the chart options passed as parameter.\n     * Used when extending existing widget definition.\n     */\n    hookChartOptions?: (options: any) => any;\n\n    /**\n     * When registering a variant add the following field editor meta:\n     * <pre>\n     * widgetVariant: {\n     *    fieldType: \"widgetVariant\",\n     *    localizationTag: \"variant\"   // icCube localization,\n     * },\n     * </pre>\n     */\n    registerVariants?: (theme: Theme, manager: IWidgetVariantManager) => void;\n\n    /**\n     * e.g., amCharts4.\n     * */\n    lazyLibs?: string;\n\n    /**\n     * Whether or not that component is using React for rendering.\n     */\n    reactComponent?: boolean;\n\n    /**\n     * Only the widget template meta information is required when starting the application.\n     *\n     * This method gives the opportunity for a widget template to load (Webpack) its actual jsCode logic when required.\n     * For example, AmCharts 4 widgets are loading the AmCharts 4 actual JS libraries once their rendering is actually\n     * required.\n     *\n     * @param definitionW a resolved wrapped widget (extending widget).\n     */\n    resolveDefinition?: (definitionW?: IPublicWidgetTemplateDefinition<any>) => Promise<IPublicWidgetTemplateDefinition<OPTIONS>>;\n\n    /**\n     * When defining new widgets using amCharts 4, this method registers the icCube license.\n     */\n    registerAmCharts4?: (logger: ILogger, callback: (am4core: any) => void) => void;\n\n    /**\n     * When opening \"Use Global Filter\" option on Interaction tab\n     */\n    enableUseGlobalFilter?: boolean;\n\n    /**\n     *  Returns true if the widget fires a global event at initialization (start)\n     */\n    firesGlobalEventAtStart?: (options: OPTIONS | undefined, templateDef: IPublicWidgetTemplateDefinition<OPTIONS>) => boolean;\n\n    /**\n     * Limit on the rows of the tidy result to both prevent the server and the browser to process\n     * too many items. Set to -1 to have no limit. Note that the server side is defining a limit as well.\n     * See icCube/help?ic3topic=dashboards.gettingstarted.Configuration for more details.\n     *\n     * Note: can be overridden via Dashboards options (ic3report-config.js).\n     */\n    maxTidyRowCount?: number,\n\n    /**\n     * List of supported types of query.\n     *\n     * Defaults: all of them.\n     */\n    withQueryTypes?: QueryType[];\n\n    /**\n     * Change the data to show when the user presses show-data from the widget menu.\n     * @param ownProps\n     */\n    getShowHideDataTable?: (table: ITidyTable | undefined, options: OPTIONS, ownProps: any, theme: Theme) => ITidyTable | undefined;\n\n    /**\n     * For lazy filters or widgets with selection do not clean initial Selection based on initial tidy table\n     */\n    doNotCleanSelectionOnInitialProps?: true;\n}\n\n/**\n * *********************************************************************************************************************\n *                  DO NOT CHANGE THEIR VALUE : USED FOR FINDING THE DOCUMENTATION.\n * *********************************************************************************************************************\n */\nexport enum WidgetTemplateDefinitionType {\n    Chart = \"chart\",\n    Filter = \"filter\",\n    Map = \"map\",\n    Misc = \"misc\",\n}\n\nexport interface IWidgetTemplateTidyData {\n\n    table: ITidyTable;\n    inter: ITidyTableInteraction;\n\n}\n\nexport interface IWidgetTemplateTidyOptions<T extends FormFieldObject> {\n    table: ITidyTable;\n    options: T;\n}\n\nexport interface IChartVisualizationTypedInput<T extends FormFieldObject> {\n\n    table: ITidyTable;\n    inter: ITidyTableInteraction;\n\n    options: T;\n}\n\n/**\n * The mapping meta are all the column that the user can select in the chart options. These options are checked for\n * validity. The widget generates an error if columns are selected that are not in the allowed properties, or if\n * columns are mandatory but there is no selection or fallback.\n */\nexport type IWidgetTemplateDataMappingDef = IFormColumnChooserFieldDef;\n\n/**\n * Predefined roles\n */\nexport enum TemplateEventActionNames {\n    SELECTION = 'Selection',\n    DRILLDOWN = 'Drilldown',\n\n    // Notifications\n    ADD_SELECTION = 'AddSelection',\n    FILTER_TO_DEFAULT = 'FilterToDefault',\n}\n\n/**\n *\n * Definition of the actions supported by a template\n *\n *\n * ( e.g., publish: 'onClick'  )\n */\nexport interface ITemplateEventActionDef {\n\n    /**\n     *  The actions publishing to a channel\n     */\n    publish?: string[];\n\n    /**\n     *  The actions subscribing to a channel  (only new events value are sent, state change)\n     */\n    subscribe?: string[];\n\n    /**\n     *  The actions being notified by a channel  (on each new event generated)\n     */\n    notify?: string[];\n\n    /**\n     * The actions publishing to the 'selection' channel (it's internally managed by TidyTableInteraction)\n     */\n    selectionPublish?: string;\n\n    /**\n     * The actions subscribing to the 'selection' channel\n     */\n    selectionSubscribe?: string;\n\n    /**\n     * Return true if the widget fires the event on its first render. This forces other widgets that use this event\n     * to wait before rendering.\n     */\n    isEventFiredAtStart?: (roleName: string, options: any) => boolean;\n\n}\n\nexport interface IWrappedWidgetTemplateDefinition<WIDGET extends WidgetTemplateIDs> {\n\n    /**\n     * Some free text used while registering the wrapper (e.g., error purpose).\n     */\n    readonly registrationInfo: string;\n\n    /**\n     * e.g., ic3.Table\n     */\n    readonly wrappedWidgetTemplateId: WIDGET;\n\n    /**\n     * A function generating the widget template definition based on the wrapped widget template definition.\n     */\n    readonly wrapper: (wrapped: IPublicWidgetTemplateDefinition<WidgetTemplateChartOptions[WIDGET]>) => IPublicWidgetTemplateDefinition<FormFieldObject>;\n\n}","import {IPublicContext, IWidgetEditorPublicContext} from \"./PublicContext\";\nimport {ITidyColumn} from \"./PublicTidyColumn\";\nimport * as React from \"react\";\nimport {\n    ChartTemplateDataMapping,\n    IFormFieldGranularityItem,\n    TidyColumnsType,\n    TidyTableColumnSelector\n} from \"./PublicTidyTableTypes\";\nimport {ITidyTable} from \"./PublicTidyTable\";\nimport {Theme} from \"@mui/material/styles\";\nimport {\n    AutocompleteProps,\n    AutocompleteRenderInputParams,\n    AutocompleteRenderOptionState\n} from \"@mui/material/Autocomplete\";\nimport {IFormTidyTableExprFieldDef} from \"./PublicTemplateExprForm\";\n\nexport type Hook<T, P> = {\n\n    hook: (value: T, options: P) => void;\n\n}\n\nexport function formFieldIsSelection(field: IFormFieldDef<any>) {\n    return field.group === IFormFieldGroupTypes.Selection;\n}\n\nexport interface IFormFieldDef<DEFAULT_VALUE_TYPE> {\n\n    /**\n     * The path of the field within the edited bean.\n     */\n    fieldPath: string;\n\n    /**\n     * Default: false ,\n     *\n     * If defaultValue is defined,\n     */\n    mandatory?: boolean;\n\n    /**\n     * The default value defined at field level (note: can be defined at Theme level as well).\n     */\n    defaultValue?: DEFAULT_VALUE_TYPE;\n\n    /**\n     * Override fieldPath to search for a default value in the Theme.\n     */\n    defaultValuePath?: string;\n\n    /**\n     * The optional group a field belongs too\n     *\n     * @see IFormGroupsFieldDef\n     * @see IFormBooleanFieldDef\n     */\n    group?: string;\n\n    /**\n     * When defined, the value is added as a prefix to the fieldPath to define the localization tag.\n     */\n    fieldPrefixTag?: IFormFieldGroupTypes | string;\n\n    /**\n     * When defined, this tag is used for localization\n     */\n    localizationTag?: string;\n\n    /**\n     * Default: \"string\".\n     */\n    fieldType: FormFieldType;\n\n    /**\n     * Override default localization.\n     */\n    fieldDescription?: string;\n\n    /**\n     * Default: false\n     */\n    readOnly?: boolean;\n\n    /**\n     * An optional field path value. The value of this field depends on the value of the dependsOn field.\n     */\n    dependsOn?: string | string[];\n\n    /**\n     * Clear the field if the value in the depends-on field changes.\n     */\n    dependsOnReset?: true;\n\n    /**\n     * When defined a function that returns the visibility of the field according to the dependsOn value.\n     */\n    dependsOnVisibility?: boolean | ((dependsOnValue?: any) => boolean);\n\n    valueFromDependsOnValue?: (dependsOnValue?: string) => any;\n\n    /**\n     * When defined a function that returns the visibility of the field.\n     */\n    visibility?: boolean | ((context: IWidgetEditorPublicContext) => boolean);\n\n    /**\n     * When defined the content of the field is translated (using context.translateContent).\n     *\n     * Only works for chart/widgetOptions !!\n     */\n    translated?: boolean;\n\n    /**\n     * Allow for group of fields, disabled help in form wrapper\n     */\n    disableHelpInWrapper?: boolean;\n\n    onValueSet?: (value: any) => void;\n}\n\n/**\n * The options (possibly edited and/or from the theme) of a widget.\n *\n * Aka Props\n */\nexport interface FormFieldObject {\n\n    // We need this so extends FormFieldObject works (TypeScript uses the definition of the interface not it's name).\n    readonly '0242ac130003': '0242ac130003';\n\n}\n\nexport type FormFields<T extends FormFieldObject> = {\n    [key in keyof Omit<T, '0242ac130003'>]-?:   // make the key mandatory even though the field is optional\n    (\n        // defaultValue mandatory if the field is non-nullable in T.\n        Required<T>[key] extends FormFieldObject ? { defaultValue?: any } :\n            undefined extends NonNullable<T>[key] ? { defaultValue?: any } :\n                { defaultValue: unknown } | { mandatory: true }\n        )\n    &\n    (\n        // A field cannot both be mandatory and have a default value.\n        // Only use mandatory when there is an action required by the user.\n        Required<T>[key] extends FormFieldObject ? unknown :\n            { defaultValue?: any, mandatory?: true } | { defaultValue?: any, mandatory?: false }\n        )\n    &\n    (\n        // matching T type with FormFieldType\n        Required<T>[key] extends FormFieldObject ? Omit<IFormEmbeddedFieldDef<Required<T>[key]>, 'fieldPath'> :\n            Required<T>[key] extends IPaletteDef ? Omit<IFormPaletteEditorFieldDef, 'fieldPath'> :\n                Required<T>[key] extends IFormConditionalColorRule[] ? Omit<IFormConditionalColorRulesFieldDef, 'fieldPath'> :\n                    Required<T>[key] extends IColorDef ? Omit<IFormColorEditorFieldDef, 'fieldPath'> :\n                        Required<T>[key] extends TidyTableColumnSelector[] ? Omit<IFormColumnChooserMultipleFieldDef, 'fieldPath'> :\n                            Required<T>[key] extends TidyTableColumnSelector ? Omit<IFormColumnChooserSingleFieldDef, 'fieldPath'> :\n                                Required<T>[key] extends IFormEventMappingArrayFieldDefType ? Omit<IFormEventMappingArrayFieldDef, 'fieldPath'> :\n                                    Required<T>[key] extends IFormEventArrayFieldDefType ? Omit<IFormEventArrayFieldDef, 'fieldPath'> :\n                                        Required<T>[key] extends IFormSearchAndReplaceArrayFieldDefType ? Omit<IFormSearchAndReplaceArrayFieldDef, 'fieldPath'> :\n                                            Required<T>[key] extends Hook<any, any> ? Omit<IFormHookFieldDef<any>, 'fieldPath'> :\n                                                Required<T>[key] extends boolean ? Omit<IFormBooleanFieldDef, 'fieldPath'> :\n                                                    Required<T>[key] extends number ? Omit<IFormNumberFieldDef, 'fieldPath'> :\n                                                        Required<T>[key] extends number ? Omit<IFormMaskFieldDef, 'fieldPath'> :\n                                                            Required<T>[key] extends string ?\n                                                                Omit<IFormOptionFieldSingleDef, 'fieldPath'>\n                                                                | Omit<IFormStringFieldDef, 'fieldPath'>\n                                                                | Omit<IFormFormatterPickerFieldDef, 'fieldPath'>\n                                                                | Omit<IFormWidgetVariantFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableTextExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableTextRowExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableNumericStringColumnExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableHtmlRowExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableHtmlExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableNumericExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableNumericRowExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableNumericJSColumnExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableColorRowExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableStringRowExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormTidyTableScaleRowExprFieldDef, 'fieldPath'>\n                                                                | Omit<IFormJsFieldDef, 'fieldPath'>\n                                                                | Omit<IFormJsonFieldDef, 'fieldPath'>\n                                                                | Omit<IFormMarkdownFieldDef, 'fieldPath'>\n                                                                | Omit<IFormOptionFieldReportPathDef, 'fieldPath'>\n                                                                | Omit<IFormPropertyChooserBaseDef, 'fieldPath'>\n                                                                | Omit<IFormLayoutFieldDef, 'fieldPath'>\n                                                                | Omit<IFormLayoutFieldDef, 'fieldPath'>\n                                                                | Omit<IFormFilterPanelModelSelectorFieldDef, 'fieldPath'>\n                                                                | Omit<IFormShortcutChooserDef<string>, 'fieldPath'>\n                                                                | Omit<IFormIconFieldSingleDef, 'fieldPath'>\n                                                                :\n\n                                                                Required<T>[key] extends string[] ? Omit<IFormOptionFieldMultipleDef, 'fieldPath'>\n                                                                    | Omit<IFormGroupsFieldDef, 'fieldPath'> | Omit<IFormShortcutChooserDef<string[]>, 'fieldPath'> :\n\n                                                                    never /* type not supported */\n        )\n};\n\nexport enum IFormFieldGroupTypes {\n    Selection = 'groupSelection',\n    FilterGeneralOption = 'filterGeneralOptionsGroup',\n    FilterItem = 'filterItemGroup',\n}\n\nexport type FormFieldType =\n    |\n    /**\n     * @see IFormReportPathFieldDef\n     */\n    \"appPath\" |\n    /**\n     * @see IFormAutocompleteFieldDef\n     */\n    \"autocomplete\" |\n    /**\n     * @see IFormBooleanFieldDef\n     */\n    \"boolean\" |\n    /**\n     * @see IFormColorEditorFieldDef\n     */\n    \"color\" |\n    /**\n     * @see IFormColumnChooserFieldDef\n     */\n    \"columnsChooser\" |\n    /**\n     * @see IFormColumnSelectionFieldDef\n     */\n    \"columnSelection\" |\n    /**\n     * @see IFormConstantsFieldDef\n     */\n    \"constants\" |\n    /**\n     * @see IFormArrayStringRecordsFieldDef\n     */\n    \"eventMappingArray\" |\n\n    \"eventArray\" |\n    /**\n     * @see IFormEmbeddedFieldDef\n     */\n    \"embedded\" |\n    /**\n     * @see IFormFileUploaderFieldDef\n     */\n    \"fileUploader\" |\n    /**\n     * @see IFormFormatterPickerFieldDef\n     */\n    \"formatterPicker\" |\n    /**\n     * @see IFormBooleanFieldDef\n     */\n    \"fixedBoolean\" |\n    /**\n     * @see IFormBooleanFieldDef\n     */\n    \"groupBoolean\" |\n    /**\n     * @see IFormGroupsFieldDef\n     */\n    \"groups\" |\n    /**\n     * @see IFormFunctionFieldDef\n     */\n    \"hook\" |\n    /**\n     * @see IFormJsFieldDef\n     */\n    \"js\" |\n    /**\n     * @see IFormJsonFieldDef\n     */\n    \"json\" |\n    /**\n     * @see IFormMarkdownFieldDef\n     */\n    \"markdown\" |\n    /**\n     * @see IFormMaskFieldDef\n     */\n    \"mask\" |\n    /**\n     * @see IFormMdxFieldDef\n     */\n    \"mdxExpression\" |\n    /**\n     * @see IFormMuiVariantFieldDef\n     */\n    \"number\" |\n    /**\n     * @see IFormOptionFieldDef\n     */\n    \"option\" |\n    /**\n     * @see IFormColorEditorFieldDef\n     */\n    \"palette\" |\n    /**\n     * @see IFormReportPathFieldDef\n     */\n    \"reportFolder\" |\n    /**\n     * @see IFormReportPathFieldDef\n     */\n    \"reportPath\" |\n    /**\n     * @see IFormReportPermaLinkFieldDef\n     */\n    \"reportPermaLink\" |\n    /**\n     * @see IFormStringFieldDef\n     */\n    \"string\" |\n    /**\n     * @see IFormTextFieldDef\n     */\n    \"text\" |\n    FormFieldTidyTableExprType |\n    /**\n     * @see IFormUrlFieldDef\n     */\n    \"url\" |\n    /**\n     * @see IFormWidgetVariantFieldDef\n     */\n    \"widgetVariant\" |\n    /**\n     * @see IFormGranularitySelectionFieldDef\n     */\n    \"granularityChooser\" |\n    /**\n     * @see IFormSearchAndReplaceArrayFieldDefType\n     */\n    \"searchAndReplaceArray\" |\n    /**\n     * @see IFormPropertyChooserBaseDef\n     */\n    \"propertyChooser\" |\n    /**\n     * @see IFormLayoutFieldDef\n     */\n    \"layout\" |\n    /**\n     * @see IFormConditionalColorRulesFieldDef\n     */\n    \"conditionalColorRules\" |\n    /**\n     * @see IFormFilterPanelModelSelectorFieldDef\n     */\n    \"filterPanelModelSelector\" |\n    /**\n     * @see IFormShortcutChooserDef\n     */\n    \"shortcutChooser\" |\n    /**\n     * @see IFormIconFieldSingleDef\n     */\n    \"icon\"\n    ;\n\nexport type FormFieldTidyTableExprType =\n    |\n    /**\n     * @see IFormTidyTableColorRowExprFieldDef\n     */\n    \"tidyTableColorRowExpr\" |\n    /**\n     * @see IFormTidyTableHtmlExprFieldDef\n     */\n    \"tidyTableHtmlExpr\" |\n    /**\n     * @see IFormTidyTableHtmlRowExprFieldDef\n     */\n    \"tidyTableHtmlRowExpr\" |\n    /**\n     * @see IFormTidyTableNumericExprFieldDef\n     */\n    \"tidyTableNumericExpr\" |\n    /**\n     * @see IFormTidyTableNumericJSColumnExprFieldDef\n     */\n    \"tidyTableNumericJSColumnExpr\" |\n    /**\n     * @see IFormTidyTableNumericRowExprFieldDef\n     */\n    \"tidyTableNumericRowExpr\" |\n    /**\n     * @see IFormTidyTableNumericStringColumnExprFieldDef\n     */\n    \"tidyTableNumericStringColumnExpr\" |\n    /**\n     * @see IFormTidyTableScaleRowExprFieldDef\n     */\n    \"tidyTableScaleRowExpr\" |\n    /**\n     * @see IFormTidyTableTextExprFieldDef\n     */\n    \"tidyTableTextExpr\" |\n    /**\n     * @see IFormTidyTableTextRowExprFieldDef\n     */\n    \"tidyTableTextRowExpr\" |\n    /**\n     * @see IFormTidyTableStringRowExprFieldDef\n     */\n    \"tidyTableStringRowExpr\"\n    ;\n\n\nexport function isTidyTableExpr(type: FormFieldType): type is FormFieldTidyTableExprType {\n    return type === \"tidyTableColorRowExpr\"\n        || type === \"tidyTableHtmlExpr\"\n        || type === \"tidyTableHtmlRowExpr\"\n        || type === \"tidyTableNumericExpr\"\n        || type === \"tidyTableNumericJSColumnExpr\"\n        || type === \"tidyTableNumericRowExpr\"\n        || type === \"tidyTableNumericStringColumnExpr\"\n        || type === \"tidyTableScaleRowExpr\"\n        || type === \"tidyTableTextExpr\"\n        || type === \"tidyTableTextRowExpr\"\n        || type === \"tidyTableStringRowExpr\"\n        ;\n}\n\nexport function isTidyTableExprJS(type: FormFieldType): boolean {\n    return type === \"tidyTableColorRowExpr\"\n        || type === \"tidyTableStringRowExpr\"\n        || type === \"tidyTableScaleRowExpr\"\n        || type === \"tidyTableNumericExpr\"\n        || type === \"tidyTableNumericStringColumnExpr\"\n        || type === \"tidyTableNumericJSColumnExpr\"\n        || type === \"tidyTableNumericRowExpr\"\n        ;\n}\n\nexport function isTidyTableExprTable(type: FormFieldType) {\n    return type === \"tidyTableHtmlExpr\"\n        || type === \"tidyTableTextExpr\"\n        || type === \"tidyTableNumericExpr\"\n        ;\n}\n\nexport function isTidyTableExprColumn(type: FormFieldType): boolean {\n    return type === \"tidyTableNumericStringColumnExpr\"\n        || type === \"tidyTableNumericJSColumnExpr\"\n        ;\n}\n\nexport function isTidyTableExprRow(type: FormFieldType): boolean {\n    return type === \"tidyTableHtmlRowExpr\"\n        || type === \"tidyTableTextRowExpr\"\n        || type === \"tidyTableNumericRowExpr\"\n        || type === \"tidyTableStringRowExpr\"\n        || type === \"tidyTableColorRowExpr\"\n        || type === \"tidyTableScaleRowExpr\"\n        ;\n}\n\nexport function isTidyTableExprNumericString(type: FormFieldType): type is \"tidyTableColorRowExpr\" | \"tidyTableStringRowExpr\" | \"tidyTableNumericStringColumnExpr\" {\n    return type === \"tidyTableColorRowExpr\" || type === \"tidyTableStringRowExpr\" || type === \"tidyTableNumericStringColumnExpr\"\n}\n\nexport function isTidyTableExprNumericJS(type: FormFieldType): type is \"tidyTableNumericJSColumnExpr\" {\n    return type === \"tidyTableNumericJSColumnExpr\"\n}\n\nexport function isTidyTableExprText(type: FormFieldType): type is \"tidyTableTextExpr\" | \"tidyTableTextRowExpr\" {\n    return type === \"tidyTableTextExpr\"\n        || type === \"tidyTableTextRowExpr\"\n        ;\n}\n\nexport function isTidyTableExprTextHtml(type: FormFieldType): type is \"tidyTableHtmlExpr\" | \"tidyTableHtmlRowExpr\" {\n    return type === \"tidyTableHtmlExpr\"\n        || type === \"tidyTableHtmlRowExpr\"\n        ;\n}\n\nexport function isTidyTableExprNumeric(type: FormFieldType): type is \"tidyTableNumericExpr\" | \"tidyTableNumericRowExpr\" {\n    return type === \"tidyTableNumericExpr\"\n        || type === \"tidyTableNumericRowExpr\"\n        ;\n}\n\nexport function isTidyTableExprScale(type: FormFieldType): type is \"tidyTableScaleRowExpr\" {\n    return type === \"tidyTableScaleRowExpr\"\n        ;\n}\n\n/**\n * Error messages for field suggestions and value candidates.\n * Put translations in ReportLocalization.csv.\n */\nexport enum AutocompleteNoOptionsText {\n    NO_OPTIONS = \"NO_OPTIONS\",\n    NO_COLUMNS = \"NO_COLUMNS\",\n    NO_QUERY_RESULT = \"NO_QUERY_RESULT\",\n    QUERY_HAS_ERROR = \"QUERY_HAS_ERROR\",\n    TRANSFORMATION_HAS_ERROR = \"TRANSFORMATION_HAS_ERROR\",\n    QUERY_OUTDATED = \"QUERY_OUTDATED\",\n}\n\n/**\n * Show an action button below the options\n */\nexport enum AutocompleteActions {\n    ADD_COLOR = \"ADD_COLOR\",\n    REFRESH_QUERY = \"REFRESH_QUERY\"\n}\n\nexport type CodeMirrorMode =\n    \"plain\" |\n    \"mdx\" |\n    \"sql\" |\n    \"js\" |\n    \"json\" |\n    \"csv\" |\n    \"md\" |\n    FormFieldTidyTableExprType\n    ;\n\nexport type FormFieldDialogEditorModelType =\n    \"unknown\" |\n    \"markdown\" |\n    \"mdxExpression\" |\n    FormFieldTidyTableExprType\n    ;\n\nexport interface IColorDef {\n\n    /**\n     * aka. name\n     */\n    path: string;\n\n}\n\nexport interface IPaletteDef {\n\n    /**\n     * aka. name\n     */\n    path: string;\n\n    reversed: boolean;\n\n}\n\nexport interface IOption {\n\n    id: string;\n    caption: string;\n\n}\n\n/**\n * A generic object.\n *\n * Use the editorConf to provide the list of options to choose from and the function that is displaying\n * the label/caption of the options. Check the editorConf for more configuration.\n *\n * This is quite a generic editor that should not be used directly.\n *\n * @see FormFieldDef\n */\nexport interface IFormAutocompleteFieldDef<OPTION> extends IFormFieldDef<OPTION> {\n\n    fieldType: \"autocomplete\",\n\n    editorConf: {\n\n        multiple?: boolean;\n        groupBy?: (option: OPTION | undefined) => string;\n        getOptionLabel?: (option: OPTION | undefined | null) => string;\n        isOptionEqualToValue?: (option: OPTION | undefined | null, value: OPTION | undefined | null) => boolean;\n\n        freeSolo?: boolean;\n\n        optionValues?: OPTION[] | ((callback: ((suggestions: OPTION[]) => void), dependsOnValue?: any, param?: {\n            theme: Theme\n        }) => void);\n\n        noOptionsText?: AutocompleteNoOptionsText;\n\n        /**\n         * Show an action button below the options.\n         *\n         * If the query is outdated or not run yet, it shows a refresh action instead.\n         */\n        action?: AutocompleteActions;\n\n        renderInput?: (params: AutocompleteRenderInputParams) => React.ReactNode;\n\n        renderOption?: (\n            props: React.HTMLAttributes<HTMLLIElement>,\n            option: OPTION,\n            state: AutocompleteRenderOptionState,\n            onClose: () => void\n        ) => React.ReactNode;\n\n        disableClearable?: boolean;\n\n        renderTags?: AutocompleteProps<OPTION, any, any, any>['renderTags']\n\n    }\n}\n\n/**\n * The \"groupBoolean\" allows for using that field as a group header and as a way\n * to enable/disable the options in the group.\n *\n * @see FormFieldDef\n * @see IFormGroupsFieldDef\n */\nexport interface IFormBooleanFieldDef extends IFormFieldDef<boolean> {\n\n    fieldType: \"boolean\" | \"fixedBoolean\" | \"groupBoolean\",\n\n}\n\nexport interface IFormLayoutFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"layout\",\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormColorEditorFieldDef extends IFormFieldDef<IColorDef> {\n\n    fieldType: \"color\",\n\n}\n\n/**\n * @see FormFieldDef\n *\n * Use the fieldPath to access the column directly in the tidy table with table.getColumnByAlias(...).\n * If multiple columns are in this field, it returns the first column.\n *\n * If the columns chooser is mandatory, the widget or transformation returns an error if there is no column either\n * selected by the user or in the fallback.\n *\n */\nexport type IFormColumnChooserFieldDef = IFormColumnChooserSingleFieldDef | IFormColumnChooserMultipleFieldDef;\n\nexport type IFormColumnChooserSingleFieldDef = IFormColumnChooserBaseDef<TidyTableColumnSelector>;\nexport type IFormColumnChooserMultipleFieldDef = IFormColumnChooserBaseDef<TidyTableColumnSelector[]>;\n\ninterface IFormColumnChooserBaseDef<T extends TidyTableColumnSelector | TidyTableColumnSelector[]> extends IFormFieldDef<T> {\n\n    fieldType: \"columnsChooser\",\n\n    editorConf?: {\n\n        /**\n         * The user can select multiple columns / selectors\n         */\n        multiple?: boolean;\n\n        /**\n         * The user can select the same column more than once\n         */\n        allowDuplicate?: boolean;\n\n        /**\n         * Only columns of this/these type(s) are allowed.\n         */\n        allowedTypes?: TidyColumnsType[];\n\n        /**\n         * The user can select properties of columns\n         */\n        includeProperties?: boolean;\n\n        /**\n         * The user can choose a selector, see TidyTableMappingColumnSelectorOptions\n         */\n        includeSelectors?: boolean;\n\n        /**\n         * The user can select columns based on their role\n         */\n        includeRoles?: boolean;\n\n        /**\n         * Search the table for a default column.\n         *\n         * Set to true to use the default fallback logic:\n         *\n         *      Fallback to a column that has a type that is allowed. Note, properties of columns are not considered.\n         *\n         *      It finds the column to fallback on by\n         *      1. role equal to fieldPath and type is allowed,\n         *      2. role equal to editorConfig.alias and type is allowed,\n         *      3. type is allowed.\n         *\n         *      Already mapped columns are skipped.\n         *\n         * You can also use your own fallback logic. The currentMapping is the object used when building the mapping\n         * from the options meta. It contains the mapped options from metas defined before this meta. Note, the order\n         * is important here.\n         */\n        fallback?: boolean | ((table: ITidyTable, currentMapping: ChartTemplateDataMapping) => ITidyColumn[] | undefined);\n\n        /**\n         * In the expression editor, use the alias to reference the column. Use the alias in table.getColumnByAlias(...).\n         */\n        alias?: string;\n    }\n\n}\n\nexport interface IFormPropertyChooserBaseDef extends IFormFieldDef<string> {\n\n    fieldType: \"propertyChooser\",\n\n    editorConf?: {\n\n        /**\n         * Only columns of this/these type(s) are allowed.\n         */\n        allowedTypes?: TidyColumnsType[];\n\n    }\n\n}\n\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormGranularitySelectionFieldDef extends IFormFieldDef<IFormFieldGranularityItem> {\n\n    fieldType: \"granularityChooser\",\n\n    editorConf: {\n        /*\n         * User can select from these items.\n         */\n        options: (table: ITidyTable) => IFormFieldGranularityItem[];\n    }\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormColumnSelectionFieldDef extends IFormFieldDef<any> {\n\n    fieldType: \"columnSelection\",\n\n    editorConf: {\n\n        multiple?: boolean;\n\n    }\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormConstantsFieldDef extends IFormFieldDef<any> {\n\n    fieldType: \"constants\",\n\n}\n\n/**\n * @see FormFieldDef\n */\n\nexport type IFormEventMappingArrayFieldDefType = { toEvent: string; fromEvent: string }[];\n\nexport interface IFormEventMappingArrayFieldDef extends IFormFieldDef<IFormEventMappingArrayFieldDefType> {\n\n    fieldType: \"eventMappingArray\",\n\n}\n\n/**\n * @see FormFieldDef\n */\n\nexport type IFormSearchAndReplaceArrayFieldDefType = { from?: string; to?: string }[];\n\nexport interface IFormSearchAndReplaceArrayFieldDef extends IFormFieldDef<IFormSearchAndReplaceArrayFieldDefType> {\n\n    fieldType: \"searchAndReplaceArray\",\n\n}\n\n/**\n * @see FormFieldDef\n */\n\nexport type IFormEventArrayFieldDefType = { event: string }[];\n\nexport interface IFormEventArrayFieldDef extends IFormFieldDef<IFormEventArrayFieldDefType> {\n\n    fieldType: \"eventArray\",\n\n    arrayField: string;\n}\n\n/**\n * Contains the ordering of the groups.\n *\n * An optional (and invisible) field that is defining how the groups are ordered (does not need to contain all\n * the groups). When none defined, the groups order depends on the field order themselves.\n *\n * @see FormFieldDef\n * @see IFormBooleanFieldDef\n */\nexport interface IFormGroupsFieldDef extends IFormFieldDef<string[]> {\n\n    fieldType: \"groups\",\n    groups: string[];\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormHookFieldDef<T> extends IFormFieldDef<Hook<T, any>> {\n\n    fieldType: \"hook\",\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormJsFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"js\",\n\n    editorConf?: {\n        helpMdFile: string;\n        doNotCompleteEventNames?: true;\n    }\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormJsonFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"json\",\n\n    editorConf?: {\n        helpMdFile: string;\n    }\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormFileUploaderFieldDef extends IFormFieldDef<any> {\n\n    fieldType: \"fileUploader\",\n\n    editorConf: {\n\n        acceptedFileExt?: string;\n        dropMessage: string;\n\n    }\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormMarkdownFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"markdown\",\n\n    editorConf?: {\n        singleLine: false;\n    }\n\n}\n\nexport type MdxExpressionType = \"calcMeasure\" | \"drilldown\";\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormMdxFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"mdxExpression\",\n\n    editorConf: {\n\n        mdxExpressionType: MdxExpressionType;\n\n        metaReadOnly?: boolean;\n        schemaName?: string;\n        cubeName?: string;\n\n    }\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormNumberFieldDef extends IFormFieldDef<number> {\n\n    fieldType: \"number\",\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormMaskFieldDef extends IFormFieldDef<number> {\n\n    fieldType: \"mask\",\n\n    editorConf: {\n        items: [number, string][];\n        name: string;\n    }\n}\n\n/**\n * A string that is chosen from the list of available values (aka. options).\n *\n * Typically used to edit an \"enum\" where the user can select the value from a list of \"localized\" options.\n * The editorConf is setup as following:\n * <pre>\n *      editorConf: {\n *          optionValues: Object.values(SortingType),\n *          optionName: \"SortingType\"                    -- localization purpose\n *      }\n * </pre>\n *\n * This editor is not limited to enum as the editorConf.optionValues is accepting a function resolving the\n * actual list of options as an array of {id,caption} objects. E.g., editing a locale, theme, etc...\n *\n * Editing a list of strings is supported using the editorConf.multiple flag.\n *\n * @see FormFieldDef\n */\n\nexport type IFormOptionFieldDef = IFormOptionFieldMultipleDef | IFormOptionFieldSingleDef;\n\nexport interface IFormOptionFieldMultipleDef extends IFormFieldDef<string[]> {\n\n    fieldType: \"option\",\n\n    editorConf: {\n        freeSolo?: boolean;\n\n        multiple: true;\n        allowDuplicate?: boolean;\n\n        optionValues?: string[] | IOption[] | ((callback: ((suggestions: string[] | IOption[]) => void), dependsOnValue?: any) => void);\n        optionName?: string;\n\n        getCaption?: (id: string) => string;\n    }\n}\n\n\nexport interface IFormOptionFieldReportPathDef extends IFormFieldDef<string> {\n\n    fieldType: \"reportPath\",\n\n}\n\nexport interface IFormOptionFieldSingleDef extends IFormFieldDef<string> {\n\n    fieldType: \"option\",\n\n    editorConf: {\n\n        freeSolo?: boolean;\n\n        multiple?: false;\n        allowDuplicate?: boolean;\n\n        optionValues?: string[] | IOption[] | ((callback: ((suggestions: string[] | IOption[]) => void), dependsOnValue?: any) => void);\n        optionName?: string;\n\n        getCaption?: (id: string) => string;\n    }\n\n}\n\nexport interface IFormIconFieldSingleDef extends IFormFieldDef<string> {\n\n    fieldType: \"icon\";\n\n}\n\nexport interface IFormEmbeddedFieldDef<T extends FormFieldObject> extends IFormFieldDef<T> {\n\n    fieldType: \"embedded\",\n\n    editorConf: {\n\n        fieldPathPrefix: string;\n\n        meta: FormFields<T>;\n\n    }\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormPaletteEditorFieldDef extends IFormFieldDef<IPaletteDef> {\n\n    fieldType: \"palette\",\n\n    editorConfig?: {\n        path: string,\n        reversed: boolean\n    }\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormReportPathFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"appPath\" | \"reportFolder\" | \"reportPath\",\n\n}\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormReportPermaLinkFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"reportPermaLink\",\n\n}\n\n/**\n * Use editorConf.suggestions to provide a list of possible values. Then the editor is an autocomplete\n * displaying the suggestions using the freeSolo mode to enter any kind of value.\n *\n * @see FormFieldDef\n */\nexport interface IFormStringFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"string\" | \"url\" | \"text\",\n\n    editorConf?: {\n\n        /**\n         * A list of possible strings...\n         */\n        suggestions?: string[] | ((callback: ((candidates: string[]) => void), dependsOnValue?: any) => void);\n\n        copyToClipboard?: boolean;\n\n        /**\n         * Show an error if the value is not valid. Return an empty string if the value is valid.\n         */\n        valueValidator?: (value: any) => string;\n    }\n\n}\n\nexport interface IFormTextFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"text\",\n\n}\n\n\n/**\n * A Markdown text expression containing tidy table value accessor (e.g., Donut's center text).\n * The evaluation context is the table.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableHtmlExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableHtmlExpr\"> {\n\n}\n\n/**\n * An Markdown text expression containing tidy table value accessor (e.g., chart's tooltip).\n * The evaluation context is a row.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableHtmlRowExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableHtmlRowExpr\"> {\n\n}\n\n/**\n * A numeric expression containing tidy table value accessor (e.g., chart's value axis minimum).\n * The evaluation context is the table.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableNumericExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableNumericExpr\"> {\n\n}\n\n/**\n * A string expression containing tidy table value accessor (e.g., chart's value axis minimum).\n * The evaluation context is the table.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableStringRowExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableStringRowExpr\"> {\n\n}\n\n/**\n * A color (i.e., string) expression containing tidy table value accessor (e.g., chart's value axis minimum).\n * The evaluation context is the table.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableColorRowExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableColorRowExpr\"> {\n\n}\n\n/**\n * A numeric expression containing tidy table value accessor (e.g., chart's value axis minimum).\n * The evaluation context is a row.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableNumericRowExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableNumericRowExpr\"> {\n\n}\n\n/**\n * A numeric expression containing tidy table value accessor (e.g., chart's value axis minimum).\n * The evaluation context is a column.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableNumericJSColumnExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableNumericJSColumnExpr\"> {\n\n}\n\n/**\n * A numeric expression containing tidy table value accessor (e.g., chart's value axis minimum).\n * The evaluation context is a row.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableScaleRowExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableScaleRowExpr\"> {\n\n}\n\n/**\n * A text expression containing tidy table value accessor (e.g., Donut's center text).\n * The evaluation context is the table.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableTextExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableTextExpr\"> {\n\n}\n\n/**\n * A text expression containing tidy table value accessor (e.g., cell renderer link).\n * The evaluation context is a row.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableTextRowExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableTextRowExpr\"> {\n\n}\n\n/**\n * A text expression containing tidy table value accessor (e.g., cell renderer link).\n * The evaluation context is a column.\n *\n * @see FormFieldDef\n */\nexport interface IFormTidyTableNumericStringColumnExprFieldDef extends IFormTidyTableExprFieldDef<\"tidyTableNumericStringColumnExpr\"> {\n\n}\n\n/**\n * icCube variants (defined in the theme's ic3.widgetVariants).\n *\n * @see FormFieldDef\n */\nexport interface IFormWidgetVariantFieldDef extends IFormFieldDef<string> {\n\n    fieldType: \"widgetVariant\",\n\n    editorConf?: {\n        componentName: string,\n        predefinedVariants?: string[];\n    }\n}\n\nexport interface IFormFormatterPickerFieldDef extends IFormFieldDef<string> {\n    fieldType: \"formatterPicker\"\n}\n\n/**\n * @see FormFieldDef\n */\n\nexport enum ConditionalRuleOperators {\n    EQUALS = \"EQUALS\",\n    NOT_EQUALS = \"NOT_EQUALS\",\n    GREATER_THAN = \"GREATER_THAN\",\n    GREATER_EQUAL_THAN = \"GREATER_EQUAL_THAN\",\n    SMALLER_THAN = \"SMALLER_THAN\",\n    SMALLER_EQUAL_THAN = \"SMALLER_EQUAL_THAN\",\n    CONTAINS = \"CONTAINS\",\n    NOT_CONTAINS = \"NOT_CONTAINS\",\n    STARTS_WITH = \"STARTS_WITH\",\n    ENDS_WITH = \"ENDS_WITH\"\n}\n\nexport interface IFormConditionalColorRule {\n    operator: ConditionalRuleOperators;\n    value?: string;\n    color?: IColorDef;\n}\n\nexport interface IFormConditionalColorRulesFieldDef extends IFormFieldDef<IFormConditionalColorRule[]> {\n    fieldType: \"conditionalColorRules\"\n}\n\n\n/**\n * @see FormFieldDef\n */\nexport interface IFormFilterPanelModelSelectorFieldDef extends IFormFieldDef<string> {\n    fieldType: \"filterPanelModelSelector\"\n}\n\n\nexport type LocalizeContext = Pick<IPublicContext, 'localize'>;\n\nexport interface IFormShortcutChooserDef<T extends string | string[]> extends IFormFieldDef<T> {\n    fieldType: \"shortcutChooser\",\n    editorConf?: {\n\n        getOptions: (deps: any, theme: Theme, context: LocalizeContext) => IOption[];\n\n    }\n}\n\n\n// ---------------------------------------------------------------------------------------------------------------------\n//      Allows for typing the field meta definitions.\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport type FormFieldDef =\n    IFormAutocompleteFieldDef<any> |\n    IFormBooleanFieldDef |\n    IFormColorEditorFieldDef |\n    IFormColumnChooserFieldDef |\n    IFormColumnSelectionFieldDef |\n    IFormConstantsFieldDef |\n    IFormEventArrayFieldDef |\n    IFormEventMappingArrayFieldDef |\n    IFormFileUploaderFieldDef |\n    IFormGroupsFieldDef |\n    IFormJsFieldDef |\n    IFormMarkdownFieldDef |\n    IFormMaskFieldDef |\n    IFormMdxFieldDef |\n    IFormNumberFieldDef |\n    IFormOptionFieldDef |\n    IFormOptionFieldSingleDef |\n    IFormOptionFieldMultipleDef |\n    IFormPaletteEditorFieldDef |\n    IFormReportPathFieldDef |\n    IFormReportPermaLinkFieldDef |\n    IFormStringFieldDef |\n    IFormTidyTableHtmlExprFieldDef |\n    IFormTidyTableHtmlRowExprFieldDef |\n    IFormTidyTableNumericExprFieldDef |\n    IFormTidyTableNumericRowExprFieldDef |\n    IFormTidyTableStringRowExprFieldDef |\n    IFormTidyTableColorRowExprFieldDef |\n    IFormTidyTableScaleRowExprFieldDef |\n    IFormTidyTableTextExprFieldDef |\n    IFormTidyTableTextRowExprFieldDef |\n    IFormWidgetVariantFieldDef |\n    IFormFormatterPickerFieldDef |\n    IFormGranularitySelectionFieldDef |\n    IFormSearchAndReplaceArrayFieldDef |\n    IFormPropertyChooserBaseDef |\n    IFormLayoutFieldDef |\n    IFormConditionalColorRulesFieldDef |\n    IFormFilterPanelModelSelectorFieldDef |\n    IFormShortcutChooserDef<any> |\n    IFormIconFieldSingleDef\n    ;\n","import {ComponentsOverrides, ComponentsVariants, Interpolation, Theme, TypographyStyle} from \"@mui/material/styles\";\nimport {SvgIcon} from \"@mui/material\";\nimport {IPublicWidgetTemplateDefinition} from \"./PublicTemplate\";\nimport {IWidgetLayoutDefinition} from \"./PublicLayout\";\nimport {IThemeWidgetDefaults} from \"./IThemeManager\";\nimport * as React from \"react\";\nimport {ReactElement} from \"react\";\nimport {Property} from \"csstype\";\nimport {IPublicContext} from \"./PublicContext\";\nimport {\n    DatePickerClassKey,\n    DatePickerShortcut,\n    DateRangePickerShortcut,\n    FilterDatePickerProps\n} from \"./theme/ThemeDatePicker\";\nimport {WidgetTemplateChartOptions} from \"./PublicTemplates\";\nimport {IUserMenuOptions, IWidgetBoxIconsDefinition} from \"./ITypes\";\nimport {AIWidgetChatBotClassKey, AIWidgetChatBotStyleProps} from \"./theme/ThemeAIWidgetChatBot\";\nimport {AlertDialogClassKey} from \"./theme/ThemeAlertDialog\";\nimport {AppClassKey, AppDivProps} from \"./theme/ThemeApp\";\nimport {ErrorRendererClassKey} from \"./theme/ThemeErrorRenderer\";\nimport {FilterCheckboxProps, FilterCheckboxRadioClassKey} from \"./theme/ThemeFilterCheckboxRadio\";\nimport {FilterButtonsClassKey, FilterButtonsProps} from \"./theme/ThemeFilterButtons\";\nimport {LazyTreeClassesClassKey, LazyTreeProps} from \"./theme/ThemeLazyTreeClasses\";\nimport {FilterPanelClassesKey, FilterPanelProps} from \"./theme/ThemeFilterPanel\";\nimport {FilterPanelViewsMenuClassesKey} from \"./theme/ThemeFilterPanelViewsMenu\";\nimport {RegexFilterClassesKey, RegexFilterProps} from \"./theme/ThemeRegexFilter\";\nimport {FilterSliderClassKey, FilterSliderProps} from \"./theme/ThemeFilterSlider\";\nimport {ListCounterClassKey, ListCounterProps} from \"./theme/ThemeListCounter\";\nimport {\n    FilterTreeClassKey,\n    FilterTreePopOverClassKey,\n    FilterTreePopOverProps,\n    FilterTreeProps\n} from \"./theme/ThemeFilterTree\";\nimport {FilterSwitchClassKey, FilterSwitchProps} from \"./theme/ThemeFilterSwitch\";\nimport {FilterAutocompleteClassesKey, FilterAutocompleteProps} from \"./theme/ThemeFilterAutocomplete\";\nimport {HtmlBoxClassKey, StyledHtmlBoxProps} from \"./theme/ThemeHtmlBox\";\nimport {KpiCardClassKey, KpiCardProps} from \"./theme/ThemeKpiCard\";\nimport {LayoutClassKey} from \"./theme/ThemeLayout\";\nimport {LayoutPageClassKey} from \"./theme/ThemeLayoutPage\";\nimport {PivotTableClassKey, PivotTableProps} from \"./theme/ThemePivotTable\";\nimport {TableClassKey, TableProps} from \"./theme/ThemeTable\";\nimport {ReportAppBarClassKey} from \"./theme/ThemeReportAppBar\";\nimport {WidgetBoxClassKey, WidgetBoxDivProps} from \"./theme/ThemeWidgetBox\";\nimport {WidgetBoxContentMessageClassKey} from \"./theme/ThemeWidgetBoxContentMessage\";\nimport {ReportAppLeftPanelClassKey} from \"./theme/ThemeReportAppLeftPanel\";\nimport {ic3AppMenuIconClassKey, ic3AppMenuItemClassKey, ic3AppMenuItemHeaderClassKey} from \"./theme/ThemeAppMenuIcon\";\nimport {QueryBuilderNodeClassKey, QueryBuilderNodeProps} from \"./theme/ThemeQueryBuilderNode\";\nimport {PrintButtonClassKey, StyledPrintButtonDivProps} from \"./theme/ThemePrintButton\";\nimport {CodeMirrorClassesKey} from \"./theme/ThemeCodeMirror\";\nimport {WidgetFilteredByClassesKey} from \"./theme/ThemeWidgetFilteredBy\";\nimport {Ic3TableCellProps, ThemeIc3TableCellClassesKey} from \"./theme/ThemeIc3TableCell\";\nimport {Ic3TableCellDrilldownProps, ThemeIc3TableCellDrilldownClassesKey} from \"./theme/ThemeIc3TableCellDrilldown\";\nimport {HomeCardClassKey} from \"./theme/ThemeHomeCard\";\nimport {HomeConsoleClassKey} from \"./theme/ThemeHomeConsole\";\nimport {GoogleMarkerVariantChartOptions} from \"./theme/ThemeGoogleMarker\";\nimport {Ic3CustomDrilldownMenuClassesKey} from \"./theme/ThemeIc3CustomDrilldownMenu\";\nimport {Ic3WidgetBoxSpinnerProps, ThemeIc3WidgetBoxSpinnerClassesKey} from \"./theme/ThemeIc3WidgetBoxSpinner\";\nimport {ic3CorePalette, ic3CorePaletteOptions, ic3CoreTheme} from \"@ic3/common-api\";\n\nexport type Ic3ChartVariants = {\n    [Name in keyof WidgetTemplateChartOptions]?: Array<{\n        props: { variant: string };\n        /**\n         * Default props define the default options for the widget.\n         */\n        defaultProps: Partial<WidgetTemplateChartOptions[Name]>;\n    }>;\n};\n\nexport type Ic3WidgetComponentVariants = Array<{\n    props: { variant: string };\n    style: Interpolation<{ theme: Theme }>;\n}>;\n\nexport interface INoSchemaRendererOptions {\n\n    missingSchema: string;\n\n}\n\nexport type ThemeTextFormatter = {\n    /**\n     * Format used in the reporting application.\n     */\n    formatReport: ((value: any, locale: string) => string) | string;\n\n    /**\n     * Format used when exporting to Excel.\n     */\n    formatExcel?: string;\n};\n\nexport type ThemeTextFormatters = Record<string, ThemeTextFormatter> & {\n\n    /**\n     * The default formatter for displaying date values.\n     * Also used in the expressions when using $value.formatDate()$.\n     *\n     * Default: {\n     *     formatReport: \"yyyy-MM-dd\"\n     * }\n     */\n    defaultDate: ThemeTextFormatter;\n\n    /**\n     * The default formatter for displaying datetime values.\n     * Also used in the expressions when using $value.formatDate()$.\n     *\n     * Default: {\n     *     formatReport: \"yyyy-MM-dd HH:mm:ss\"\n     * }\n     */\n    defaultDatetime: ThemeTextFormatter;\n\n    /**\n     * The default way to format any number that has no format defined.\n     * Used in the expressions when using $value.formatNumber()$.\n     *\n     * Default: {\n     *     formatReport: \"#,###.####\"\n     * }\n     */\n    defaultNumber: ThemeTextFormatter;\n\n    /**\n     * Used in the expressions when using $value.formatAmount()$.\n     *\n     * Default: {\n     *     formatReport: \"#,###\"\n     * }\n     */\n    defaultAmount: ThemeTextFormatter;\n\n    /**\n     * Default formatter for percentage values.\n     * Used in the expressions when using $value.formatPercentage()$.\n     *\n     * Default: {\n     *     formatReport: \"##.0%\"\n     * }\n     */\n    defaultPercentage: ThemeTextFormatter;\n\n};\n\nexport interface ThemeFormatterPerLocale {\n    /**\n     * Fallback formatter for when no language is specified or a language is specified that is not defined in this\n     * model.\n     */\n    default: ThemeFormatters;\n\n    /**\n     * A formatter per locale. Use JAVA locale tags for defining a formatter for that locale, e.g., en, en_US, nl, nl_NL, etc..\n     * Longer tags have prio over shorter tags. For example, if the user has locale en_US, the dashboards first use\n     * the en_US tag. If it isn't found, it will use the en tag. If that also isn't found, it will use the default.\n     */\n    [k: string]: ThemeFormatters;\n}\n\nexport function isThemeFormatterPerLocale(x: DeepPartial<ThemeFormatterPerLocale | ThemeFormatters> | undefined): x is ThemeFormatterPerLocale {\n    return (x as ThemeFormatterPerLocale)?.['default'] != null;\n}\n\n\nexport type ThemeFormatters = {\n\n    text: ThemeTextFormatters,\n\n    amCharts4: Amcharts4ThemeDateFormatter;\n\n    /**\n     * When using #a in a formatter, large values get divided and a letter gets added. Here, you can specify the number\n     * to divide by and which letter to add. E.g., 1.000 and 'k' divides numbers between 1.000 and 1.000.000 by a\n     * thousand and adds an 'k'.\n     */\n    bigNumberPrefixes?: {\n        number: number;\n        suffix: string;\n    }[];\n\n    /**\n     * When using #a in a formatter, small values get multiplied and a letter gets added. Here, you can specify the\n     * multiplier and the letter. For example, { \"number\": 1e-6, \"suffix\": \"μ\" }, multiplies numbers between 1e-6 and\n     * 1e-9 by 1e6 and adds the letter μ.\n     */\n    smallNumberPrefixes?: {\n        number: number;\n        suffix: string;\n    }[];\n\n}\n\nexport type ThemeTextFormattersOptions = Record<string, ThemeTextFormatter> & {\n\n    defaultDate?: ThemeTextFormatter;\n    defaultNumber?: ThemeTextFormatter;\n    defaultAmount?: ThemeTextFormatter;\n    defaultPercentage?: ThemeTextFormatter;\n\n};\n\ntype Amcharts4ThemeDateFormatter = {\n    /**\n     * Amcharts date formatter.\n     * Read more about the format codes here: https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/#Format_codes\n     * Read more about how these settings are used here: https://www.amcharts.com/docs/v4/concepts/axes/date-axis/#Setting_date_formats\n     */\n    dateFormatter: {\n        millisecond: {\n            dateFormat: string;\n            periodChangeFormat: string;\n        },\n        second: {\n            dateFormat: string;\n            periodChangeFormat: string;\n        },\n        minute: {\n            dateFormat: string;\n            periodChangeFormat: string;\n        },\n        hour: {\n            dateFormat: string;\n            periodChangeFormat: string;\n        },\n        day: {\n            dateFormat: string;\n            periodChangeFormat: string;\n        },\n        week: {\n            dateFormat: string;\n            periodChangeFormat: string;\n        },\n        month: {\n            dateFormat: string;\n            periodChangeFormat: string;\n        },\n        year: {\n            dateFormat: string;\n            periodChangeFormat: string;\n        },\n    }\n}\n\ntype DeepPartial<T> = {\n    [P in keyof T]?: T[P] extends Record<string, unknown> ? DeepPartial<T[P]> : T[P];\n}\n\n\nexport interface ic3Palette extends ic3CorePalette {\n\n    /**\n     * The color for the page background (can be overridden at layout level).\n     */\n    pageBackgroundColor: Property.Color;\n\n    /**\n     * The color for a selected item\n     */\n    selected: Property.Color;\n\n    /**\n     * For charts, you can define a function that derives the selected color from the color of the clicked item without\n     * selection. For example, you can use darken(color) from Mui-Material to get a darker color.\n     * @param color the color of the item without selection.\n     * @Return the color for the item in the selected state.\n     */\n    selectedChart?: (color: Property.Color | undefined | null) => Property.Color;\n\n    /**\n     * The text color for a selected item\n     */\n    selectedText: Property.Color;\n    /**\n     * The text background color for a selected item\n     */\n    selectedBackground: Property.Color;\n\n    selectedOpacity: number;\n\n    unSelectedOpacity: number;\n\n    hoverBackground: Property.Color;\n\n    /**\n     * List of named color palettes available on chart options\n     */\n    chartPalettes: { 'default': Property.Color[] } & Record<string, Property.Color[]>;\n\n    /**\n     * List of named single colors available on chart options\n     */\n    chartSingleColors: MandatorySingleColors & Record<string, Property.Color>;\n\n    /**\n     * Report Application Menu\n     */\n    reportAppMenu: string;\n\n}\n\ninterface MandatorySingleColors {\n\n    /**\n     * if not defined, primary color of MUI theme\n     */\n    default: Property.Color;\n    /**\n     * if not defined, secondary color of MUI theme\n     */\n    secondary: Property.Color;\n    /**\n     * if not defined, selection color of ic3.palette theme\n     */\n    selected: Property.Color;\n    /**\n     * if not defined, text.disabled MUI theme\n     */\n    disabled: Property.Color;\n    /**\n     * if not defined, success MUI theme\n     */\n    success: Property.Color;\n    /**\n     * if not defined, error MUI theme\n     */\n    error: Property.Color;\n    /**\n     * if not defined, warning MUI theme\n     */\n    warning: Property.Color;\n    /**\n     * if not defined, text.primary MUI theme\n     */\n    text: Property.Color;\n    /**\n     * if not defined, grey100 MUI theme\n     */\n    white: Property.Color;\n    /**\n     * if not defined, grey100 MUI theme\n     */\n    grey100: Property.Color;\n    /**\n     * if not defined, grey200 MUI theme\n     */\n    grey200: Property.Color;\n    /**\n     * if not defined, grey400 MUI theme\n     */\n    grey400: Property.Color;\n    /**\n     * if not defined, grey700 MUI theme\n     */\n    grey700: Property.Color;\n    /**\n     * if not defined, grey900 MUI theme  (kind of a less agressive black)\n     */\n    grey900: Property.Color;\n\n}\n\nexport interface ic3PaletteOptions extends ic3CorePaletteOptions {\n\n    selected?: Property.Color;\n    selectedText?: Property.Color;\n    selectedBackground?: Property.Color;\n    selectedOpacity?: number;\n\n    /**\n     * For charts, you can define a function that derives the selected color from the color of the clicked item without\n     * selection. For example, you can use darken(color) from Mui-Material to get a darker color.\n     * @param color the color of the item without selection.\n     * @Return the color for the item in the selected state.\n     */\n    selectedChart?: (color: Property.Color | undefined | null) => Property.Color;\n\n    unSelectedOpacity?: number;\n\n    hoverBackground?: Property.Color;\n\n    chartPalettes?: { 'default': Property.Color[] } & Record<string, Property.Color[]>;\n    chartSingleColors?: Partial<MandatorySingleColors> & Record<string, Property.Color>;\n\n    reportAppMenu?: Property.Color;\n}\n\n\nexport interface ic3Typography {\n\n    amCharts4: TypographyStyle;\n\n}\n\nexport interface ic3TypographyOptions {\n\n    /**\n     * Typography for the amCharts plugin.\n     */\n    amCharts4?: TypographyStyle;\n\n}\n\nexport enum TableRowHeightOptions {\n    standard = \"standard\",\n    compact = \"compact\",\n    small = \"small\"\n}\n\nexport interface ic3Theme extends ic3CoreTheme {\n\n    cssClass: string;\n\n    waitForFonts?: () => Promise<any>;\n\n    formatter: ThemeFormatterPerLocale\n        /* for backwards compatibility */\n        | ThemeFormatters;\n\n    /**\n     * For the App Viewer the height of the Application header (css style)\n     */\n    appViewer?: {\n        appTopPanelHeight?: string;\n        appTopPanelWithFilterHeight?: string;\n        appLeftPanelWidth?: string;\n        appLeftPanelCollapsedWidth?: string;\n\n        appMenuInnerPercentage?: string; // the size of the button with the icon (css)\n        appMenuOuterPercentage?: string; // the inner icons size  (css)\n    }\n\n    /**\n     * Icons used in tables and trees\n     */\n    icons: {\n        none: (className: string) => ReactElement | string;\n\n        // MDX tree icons\n        expanded: (className: string) => ReactElement | string;\n        collapse: (className: string) => ReactElement | string;\n        loading: (className: string) => ReactElement | string;\n\n        // sorting icons\n        sort: (className: string) => ReactElement | string;\n        sortAsc: (className: string) => ReactElement | string;\n        sortDesc: (className: string) => ReactElement | string;\n\n        // Datepicker calender icons\n        datePickerIcon?: React.ElementType;\n\n        // Widget header icons\n        menuIcon: JSX.Element;\n        statusWaiting: JSX.Element;\n        statusWaitingResult: JSX.Element;\n        statusRendering: JSX.Element;\n        statusDone: JSX.Element;\n        queryError: JSX.Element;\n        queryWarning: JSX.Element;\n        helpIcon: JSX.Element;\n        helpIconOutlined: JSX.Element;\n        closeQueryIcon: JSX.Element;  // Icon for user to close the query (if it's running long)\n        interactionModeSelection: JSX.Element;\n        interactionModeDrilldown: JSX.Element;\n        widgetFilterActive: React.ReactNode | undefined;  // Shown in widget header when the widget is filtered.\n\n        // Autocomplete / dropdown filter\n        autocompleteClearIcon: JSX.Element | undefined;\n        autocompletePopupIcon: JSX.Element | undefined;\n\n        // Tree\n        nodeOpened: JSX.Element;\n        nodeClosed: JSX.Element;\n\n        // Radio / check boxes\n        checkBoxUnselected: React.ReactNode | undefined;\n        checkBoxSelected: React.ReactNode | undefined;\n        checkIndeterminate: React.ReactNode | undefined;\n        radioUnselected: React.ReactNode | undefined;\n        radioSelected: React.ReactNode | undefined;\n        hasDescendantsIndicatorIcon: React.ReactNode | undefined;\n\n        // Filter panel views\n        getViewsMenuCustomButtonIcon: (name: string | undefined) => React.ReactNode | undefined;\n\n    };\n\n    /**\n     * Additional icons in the icon cell renderer.\n     */\n    iconsCellRenderer?: Record<string, typeof SvgIcon>;\n\n    palette: {\n        darken: (color: string, factor: number) => string;\n        lighten: (color: string, factor: number) => string;\n    }\n\n    table: Record<TableRowHeightOptions, { rowHeight: number; headerRowHeight: number }>;\n\n    treeFilter: {\n        itemHeight: number;\n    }\n\n    googleMap: {\n        options?: google.maps.MapOptions;\n        markerClustererOptions?: MarkerClustererOptions;\n    }\n\n    drilldown?: {\n        /* disables drilldown path in the header and hides the option (if true, like older versions)*/\n        disableDrilldownInTitle?: boolean;\n    },\n\n    userMenu: {\n        disableUserMenuEdition: boolean;\n        userMenuFilter?: (options: IUserMenuOptions[], templateDef?: IPublicWidgetTemplateDefinition<any>) => IUserMenuOptions[];\n    }\n\n    widgetIcons?: IWidgetIcons;\n\n    widgetBox: {\n\n        extraHeight?: number;\n\n        contentOffset: {\n            top: number;\n            left: number;\n        };\n    };\n\n    amCharts4: {\n        icons: {\n            zoomOutButton?: {\n                /**\n                 * The radius of the corners\n                 * tl – Top-left corner\n                 * tr – Top-right corner\n                 * bl – Bottom-left corner\n                 * br – Bottom-right corner\n                 */\n                cornerRadius: [number, number, number, number];\n                fill: string;  // Color of the icon\n                stroke: string;  // Color of the stroke of the icon\n                strokeWidth: number;  // Width of the stroke\n                hoverColor: string;  // Color when hovering\n                downColor: string;  // Color when mouse down on the button\n            }\n        },\n    },\n\n    /**\n     * A zoom applied to the widget content when rendered for printing.\n     * Defaulted to 0.64.\n     */\n    widgetContentPrintScale?: number;\n\n    /**\n     * The first defined layout is used as the default one.\n     */\n    layouts: IWidgetLayoutDefinition[];\n\n    /**\n     * Default values (e.g., box options, chart options, etc...).\n     */\n    widgetDefaults?: IThemeWidgetDefaults;\n\n    /**\n     * Styling for the sparklines in the sparkline transformation and the KPI card.\n     */\n    sparklineSettings: {\n\n        /**\n         * Line sparkline settings.\n         */\n        line: {\n            /**\n             * The width of the line in the sparkline\n             */\n            lineWidth: number;\n\n            /**\n             * The cursor when the user hovers over the sparkline\n             */\n            cursor: {\n                color: Property.Color;\n\n                /**\n                 * the width of the cursor dot when hovering.\n                 */\n                spotRadius: number;\n\n                /**\n                 * The width of the stroke when hovering\n                 */\n                width: number;\n            }\n        },\n\n        /**\n         * Column sparkline settings.\n         */\n        column: {\n\n            /**\n             * Radius of the columns rounded corners.\n             */\n            cornerRadius: number;\n\n            /**\n             * Space between columns.\n             */\n            columnSpacing: number;\n\n        }\n    }\n\n    noSchemaRenderer?: (context: IPublicContext, options: INoSchemaRendererOptions) => ReactElement;\n\n    /**\n     * Options for date/range pickers. Filter panel / date picker filter.\n     */\n    datePicker: {\n        shortcuts: Record<'default', {\n            datePickerShortcuts: DatePickerShortcut[],\n            rangePickerShortcuts: DateRangePickerShortcut[]\n        }> & Record<string, {\n            datePickerShortcuts: DatePickerShortcut[],\n            rangePickerShortcuts: DateRangePickerShortcut[]\n        }>\n    }\n\n    /**\n     * Options for saving the state of all dashboard filters into local storage.\n     */\n    filterState?: {\n\n        /**\n         * Set to true to disable auto save for all dashboards/apps and make the option inactive.\n         */\n        disableFilterStateOption?: boolean;\n\n        /**\n         * The default value for auto-saving filter setting in the dashboards.\n         */\n        autosaveFilterStateToSessionStorage?: boolean;\n\n        /**\n         * The default value for auto-saving filter setting in the application filter panel.\n         */\n        autosaveReportAppFilterStateToSessionStorage?: boolean;\n\n    }\n}\n\nexport interface ic3ThemeOptions {\n\n    /**\n     * For editor theme, the id to use in your app-local/ic3report-config.js:\n     *\n     * <pre>\n     *     options.defaultEditorThemeId = ...\n     * </pre>\n     */\n    id: string;\n\n    caption: string;\n\n    cssClass?: string;\n\n    /**\n     * For the App Viewer the height of the Application header (css style)\n     */\n    appViewer?: {\n        appTopPanelHeight?: string;\n        appTopPanelWithFilterHeight?: string;\n        appLeftPanelWidth?: string;\n        appLeftPanelCollapsedWidth?: string;\n    }\n\n    /**\n     * The recommended setup is to use document.fonts.ready here and put document.fonts.load(...) for all your added\n     * fonts in the theme definition .ts file.\n     */\n    waitForFonts?: () => Promise<any>;\n\n    formatter?: DeepPartial<ThemeFormatterPerLocale | ThemeFormatters>;\n\n    icons?: Partial<ic3Theme['icons']>;\n\n    /**\n     * Additional icons in the icon cell renderer.\n     */\n    iconsCellRenderer?: Record<string, typeof SvgIcon>;\n\n    table?: Record<TableRowHeightOptions, Partial<{\n        rowHeight: number;\n        headerRowHeight: number,\n    }>>;\n\n    treeFilter?: {\n        /**\n         * Define the height for an item in the tree. This cannot be done using css, because the tree is virtualized and\n         * requires a fixed height setting.\n         */\n        itemHeight?: number;\n    }\n\n    googleMap?: {\n        options?: google.maps.MapOptions;\n    }\n\n    drilldown?: {\n        /* disables drilldown path in the header and hides the option (if true, like older versions)*/\n        disableDrilldownInTitle?: boolean;\n    },\n\n    /**\n     * Change the settings for the user menu for some or all widgets.\n     */\n    userMenu?: {\n        /**\n         * Set to true to make the user menu option readonly (non-editable) for all widgets.\n         */\n        disableUserMenuEdition?: boolean;\n        /**\n         * Filter the items in the user menu. Return an empty array to disable and not show the user menu.\n         */\n        userMenuFilter?: (options: IUserMenuOptions[], templateDef?: IPublicWidgetTemplateDefinition<any>) => IUserMenuOptions[];\n    }\n\n    /**\n     * Controls the icons to show for all widgets. To hide icons for a single widget, see `widgetDefaults`.\n     * @see {ic3ThemeOptions.widgetDefaults}.\n     */\n    widgetIcons?: IWidgetIcons;\n\n    widgetBox?: {\n\n        /**\n         * Used when computing the height of the widget when (vertical) auto-expand is being applied.\n         * E.g., margins, paddings, ...\n         */\n        extraHeight?: number;\n\n        contentOffset: {\n            /**\n             * Corresponds to the actual height as defined for WidgetBoxClasses.header.\n             */\n            top: number;\n            left: number;\n        };\n    };\n\n    /**\n     * Default values (e.g., box options, chart options, etc...).\n     */\n    widgetDefaults?: IThemeWidgetDefaults;\n\n    /**\n     * Settings for the filter state.\n     */\n    filterState?: Partial<ic3Theme['filterState']>;\n\n    /**\n     * A scale applied to the widget content when rendered for printing.\n     * Defaulted to 0.64.\n     */\n    widgetContentPrintScale?: number;\n\n    /**\n     * The first defined layout is used as the default one.\n     */\n    layouts?: IWidgetLayoutDefinition[];\n\n    /**\n     * Styling for the sparklines in the sparkline transformation and the KPI card\n     */\n    sparklineSettings?: {\n        /**\n         * The width of the line in the sparkline\n         */\n        lineWidth: number;\n\n        /**\n         * The cursor when the user hovers over the sparkline\n         */\n        cursor: {\n            color: Property.Color;\n\n            /**\n             * The radius of the dot when hovering\n             */\n            radius: number;\n\n            /**\n             * The width of the stroke when hovering\n             */\n            width: number;\n        };\n    }\n\n    noSchemaRenderer?: (context: IPublicContext, options: INoSchemaRendererOptions) => ReactElement;\n\n    /**\n     * Theme settings for the editor (application & report).\n     */\n    editor?: {\n        /**\n         * Editor logo.\n         *\n         * Default: icCube logo.\n         */\n        logo?: string;\n\n        /**\n         * Alt text for the logo image.\n         *\n         * Default: \"icCube\".\n         */\n        logoAlt?: string;\n\n        /**\n         * Top offset of the edited dashboard page in the editor.\n         *\n         * Default: 25.\n         */\n        viewPortOffsetTop?: number;\n\n        /**\n         * Left offset of the edited dashboard page in the editor.\n         *\n         * Default: 25.\n         */\n        viewPortOffsetLeft?: number;\n    },\n\n    amCharts4?: {\n        icons?: {\n            zoomOutButton?: {\n                /**\n                 * The radius of the corners\n                 * tl – Top-left corner\n                 * tr – Top-right corner\n                 * bl – Bottom-left corner\n                 * br – Bottom-right corner\n                 */\n                cornerRadius: [number, number, number, number];\n                fill: string;  // Color of the icon\n                stroke: string;  // Color of the stroke of the icon\n                strokeWidth: number;  // Width of the stroke\n                hoverColor: string;  // Color when hovering\n                downColor: string;  // Color when mouse down on the button\n            }\n        },\n    },\n\n    datePicker?: DeepPartial<ic3Theme['datePicker']>;\n\n}\n\ninterface IWidgetIcons extends IWidgetBoxIconsDefinition, Record<string, any> {\n    /**\n     * Set to true to make the widget icon options readonly (non-editable) for all widgets. Also, this enforces to\n     * always use the default values set in the theme.\n     * @see {ic3ThemeOptions.widgetIcons}\n     * @see {ic3ThemeOptions.widgetDefaults}\n     */\n    disableWidgetIconsEdition?: boolean;\n}\n\nexport interface ic3ComponentNameToClassKey {\n    AIWidgetChatBot: AIWidgetChatBotClassKey;\n\n    AlertDialog: AlertDialogClassKey;\n    App: AppClassKey;\n\n    ErrorRenderer: ErrorRendererClassKey;\n\n    FilterCheckbox: FilterCheckboxRadioClassKey;\n    FilterButtons: FilterButtonsClassKey;\n    LazyTreeViewStyled: LazyTreeClassesClassKey;\n    FilterPanel: FilterPanelClassesKey;\n    FilterPanelViewsMenu: FilterPanelViewsMenuClassesKey;\n    Ic3CustomDrilldownMenu: Ic3CustomDrilldownMenuClassesKey;\n    RegexFilter: RegexFilterClassesKey;\n    FilterSlider: FilterSliderClassKey;\n    ListCounter: ListCounterClassKey;\n    FilterTree: FilterTreeClassKey;\n    Ic3FilterSwitch: FilterSwitchClassKey;\n    FilterTreePopOver: FilterTreePopOverClassKey;\n    FilterDatePicker: DatePickerClassKey;\n    FilterAutocomplete: FilterAutocompleteClassesKey;\n\n    HtmlBox: HtmlBoxClassKey;\n    KpiCard: KpiCardClassKey;\n    Layout: LayoutClassKey;\n\n    LayoutPage: LayoutPageClassKey;\n\n    PivotTable: PivotTableClassKey;\n    Table: TableClassKey;\n\n    ReportAppBar: ReportAppBarClassKey;\n\n    WidgetBox: WidgetBoxClassKey;\n    WidgetBoxContentMessage: WidgetBoxContentMessageClassKey;\n\n    ReportAppLeftPanel: ReportAppLeftPanelClassKey;\n\n    ic3AppMenuIcon: ic3AppMenuIconClassKey;\n    Ic3AppMenuItemHeader: ic3AppMenuItemHeaderClassKey;\n    ic3AppMenuItem: ic3AppMenuItemClassKey;\n\n    QueryBuilderNode: QueryBuilderNodeClassKey;\n\n    PrintButton: PrintButtonClassKey;\n\n    CodeMirror: CodeMirrorClassesKey;\n\n    WidgetBoxFilteredByTooltip: WidgetFilteredByClassesKey;\n    Ic3TableCell: ThemeIc3TableCellClassesKey;\n    Ic3TableCellDrilldown: ThemeIc3TableCellDrilldownClassesKey;\n    Ic3TableCellError: ThemeIc3TableCellClassesKey;\n\n    Ic3WidgetBoxSpinner: ThemeIc3WidgetBoxSpinnerClassesKey;\n\n    HomeCard: HomeCardClassKey;\n    HomeConsole: HomeConsoleClassKey;\n}\n\nexport interface ic3ComponentsPropsList {\n\n    AIWidgetChatBot: AIWidgetChatBotStyleProps;\n\n    FilterCheckbox: FilterCheckboxProps;\n    FilterButtons: FilterButtonsProps;\n    LazyTreeViewStyled: LazyTreeProps;\n    FilterPanel: FilterPanelProps;\n    RegexFilter: RegexFilterProps;\n    FilterSlider: FilterSliderProps;\n    ListCounter: ListCounterProps;\n    FilterTree: FilterTreeProps;\n    Ic3FilterSwitch: FilterSwitchProps;\n    FilterTreePopOver: FilterTreePopOverProps;\n    FilterDatePicker: FilterDatePickerProps;\n    FilterAutocomplete: FilterAutocompleteProps;\n\n    HtmlBox: StyledHtmlBoxProps;\n    KpiCard: KpiCardProps;\n\n    PivotTable: PivotTableProps;\n    Table: TableProps;\n\n    WidgetBox: WidgetBoxDivProps;\n\n    GoogleMarker: GoogleMarkerVariantChartOptions;\n\n    App: AppDivProps;\n\n    QueryBuilderNode: QueryBuilderNodeProps;\n\n    PrintButton: StyledPrintButtonDivProps;\n    Ic3TableCell: Ic3TableCellProps;\n    Ic3TableCellDrilldown: Ic3TableCellDrilldownProps;\n    Ic3TableCellError: Ic3TableCellProps;\n\n    Ic3WidgetBoxSpinner: Ic3WidgetBoxSpinnerProps;\n}\n\nexport interface ic3BaseComponents {\n\n    AIWidgetChatBot?: {\n        styleOverrides?: ComponentsOverrides[\"AIWidgetChatBot\"];\n        variants?: ComponentsVariants[\"AIWidgetChatBot\"];\n    }\n    AlertDialog?: {\n        styleOverrides?: ComponentsOverrides[\"AlertDialog\"];\n    }\n    App?: {\n        styleOverrides?: ComponentsOverrides[\"App\"];\n    }\n    ErrorRenderer?: {\n        styleOverrides?: ComponentsOverrides[\"ErrorRenderer\"];\n    }\n    FilterCheckbox?: {\n        styleOverrides?: ComponentsOverrides[\"FilterCheckbox\"];\n        variants?: ComponentsVariants[\"FilterCheckbox\"];\n    }\n    FilterButtons?: {\n        styleOverrides?: ComponentsOverrides[\"FilterButtons\"];\n        variants?: ComponentsVariants[\"FilterButtons\"];\n    }\n    LazyTreeViewStyled?: {\n        styleOverrides?: ComponentsOverrides[\"LazyTreeViewStyled\"];\n        variants?: ComponentsVariants[\"LazyTreeViewStyled\"];\n    }\n    FilterPanel?: {\n        variants?: ComponentsVariants['FilterPanel'];\n        styleOverrides?: ComponentsOverrides[\"FilterPanel\"];\n    }\n    RegexFilter?: {\n        variants?: ComponentsVariants['RegexFilter'];\n        styleOverrides?: ComponentsOverrides[\"RegexFilter\"];\n    }\n    FilterSlider?: {\n        styleOverrides?: ComponentsOverrides[\"FilterSlider\"];\n        variants?: ComponentsVariants[\"FilterSlider\"];\n    }\n    ListCounter?: {\n        styleOverrides?: ComponentsOverrides[\"ListCounter\"];\n        variants?: ComponentsVariants[\"ListCounter\"];\n    }\n    FilterTree?: {\n        styleOverrides?: ComponentsOverrides[\"FilterTree\"];\n        variants?: ComponentsVariants[\"FilterTree\"];\n    },\n    FilterTreePopOver?: {\n        styleOverrides?: ComponentsOverrides[\"FilterTreePopOver\"];\n        variants?: ComponentsVariants[\"FilterTreePopOver\"];\n    }\n    FilterDatePicker?: {\n        styleOverrides?: ComponentsOverrides[\"FilterDatePicker\"];\n        variants?: ComponentsVariants[\"FilterDatePicker\"];\n    }\n    FilterAutocomplete?: {\n        styleOverrides?: ComponentsOverrides[\"FilterAutocomplete\"];\n        variants?: ComponentsVariants[\"FilterAutocomplete\"];\n    },\n    FilterAutocompletePopper?: {\n        styleOverrides?: ComponentsOverrides[\"MuiPopper\"];\n        variants?: ComponentsVariants[\"MuiPopper\"];\n    },\n    GoogleMarker?: {\n        variants?: ComponentsVariants['GoogleMarker'];\n    }\n    HtmlBox?: {\n        styleOverrides?: ComponentsOverrides[\"HtmlBox\"];\n        variants?: ComponentsVariants[\"HtmlBox\"];\n    }\n    KpiCard?: {\n        styleOverrides?: ComponentsOverrides[\"KpiCard\"];\n        variants?: ComponentsVariants[\"KpiCard\"];\n    }\n    Layout?: {\n        styleOverrides?: ComponentsOverrides[\"Layout\"];\n    }\n    LayoutPage?: {\n        styleOverrides?: ComponentsOverrides[\"LayoutPage\"];\n    }\n    PivotTable?: {\n        variants?: ComponentsVariants['PivotTable'];\n        styleOverrides?: ComponentsOverrides[\"PivotTable\"];\n    }\n    ReportAppBar?: {\n        styleOverrides?: ComponentsOverrides[\"ReportAppBar\"];\n    }\n    ReportAppLeftPanel?: {\n        styleOverrides?: ComponentsOverrides[\"ReportAppLeftPanel\"];\n    }\n    Table?: {\n        variants?: ComponentsVariants['Table'];\n        styleOverrides?: ComponentsOverrides[\"Table\"];\n    }\n    WidgetBox?: {\n        variants?: ComponentsVariants['WidgetBox'];\n        styleOverrides?: ComponentsOverrides[\"WidgetBox\"];\n    }\n    WidgetBoxContentMessage?: {\n        styleOverrides?: ComponentsOverrides[\"WidgetBoxContentMessage\"];\n    }\n    ic3AppMenuIcon?: {\n        styleOverrides?: ComponentsOverrides[\"ic3AppMenuIcon\"];\n    },\n    Ic3AppMenuItemHeader?: {\n        styleOverrides?: ComponentsOverrides[\"Ic3AppMenuItemHeader\"];\n    },\n    ic3AppMenuItem?: {\n        styleOverrides?: ComponentsOverrides[\"ic3AppMenuItem\"];\n    }\n    QueryBuilderNode?: {\n        styleOverrides?: ComponentsOverrides[\"QueryBuilderNode\"]\n    }\n    PrintButton?: {\n        styleOverrides?: ComponentsOverrides[\"PrintButton\"];\n        variants?: ComponentsVariants[\"PrintButton\"];\n    }\n    CodeMirror?: {\n        styleOverrides?: ComponentsOverrides[\"CodeMirror\"];\n    }\n    WidgetBoxFilteredByTooltip?: {\n        styleOverrides?: ComponentsOverrides[\"WidgetBoxFilteredByTooltip\"];\n    }\n    Ic3TableCell?: {\n        styleOverrides?: ComponentsOverrides[\"Ic3TableCell\"];\n    }\n    Ic3TableCellDrilldown?: {\n        styleOverrides?: ComponentsOverrides[\"Ic3TableCellDrilldown\"];\n    }\n    Ic3TableCellError?: {\n        styleOverrides?: ComponentsOverrides[\"Ic3TableCellError\"];\n    }\n    Ic3WidgetBoxSpinner?: {\n        defaultProps?: Partial<Ic3WidgetBoxSpinnerProps>;\n        styleOverrides?: ComponentsOverrides[\"Ic3WidgetBoxSpinner\"];\n    }\n    Ic3FilterSwitch?: {\n        styleOverrides?: ComponentsOverrides[\"Ic3FilterSwitch\"];\n        variants?: ComponentsVariants[\"Ic3FilterSwitch\"];\n    }\n    \"amCharts4.AmCharts4BubbleChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4BubbleChart\"]\n    }\n    \"amCharts4.AmCharts4ComboChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4ComboChart\"]\n    }\n    \"amCharts4.AmCharts4RegularAreaChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4RegularAreaChart\"]\n    }\n    \"amCharts4.AmCharts4RegularBarChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4RegularBarChart\"]\n    }\n    \"amCharts4.AmCharts4RegularColumnChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4RegularColumnChart\"]\n    }\n    \"amCharts4.AmCharts4RegularLineChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4RegularLineChart\"]\n    }\n    \"amCharts4.AmCharts4ScatterPlot\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4ScatterPlot\"]\n    }\n    \"amCharts4.AmCharts4StackedAreaChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4StackedAreaChart\"]\n    }\n    \"amCharts4.AmCharts4StackedBarChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4StackedBarChart\"]\n    }\n    \"amCharts4.AmCharts4StackedColumnChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4StackedColumnChart\"]\n    }\n    \"amCharts4.AmCharts4DonutChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4DonutChart\"]\n    }\n    \"amCharts4.AmCharts4GaugeChart\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4GaugeChart\"]\n    }\n    \"amCharts4.AmCharts4Histogram\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4Histogram\"]\n    }\n    \"amCharts4.AmCharts4SankeyDiagram\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4SankeyDiagram\"]\n    }\n    \"amCharts4.AmCharts4TreeMap\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4TreeMap\"]\n    }\n    \"amCharts4.AmCharts4GeoMap\"?: {\n        variants?: Ic3ChartVariants[\"amCharts4.AmCharts4GeoMap\"]\n    },\n    HomeCard?: {\n        styleOverrides?: ComponentsOverrides[\"HomeCard\"]\n    },\n    HomeConsole?: {\n        styleOverrides?: ComponentsOverrides[\"HomeConsole\"]\n    }\n}\n","import {\n    AxisCoordinate,\n    ConvertToTypeParseSettings,\n    EntityItem,\n    GroupRowIndices,\n    IMdxAxisSeriesInfo,\n    ITidyColumnIndex,\n    ITidyColumnsSource,\n    MdxInfo,\n    TidyCellError,\n    TidyColumnsSubType,\n    TidyColumnsType,\n} from \"./PublicTidyTableTypes\";\nimport {TidyActionEvent} from \"./IcEvent\";\nimport {ThemeTextFormatter} from \"./PublicTheme\";\nimport {Property} from \"csstype\";\nimport {AppNotification} from \"./INotification\";\nimport {MdxNodeIdentifier} from \"./PublicTidyTable\";\nimport {IPublicContext} from \"./PublicContext\";\n\nexport interface ITidyColumnTypedValue {\n\n    value: any;\n    fValue?: string;\n    type: TidyColumnsType;\n\n    /**\n     * Insert this mdx value for this row. Leave undefined to set the mdx info of the row to undefined.\n     */\n    mdxInfo?: MdxInfo | null;\n\n}\n\nexport type ITidyColumnAddValue = ITidyColumnAddValueInsert | ITidyColumnAddValueCopyRow;\n\nexport interface ITidyColumnAddValueInsert {\n\n    options: \"INSERT\";\n\n    value: ITidyColumnTypedValue;\n\n}\n\nexport interface ITidyColumnAddValueCopyRow {\n\n    options: \"COPY_ROW\";\n\n    rowIndex: number;\n\n}\n\n/**\n * Properties with a special meaning\n */\nexport enum ITidyColumnNamedProperties {\n\n    /**\n     * The value of a cell.\n     */\n    mdxCellValue = \"value\",\n\n    /**\n     * The formatted value of a cell. For example, 5003 in euros is formatted as €5,003\n     */\n    mdxCellFormattedValue = \"formattedValue\",\n\n    /**\n     * MDX related colorings\n     */\n    mdxCellBackColor = \"mdxCellBackColor\",\n\n    /**\n     * MDX related colorings\n     */\n    mdxCellForeColor = \"mdxCellForeColor\",\n\n    /**\n     * The format string for the cell value. For example, euros are formatted using €#,###.\n     * and percentages using #0.00%.\n     */\n    mdxCellFormatString = \"mdxCellFormatString\",\n\n    /**\n     * The main color of the cell\n     */\n    mdxCellColor = \"color\",\n\n    /**\n     * Column defined to fire an app. notification.\n     *\n     * The name of the notification (e.g., print-report).\n     */\n    appNotificationType = \"appNotificationType\",\n\n    /**\n     * Column defined to fire an app. notification.\n     *\n     * The parameters of the notification (e.g., page size, filename, ...) as a JSON or a string.\n     */\n    appNotificationPayload = \"appNotificationPayload\",\n\n    /**\n     * Column defined to fire events, the name of the event\n     */\n    eventName = \"eventName\",\n\n    /**\n     * Column defined to fire events, the value of the event (e.g. used in title)\n     */\n    eventValue = \"eventValue\",\n\n    /**\n     * Column defined to fire events, the mdx value of the event (e.g. used in queries)\n     */\n    eventMdxValue = \"eventMdxValue\",\n\n    /**\n     * Column defined as an MDX axis, the unique name of the column  (the name is the value of the column).\n     * This value is fired when doing selection events.\n     * @see {ITidyColumn.getMdxInfo}\n     */\n    uniqueName = \"uniqueName\",\n\n    /**\n     * The caption of the selection event to use. Returned by getMdxInfo(..).\n     * @see {ITidyColumn.getMdxInfo}\n     */\n    mdxInfoCaption = \"mdxInfoCaption\",\n\n    /**\n     * The MdxInfo\n     * @see {ITidyColumn.getMdxInfo}\n     */\n    mdxInfo = \"mdxInfo\",\n\n    /**\n     * Column defined as an MDX axis, the caption of the column\n     */\n    caption = \"caption\",\n\n    /**\n     * Column defined as an MDX axis, the key of the column\n     */\n    mdxCellKey = \"key\",\n\n    /**\n     * Show this when hovering over the cell (or the visualisation representing the cell)\n     */\n    tooltip = \"tooltip\",\n\n    /**\n     * Name for datetime properties for levels of type Year, Month, Day, Hour, etc..\n     */\n    datetime = \"datetime\",\n}\n\nexport const CharacterTidyColumnProperties = new Set<string>([\n\n    ITidyColumnNamedProperties.mdxCellFormattedValue,\n    ITidyColumnNamedProperties.uniqueName,\n\n    ITidyColumnNamedProperties.mdxCellFormatString,\n\n    ITidyColumnNamedProperties.appNotificationType,\n    ITidyColumnNamedProperties.eventName,\n\n    ITidyColumnNamedProperties.caption,\n    ITidyColumnNamedProperties.tooltip,\n\n]);\n\n/**\n * A copy from XLSX CellObject (we don't want the link to the library !)\n */\nexport interface ITidyColumnXlsxCell {\n    /** The raw value of the cell.  Can be omitted if a formula is specified. */\n    v?: string | number | boolean | Date;\n\n    /** Number format string associated with the cell (if requested) */\n    z?: string;\n\n    /**\n     * Back color of the cell.\n     */\n    c?: string;\n\n    /**\n     * Text color of the cell (`FORE_COLOR`).\n     */\n    textColor?: string;\n\n    /**\n     * Text style bold\n     */\n    bold?: boolean;\n\n    /**\n     * Cell contains an error. Value will be red `error`.\n     */\n    error?: TidyCellError;\n\n    /**\n     * Font size in px (number)\n     */\n    fontSize?: number;\n\n    /**\n     * Font family\n     */\n    fontFamily?: string;\n\n}\n\nexport interface ITidyColumnHeaderStyle {\n    fontSize?: string;\n    fontWeight?: string;\n    fontFamily?: string;\n}\n\n// Remove null and undefined from T\ntype NonNullable<T> = Exclude<T, null | undefined>;\n\nexport type AllowedColumnType<T> = TidyColumnsType.UNKNOWN\n    | TidyColumnsType.MIXED\n    | (NonNullable<T> extends Property.Color ? TidyColumnsType.COLOR : TidyColumnsType.UNKNOWN)\n    | (NonNullable<T> extends string ? TidyColumnsType.CHARACTER : TidyColumnsType.UNKNOWN)\n    | (NonNullable<T> extends number ? TidyColumnsType.NUMERIC | TidyColumnsType.LATITUDE | TidyColumnsType.LONGITUDE : TidyColumnsType.UNKNOWN)\n    | (NonNullable<T> extends boolean ? TidyColumnsType.LOGICAL : TidyColumnsType.UNKNOWN)\n    | (NonNullable<T> extends any[] ? TidyColumnsType.LIST : TidyColumnsType.UNKNOWN)\n    | (NonNullable<T> extends Date ? TidyColumnsType.DATETIME : TidyColumnsType.UNKNOWN)\n    | (NonNullable<T> extends unknown ? TidyColumnsType : TidyColumnsType.UNKNOWN)\n    | (T extends null ? TidyColumnsType.NULL : TidyColumnsType.UNKNOWN);\n\nexport interface ITidyBaseColumnReadonly<T> {\n\n    /**\n     * Returns the length of the value array.\n     */\n    length(): number;\n\n    /**\n     * Returns true if and only if the column has zero rows.\n     */\n    isEmpty(): boolean;\n\n    getSource(): ITidyColumnsSource;\n\n    /**\n     * Get the MDX role of the column\n     */\n    getRole(): string | undefined;\n\n    /**\n     * Return the type of the column\n     */\n    getType(): AllowedColumnType<T>;\n\n    /**\n     * e.g., List<T>.\n     */\n    getTypeParam(): TidyColumnsType | undefined;\n\n    /**\n     * E.g., datetime column: YEAR, ...\n     */\n    getSubType(): TidyColumnsSubType | undefined;\n\n    /**\n     * Check if column is of type\n     * @param type check this type\n     */\n    is<T extends TidyColumnsType>(type: T): this is ITidyColumnIsType<T>;\n\n    /**\n     * Returns true if and only if the column is of the type(s) specified\n     * @param typesToCheck one or more types to check this column against\n     */\n    isOfType(...typesToCheck: TidyColumnsType[]): boolean;\n\n    /**\n     * Returns the name of the column.\n     */\n    getName(): string;\n\n    /**\n     * Get the display name of the column. Both the name and the caption form the display name of the column.\n     */\n    getDisplayName(): string;\n\n    /**\n     * Returns the caption of the column. The caption is used for displaying localised\n     * or custom captions for the axis, header, etc.\n     */\n    getCaption(): string;\n\n    /**\n     * Returns the formatter of the column.\n     */\n    getNumberFormat(): ThemeTextFormatter | undefined;\n\n    /**\n     * Returns true if the column is a hierarchical structure\n     */\n    isHierarchy(): boolean;\n\n    /**\n     * For hierarchical structures the tree depth (starts at zero).\n     */\n    getLevelDepthR(idx: number): number;\n\n    /**\n     * Returns the column values.\n     */\n    getValues(): ReadonlyArray<T>;\n\n    /**\n     * Get the value of the column at position idx.\n     * @param idx the position to return the value of.\n     */\n    getValue(idx: number): T;\n\n    /**\n     * Function used for value comparison in sorting and ranking. Return a positive number if a > b, a negative\n     * number if a < b and 0 otherwise.\n     * @param a value 1\n     * @param b value 2\n     */\n    compare(a: T, b: T): number;\n\n    /**\n     * Apply a function to the groups of unique values in this column\n     *\n     * @param useMdx If true, use MDX-unique names to construct groups. If false, use the columns values.\n     * Default = false.\n     *\n     * @returns a map with indexes for each group. Key -> row indeces\n     */\n    groupBy(useMdx?: boolean): Map<string, GroupRowIndices>;\n\n    /**\n     * Same as reIndex but creating a new column leaving this column untouched.\n     *\n     * @see ITidyBaseColumn.reIndex\n     */\n    reIndexN(index: number[]): ITidyBaseColumn<T>;\n\n    /**\n     * Returns the color of this columns' header.\n     * @param hierarchyIdx return the color of this hierarchy. Use if you have multiple column rows in your table.\n     */\n    getHeaderColor(hierarchyIdx?: number): string | undefined;\n\n    /**\n     * Returns the colors of this columns header.\n     */\n    getHeaderColors(): (string | undefined)[] | string | undefined;\n\n    /**\n     * Get the style of the header of this column.\n     * @param hierarchyIdx return the style of this hierarchy. Use if you have multiple column rows in your table.\n     */\n    getHeaderStyle(hierarchyIdx?: number): ITidyColumnHeaderStyle | undefined;\n\n}\n\n/**\n * Base interface for nullable column.\n */\nexport interface ITidyBaseColumn<T> extends ITidyBaseColumnReadonly<T> {\n    /**\n     * Set the color for the columns header\n     */\n    setHeaderColor(color: (string | undefined)[] | string | undefined): void;\n\n    isSameDimensionality(other: ITidyBaseColumn<any>): boolean;\n\n    getErrors(): (TidyCellError | undefined)[];\n\n    /**\n     * If an error occurred in the calculation of cells for a column, then the error can be\n     * retrieved using this function.\n     * @param idx the row index of the cell to retrieve the error of.\n     */\n    getError(idx: number): TidyCellError | undefined;\n\n    /**\n     * Returns first value where callback does not return undefined.\n     * @param callback given the row index, outputs a value or undefined.\n     */\n    findFirst<P>(callback: (idx: number) => P | undefined): P | undefined;\n\n    /**\n     * returns true if the column as a property defining the formatted value.\n     */\n    hasFormattedValue(): boolean;\n\n    /**\n     * Get the formatted value of the column at position idx.\n     *\n     * undefined - if the formatted_value is not available\n     *\n     * @param idx the position to return the value of.\n     */\n    getFormattedValue(idx: number): string | undefined;\n\n    /**\n     * Return the formatted value. Returns undefined if the value is undefined.\n     * If the value has no format, then it uses the default format from the theme.\n     *\n     * @param idx row index\n     * @param context the widget context. Used to access the default formatters. Leave undefined to not use the theme\n     * default formatters.\n     */\n    getFormattedValueOrValue(idx: number, context?: IPublicContext): string | undefined;\n\n    getNumberFormatInfo(): string | undefined;\n\n    /**\n     * Get cell as expected by XLSX library (do not include the interface as it is lazy loaded!).\n     * Does not return the format string.\n     *\n     * @param idx the position to return the value of.\n     * @param prettyHierarchy indent hierarchy columns with space-characters. This results in a nice visual hierarchy in\n     * Excel.\n     */\n    getExcelCell(idx: number, prettyHierarchy?: boolean): ITidyColumnXlsxCell | undefined;\n\n    /**\n     * Returns excel format, best effort\n     */\n    getExcelFormat(): string | undefined;\n\n    /**\n     * Returns the type for Material-UI Table/Grid\n     */\n    getXGridType(): \"string\" | \"number\" | \"date\" | \"dateTime\" | \"boolean\" | undefined;\n\n    /**\n     * Return the cell decoration of the column at `rowIdx`. If the cell has multiple renderers, this method returns\n     * the last added one.\n     */\n    getCellDecoration(rowIdx: number): PublicTidyColumnCellDecorationRendered | undefined;\n\n    /**\n     * Returns true if the column has a property of requested name.\n     */\n    hasProperty(name: ITidyColumnNamedProperties | string): boolean;\n\n    /**\n     * Returns the color column (if defined).\n     *\n     * If the column has type 'color', then it returns itself. Else it returns the\n     * column of the first property(1) with type 'color' (if it is defined).\n     *\n     * (1) the fore color property is excluded.\n     */\n    getColorColumn(): ITidyColorColumn | undefined;\n\n    /**\n     * Returns the color of a cell (if defined).\n     *\n     * If the column has type 'color', then it returns the cell value. Else it returns the\n     * value at rowIdx of the first property(1) with type 'color' (if it is defined).\n     *\n     * (1) the fore color property is excluded.\n     */\n    getColor(rowIdx: number): Property.Color | undefined;\n\n    /**\n     * Returns the property at the specified property coordinate.\n     * @param name name of the property.\n     */\n    getProperty(name: ITidyColumnNamedProperties | string): ITidyUnknownColumn;\n\n    /**\n     * Returns the property at the specified property coordinate.\n     * @param name name of the property.\n     */\n    getOptionalProperty(name: ITidyColumnNamedProperties | string): ITidyUnknownColumn | undefined;\n\n    /**\n     * Get the value of the property for the given property coordinate, and the given row (undefined if the property\n     * does not exist).\n     * @param name name of the property.\n     * @param rowIdx row index for the value to return.\n     */\n    getPropertyAt(name: ITidyColumnNamedProperties | string, rowIdx: number): any;\n\n    /**\n     * Return available properties for this column as a list of columns.\n     */\n    getPropertiesAsColumns(): ITidyUnknownColumn[];\n\n    isWithEntityItem(): boolean;\n\n    /**\n     * Create and return the entity item at position idx for generating events.\n     */\n    getEntityItem(idx: number): EntityItem | undefined;\n\n    /**\n     * Get the entity item for the column. Used in column selection.\n     * Returns an empty array if no entityItems.\n     * @param hierarchyIndices only include these hierarchies for generating the EntityItem. Leave undefined to include\n     * all.\n     */\n    getColumnEntityItem(hierarchyIndices?: number[]): EntityItem[];\n\n    /**\n     * Get the index of the parent. Returns -1 if the parent is the root.\n     * @param idx the index to find the parent of.\n     */\n    getParentIdx(idx: number): number;\n\n    /**\n     * Return the descendants of the node in the hierarchy at the index.\n     * Returned set excludes the node itself.\n     * @param index\n     */\n    getDescendants(index: number): number[];\n\n    /**\n     * Returns true if and only if the node in the hierarchy has children.\n     */\n    hasChildren(index: number): boolean;\n\n    /**\n     * Returns the children of the node at `index`.\n     */\n    getChildren(index: number): number[];\n\n    /**\n     * Return the siblings of the node in the hierarchy at the index.\n     * Including the node itself.\n     * @param index\n     */\n    getSiblings(index: number): number[];\n\n    /**\n     * Get the default member of the dimension that the column represents. Returns undefined\n     * if the column is not a MDX dimension.\n     */\n    getHierarchyDefaultMember(): EntityItem | undefined;\n\n    /**\n     * Get the array of MDX info in the column.\n     * Returns an empty array if no MDX info.\n     */\n    getMdxInfos(): (MdxInfo | undefined)[];\n\n    /**\n     * Returns the MDX info at a row index.\n     */\n    getMdxInfo(idx: number): MdxInfo | undefined;\n\n    /**\n     * Returns the key from the model. Values with the same key are the same in the underlying model. Rows\n     * with the same value but with a different key, are treated as different values.\n     * @param rowIdx\n     */\n    getUid(rowIdx: number): string;\n\n    /**\n     * Get extra information of the MDX axis used for this column, if available.\n     */\n    getAxisInfo(): IMdxAxisSeriesInfo | undefined;\n\n    /**\n     * Get the MDX axis coordinate, if available.\n     * @see AxisCoordinate\n     */\n    getAxisCoordinate(): AxisCoordinate | undefined;\n\n    /**\n     * Get the axis values in this column.\n     *\n     * If it is an MDX Axis, the potentially sorted MDX axis (e.g., pivot table sort)\n     *\n     * If it is not, return undefined\n     */\n    mdxAxis(): ReadonlyArray<T> | undefined;\n\n    /**\n     * Get the unique values in this column.\n     */\n    unique(ignoreNull: boolean): T[];\n\n    /**\n     * Set the name of the column.\n     * @param name set this as the caption of the column.\n     *\n     * Note, do not use this for columns that are in tables as it can cause duplicate columns in a table.\n     * Use setCaption to change the name visible to the user.\n     */\n    setName(name: string): void;\n\n    /**\n     * Set the number/date formatter of the column, calculating and adding the 'formattedValue' property.\n     */\n    setNumberFormat(format: ThemeTextFormatter | undefined): void;\n\n    /**\n     * Set the caption of the column. The caption is used for displaying localised\n     * or custom captions for the axis, header, etc.\n     * @param caption set this as the caption of the column.\n     */\n    setCaption(caption: string): void;\n\n    /**\n     * Returns true if and only if the column has a caption different from the default. The default caption is the\n     * columns name.\n     */\n    hasCaption(): boolean;\n\n    /**\n     * Convert the column to another type. This modifies the values to be of that type.\n     *\n     * If type is datetime, then the settings contain the date locale (default='en_US'), and\n     * the dateformat (default = 'yyyy-MM-dd').\n     */\n    convertToType(type: TidyColumnsType, settings?: ConvertToTypeParseSettings): void;\n\n    /**\n     * Same as convertToType but creating a new column.\n     */\n    convertToTypeN(type: TidyColumnsType, settings?: ConvertToTypeParseSettings): ITidyBaseColumn<T>;\n\n    /**\n     * Create a new column with the content of this column changing both its name and its caption.\n     */\n    duplicate(name: string, caption: string): ITidyBaseColumn<T>;\n\n    /**\n     * Change the values of the column.\n     * @param values the new values for the column.\n     * @param newType the new type for the column. Leave undefined for automatic inference.\n     */\n    setValues<P>(values: P[], newType?: AllowedColumnType<P>): void;\n\n    /**\n     * Apply a transformation to all values in the column. Note, this functions alters the values in the column.\n     * @param fun function with one parameter. Describes the transformation. In the function, index represents the\n     * index of the internal data structure.\n     * @param newType new type for the column. Leave blank for auto inference of the type.\n     */\n    apply<P>(fun: (value: T, index: number) => P, newType?: AllowedColumnType<P>): void;\n\n    /**\n     * Insert values at a row index.\n     * Structure: Map: row idx -> values to insert\n     *\n     * e.g., add totals.\n     */\n    insertValues(inserts: Map<number, ITidyColumnAddValue[]>): void;\n\n    /**\n     * Repeat the values in the column.\n     *\n     * Examples:\n     * column.getValues() --> ['a','b','c']\n     * column.repeat(6,1) --> ['a','b','c','a','b','c']\n     * column.repeat(6,2) --> ['a','a','b','b','c','c']\n     * column.repeat(12,2) --> ['a','a','b','b','c','c','a','a','b','b','c','c']\n     *\n     * @param newLength new length of the array.\n     * @param repetition how many times to repeat each value.\n     */\n    repeat(newLength: number, repetition?: number): void;\n\n    /**\n     * Same as repeat but creating a new column leaving this column untouched.\n     *\n     * @see repeat\n     */\n    repeatN(newLength: number, repetition?: number): ITidyBaseColumn<T>;\n\n    /**\n     * Push a value to the end of the column's values.\n     */\n    pushValue(pushValue: ITidyColumnTypedValue): void;\n\n    /**\n     * Apply a new index to the column and its properties (e.g., limiting rows, reordering rows, copying rows).\n     *\n     * Examples:\n     * <pre>\n     *      initial values       -> [ 'a', 'b', 'c']\n     *        reIndex: [2,1,0]   -> [ 'c', 'b', 'a']\n     *        reIndex: [2,2,1]   -> [ 'c', 'c', 'b']\n     *        reIndex: [0,1,2,2] -> [ 'a', 'b', 'c','c']\n     *        reIndex: [0]       -> [ 'a' ]\n     *        reIndex: [0,5]     -> [ 'a', null ]\n     * </pre>\n     *\n     * @param index new row indices\n     *\n     * @see ITidyColumn.reIndexN\n     */\n    reIndex(index: number[]): void;\n\n    /**\n     * Reset the index set using `reIndex`.\n     */\n    resetIndex(): void;\n\n    /**\n     * Set the formatted values. Use this if you have the formatted values pre-calculated,\n     * or a function to calculate the formatted values.\n     * @param caption the caption for the added property.\n     */\n    setFormattedValues(formattedValues: (string | null)[] | ((value: T | undefined) => string), caption?: string): void;\n\n    /**\n     * Resets the formatted value\n     *\n     * @see setFormattedValues\n     */\n    resetFormat(context: IPublicContext, format: ThemeTextFormatter): void;\n\n    /**\n     * Set the colors for the column.\n     * @param caption the caption for the added property.\n     */\n    setColors(colors: (Property.Color | null)[], caption?: string): void;\n\n    /**\n     * Return a new column with transformed values.\n     * @param fun function with one parameter. Describes the transformation.\n     * @param columnName the name of the new column.\n     * @param newType new type for the column. Leave blank for auto inference of the type.\n     */\n    mapToColumn<P>(fun: (value: T, index: number) => P, columnName: string, newType: AllowedColumnType<P>): ITidyBaseColumn<P>;\n\n    /**\n     *\n     * if it's an mdx axis, for each row of the undelying mdx Axis\n     * if no, for each row\n     *\n     * @see mdxAxis\n     */\n    mapAxisOrRows<K>(callbackfn: (rowIdx: number, column: ITidyBaseColumn<T>) => K): K[];\n\n    /**\n     * @param callbackFn  if the return value of callbackFn is undefined, then it is not included in the returned array.\n     * @param forceMapAllRows if true, also include values returned by callbackFn that are undefined.\n     */\n    mapAllRows<P>(callbackFn: (index: number, column: ITidyBaseColumn<T>) => P | undefined, forceMapAllRows?: boolean): P[];\n\n    /**\n     * Map the rows that are visible given a hierarchical axis, and an array of boolean values\n     * @param expanded a function indicating for each index if it is expanded or not. If it is collapsed, then all\n     * children are not visible.\n     * @param fun function to apply.\n     */\n    mapVisibleRows<P>(expanded: (rowIdx: number) => boolean, fun: (index: number) => P): P[];\n\n    /**\n     * Apply a function to all visible nodes in the column. A nodes' children are visible if expanded evaluates to\n     * true for that node.\n     * @param filter Possibly filter the nodes.\n     */\n    mapTreeVisibleRows<P>(expanded: (rowIdx: number) => boolean, fun: (rowIdx: number, isCollapsed: boolean) => P, filter?: (info: MdxInfo) => boolean): P[];\n\n    /**\n     * Set a property on the column. If the property already exists, it is overwritten.\n     * @param property the column to set as a property. Ensure that the lengths are the same.\n     */\n    setProperty(property: ITidyColumn): void;\n\n    /**\n     * Delete a property on the column\n     */\n    deleteProperty(propertyName: ITidyColumn | string): void;\n\n    /**\n     * The ITidyTableSelection row identifier for the row (uniqueName if it is an MDX like column).\n     */\n    getSelectionRowIdentifier(idx: number): string;\n\n    /**\n     * Returns the row index of the first occurrence where the values of this column equals value.\n     * Returns undefined if it did not find the value.\n     *\n     * @param value value to search for.\n     */\n    getRowIndexOf(value: T): number | undefined;\n\n    /**\n     * For a hierarchical columns returns a list of transformed columns as needed by a pivot table like structure.\n     * If this column is not hierarchical, return this unchanged.\n     *\n     * E.g., a columns with Year, Quarter and Month will be converted into 3 columns [Year, Quarter, Month].\n     */\n    toFlatColumns(nullValue: any, rows: number[] | undefined): ITidyUnknownColumn[];\n\n    /**\n     * Returns the tree-path for the node, including the node itself. The path starts at the node at rowIdx and contains\n     * its parents.\n     * @param rowIdx column index of the node.\n     */\n    getNodePath(rowIdx: number): number[];\n\n    /**\n     * Returns if present a notification as defined by the properties of the columns.\n     */\n    getAppNotification(rowIdx: number): AppNotification | undefined;\n\n    /**\n     * Returns if present an action as defined by the properties of the columns.\n     */\n    getEventAction(rowIdx: number): [string, TidyActionEvent] | undefined;\n\n    mapUniqueNames<T>(uniqueNames: string[], mapper: (idx: number) => T | null | undefined): T[];\n\n    /**\n     * Add the renderer to the column. If a cell has multiple renderers, it uses the last added renderer.\n     *\n     * @see {BaseTidyColumnCellDecoration.appliesToCell}.\n     */\n    setCellDecoration(decoration: PublicTidyColumnCellDecoration): void;\n\n    /**\n     * Return the index of the column.\n     * @see tidyTable.\n     */\n    getIndex(): ITidyColumnIndex[];\n\n    /**\n     * undefined if it is not an MDX member column\n     */\n    getQueryNodeIdentifier(idx: number): MdxNodeIdentifier | undefined;\n\n    /**\n     * Returns the group key at the row index for use with `table.toAmcharts4Data`.\n     */\n    getAmcharts4GroupKey(rowIdx: number): string;\n\n    /**\n     * Mark the column as a total column. Total columns have a different styling and css-class in tables and pivot\n     * tables.\n     * @param isTotal new value. Set to true to mark this column as a total. Use false to remove the mark.\n     * @see isTotalColumn\n     */\n    setIsTotalColumn(isTotal: boolean): void;\n\n    /**\n     * Returns true if and only if the column contains total values.\n     * @see setTotalColumn\n     */\n    getIsTotalColumn(): boolean;\n\n    /**\n     * return true if the column was created from an MDX axis (i.e., [Geo].[Countries] on 0).\n     */\n    isMdxAxis(): boolean;\n\n    addRowValue(insert: ITidyColumnAddValueInsert): void;\n\n    /**\n     * Returns true if and only if the all the datetime values in the column are dates (and do not have a time\n     * component).\n     */\n    hasOnlyDates(): boolean;\n\n    /**\n     * Returns the level depth of the column.\n     *\n     * E.g., if you have a table with `2018`, `2018 Q1` as columns, then the level depths are 0 and 1.\n     */\n    getColumnLevelDepth(): number;\n\n    /**\n     * Set the style of the header of this column. Used in tables, and the Excel export.\n     * @param style the styles\n     * @param hierarchyIdx only set the style of this hierarchy. Default is apply to all hierarchies.\n     */\n    setHeaderStyle(style: ITidyColumnHeaderStyle | undefined, hierarchyIdx?: number): void;\n}\n\nexport interface BaseTidyColumnCellDecoration {\n\n    /**\n     * If true, the renderer handles errors in the cells. If false, the table/pivot table renders an error if the cell\n     * has one.\n     *\n     * Use `column.getError(tidyRow)` to get the error of a cell.\n     */\n    handlesCellsOnError?: boolean;\n\n    /**\n     * Default (i.e., when not defined) is true.\n     */\n    handlesBackgroundColor?: boolean;\n\n    /**\n     * A function that determines if the renderer is applied to a cell. Return true if yes, return false if not.\n     * @param rowIdx row index.\n     */\n    appliesToCell?: (rowIdx: number) => boolean;\n\n    /**\n     * If an object is returned the underlying code uses emotion CSS function to convert to a className,\n     * so you can do className like CSS :\n     *\n     * ```TypeScript\n     * {\n     *      fontSize: \"0.7rem\",\n     *      ':hover': {\n     *        fontSize: \"1.4rem\",\n     *      }\n     * }\n     * ```\n     */\n    cssStyles?: (rowIdx: number) => Record<string, any> | undefined;\n\n}\n\nexport interface ReactTidyColumnCellDecoration extends BaseTidyColumnCellDecoration {\n\n    /**\n     * False if your renderer returns a React element or if you have no renderer.\n     */\n    stringRenderer?: false;\n\n    /**\n     * The cell renders the returned React element. Note that for the Pivot Table, Emotion CSS and JS does not work.\n     */\n    renderer?: (rowIdx: number) => React.ReactElement;\n\n}\n\nexport interface HtmlTidyColumnCellDecoration extends BaseTidyColumnCellDecoration {\n\n    /**\n     * True if your renderer returns a HTML string.\n     */\n    stringRenderer: true;\n\n    /**\n     * The cell renders the returned string as HTML.\n     */\n    renderer: (rowIdx: number) => string;\n\n}\n\nexport type PublicTidyColumnCellDecoration = ReactTidyColumnCellDecoration | HtmlTidyColumnCellDecoration;\n\n/**\n * The renderer for a cell at a row index.\n *\n * @see {PublicTidyColumnCellDecoration}\n */\nexport type PublicTidyColumnCellDecorationRendered = ({\n    stringRenderer: true;\n    renderer: () => string;\n} | {\n    stringRenderer?: false;\n    renderer?: () => React.ReactElement;\n}) & {\n    handlesCellsOnError?: boolean;\n    handlesBackgroundColor?: boolean;\n    cssStyles?: () => Record<string, any> | undefined;\n}\n\nexport type ITidyColumn = ITidyBaseColumn<any>;\nexport type ITidyUnknownColumn = ITidyBaseColumn<unknown>;\nexport type ITidyNullColumn = ITidyBaseColumn<null>;\nexport type ITidyNumericColumn = ITidyBaseColumn<number | null>;\nexport type ITidyCharacterColumn = ITidyBaseColumn<string | null>;\nexport type ITidyColorColumn = ITidyBaseColumn<Property.Color | null>;\nexport type ITidyDateColumn = ITidyBaseColumn<Date | null>;\nexport type ITidyLogicalColumn = ITidyBaseColumn<boolean | null>;\nexport type ITidyListColumn = ITidyBaseColumn<any[] | null>;\n\nexport type ITidyColumnIsType<T extends TidyColumnsType> =\n    T extends TidyColumnsType.ANY ? ITidyColumn :\n        T extends TidyColumnsType.COLOR ? ITidyColorColumn :\n            T extends TidyColumnsType.LONGITUDE ? ITidyBaseColumn<number | null> :\n                T extends TidyColumnsType.LATITUDE ? ITidyBaseColumn<number | null> :\n                    T extends TidyColumnsType.ISO2_LOCATION_CODE ? ITidyCharacterColumn :\n                        T extends TidyColumnsType.DATETIME ? ITidyDateColumn :\n                            T extends TidyColumnsType.NUMERIC ? ITidyNumericColumn :\n                                T extends TidyColumnsType.CHARACTER ? ITidyCharacterColumn :\n                                    T extends TidyColumnsType.LOGICAL ? ITidyLogicalColumn :\n                                        T extends TidyColumnsType.LIST ? ITidyListColumn :\n                                            T extends TidyColumnsType.MIXED ? ITidyColumn :\n                                                T extends TidyColumnsType.NULL ? ITidyNullColumn :\n                                                    ITidyUnknownColumn;","import {\n    EntityItem,\n    ITidyTableSelection,\n    SelectionBehaviour,\n    TidyRowFilter,\n    WidgetTidySelectionOptions\n} from \"./PublicTidyTableTypes\";\nimport {ITidyBaseColumn, ITidyColumn} from \"./PublicTidyColumn\";\nimport {ILazyTreeViewLoader} from \"./LazyTreeView\";\nimport {PublicIcEvent} from \"./IcEvent\";\nimport {Theme} from \"@mui/material/styles\";\nimport {MdxNodeIdentifier} from \"./PublicTidyTable\";\nimport {AppNotification} from \"./INotification\";\n\nexport enum SelectionMode {\n    /**\n     * User can only select one item.\n     */\n    SINGLE = 'SINGLE',\n\n    /**\n     * User can select multiple items.\n     */\n    MULTIPLE = 'MULTIPLE'\n}\n\nexport enum TreeFireEventMode {\n    ALL_SELECTED = 'ALL_SELECTED',\n    /**\n     * if all children are selected,  fire only the parent\n     */\n    COMPACT_ON_PARENT = 'COMPACT_ON_PARENT'\n}\n\n\nexport enum TidyPivotTableLikeNodeStatus {\n    COLLAPSED,\n    EXPANDED,\n    NO_CHILDREN_OR_DRILLDOWN,\n    WITH_DRILLDOWN,\n    LOADING\n}\n\nexport type TidyEvent = MouseEvent | TouchEvent;\n\nexport type IWidgetInteractionMode = \"drilldown\" | \"selection\";\n\nexport interface ITidyTableInteractionSelection {\n\n    /**\n     * Sets the selection at the creation of the widget.\n     */\n    initializeSelection(isRangeSelection?: boolean): void;\n\n    /**\n     * Sets the selection at the creation of the widget: autocomplete-lazy.\n     */\n    initializeLazySelection(items?: EntityItem[]): void;\n\n    /**\n     * Returns true if the selection if empty. Returns false otherwise.\n     */\n    isSelectionEmpty(): boolean;\n\n    firstIdxSelected(): number | undefined;\n\n    /**\n     * A row is selected if all cells in the row are selected\n     * @param rowIdx the index of the row\n     */\n    isSelected(rowIdx: number): boolean;\n\n    /**\n     * Returns true if and only if the column is selected.\n     * @param colIdx index of the column in the tidy table.\n     * @param hierIdx optional. Use to check if the hierarchy index is selected. Leave undefined to check the column.\n     */\n    isColumnSelected(colIdx: number, hierIdx?: number): boolean;\n\n    /**\n     * Returns true if and only if the cell is selected.\n     * @param rowIdx\n     */\n    isCellSelected(rowIdx: number, colIdx: number): boolean;\n\n    /**\n     * For the sankey diagram, a row is selected if connecting nodes are in the selection.\n     * @param rowIdx the index of the row\n     * @param column selection should be in this column\n     */\n    isSelectedSankey(rowIdx: number, column: ITidyColumn): boolean;\n\n    /**\n     * map function on selected rows\n     */\n    mapSelectedRows<T>(callback: (rowIdx: number) => T | null | undefined): T[];\n\n    /**\n     * Creates a new Column of size Table row count with the following values\n     *\n     * @param selectedItemValue  if the row is selected\n     * @param notSelectedItemValue  if the row is not selected\n     * @param noSelectionValue   if defined an the selection is empty, all row values have this value\n     */\n    applySelectionToNewColumn<T>(selectedItemValue: T, notSelectedItemValue: T, noSelectionValue?: T): ITidyBaseColumn<T>;\n\n    /**\n     * Handles the row click event for the selection\n     * @param rowIdx index of row clicked\n     * @param event the mouse event of the click\n     */\n    handleClickSelection(rowIdx: number, event?: TidyEvent): void;\n\n    /**\n     * Handles the click event for the selection on a given column.\n     *\n     * If the column is not part of the selection columns of the widget nothing will happen\n     *\n     * @param column column index of the tidy table\n     * @param event the mouse event of the click\n     */\n    handleColumnSelection(colIdx: number, event?: TidyEvent): void;\n\n    /**\n     * Handles the click event for the selection of a given cell\n     *\n     * If the columns is not part of the selection columns of the widget nothing will happen\n     *\n     * @param rowIdx row index of clicked cell in the tidy table\n     * @param colIdx column index of clicked cell in the tidy table\n     * @param event the mouse event of the click\n     */\n    handleCellSelection(rowIdx: number, colIdx: number, event?: TidyEvent): void;\n\n    /**\n     * Get the interaction mode:\n     * undefined = no interactions in the widget,\n     * selection = perform selection interaction,\n     * drilldown = perform drilldown interaction.\n     */\n    getInteractionMode(): IWidgetInteractionMode | undefined;\n\n    getColorOnSelection(theme: Theme, color: string | undefined, rowIdx: number): string | undefined;\n\n    /**\n     * Select multiple rows at once\n     */\n    handleMultipleRowSelection(rowIds: number[]): void;\n\n    /**\n     * Perform a row-selection click on multiple rows at the same time. Has similair CTRL functionality as\n     * handleClickSelection(...). SHIFT is not supported.\n     */\n    handleMultipleRowSelectionClick(rowIds: number[], event?: TidyEvent): void;\n\n    /**\n     * Clear the selection and fire an empty event value. Note, this resets the\n     * selection to the initial selection.\n     */\n    handleClearSelection(): void;\n\n    /**\n     * Resets the selection to his default/initial state.\n     */\n    handleToInitialSelection(): void;\n\n    /**\n     * Get the selection mode (single or multiple) of the interaction object.\n     */\n    getSelectionMode(): SelectionMode;\n\n    /**\n     * Set the selection mode of the interaction.\n     * @param mode\n     */\n    setSelectionMode(mode: SelectionMode): void;\n\n    /**\n     * Set the selection behaviour for when the selection is empty.\n     * @param behaviour\n     */\n    setSelectionEmptyBehaviour(behaviour: SelectionBehaviour): void;\n\n    setSelectionAllBehaviour(behaviour: SelectionBehaviour): void;\n\n    /**\n     * If the selection is on a tree, this determines how the fired event is optimized for the\n     * tree structure. Collapsed means that if all children are selected, we only use the parent. Children means\n     * that we use leaves only. All means that we fire both parent and child nodes.\n     * @param mode\n     */\n    setTreeFireEventMode(mode: TreeFireEventMode): void;\n\n    setTreeCascade(value: boolean): void;\n\n    /**\n     * the selection will treat a click without ctr or shift as with a ctr key pressed  (e.g. check boxes)\n     */\n    setNoKeyModifierAsCtrl(value?: boolean): void;\n\n    /**\n     * Set to true to enable selection on the interaction object.\n     * @param enabled if true, the selection is enabled. If false, the interaction object does not respond to\n     * methods setting the selection (e.g. click).\n     */\n    setSelectionActive(enabled?: boolean): void;\n\n    /**\n     * Returns true if the selection is activated, e.g. the interaction object responds to click and other selection\n     * events.\n     */\n    isSelectionActive(): boolean;\n}\n\n\nexport interface ITidyTableDrilldown {\n\n    handleDrilldown(rowIdx: number, event: TidyEvent | undefined, stopDrillDownDepth?: number): void;\n\n    hasDrilldown(): boolean;\n\n    hasNodeDrilldown(nodeInfo: MdxNodeIdentifier, stopDrillDownDepth?: number): boolean;\n\n    hasPivotLikeDrilldown(): boolean;\n}\n\nexport interface ITidyTableInteractionEvent {\n\n    /**\n     * actionName if the action is bound to a channel, sends the events ( e.g. 'onClick' to the channel 'year' )\n     *\n     * If rowIdx is an empty array, [], fires a mdx empty set event -> ∅\n     */\n    fireEvent(actionName: string, column: ITidyColumn | ITidyColumn[] | undefined, rowIdx: number | number[]): void;\n\n    fireClearEvent(actionName: string): void;\n\n    /**\n     * actionName if the action is bound to a channel, sends the emptySet event, ∅\n     */\n    fireEmptySetEvent(actionName: string): void;\n\n    /**\n     * actionName if the action is bound to a channel, send an Mdx Event (value,mdx)\n     */\n    fireMdxEvent(actionName: string, value: string, mdx: string): void;\n\n    /**\n     * returns the value of the event\n     */\n    getEventValue(actionName: string): PublicIcEvent | undefined;\n\n    /**\n     * returns true if the actionName in bound to a channel\n     */\n    firesEvent(actionName: string): boolean;\n\n    /**\n     * Returns a function that evaluates to true if and only if that row is selected.\n     * Returns undefined if there is no selection.\n     */\n    getIsRowSelectedFilter(): TidyRowFilter | undefined;\n\n}\n\nexport interface ITidyTableInteraction extends ITidyTableInteractionSelection, ITidyTableInteractionEvent, ITidyTableDrilldown {\n\n    /**\n     * Handles a row hit/click, doing a selection or a drilldown depending on the widget status\n     *\n     * The column(s) for the selection or the drilldown are based on the widget options/settings\n     *\n     * This does not fire any event. To fire an event, use fireEvent.\n     *\n     * @see fireEvent\n     */\n    handleRowHit(rowIdx: number, event: TidyEvent | undefined): void;\n\n    /**\n     * Handles a cell click in the tidy table.\n     * @param rowIdx row index of the cell\n     * @param colIdx column index of the cell\n     * @param event mouse/touch event\n     *\n     * @see handleRowHit\n     */\n    handleCellHit(rowIdx: number, colIdx: number, event: TidyEvent | undefined): void;\n\n    /**\n     * Handles a column click in the tidy table.\n     * @param colIdx index of clicked column in the tidy table\n     * @param event mouse/touch event\n     *\n     * @see handleRowHit\n     */\n    handleColumnHit(colIdx: number, event: TidyEvent | undefined): void;\n\n    /**\n     * Handles a row hit for the sankey diagram. The sankey differs from normal selection because it makes a tuple,\n     * not a set.\n     */\n    handleRowHitSankey(rowIdx: number, column: ITidyColumn, event: TidyEvent | undefined): void;\n\n    /**\n     * Collapsed / Expand on a column row (i.e. it's a tree)\n     */\n    toggleCollapse(column: ITidyColumn, rowIdx: number): void;\n\n    /**\n     * returns the collapse/expand state that has not yet been set by the end user (i.e. first time, on drilldowns..)\n     */\n    setCollapseUnsetFunction(collapseUnsetFunction?: (nodeInfo: MdxNodeIdentifier) => boolean): void;\n\n    /**\n     * Map a function to the visible rows only. Used in tree structures with expanded or collapsed items.\n     * @param column column to map the values of\n     * @param mapper function\n     * @param inverse per default, all items are expanded. If inverse is true, all items are collapsed per default.\n     */\n    mapVisibleRows<T>(column: ITidyColumn, mapper: (index: number) => T, inverse?: boolean): T[];\n\n    // mapTreeVisibleRows<T extends ReactElement>(column: ITidyColumn, mapper: (index: number) => T, filter?: (info: MdxInfo) => boolean): T[];\n\n    isCollapsed(column: ITidyColumn, rowIdx: number): boolean;\n\n    /**\n     * Is the node loading\n     */\n    isLoading(column: ITidyColumn, rowIdx: number): boolean;\n\n    setSelectionColumns(columns: ITidyColumn[] | ((oldColumns: ITidyColumn[]) => ITidyColumn[])): void;\n\n    /**\n     * Change the default drilldown column.\n     * @param column column to use for the drill-downs. Use undefined to reset to default.\n     */\n    setDrilldownColumn(column: ITidyColumn | undefined): void;\n\n    /**\n     * Pivot Type behavior ( nodes can collapse/expand + drilldown might return some values)\n     *\n     * pay attention that the query needs to set the flag, pivot table like (to insert data)\n     */\n    pivotTableLikeDrilldown(event: TidyEvent, column: ITidyColumn, rowIdx: number, stopDrillDownDepth?: number): void;\n\n    pivotTableLikeDrilldownOnNode(event: TidyEvent, nodeInfo: MdxNodeIdentifier, stopDrillDownDepth?: number): void;\n\n    pivotTableLikeNodeStatus(column: ITidyColumn, rowIdx: number, stopDrillDownDepth?: number): TidyPivotTableLikeNodeStatus;\n\n    asLazyTreeViewLoader(column: ITidyColumn): ILazyTreeViewLoader;\n\n    getCompactedSelectionNames(): string[] | undefined;\n\n    /**\n     * Returns true if the column is used for the row selection.\n     */\n    isSelectable(col: ITidyColumn): boolean;\n\n    isHierarchyIdxSelectable(hierIndex: number): boolean;\n\n    /**\n     * Returns the rows of the items currently in the selection. Note, the item must be present in the current tidy\n     * table.\n     */\n    getSelectedRows(): number[];\n\n    // Sort the selection by column-values order if multiple are selected? Tree -> true\n    setSortSelectionToColumnOrder(value: boolean): void;\n\n    /**\n     * Returns compacted selection if TreeFireEventMode === COMPACT_ON_PARENT. Else returns undefined.\n     */\n    getCompactedSelectionItems(): ITidyTableSelection[] | undefined;\n\n    /**\n     * Returns the widgets selection options.\n     */\n    getWidgetSelectionOptions(): WidgetTidySelectionOptions;\n\n    /**\n     * Returns the selection in the interaction object.\n     */\n    getSelectedItems(): ITidyTableSelection[];\n\n    /**\n     * Add an item to the interactions selection.\n     */\n    setSelection(items: ITidyTableSelection | ITidyTableSelection[]): void;\n\n    /**\n     * Use for publishing app notifications, e.g., print the report.\n     */\n    publishAppNotification(notification: AppNotification): void;\n\n    /**\n     * Get a column from the underlying tidy table.\n     * @param columnIdx\n     */\n    getDrilldownColumn(columnIdx: number): ITidyColumn;\n\n    /**\n     * Return the selection behaviour when the selection is empty.\n     */\n    getEmptyMode(): SelectionBehaviour | undefined;\n\n}\n\n","import {ITidyColumn, ITidyNumericColumn} from \"./PublicTidyColumn\";\nimport {GroupRowIndices} from \"./PublicTidyTableTypes\";\n\n/**\n * A tree node that with origin in a TidyColumn\n */\nexport interface TidyTreeNode {\n\n    /**\n     * The column the tree node was generated from\n     */\n    originalColumn?: ITidyColumn;\n\n    /**\n     * The rows that the node is created from. Undefined if and only if the node is the root node.\n     */\n    rowIds?: GroupRowIndices;\n\n    /**\n     * The label/value of this node\n     */\n    nodeLabel: string;\n\n    /**\n     * Children of this tree\n     */\n    children: TidyTreeNode[];\n}\n\n/**\n * A tree structure that was generated from a TidyTable.\n *\n * Table:\n * budget type | cc\n * Monthly Budget | Savings\n * Monthly Budget | Mortgage/Rent\n * Yearly Budget | Car Payment\n *\n * converts to <nodeLabel> <rowIds>:\n * root (undefined)\n *  |\n *  --- Monthly Budget [0,1]\n *  |     |\n *  |     --- Savings [0]\n *  |     |\n *  |     --- Mortgage/Rent [1]\n *  |\n *  --- Yearly Budget [3]\n *       |\n *       --- Car Payment [3]\n *\n */\nexport class TidyTree {\n\n    root: TidyTreeNode;\n\n    constructor(root?: TidyTreeNode) {\n        this.root = {\n            nodeLabel: 'root',\n            children: [],\n            ...root\n        };\n    }\n\n    /**\n     * A unique id for each node of the tree\n     * returns levelDepth + \"--\" + node.nodeLabel, or \"root\" for the root node.\n     */\n    static getUniqueId(node: TidyTreeNode, levelDepth: number): string {\n        if (node.rowIds == null) {\n            return \"root\";\n        }\n        return levelDepth + \"--\" + node.nodeLabel + \"--\" + (node.rowIds[0]);\n    }\n\n    /**\n     * Performs the specified action on each node of the tree.\n     * If callbackfn return false, it will not perform a foreach on it's children.\n     * The callback function does not run for the root node.\n     * Leveldepth = number of nodes between node and the root node.\n     */\n    forEach<T>(callbackfn: ForEachNodeCallbackFn<T>, getTopParentStat?: (topParentNode: TidyTreeNode) => T): void {\n\n        function forEachNested(children: TidyTreeNode[], levelDepth: number, parent: TidyTreeNode, callbackfn: ForEachNodeCallbackFn<T>, topParentStat?: T) {\n            children.forEach((node, idx) => {\n                if (callbackfn(node, levelDepth, parent, idx, topParentStat) !== false) {\n                    forEachNested(node.children, levelDepth + 1, node, callbackfn, topParentStat);\n                }\n            })\n        }\n\n        this.root.children.forEach((topParentNode, idx) => {\n            const topParentSummary = getTopParentStat != null ? getTopParentStat(topParentNode) : undefined;\n            if (callbackfn(topParentNode, 0, this.root, idx, topParentSummary) !== false) {\n                forEachNested(topParentNode.children, 1, topParentNode, callbackfn, topParentSummary);\n            }\n        });\n\n    }\n\n    /**\n     * aggregates all children measures values on parents using aggregation function recursively\n     * aggrfn is sum by default\n     */\n    getNodeValue(node: TidyTreeNode, measure: ITidyNumericColumn): number | null {\n        if (node.rowIds == null) {\n            return [...measure.getValues()].reduce(sumAggregation);\n        }\n        if (node.originalColumn?.isHierarchy()) {\n            return measure.getValue(node.rowIds[0]);\n        }\n        const values = node.rowIds.map(i => measure.getValue(i));\n        return values.reduce(sumAggregation);\n    }\n}\n\nfunction sumAggregation(a: number | null, b: number | null) {\n    if (a == null)\n        return b;\n    if (b == null)\n        return a;\n    return a + b;\n}\n\n/**\n * Top parent node = the node that is a direct child of root and of which node is a descendant.\n */\nexport type ForEachNodeCallbackFn<T> = (node: TidyTreeNode, levelDepth: number, parent: TidyTreeNode, nodeChildrenIdx: number, parentSummary?: T) => boolean | void;","import {SortingType} from \"./PublicTidyTableTypes\";\nimport {FormFieldObject, FormFields} from \"./PublicTemplateForm\";\n\nexport enum TidyHistogramBucketFormat {\n    INTERVAL = 'interval',\n    MATH_INTERVAL = 'mathInterval',\n    MATH_INTERVAL_REVERSED = 'mathIntervalReversed',\n    FROM_ONLY = 'fromOnly',\n    TO_ONLY = 'toOnly'\n}\n\nexport enum TidyHistogramBucketType {\n    /**\n     * [from, to)\n     */\n    LEFT_CLOSED = 'leftClosed',\n\n    /**\n     * (from, to]\n     */\n    RIGHT_CLOSED = 'rightClosed'\n}\n\nexport enum HistogramBinType {\n    AUTOMATIC_WITH_BINS = \"automatic\",\n    USER_DEFINED = \"userDefined\",\n\n    /**\n     * Makes sure that the automatic buckets do not consist of floating point numbers with many decimals.\n     * E.g., it uses [0, 0.5, 1] instead of [0.001, 0.4955, 0.99]. User cannot set the number of bins however.\n     */\n    INTERVAL_STEPS = \"roundedIntervals\"\n}\n\nexport interface TidyHistogramOptions extends FormFieldObject {\n\n    /**\n     * Bucket Mode.\n     *\n     * Automatically create buckets or define them yourself.\n     */\n    binType: HistogramBinType;\n\n    /**\n     * Bucket Count.\n     *\n     * The number of buckets to auto generate.\n     */\n    numberOfBins: number;\n\n    /**\n     * Number of buckets per interval step.\n     */\n    prettyIntervalCount: number;\n\n    /**\n     * Custom Buckets.\n     *\n     * A list of objects `{from,to,name}`. Each object describes the range `from < x <= to`. No `from` or `to`\n     * means that the range is unbounded on that side.\n     */\n    customBins: string;\n\n    /**\n     * Sort Buckets.\n     *\n     * Sort the buckets in this order. The sort uses the `from` of each bucket.\n     */\n    sortBins: SortingType;\n\n    /**\n     * Bucket Name Format.\n     *\n     * How to format the names for the bucket. If there is a name in the user defined specification,\n     * then the bucket takes that name.\n     */\n    bucketFormat: TidyHistogramBucketFormat;\n\n    /**\n     * Bucket Type.\n     *\n     * Which side of the bucket is closed?\n     */\n    intervalType: TidyHistogramBucketType;\n\n    /**\n     * Include row ids of the rows that are in the bucket. Added in the table as a column with array values. E.g.,\n     * value [0,4,5] means rows 0, 4 and 5 are in the bucket.\n     */\n    includeRowIds?: boolean;\n}\n\nexport const TidyHistogramMetaOptions = (group?: string, hideSort = false): FormFields<TidyHistogramOptions> => {\n    return {\n        'binType': {\n            group,\n            fieldType: \"option\",\n            editorConf: {\n                allowDuplicate: true,\n                optionValues: Object.values(HistogramBinType),\n                optionName: \"HistogramBinType\"\n            },\n            defaultValue: HistogramBinType.AUTOMATIC_WITH_BINS\n        },\n        'numberOfBins': {\n            group,\n            fieldType: \"number\",\n            defaultValue: 10,\n            dependsOn: \"binType\",\n            dependsOnVisibility: dependsOnValue => dependsOnValue === HistogramBinType.AUTOMATIC_WITH_BINS\n        },\n        'customBins': {\n            group,\n            fieldType: \"json\",\n            defaultValue: '[{\"to\": 10},{\"from\":10,\"to\":100},{\"from\":100}]',\n            dependsOn: \"binType\",\n            dependsOnVisibility: dependsOnValue => dependsOnValue === HistogramBinType.USER_DEFINED\n        },\n        'prettyIntervalCount': {\n            group,\n            fieldType: \"number\",\n            defaultValue: 4,\n            dependsOn: \"binType\",\n            dependsOnVisibility: dependsOnValue => dependsOnValue === HistogramBinType.INTERVAL_STEPS\n        },\n        'sortBins': {\n            group,\n            fieldType: \"option\",\n            editorConf: {\n                optionValues: Object.values(SortingType),\n                optionName: \"SortingType\",\n            },\n            defaultValue: SortingType.ASCENDING,\n            visibility: !hideSort\n        },\n        'bucketFormat': {\n            group,\n            fieldType: \"option\",\n            defaultValue: TidyHistogramBucketFormat.INTERVAL,\n            editorConf: {\n                optionValues: Object.values(TidyHistogramBucketFormat),\n                optionName: \"TidyHistogramBucketFormat\"\n            }\n        },\n        \"intervalType\": {\n            group,\n            fieldType: 'option',\n            defaultValue: TidyHistogramBucketType.RIGHT_CLOSED,\n            editorConf: {\n                optionValues: Object.values(TidyHistogramBucketType),\n                optionName: \"TidyHistogramBucketType\"\n            }\n        },\n        \"includeRowIds\": {\n            fieldType: 'boolean',\n            visibility: false,\n        }\n    }\n}\n\nexport const TidyHistogramBucketColName = \"bucket\";\nexport const TidyHistogramCountColName = \"count\";\nexport const TidyHistogramRowIdsName = \"rowIds\";\n","/* eslint @typescript-eslint/ban-ts-comment: 0 */  // --> OFF\n\nexport interface IScriptCallback {\n\n    onSuccess: () => void;\n    onError: (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => void;\n\n}\n\nexport class RemoteContainerUtils {\n\n    public static loadScript(tenant: string | null, url: string, callback: IScriptCallback): void {\n\n        if (tenant) {\n            tenant = encodeURIComponent(tenant) + \"_\";\n        } else {\n            tenant = \"\";\n        }\n\n        url = url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"t=\" + tenant + new Date().getTime() /* cache busting */;\n\n        console.log(\"[Plugin] setup remote plugin (load-script) [\" + url + \"]\");\n\n        const element = document.createElement(\"script\");\n\n        element.src = url;\n        element.type = \"text/javascript\";\n        element.async = true;\n\n        element.onload = () => {\n            callback.onSuccess();\n        };\n\n        element.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {\n            callback.onError(event, source, lineno, colno, error);\n        };\n\n        document.head.appendChild(element);\n    }\n\n    public static loadModule(scope: string, module: string): () => Promise<any> {\n\n        // An async function is a function that knows how to expect the possibility\n        // of the await keyword being used to invoke asynchronous code.\n\n        // So the async keyword is added to functions to tell them to return a promise\n        // rather than directly returning the value.\n\n        return async (): Promise<any> => {\n\n            // Initializes the share scope. This fills it with known provided modules\n            // from this build and all remotes.\n\n            // @ts-ignore\n            await __webpack_init_sharing__(\"default\");\n\n            // or get the container somewhere else\n            const container = (window as any)[scope];\n\n            // Initialize the container, it may provide shared modules\n\n            // @ts-ignore\n            await container.init(__webpack_share_scopes__.default);\n            const factory = await (window as any)[scope].get(module);\n\n            const Module = factory();\n            return Module;\n        };\n    }\n\n\n}","export class AlertDialogClasses {\n\n    /**\n     * Style applied to\n     */\n    static root = \"ic3AlertDialog-root\";\n\n    /**\n     * Style applied to\n     */\n    static formRoot = \"ic3AlertDialog-formRoot\";\n\n    static message = \"ic3AlertDialog-message\";\n\n    static warning = \"ic3AlertDialog-warning\";\n\n}\n\nexport declare type AlertDialogClassKey = keyof AlertDialogClasses;\n\n","import {FormFieldObject, Hook, IColorDef} from \"../PublicTemplateForm\";\nimport {TidyTableColumnSelector, UseDatetimeAxis} from \"../PublicTidyTableTypes\";\nimport {TidyHistogramOptions} from \"../PublicTidyHistogram\";\nimport {PublicAmCharts4Base} from \"../PublicAmCharts4Base\";\n\nexport enum AxisRangeType {\n    LINE = \"single_line\",\n    RANGE = 'range',\n    LINE_PER_MEASURE = \"LINE_PER_MEASURE\"\n}\n\nexport enum GeoMapChartProjection {\n    Albers = 'Albers',\n    AlbersUsa = 'AlbersUsa',\n    AzimuthalEqualArea = 'AzimuthalEqualArea',\n    Eckert6 = 'Eckert6',\n    EqualEarth = 'EqualEarth',\n    Projection = 'Projection',\n    Mercator = 'Mercator',\n    Miller = 'Miller',\n    NaturalEarth1 = 'NaturalEarth1',\n    Orthographic = 'Orthographic',\n    Stereographic = 'Stereographic',\n}\n\nexport enum GeoMapChartUnMatchedRegionStrategy {\n    USE_DEFAULT_COLOR = 'USE_DEFAULT_COLOR',\n    EXCLUDE_FROM_MAP = 'EXCLUDE_FROM_MAP',\n}\n\nexport enum Amcharts4LineSmoothMethod {\n    NONE = \"none\",\n    TENSION = \"tension\",  // See https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Smoothed_lines\n    MONOTONE_X = \"monotoneX\",  // See https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Alternate_smoothing_algorithm\n    MONOTONE_Y = \"monotoneY\"  // See https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Alternate_smoothing_algorithm\n}\n\nexport enum TrendLineType {\n\n    MEAN = \"MEAN\",\n\n    OLS = \"OLS\"\n\n}\n\nexport interface IStrokeStyleProperties extends FormFieldObject {\n    /**\n     * Stroke color of the border.\n     */\n    itemStrokeFill?: string;\n\n    /**\n     * Width of the border.\n     */\n    itemStrokeWidth: number;\n\n    /**\n     * Opacity of the border.\n     */\n    itemStrokeOpacity: number;\n}\n\nexport enum LegendPositionOption {\n    \"bottom_left\" = \"bottom_left\",\n    \"bottom_center\" = \"bottom_center\",\n    \"bottom_right\" = \"bottom_right\",\n    \"right_bottom\" = \"right_bottom\",\n    \"right_middle\" = \"right_middle\",\n    \"right_top\" = \"right_top\",\n    \"top_right\" = \"top_right\",\n    \"top_center\" = \"top_center\",\n    \"top_left\" = \"top_left\",\n    \"left_top\" = \"left_top\",\n    \"left_middle\" = \"left_middle\",\n    \"left_bottom\" = \"left_bottom\"\n}\n\nexport enum OverflowType {\n    WRAP = 'WRAP',\n    TRUNCATE = 'TRUNCATE',\n    NONE = 'NONE'\n}\n\nexport enum CategoryAxisRotateLabels {\n    YES = 'YES',\n    NO = 'NO'\n}\n\nexport enum SeriesLabelsPosition {\n    START = \"START\",\n    MIDDLE = \"MIDDLE\",\n    END = \"END\",\n    OUTSIDE = \"OUTSIDE\"\n}\n\nexport enum SeriesType {\n    LINE = \"LINE\",\n    COLUMN = \"COLUMN\"\n}\n\nexport enum DrawSeriesOnAxis {\n    LEFT = \"left\",\n    RIGHT = \"right\"\n}\n\nexport interface IBulletShapeOptions extends FormFieldObject {\n    bulletShapeWidth: number;\n    bulletShapeHeight: number;\n}\n\nexport interface Am4PieSeriesOptions extends FormFieldObject, IStrokeStyleProperties {\n\n    /**\n     * Values.\n     *\n     * Data column (numeric) that defines the value of the slices.\n     */\n    value: TidyTableColumnSelector;\n\n    /**\n     * Tooltip.\n     *\n     * The text displayed as a tooltip on the slices.\n     */\n    chartCursorTooltipPie: string;\n\n    /**\n     * Sort Slices.\n     *\n     * Preferably, the slices of the donut chart are sorted large to small. Enable this options to sort the slices.\n     */\n    pieSeriesSortSlices: boolean;\n\n    /**\n     * Colors.\n     *\n     * Data column that defines the colors of the slices. Using the Category (see the Labels section) as default.\n     */\n    color?: TidyTableColumnSelector;\n}\n\nexport interface Am4PieLabelOptions extends FormFieldObject {\n\n    /**\n     * Category.\n     *\n     * Data column that identifies the slices in the pie chart.\n     */\n    category: TidyTableColumnSelector;\n\n    /**\n     * Text.\n     *\n     * The text displayed on the slices.\n     */\n    sliceLabelsText: string;\n\n    /**\n     * Max Width.\n     *\n     * Maximum width of the label.\n     */\n    sliceLabelsMaxWidth: number;\n\n    /**\n     * Overflow Type.\n     *\n     * What happens when the label is larger than the max width?\n     */\n    sliceLabelsOverflow?: OverflowType;\n\n    /**\n     * Align Labels.\n     *\n     * Align the labels to the left and to the right of the chart.\n     */\n    sliceLabelsAlignLabels: boolean;\n\n    /**\n     * Hide labels below this threshold. Can be a number (e.g., 100) or a percentage (e.g., 5%).\n     */\n    sliceLabelsHideThreshold?: string;\n}\n\nexport interface Am4LabelOptions extends FormFieldObject {\n\n    /**\n     * Text.\n     *\n     * The text displayed in the center of the chart.\n     * Use a single space to show no text and disable the label.\n     */\n    labelText: string;\n\n    labelTextAlign: 'start' | 'end' | 'middle';\n    labelDy: number;\n    labelDx: number;\n    labelHasBackground: boolean;\n    labelBackgroundColor?: IColorDef;\n    labelBackgroundOpacity: number;\n    labelHorizontalCenter: 'left' | 'middle' | 'right' | 'none';\n    labelVerticalCenter: 'bottom' | 'middle' | 'top' | 'none';\n}\n\nexport interface Am4LegendOptions extends FormFieldObject {\n\n    /**\n     * Legend.\n     */\n    legendEnabled: boolean;\n\n    /**\n     * Legend Position.\n     */\n    legendPosition: LegendPositionOption;\n\n    /**\n     * Reverse Legend Order.\n     *\n     * Reverse the items in the legend.\n     */\n    legendOrderReversed: boolean;\n}\n\nexport interface Am4DonutLegendOptions extends Am4LegendOptions {\n\n    /**\n     * Legend Label.\n     *\n     * The HTML contents of the legend labels.\n     */\n    legendLabel: string;\n\n    /**\n     * Legend Value.\n     *\n     * Show a value in the legend next to the label. Leave blank to show no value. The value is rendered as HTML.\n     */\n    legendValue?: string;\n}\n\nexport interface Am4DonutOptions extends FormFieldObject {\n\n    /**\n     * Inner Radius.\n     *\n     * The inner radius of the donut as a percentage of the outer radius. Set to 0 to get a pie chart.\n     */\n    donutInnerRadius: number;\n\n    /**\n     * Radius.\n     *\n     * The radius of the chart as a percentage of the available space.\n     */\n    donutRadius: number;\n\n    /**\n     * Start Angle.\n     *\n     * The donut starts at this angle. \"The angle in degrees is a value between 0 and 360. Note, the angle starts\n     * at 3 o'clock and rotates clockwise. An angle of 180 starts the donut at 9 o'clock.\n     */\n    donutStartAngle: number;\n\n    /**\n     * End Angle.\n     *\n     * The angle in degrees is a value between 0 and 360. Note, the angle starts at 3 o'clock and rotates clockwise.\n     * An angle of 360 ends the donut at 3 o'clock.\n     */\n    donutEndAngle: number;\n}\n\nexport interface Am4GaugeHandOptions extends FormFieldObject {\n\n    /**\n     * Value.\n     *\n     * The hand will point to this value on the axis. Note, The gauge only considers the first row.\n     */\n    value: TidyTableColumnSelector;\n\n    /**\n     * Color.\n     *\n     * The color of the hand.\n     */\n    gaugeHandColor: string;\n\n    gaugeHandInnerRadius: number;\n    gaugeHandStartWidth: number;\n    gaugeHandPinDisabled: boolean;\n    gaugeHandPinRadius: number;\n}\n\nexport interface Am4GaugeAxisOptions extends FormFieldObject {\n\n    /**\n     * Minimum.\n     *\n     * Start value of the axis.\n     */\n    gaugeAxisMinimum: string;\n\n    /**\n     * Maximum.\n     *\n     * End value of the axis.\n     */\n    gaugeAxisMaximum: string;\n\n    /**\n     * Format.\n     *\n     * Format pattern. Examples: integer: `#`; two decimals: `#.00`; thousands/millions: `#a`; currency: `€#`.\n     */\n    gaugeAxisValueFormat?: string;\n\n    /**\n     * Min Label Distance.\n     *\n     * Minimum distance between axis labels.\n     */\n    gaugeAxisMinGridDistance: number;\n\n    /**\n     * Axis Ranges.\n     *\n     * JSON Axis Ranges. For example:\n     *\n     * <pre>\n     * [\n     *   {\n     *     \"label\": \"low\",\n     *     \"start\": 0,\n     *     \"end\": 50,\n     *     \"color\": \"red\"\n     *   },\n     *   {\n     *     \"label\": \"high\",\n     *     \"start\": 50,\n     *     \"end\": 100,\n     *     \"color\": \"green\"\n     *   }\n     * ]\n     * </pre>\n     */\n    gaugeAxisRanges?: string;\n\n    gaugeAxisShowLabels: boolean;\n    gaugeAxisBentLabels: boolean;\n    gaugeAxisSwapAxes: boolean;\n    gaugeAxisLabelsRadius: number;\n    gaugeAxisRadius: number;\n    gaugeAxisRangesRadius: number;\n    gaugeAxisRangeLabelsRadius: number;\n    gaugeAxisRangeOpacity: number;\n}\n\nexport interface Am4GaugeOptions extends FormFieldObject {\n\n    /**\n     * Radius.\n     *\n     * The radius of the chart as a percentage of the available space.\n     */\n    gaugeRadius: number;\n\n    gaugeInnerRadius: number;\n    gaugeStartAngle: number;\n    gaugeEndAngle: number;\n}\n\nexport interface Am4SimpleCategoryAxisOptions extends FormFieldObject {\n\n    /**\n     * Title Text.\n     *\n     * The title of the horizontal axis.\n     *\n     * [Bar Chart]\n     *\n     * Title Text.\n     *\n     * The title of the vertical axis.\n     */\n    xAxisTitleText?: string;\n\n    /**\n     * Label Spacing.\n     *\n     * Controls the minimum space between the labels.\n     */\n    xAxisLabelSpacing?: number;\n\n    /**\n     * Max Label Width.\n     *\n     * The maximum width in pixels for the labels.\n     */\n    xAxisLabelMaxWidth?: number;\n\n    /**\n     * Label Overflow.\n     *\n     * Choice of behavior when the label is larger than the max width.\n     */\n    xAxisLabelOverflow?: OverflowType;\n\n    /**\n     * Rotate Label.\n     *\n     * Rotate the labels on the category axis by 45 degrees.\n     */\n    xAxisRotateLabels?: CategoryAxisRotateLabels;\n\n    /**\n     * Cell Start Location.\n     *\n     * Value between 0 and 1 that indicates where the category starts on the grid.\n     */\n    xAxisCellStartLocation: number;\n\n    /**\n     * Cell End Location.\n     *\n     * Value between 0 and 1 that indicates where the category ends on the grid.\n     */\n    xAxisCellEndLocation: number;\n\n    /**\n     * Initial Zoom.\n     *\n     * The start index and the end index seperated by a comma. You can use negative values to get the index from the\n     * end of the axis. E.g., `-10,-1` zooms to the last 10 items.\n     */\n    xAxisInitialZoom?: string;\n\n    /**\n     * In-place processing of the amCharts 4 category/date axis instance.\n     *\n     * <pre>\n     *     ( value: CategoryAxis | DateAxis, options?: Am4SimpleCategoryAxisOptions ) => void;\n     * </pre>\n     */\n    xAxisPostRenderHook?: Hook<any, Am4SimpleCategoryAxisOptions>;\n\n    /**\n     * Cache the scrollbar state into local storage. The scrollbar state is kept when refreshing the dashboard.\n     */\n    xAxisSaveZoom?: boolean;\n}\n\nexport interface Am4ValueAxisOptions extends FormFieldObject {\n\n    /**\n     * Title Text.\n     *\n     * The title of the vertical axis.\n     *\n     * [Bar Chart]\n     *\n     * Title Text.\n     *\n     * The title of the horizontal axis.\n     */\n    yAxisTitleText?: string;\n\n    /**\n     * Minimum.\n     *\n     * The axis starts at this value.\n     */\n    yAxisMinimum?: number;\n\n    /**\n     * Maximum.\n     *\n     * The axis ends at this value.\n     */\n    yAxisMaximum?: number;\n\n    /**\n     * Adjust Minimum By.\n     *\n     * Expand the calculated axis range by this percentage, making the minimum smaller.\n     */\n    yAxisExtraMinimum?: number;\n\n    /**\n     * Adjust Maximum By.\n     *\n     * Expand the calculated axis range by this percentage, making the maximum larger.\n     */\n    yAxisExtraMaximum?: number;\n\n    /**\n     * Always Include Zero.\n     *\n     * Always show zero in the axis.\n     */\n    yAxisIncludeZero: boolean;\n\n    /**\n     * Show Numbers.\n     *\n     * Display the numbers next to the axis.\n     */\n    yAxisShowLabels: boolean;\n\n    /**\n     * Value Format.\n     *\n     * Format pattern. Examples: integer: `#`; two decimals: `#.00`; thousands/millions: `#a`; currency: `€#`.\n     */\n    yAxisValueFormat?: string;\n\n    /**\n     * Maximum number of decimals to allow when placing grid lines and labels on axis.\n     *\n     * Set it to 0 (zero) to force integer-only axis labels.\n     */\n    yAxisMaxPrecision?: number;\n\n    /**\n     * Minimum Grid Distance.\n     *\n     * The minimum distance between the grid lines.\n     */\n    yAxisMinGridDistance?: number;\n\n    /**\n     * Initial Zoom.\n     *\n     * The start value and the end value seperated by a comma.\n     */\n    yAxisInitialZoom?: string;\n\n    /**\n     * Show the grid lines perpendicular to the value axis.\n     */\n    yAxisShowGridLines: boolean;\n\n    /**\n     * In-place processing of the amCharts 4 category/date axis instance.\n     *\n     * <pre>\n     *     ( value: ValueAxis, options: Am4ValueAxisOptions ) => void;\n     * </pre>\n     */\n    yAxisPostRenderHook?: Hook<any, Am4ValueAxisOptions>;\n\n    /**\n     * Cache the scrollbar state into local storage. The scrollbar state is kept when refreshing the dashboard.\n     */\n    yAxisSaveZoom?: boolean;\n}\n\nexport interface Am4DateAxisOptions extends FormFieldObject, Pick<Am4ValueAxisOptions, \"yAxisTitleText\" | \"yAxisMinGridDistance\" | \"yAxisShowGridLines\" | \"yAxisSaveZoom\"> {\n    /**\n     * In-place processing of the amCharts 4 date axis instance.\n     *\n     * <pre>\n     *     ( value: ValueAxis, options: Am4DateAxisOptions ) => void;\n     * </pre>\n     */\n    yAxisPostRenderHook?: Hook<any, Am4DateAxisOptions>;\n}\n\nexport interface Am4SimpleColumnSeriesOptions extends FormFieldObject, IStrokeStyleProperties {\n\n    /**\n     * Value.\n     *\n     * Display the distribution of the values in this column.\n     */\n    value: TidyTableColumnSelector;\n\n    /**\n     * Group By.\n     *\n     * Distribution for each group.\n     */\n    groupBy?: TidyTableColumnSelector;\n\n    /**\n     * Column Color.\n     *\n     * A column with colors for the columns in the chart.\n     */\n    columnSeriesColor?: TidyTableColumnSelector;\n\n    /**\n     * Tooltip.\n     *\n     * Show this text when hovering the column in the chart.\n     */\n    chartCursorTooltipColumn: string;\n\n    /**\n     * Legend Text.\n     *\n     * The name of the column series in the legend.\n     */\n    legendColumnSeriesLabel?: string;\n\n    /**\n     * Show Value in Legend.\n     *\n     * Show values in the legend when the user moves the cursor over the chart.\n     */\n    legendColumnSeriesShowValue: boolean;\n\n    /**\n     * Clustered.\n     *\n     * Show the columns in a group next to each other. If false, the chart renders them layered on top of each other.\n     */\n    clustered: boolean;\n\n    /**\n     * Fill Opacity.\n     *\n     * Opacity of the columns fill (excluding the border).\n     */\n    columnFillOpacity: number;\n}\n\nexport interface Am4ValueLabelOptions extends FormFieldObject {\n\n    /**\n     * Value Labels.\n     *\n     * Add a value label for each item in the chart.\n     */\n    seriesLabelsEnabled: boolean;\n\n    /**\n     * Label Text.\n     */\n    seriesLabelsText: string;\n\n    /**\n     * Label Position.\n     *\n     * Where to show the label on the item.\n     */\n    seriesLabelsPosition: SeriesLabelsPosition;\n\n    /**\n     * Hide Small Labels.\n     *\n     * Hide labels that don't fit.\n     */\n    seriesLabelsHideOversize: boolean;\n\n    /**\n     * Stack Top Text.\n     *\n     * Text displayed on top of the stack.\n     */\n    seriesLabelsStackTotalText?: string;\n}\n\nexport interface Am4SecondValueLabelOptions extends FormFieldObject {\n    /**\n     * @see Am4ValueLabelOptions\n     */\n    seriesLabelsEnabledSecond: boolean;\n\n    /**\n     * @see Am4ValueLabelOptions\n     */\n    seriesLabelsTextSecond: string;\n\n    /**\n     * @see Am4ValueLabelOptions\n     */\n    seriesLabelsPositionSecond: SeriesLabelsPosition;\n\n    /**\n     * @see Am4ValueLabelOptions\n     */\n    seriesLabelsHideOversizeSecond: boolean;\n\n    /**\n     * @see Am4ValueLabelOptions\n     */\n    seriesLabelsStackTotalTextSecond?: string;\n}\n\nexport interface Am4ChartCursorOptions extends FormFieldObject {\n\n    /**\n     * Chart Cursor.\n     */\n    chartCursorEnabled: boolean;\n\n    /**\n     * Chart Cursor Behavior.\n     *\n     * Action performed when the user drags the cursor.\n     */\n    chartCursorBehaviour: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\n}\n\nexport interface Am4ScrollbarOptions extends FormFieldObject {\n\n    /**\n     * Horizontal Scrollbar.\n     */\n    EnableScrollbarX: boolean;\n\n    /**\n     * Horizontal Scrollbar Plot.\n     *\n     * Show the first series as a plot in the horizontal scrollbar.\n     */\n    ScrollbarXShowSeries: boolean;\n\n    /**\n     * Vertical Scrollbar.\n     */\n    EnableScrollbarY: boolean;\n\n    /**\n     * Vertical Scrollbar Plot.\n     *\n     * Show the first series as a plot in the vertical scrollbar.\n     */\n    ScrollbarYShowSeries: boolean;\n}\n\nexport interface Am4SankeyFlowOptions extends FormFieldObject {\n\n    /**\n     * Value.\n     *\n     * Flow values.\n     */\n    value: TidyTableColumnSelector;\n\n    /**\n     * Link Fill Opacity.\n     *\n     * Value between 0 and 1 for the opacity of the links/flows between the nodes.\n     */\n    linkFillOpacity: number;\n\n    /**\n     * Flow Tension.\n     *\n     * Set to 1 for straight flows. Smaller values make the flows curve more.\n     */\n    flowTension: number;\n\n    /**\n     * Color Mode.\n     */\n    colorMode: 'solid' | 'gradient' | 'fromNode' | 'toNode';\n\n    /**\n     * The tooltip for the node\n     */\n    flowTooltip?: string;\n}\n\nexport interface Am4SankeyNodeOptions extends FormFieldObject, IStrokeStyleProperties {\n\n    /**\n     * Width.\n     *\n     * Depending on the orientation, the width (if horizontal) or height (if vertical) of the node.\n     */\n    nodeWidth: number;\n\n    /**\n     * Tooltip for the node\n     */\n    nodeTooltip?: string;\n}\n\nexport interface Am4SankeyDiagramOptions extends FormFieldObject {\n\n    /**\n     * Orientation.\n     *\n     * Show the Sankey from left to right if 'Horizontal' and from top to bottom if 'Vertical'.\n     */\n    orientation: 'horizontal' | 'vertical';\n\n    /**\n     * If true, the first column describes the from nodes, and the second column the to nodes.\n     */\n    useFromToDataDefinition: boolean;\n}\n\nexport interface Am4TreeMapSeriesOptions extends FormFieldObject, IStrokeStyleProperties {\n\n    /**\n     * First Level.\n     *\n     * The first level contains the names for the items.\n     */\n    level0: TidyTableColumnSelector;\n\n    /**\n     * Second Level.\n     *\n     * Adds a hierarchy to the first level.\n     */\n    level1?: TidyTableColumnSelector;\n\n    /**\n     * Values.\n     *\n     * Sizes of the boxes.\n     */\n    value: TidyTableColumnSelector;\n\n    /**\n     * Color.\n     *\n     * Column containing colors for the tree items.\n     */\n    treemapColor?: TidyTableColumnSelector;\n\n    /**\n     * Labels when labelType is 'html'. Expression for the labels on the tree items.\n     */\n    labelExpressionHTML: string;\n\n    /**\n     * Labels when labelType is 'text'. Expression for the labels on the tree items.\n     */\n    labelExpressionText: string;\n\n    /**\n     * Label Type.\n     *\n     * Render the label as text or as HTML.\n     */\n    labelType: \"html\" | \"text\";\n\n    /**\n     * Label Overflow.\n     *\n     * Choice of behavior when the label is larger than the max width.\n     */\n    labelOverflow?: OverflowType;\n\n    /**\n     * Tooltips.\n     *\n     * Expression for the tooltip when hovering a tree item.\n     */\n    tooltipExpression: string;\n\n    /**\n     * Corner Radius.\n     */\n    cornerRadius: number;\n\n    /**\n     * Layout Algorithm.\n     *\n     * The algorithm used to divide the area into squares based on their values.\n     */\n    layoutAlgorithm: \"binaryTree\" | \"dice\" | \"slice\" | \"sliceDice\" | \"squarify\";\n}\n\nexport interface Am4GeoSeriesOptions extends FormFieldObject {\n\n    /**\n     * Region.\n     *\n     * Column with [ISO-2 codes](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements)\n     * (e.g., US, CH, GB, FR). Note that provinces, regions, departments are available as well (e.g., FR-30).\n     */\n    region: TidyTableColumnSelector;\n\n    /**\n     * Region Click Column.\n     *\n     * If defined, the column that is used to fire the region-click event.\n     */\n    hitColumn?: TidyTableColumnSelector;\n\n    /**\n     * Map.\n     *\n     * The map displayed by the chart. Use any URL to access your own GeoJSON file\n     * (e.g., https://customer.com/world.json).\n     */\n    mapUrl: string;\n\n    /**\n     * Map Projection.\n     */\n    mapProjection: GeoMapChartProjection;\n\n    /**\n     * Initial Zoom.\n     *\n     * To set the currently displayed zoom open the widget's menu (top right) and click on 'Set Zoom & Center'.\n     */\n    initialZoom?: number;\n\n    /**\n     * Initial Latitude.\n     *\n     * To set the currently displayed latitude open the widget's menu (top right) and click on 'Set Zoom & Center'.\n     */\n    initialLatitude?: number;\n\n    /**\n     * Initial Longitude.\n     *\n     * To set the currently displayed longitude open the widget's menu (top right) and click on 'Set Zoom & Center'.\n     */\n    initialLongitude?: number;\n\n    /**\n     * Region Tooltip.\n     *\n     * The region column is the expression default column.\n     */\n    tooltip?: string;\n\n    /**\n     * Unmatched Regions Strategy.\n     *\n     * Used for missing map regions in the query.\n     */\n    unmatchedRegionStrategy: GeoMapChartUnMatchedRegionStrategy;\n\n    /**\n     * Excluded Regions.\n     *\n     * A comma separated list of country codes that will be excluded from the map (e.g., US, CH, GB).\n     */\n    excludedRegions?: string;\n\n    /**\n     * Draggable.\n     */\n    draggable: boolean;\n\n    /**\n     * Zoomable.\n     */\n    zoomable: boolean;\n\n    /**\n     * Region Color.\n     *\n     * A column with the colors of the regions.\n     */\n    regionColorColumn?: TidyTableColumnSelector;\n\n    /**\n     * Default Region Color.\n     *\n     * Color used for regions without a value in the 'Region Color' column.\n     */\n    regionColor: IColorDef;\n\n    /**\n     * Background Color (Water).\n     */\n    backgroundColor?: IColorDef;\n}\n\nexport interface Am4SecondValueAxisOptions extends FormFieldObject {\n\n    /**\n     * Title Text.\n     *\n     * The title of the vertical axis.\n     */\n    yAxisSecondTitleText?: string;\n\n    /**\n     * Minimum.\n     *\n     * The axis starts at this value.\n     */\n    yAxisSecondMinimum?: number;\n\n    /**\n     * Maximum.\n     *\n     * The axis end at this value.\n     */\n    yAxisSecondMaximum?: number;\n\n    /**\n     * Adjust Minimum By.\n     *\n     * Expand the calculated axis range by this percentage, making the minimum smaller.\n     */\n    yAxisSecondExtraMinimum?: number;\n\n    /**\n     * Adjust Maximum By.\n     * Expand the calculated axis range by this percentage, making the maximum larger.\n     */\n    yAxisSecondExtraMaximum?: number;\n\n    /**\n     * Always Include Zero.\n     *\n     * Always show zero in the axis.\n     */\n    yAxisSecondIncludeZero: boolean;\n\n    /**\n     * Show Numbers.\n     *\n     * Display the numbers next to the axis.\n     */\n    yAxisSecondShowLabels: boolean;\n\n    /**\n     * Value Format.\n     *\n     * Format pattern. Examples: integer: `#`; two decimals: `#.00`; thousands/millions: `#a`; currency: `€#`.\n     */\n    yAxisSecondValueFormat?: string;\n\n    /**\n     * Maximum number of decimals to allow when placing grid lines and labels on axis.\n     *\n     * Set it to 0 (zero) to force integer-only axis labels.\n     */\n    yAxisSecondMaxPrecision?: number;\n\n    /**\n     * Minimum Grid Distance.\n     *\n     * The minimum distance between the grid lines.\n     */\n    yAxisSecondMinGridDistance?: number;\n\n    /**\n     * Initial Zoom.\n     *\n     * The start value and the end value seperated by a comma.\n     */\n    yAxisSecondInitialZoom?: string;\n\n    /**\n     * In-place processing of the amCharts 4 category/date axis instance.\n     *\n     * <pre>\n     *     ( value: ValueAxis, options: Am4SecondValueAxisOptions ) => void;\n     * </pre>\n     */\n    yAxisSecondPostRenderHook?: Hook<any, Am4SecondValueAxisOptions>;\n}\n\nexport interface Am4BubbleSeriesOptions extends FormFieldObject, IStrokeStyleProperties {\n\n    /**\n     * Labels.\n     *\n     * Names for the bubbles.\n     */\n    label: TidyTableColumnSelector;\n\n    /**\n     * X-Values.\n     *\n     * The x-coordinates of the bubbles.\n     */\n    valueX: TidyTableColumnSelector;\n\n    /**\n     * Y-Values.\n     *\n     * The y-coordinates of the bubbles.\n     */\n    valueY: TidyTableColumnSelector;\n\n    /**\n     * Bubble Size\n     */\n    bubbleSize?: TidyTableColumnSelector;\n\n    /**\n     * Group.\n     *\n     * Create a new series for each group.\n     */\n    group?: TidyTableColumnSelector;\n\n    /**\n     * Color.\n     *\n     * Color of the item in the scatter plot.\n     */\n    scatterSeriesColor?: TidyTableColumnSelector;\n\n    /**\n     * Tooltip.\n     *\n     * The text displayed as a tooltip on the points.\n     */\n    chartCursorTooltipScatter: string;\n\n    /**\n     * Min Bubble Size.\n     *\n     * The minimum bubble size in pixels. The bubble with the smallest value for size gets this size.\n     */\n    minBubbleSize: number;\n\n    /**\n     * Max Bubble Size.\n     *\n     * The maximum bubble size in pixels. The bubble with the largest value for size gets this size.\n     */\n    maxBubbleSize: number;\n\n    /**\n     * Fill Opacity.\n     */\n    fillOpacity: number;\n}\n\nexport interface Am4ScatterTrendLineOptions extends FormFieldObject {\n\n    /**\n     * Trend Line.\n     */\n    trendLineEnabled: boolean;\n\n    /**\n     * Trend Line Color.\n     *\n     * Column containing the color for the trend line.\n     */\n    trendLineColor?: IColorDef;\n\n    /**\n     * Stroke Dash Array.\n     *\n     * Comma separated list of dash-lengths and gap-lengths. Use 0 for solid line.\n     */\n    trendLineStrokeDashArray: string;\n\n    /**\n     * Show in Legend.\n     *\n     * Display the trend line in the legend (if the legend is enabled).\n     */\n    trendLineShowInLegend: boolean;\n\n    /**\n     * Per Group.\n     *\n     * Display a trend line for each group?\n     */\n    trendLinePerGroup: boolean;\n}\n\nexport interface Am4CategoryDateAxisOptions extends FormFieldObject {\n\n    /**\n     * If we have (date)times available, then\n     * YES -> always use them\n     * NO -> never use them\n     * AUTO -> use them if the level is a date or datetime (in MDX, these are levels of type DAY, HOUR, MINUTE, SECOND).\n     */\n    useDatetimeAxis: UseDatetimeAxis;\n\n    /**\n     * Axis.\n     *\n     * Displayed on the x-axis.\n     *\n     * [Scatter Plot Chart]\n     *\n     * Labels.\n     *\n     * Column with the label for the point.\n     *\n     * [Bar Chart]\n     *\n     * Axis.\n     *\n     * Displayed on the y-axis.\n     *\n     * [Stacked Bar Chart]\n     *\n     * Axis.\n     *\n     * Displayed on the y-axis.\n     */\n    axis: TidyTableColumnSelector;\n\n    /**\n     * Group.\n     *\n     * Create a new series for each group.\n     */\n    group?: TidyTableColumnSelector;\n\n    /**\n     * Level.\n     *\n     * Adds an extra level to the x-axis.\n     *\n     * [Bar Chart]\n     *\n     * Level.\n     *\n     * Adds an extra level to the y-axis.\n     *\n     * [Stacked Bar Chart]\n     *\n     * Level.\n     *\n     * Adds an extra level to the y-axis.\n     */\n    level?: TidyTableColumnSelector;\n\n    /**\n     * Label Text.\n     *\n     * Labels of the horizontal axis. Does not work with a date axis.\n     *\n     * [Bar Chart]\n     *\n     * Label Text.\n     *\n     * The labels of the vertical axis. Does not work with a date axis.\n     */\n    xAxisLabelsText: string;\n\n    /**\n     * Label Tooltip.\n     *\n     * The HTML contents of the axis tooltip when the user hovers the chart and cursor is active.\n     * Does not work with a date axis.\n     */\n    xAxisLabelTooltipText: string;\n\n    /**\n     * The date format for the labels that show when the user hovers over the chart with a chart cursor.\n     * Leave undefined to use the axis-date format.\n     * Read more about the format codes here: https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/#Format_codes\n     */\n    xAxisLabelTooltipDateFormat?: string;\n\n    /**\n     * Title Text.\n     *\n     * The title of the horizontal axis.\n     *\n     * [Bar Chart]\n     *\n     * Title Text.\n     *\n     * The title of the vertical axis\n     */\n    xAxisTitleText?: string;\n\n    /**\n     * Label Spacing.\n     *\n     * Controls the minimum space between the labels.\n     */\n    xAxisLabelSpacing?: number;\n\n    /**\n     * Max Label Width.\n     *\n     * The maximum width in pixels for the labels.\n     */\n    xAxisLabelMaxWidth?: number;\n\n    /**\n     * Label Overflow.\n     *\n     * Choice of behavior when the label is larger than the max width.\n     */\n    xAxisLabelOverflow?: OverflowType;\n\n    /**\n     * Rotate Label.\n     *\n     * Rotate the labels on the category axis by 45 degrees.\n     */\n    xAxisRotateLabels?: CategoryAxisRotateLabels;\n\n    /**\n     * Level Label.\n     *\n     * Edit the HTML of the labels in the levels.\n     */\n    xAxisLevelLabelsText: string;\n\n    /**\n     * Show the level labels on top of the chart outside the grid.\n     */\n    xAxisLevelLabelsOutside?: boolean;\n\n    /**\n     * Cell Start Location.\n     *\n     * Value between 0 and 1 that indicates where the category starts on the grid.\n     */\n    xAxisCellStartLocation: number;\n\n    /**\n     * Cell End Location.\n     *\n     * Value between 0 and 1 that indicates where the category ends on the grid.\n     */\n    xAxisCellEndLocation: number;\n\n    /**\n     * Label Type.\n     *\n     * Render the label as text or as HTML.\n     */\n    xAxisLabelType: \"html\" | \"text\";\n\n    /**\n     * Initial Zoom.\n     *\n     * The start index and the end index seperated by a comma. You can use negative values to get the index from the\n     * end of the axis. E.g., `-10,-1` zooms to the last 10 items.\n     */\n    xAxisInitialZoom?: string;\n\n    /**\n     * Show the grid lines perpendicular to the category axis.\n     */\n    xAxisShowGridLines: boolean;\n\n    /**\n     * In-place processing of the amCharts 4 category/date axis instance.\n     *\n     * <pre>\n     *     ( value: CategoryAxis | DateAxis, options: Am4CategoryDateAxisOptions ) => void;\n     * </pre>\n     */\n    xAxisPostRenderHook?: Hook<any, Am4CategoryDateAxisOptions>;\n\n    /**\n     * Cache the scrollbar state into local storage. The scrollbar state is kept when refreshing the dashboard.\n     */\n    xAxisSaveZoom?: boolean;\n}\n\nexport interface Am4ValueAxisRangeOptions extends FormFieldObject {\n\n    /**\n     * Y-Axis Range.\n     *\n     * Display a line or a ranged fill/band on the y-axis.\n     *\n     * [Bar Chart]\n     *\n     * X-Axis Range.\n     *\n     * Display a line or a ranged fill / band on the x-axis.\n     *\n     * [Stacked Bar Chart]\n     *\n     * X-Axis Range.\n     *\n     * Display a line or a ranged fill / band on the x-axis.\n     */\n    axisRangeEnabled: boolean;\n\n    /**\n     * Type.\n     */\n    axisRangeType: AxisRangeType;\n\n    /**\n     * Start Value.\n     *\n     * Starting value of the range or value of the line.\n     */\n    axisRangeStart: string;\n\n    /**\n     * End Value.\n     *\n     * Ending value for the range.\n     */\n    axisRangeEnd: string;\n\n    /**\n     * Label.\n     *\n     * Label to display on the range.\n     */\n    axisRangeLabel: string;\n\n    /**\n     * Inside.\n     *\n     * If enabled, the range renders the label inside the chart.\n     */\n    axisRangeLabelInside: boolean;\n\n    /**\n     * Color.\n     *\n     * The color of the ranged fill / band or line.\n     */\n    axisRangeColor?: IColorDef;\n\n    /**\n     * Range Opacity.\n     *\n     * The opacity of the ranged fill / band.\n     */\n    axisRangeFillOpacity: number;\n\n    /**\n     * Stroke Opacity.\n     *\n     * The opacity of the line.\n     */\n    axisRangeStrokeOpacity: number;\n\n    /**\n     * Stroke Width.\n     *\n     * The width of the line.\n     */\n    axisRangeStrokeWidth: number;\n\n    /**\n     * Stroke Dash Array.\n     *\n     * Comma separated list of dash-lengths and gap-lengths. Use 0 for solid line.\n     */\n    axisRangeStrokeDashArray: string;\n\n    /**\n     * Above.\n     *\n     * If enabled, the chart renders the range or line above the series.\n     */\n    axisRangeAboveGrid: boolean;\n}\n\nexport interface Am4LineSeriesOptions extends FormFieldObject, IStrokeStyleProperties, IBulletShapeOptions {\n\n    /**\n     * [Line Chart]\n     *\n     * Line Values.\n     *\n     * A column with values for the line.\n     *\n     * [Area Chart]\n     *\n     * Area Values.\n     *\n     * The values for the area series.\n     *\n     * [Stacked Area Chart]\n     *\n     * Area Values.\n     *\n     * A column with values for the stacked area chart.\n     */\n    lineValue: TidyTableColumnSelector[];\n\n    /**\n     * Shape.\n     *\n     * Use this column to change the shape of the data-point.\n     */\n    lineBulletShape?: TidyTableColumnSelector;\n\n    /**\n     * Hide Line Bullets\n     */\n    hideLineBullets: boolean;\n\n    /**\n     * Tooltip.\n     *\n     * The text displayed as a tooltip on the line.\n     */\n    chartCursorTooltipLine: string;\n\n    /**\n     * Legend Text.\n     *\n     * The name of the line series in the legend.\n     */\n    legendLineSeriesLabel?: string;\n\n    /**\n     * Show Value in Legend.\n     *\n     * Show values in the legend when the user moves the cursor over the chart.\n     */\n    legendLineSeriesShowValue: boolean;\n\n    /**\n     * Area Fill Opacity.\n     *\n     * A value on [0, 1], where 0 is fully transparent and 1 is no transparency.\n     */\n    areaFillOpacity: number;\n\n    /**\n     * Line Color.\n     *\n     * A column with colors for the line and bullets in the chart.\n     */\n    lineSeriesColor?: TidyTableColumnSelector;\n\n    /**\n     * If true, connect the lines over empty data points.\n     */\n    connectLineSeries: boolean;\n\n    smoothLineMethod: Amcharts4LineSmoothMethod;\n\n    /**\n     * Smooth the line chart. The tension is a value between 0 (no tension) and 1 (maximum tension).\n     */\n    smoothLineTensionX: number;\n    smoothLineTensionY: number;\n}\n\nexport interface Am4ComboSeriesOptions extends FormFieldObject, IStrokeStyleProperties {\n\n    /**\n     * Values for the left series. Named line due to legacy.\n     */\n    lineValue: TidyTableColumnSelector[];\n\n    /**\n     * Values for the right series. Named column due to legacy.\n     */\n    columnValue: TidyTableColumnSelector[];\n\n    /**\n     * Draw the line-series in this axis. Defaults to \"left\".\n     */\n    lineSeriesDrawOnAxis: DrawSeriesOnAxis;\n\n    /**\n     * Draw the column-series in this axis. Defaults to \"right\".\n     */\n    columnSeriesDrawOnAxis: DrawSeriesOnAxis;\n\n    /**\n     * Type of the left series. Line / Column.\n     */\n    seriesTypeLeft: SeriesType;\n\n    /**\n     * Type of the right series. Line / Column.\n     */\n    seriesTypeRight: SeriesType;\n\n    // Options if left series is LINE. @see Am4LineSeriesOptions\n    lineBulletShapeLeft?: TidyTableColumnSelector;\n    hideLineBulletsLeft: boolean;\n    chartCursorTooltipLineLeft: string;\n    legendLineSeriesLabelLeft?: string;\n    legendLineSeriesShowValueLeft: boolean;\n    areaFillOpacityLeft: number;\n    lineSeriesColorLeft?: TidyTableColumnSelector;\n    connectLineSeriesLeft: boolean;\n    smoothLineMethodLeft: Amcharts4LineSmoothMethod;\n    smoothLineTensionXLeft: number;\n    smoothLineTensionYLeft: number;\n    // Options if left series is COLUMN. @see Am4ColumnSeriesOptions\n    chartCursorTooltipColumnLeft: string;\n    legendColumnSeriesLabelLeft?: string;\n    legendColumnSeriesShowValueLeft: boolean;\n    columnSeriesColorLeft?: TidyTableColumnSelector;\n\n    // Options if right series is LINE. @see Am4LineSeriesOptions\n    lineBulletShapeRight?: TidyTableColumnSelector;\n    hideLineBulletsRight: boolean;\n    chartCursorTooltipLineRight: string;\n    legendLineSeriesLabelRight?: string;\n    legendLineSeriesShowValueRight: boolean;\n    areaFillOpacityRight: number;\n    lineSeriesColorRight?: TidyTableColumnSelector;\n    connectLineSeriesRight: boolean;\n    smoothLineMethodRight: Amcharts4LineSmoothMethod;\n    smoothLineTensionXRight: number;\n    smoothLineTensionYRight: number;\n    // Options if right series is COLUMN. @see Am4ColumnSeriesOptions\n    chartCursorTooltipColumnRight: string;\n    legendColumnSeriesLabelRight?: string;\n    legendColumnSeriesShowValueRight: boolean;\n    columnSeriesColorRight?: TidyTableColumnSelector;\n\n}\n\nexport interface Am4ColumnSeriesOptions extends FormFieldObject, IStrokeStyleProperties {\n\n    /**\n     * [Column Chart]\n     *\n     * Column Values.\n     *\n     * A column with values for the series.\n     *\n     * [Bar Chart]\n     *\n     * Bar Values.\n     *\n     * A column with values for the bar series.\n     *\n     * [Stacked Bar Chart]\n     *\n     * Bar Values.\n     *\n     * A column with values for the stacked bar series.\n     *\n     * [Stacked Column Chart]\n     *\n     * Values Column.\n     *\n     * A column with values for the stacked column series.\n     */\n    columnValue: TidyTableColumnSelector[];\n\n    /**\n     * Tooltip.\n     *\n     * Show this text when hovering the column in the chart.\n     */\n    chartCursorTooltipColumn: string;\n\n    /**\n     * Legend Text.\n     *\n     * The name of the column series in the legend.\n     */\n    legendColumnSeriesLabel?: string;\n\n    /**\n     * Show Value in Legend.\n     *\n     * Display values in the legend when the user moves the cursor over the chart.\n     */\n    legendColumnSeriesShowValue: boolean;\n\n    /**\n     * Column Color.\n     *\n     * A column with colors for the columns in the chart.\n     */\n    columnSeriesColor?: TidyTableColumnSelector;\n}\n\nexport interface Am4GanttSeriesOptions extends Omit<Am4ColumnSeriesOptions, \"columnValue\" | \"legendColumnSeriesShowValue\"> {\n\n    /**\n     * Start datetime values of the gantt series.\n     */\n    startValue: TidyTableColumnSelector[];\n\n    /**\n     * End datetime values of the gantt series.\n     */\n    endValue: TidyTableColumnSelector[];\n\n    /**\n     * If true, show groups in the same lane instead of in their separate lanes.\n     */\n    showGroupsOnSingleLane?: boolean;\n\n}\n\nexport interface Am4DivergentAxisLabelOptions extends FormFieldObject {\n\n    /**\n     * The text to show in the left label. Use a single space to not show the label.\n     */\n    leftLabelText: string;\n\n    /**\n     * The text to show in the right label. Use a single space to not show the label.\n     */\n    rightLabelText: string;\n\n}\n\nexport interface Am4DivergentBarSeriesOptions extends FormFieldObject, IStrokeStyleProperties {\n\n    /**\n     * Values for the series on the left\n     */\n    leftValue: TidyTableColumnSelector;\n\n    /**\n     * Values for the series on the right\n     */\n    rightValue: TidyTableColumnSelector;\n\n    /**\n     * Tooltip.\n     *\n     * Show this text when hovering the column in the chart.\n     */\n    chartCursorTooltipColumn: string;\n\n    /**\n     * Legend Text.\n     *\n     * The name of the column series in the legend.\n     */\n    legendColumnSeriesLabel?: string;\n\n    /**\n     * Show Value in Legend.\n     *\n     * Display values in the legend when the user moves the cursor over the chart.\n     */\n    legendColumnSeriesShowValue: boolean;\n}\n\nexport interface Am4TrendLineOptions extends FormFieldObject {\n\n    trendLineType: TrendLineType;\n\n    /**\n     * Trend Line\n     */\n    trendLineEnabled: boolean;\n\n    /**\n     * Stroke Dash Array.\n     *\n     * Comma separated list of dash-lengths and gap-lengths. Use 0 for solid line.\n     */\n    trendLineStrokeDashArray: string;\n\n    /**\n     * Show in Legend.\n     *\n     * Display the trend line in the legend (if the legend is enabled).\n     */\n    trendLineShowInLegend: boolean;\n\n    /**\n     * Trend Line Color.\n     *\n     * Column containing the color for the trend line.\n     */\n    trendLineColor?: IColorDef;\n\n    /**\n     * Per Group.\n     *\n     * Display a trend line for each group?\n     */\n    trendLinePerGroup: boolean;\n}\n\nexport interface Am4ScatterSeriesOptions extends FormFieldObject, IStrokeStyleProperties, IBulletShapeOptions {\n\n    /**\n     * Labels.\n     *\n     * Column with the names for the scatter points.\n     */\n    label: TidyTableColumnSelector;\n\n    /**\n     * X-Values\n     *\n     * Column with the x-coordinates for the scatter points.\n     */\n    valueX: TidyTableColumnSelector;\n\n    /**\n     * Y-Values\n     *\n     * Column with the y-coordinates for the scatter points.\n     */\n    valueY: TidyTableColumnSelector;\n\n    /**\n     * Group.\n     *\n     * Create a new series for each group.\n     */\n    group?: TidyTableColumnSelector;\n\n    /**\n     * Color.\n     *\n     * Color of the item in the scatter plot.\n     */\n    scatterSeriesColor?: TidyTableColumnSelector;\n\n    /**\n     * Shape.\n     *\n     * Use this column to change the shape of the data-point.\n     */\n    scatterBulletShape?: TidyTableColumnSelector;\n\n    /**\n     * Tooltip.\n     *\n     * The text displayed as a tooltip on the points.\n     */\n    chartCursorTooltipScatter: string;\n}\n\nexport interface Am4ChartOptions extends FormFieldObject {\n\n    widgetVariant?: string;\n\n    /**\n     * Hook to change the chart series, axes and other components. This hook is called for each data or options update\n     * and after all the component have updated. You can use it to change the settings in the chart.\n     *\n     * <pre>\n     *     ( value: PublicAmchartsBase<amcharts4.Chart, options> ) => void;\n     *\n     *          value.getChart() is returning an instance of amChart 4 class\n     *          whose name is available in chart options below.\n     * </pre>\n     */\n    postRenderHook?: Hook<PublicAmCharts4Base<any, any>, any>;\n\n    /**\n     * Called once, directly after the chart is created.\n     *\n     * <pre>\n     *     ( chart: amcharts4.Chart, options: Am4ChartOptions ) => void;\n     * </pre>\n     */\n    onChartCreatedHook?: Hook<any, Am4ChartOptions>;\n\n}\n\n/**\n * The corresponding AmCharts 4 chart class is PieChart.\n */\nexport type AmCharts4DonutChartOptions =\n    & Am4PieSeriesOptions\n    & Am4PieLabelOptions\n    & Am4LabelOptions\n    & Am4DonutLegendOptions\n    & Am4DonutOptions\n    & Am4ChartOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is GaugeChart.\n */\nexport type AmCharts4GaugeChartOptions =\n    & Am4GaugeHandOptions\n    & Am4GaugeAxisOptions\n    & Am4LabelOptions\n    & Am4GaugeOptions\n    & Am4ChartOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4HistogramOptions =\n    Am4SimpleCategoryAxisOptions\n    & Am4ValueAxisOptions\n    & Am4SimpleColumnSeriesOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4ScrollbarOptions\n    & Am4ChartOptions\n    & Am4LegendOptions\n    & TidyHistogramOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is SankeyDiagram.\n */\nexport type AmCharts4SankeyDiagramOptions =\n    Am4SankeyFlowOptions\n    & Am4SankeyNodeOptions\n    & Am4SankeyDiagramOptions\n    & Am4ChartOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is TreeMap.\n */\nexport type AmCharts4TreemapOptions =\n    Am4ChartOptions\n    & Am4LegendOptions\n    & Am4TreeMapSeriesOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is MapChart.\n */\nexport type GeoMapChartOptions =\n    Am4GeoSeriesOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4BubbleChartOptions =\n    Am4SecondValueAxisOptions\n    & Am4ValueAxisOptions\n    & Am4BubbleSeriesOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4ScatterTrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4LegendOptions\n    & Am4ChartOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is  XYChart.\n */\nexport type AmCharts4ComboChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4SecondValueAxisOptions\n    & Am4ComboSeriesOptions\n    & Am4LegendOptions\n    & Am4ChartCursorOptions\n    & Am4ScrollbarOptions\n    & Am4ChartOptions\n    & Am4ValueLabelOptions\n    & Am4SecondValueLabelOptions\n    & Am4ValueAxisRangeOptions\n    ;\n\nexport type AmCharts4CoordinateChartOptions =\n    Am4TrendLineOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4RegularAreaChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4LineSeriesOptions\n    & Am4LegendOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4TrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4ValueAxisRangeOptions\n    & Am4ChartOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4RegularBarChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4ColumnSeriesOptions\n    & Am4LegendOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4TrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4ValueAxisRangeOptions\n    & Am4ChartOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4GanttChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4DateAxisOptions\n    & Am4GanttSeriesOptions\n    & Am4LegendOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4ScrollbarOptions\n    & Am4ChartOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4DivergentBarChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4DivergentBarSeriesOptions\n    & Am4LegendOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4ScrollbarOptions\n    & Am4ValueAxisRangeOptions\n    & Am4ChartOptions\n    & Am4DivergentAxisLabelOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4RegularColumnChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4ValueAxisRangeOptions\n    & Am4ColumnSeriesOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4TrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4ChartOptions\n    & Am4LegendOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4RegularLineChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4LineSeriesOptions\n    & Am4LegendOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4TrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4ChartOptions\n    & Am4ValueAxisRangeOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4ScatterPlotOptions =\n    Am4SecondValueAxisOptions\n    & Am4ValueAxisOptions\n    & Am4ScatterSeriesOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4ScatterTrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4LegendOptions\n    & Am4ChartOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4StackedAreaChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4LineSeriesOptions\n    & Am4LegendOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4TrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4ChartOptions\n    & Am4ValueAxisRangeOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4StackedBarChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4ColumnSeriesOptions\n    & Am4LegendOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4TrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4ChartOptions\n    & Am4ValueAxisRangeOptions\n    ;\n\n/**\n * The corresponding AmCharts 4 chart class is XYChart.\n */\nexport type AmCharts4StackedColumnChartOptions =\n    & Am4CategoryDateAxisOptions\n    & Am4ValueAxisOptions\n    & Am4ColumnSeriesOptions\n    & Am4ValueLabelOptions\n    & Am4ChartCursorOptions\n    & Am4TrendLineOptions\n    & Am4ScrollbarOptions\n    & Am4ChartOptions\n    & Am4LegendOptions\n    & Am4ValueAxisRangeOptions\n    ;\n","import { Theme } from \"@mui/material/styles\";\n\n\nexport class AppClasses {\n    /**\n     * Style applied to\n     */\n    static readonly root: string = \"ic3App-root\";\n    /**\n     * Style applied to\n     */\n    static readonly topMenu: string = \"ic3App-topMenu\";\n    /**\n     * Style applied to\n     */\n    static readonly leftToolbar: string = \"ic3App-toolbar\";\n    /**\n     * Style applied to\n     */\n    static readonly drawer: string = \"ic3App-drawer\";\n\n    static readonly drawerSmall: string = \"ic3App-drawer-small\";\n    /**\n     * Dashboard in viewer mode\n     */\n    static readonly payload: string = \"ic3App-payload\";\n    /**\n     * Style applied to\n     */\n    static readonly error: string = \"ic3App-error\";\n    /**\n     * Style applied to\n     */\n    static readonly topBar: string = \"ic3App-bar\";\n    static readonly topBarInFloating: string = \"ic3App-bar-floating\";\n    /**\n     * Style applied to\n     */\n    static readonly leftFilter: string = \"ic3App-leftFilter\";\n    /**\n     * Style applied to the root div containing the edited dashboard pages.\n     */\n    static readonly dashboard: string = \"ic3App-dashboard\";\n    /**\n     * Style applied to\n     */\n    static readonly zoomWidget: string = \"ic3App-zoomWidget\";\n    /**\n     * Class added to root when the left filter panel is collapsed.\n     */\n    static readonly leftPanelCollapsed: string = \"ic3LeftPanelCollapsed\";\n}\n\nexport declare type AppClassKey = keyof AppClasses;\n\nexport interface AppDivProps {\n    dashboardTheme: Theme;\n    topBarOptions: TopBarOptions;\n    leftBarOptions: LeftBarOptions;\n    opacity?: string;\n    drawerW: string;\n}\n\nexport enum TopBarOptions {\n    None,\n    EditorMode,\n    AppViewerTopFilter,\n    AppViewerTopMenu,\n    AppViewerTopMenuFloating\n}\n\nexport enum LeftBarOptions {\n    None,\n    EditorMode,\n    AppViewerLeftFilter,\n    AppViewerRightFilter,\n}","import {FormFieldObject} from \"../PublicTemplateForm\";\nimport {TableRowHeightOptions} from \"../PublicTheme\";\n\nexport enum TableColumnSizing {\n    FLUID = \"FLUID\",\n    FIXED = \"FIXED\",\n    USER_RESIZABLE = \"USER_RESIZABLE\",\n}\n\nexport interface BaseTableChartOptions extends FormFieldObject {\n\n    /**\n     * If active, the color defined in the Tidy Table are applied to the table.\n     */\n    applyHeaderColorDecoration?: boolean;\n\n    /**\n     * If enabled, show tooltips on every cell in the table (excluding renderers). Default = true.\n     */\n    cellTooltips: boolean;\n\n    /**\n     * Save the state of the table in the users browsers local storage.\n     */\n    saveTableStateLocally?: boolean;\n\n    /**\n     * Row Height.\n     */\n    tableSize: TableRowHeightOptions;\n\n    /**\n     * Width Mode.\n     */\n    columnSizing: TableColumnSizing;\n\n    /**\n     * The column widths when columnSizing == FLUID\n     *\n     * A comma separated list of column widths. Defines how the columns will grow compared to other columns\n     * (e.g., 2 means twice as wide as 1). The last value repeats itself.\n     */\n    columnSizes_FLUID?: string;\n\n    /**\n     * The column widths when columnSizing == FIXED\n     *\n     * A comma separated list of column widths. The widths are defined in pixels (without the 'px'). Without any value,\n     * similar to the Fluid mode. The 'auto' value means the columns are shrunk to the minimum width required by the\n     * cell values and then expanded to fill all the available horizontal space. The last value repeats itself.\n     */\n    columnSizes_FIXED?: string;\n\n    /**\n     * The column widths when columnSizing == USER_RESIZABLE\n     *\n     * A comma separated list of column widths. The widths are defined in pixels (without the 'px'). Without any value,\n     * similar to the Fluid mode. The 'auto' value means the columns are shrunk to the minimum width required by the\n     * cell values and then expanded to fill all the available horizontal space. The last value repeats itself.\n     */\n    columnSizes_USER_RESIZABLE?: string;\n\n    /**\n     * Header Alignment (CSV).\n     *\n     * A comma separated list of values:  'left', 'center', 'right'. The last value repeats itself.\n     */\n    columnHeaderAlign: string;\n\n    /**\n     * Cell Alignment (CSV).\n     *\n     * A list of values: 'left', 'center', 'right'. The last value repeats itself.\n     */\n    columnCellAlign: string;\n\n    /**\n     * Pinned (CSV).\n     *\n     * A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    columnPinned: string;\n\n    /**\n     * Visible (CSV).\n     *\n     * A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    columnVisible: string;\n    /**\n     * Columns Header Menu.\n     *\n     * Activate the options of the menu in the header of the columns.\n     */\n    columnHeaderMenu: boolean;\n\n    /**\n     * Menu (CSV).\n     *\n     * A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    columnMenu: string;\n\n    /**\n     * Sortable (CSV).\n     *\n     * Display the sort options. A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    columnSortable: string;\n\n    /**\n     * Column Ordering (CSV).\n     *\n     * A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    columnOrdering: string;\n\n    /**\n     * Pinnable (CSV).\n     *\n     * Display the pin options. A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    columnPinnable: string;\n\n    /**\n     * Hideable (CSV).\n     *\n     * Display the show/hide options. A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    columnHideable: string;\n\n    /**\n     * Filterable (CSV).\n     *\n     * Display the filter options. A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    columnFilterable: string;\n\n    /**\n     * When exporting to excel, flag use the filtered and sorted version or the orignal table\n     */\n    exportOriginalTable: boolean;\n}\n","import {SelectionBehaviour, TidyTableColumnSelector} from \"../PublicTidyTableTypes\";\nimport {FormFieldObject} from \"../PublicTemplateForm\";\nimport {PublicDateShortcutUtils} from \"../PublicDateShortcutUtils\";\n\n// TOM : needs clarification\nexport class DatePickerClasses {\n\n    /**\n     * Style applied to the root element.\n     */\n    static readonly root = \"ic3DatePicker-root\";\n\n    /**\n     * Fix div inside the root.\n     */\n    static readonly container = \"ic3DatePicker-container\";\n\n\n    static readonly rowDirection = \"ic3DatePicker-row-direction\";\n\n    static readonly columnDirection = \"ic3DatePicker-column-direction\";\n\n    /**\n     * + Mui DatePicker and/or DateRangePicker classes\n     */\n    static readonly fieldSeparator = \"ic3DatePicker-fieldSeparator\";\n\n    /**\n     * Label showing the selected shortcut. Clicking this label opens the shortcut menu.\n     */\n    static readonly shortcutLabel = \"ic3DatePicker-shortcutLabel\";\n}\n\nexport declare type DatePickerClassKey = keyof DatePickerClasses;\n\nexport enum DatePickerRangeDirection {\n    auto = \"AUTO\",\n    horizontal = \"HORIZONTAL\",\n    vertical = \"VERTICAL\",\n}\n\n/**\n * Date Picker Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: DatePicker\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface DatePickerChartOptions extends FormFieldObject {\n\n    /**\n     * Variant.\n     *\n     * Allows for selecting a set of preset options. Note that a variant is possibly overriding defined options.\n     */\n    variant?: string;\n\n    /**\n     * The label content (i.e Date)\n     */\n    label?: string;\n\n    /**\n     * Helper Text.\n     *\n     * A text below the date picker to help the user when entering the date\n     */\n    dateHelperText?: string;\n\n    /**\n     * Input Date Format.\n     *\n     * The input date format\n     */\n    dateFormat: string;\n\n    /**\n     * Initial Date.\n     *\n     * The initial date. If not defined, the value on the third data row. A 'today' expression can be used:\n     * today (+|-) n (d|w|m|y). E.g., today -1w means today minus one week.\n     */\n    initialDate?: string;\n\n    /**\n     * Min. Date.\n     *\n     * The first valid date. If not defined, the value of the first data row.\n     * A 'today' expression can be used: today (+|-) n (d|w|m|y). E.g., today -1w means today minus one week.\n     */\n    minDate?: string;\n\n    /**\n     * Max. Date.\n     *\n     * The last valid date. If not defined, the value of the second data row.\n     * A 'today' expression can be used: today (+|-) n (d|w|m|y). E.g., today -1w means today minus one week.\n     */\n    maxDate?: string;\n\n    /**\n     * Empty Behavior.\n     *\n     * Controls what to do if the date picker is empty.\n     */\n    emptyBehaviour: SelectionBehaviour;\n\n    /**\n     * Date Caption.\n     *\n     * The caption of the fired event.\n     * For example, dd => 22, MM => 02, MMM => Jan, MMMM => January, yyyy => 2025, EEEE => Monday.\n     */\n    dateToCaption: string;\n\n    /**\n     * Date Unique Name.\n     *\n     * The value/unique-name of the fired event. The following variables are available: `HierarchyUName`,\n     * `LevelUName`, `anyValidFormatString` (note the back ticks).\n     */\n    dateToUniqueName: string;\n\n    /**\n     * Range Picker.\n     */\n    rangePicker: boolean;\n\n    /**\n     * Range Picker: Initial End Date.\n     *\n     * The initial end date. If not defined, the value of the fourth data row. A 'today' expression can be used:\n     * today (+|-) n (d|w|m|y). E.g., today -1w means today minus one week.\n     */\n    initialEndDate?: string;\n\n\n    /**\n     * The label content for the end date\n     */\n    endLabel?: string;\n\n    // /**\n    //  * Helper Text for the end date\n    //  *\n    //  * A text below the date picker to help the user when entering the date\n    //  */\n    // dateHelperEndText?: string;\n\n    /**\n     * Range Picker: Center Text.\n     *\n     * The text being displayed between the two dates.\n     */\n    centerText?: string;\n\n    /**\n     * Range Picker: Range Caption.\n     *\n     * The caption of the fired event. The following variables are available: `startUName`, `startCaption`,\n     * `endUName`, `endCaption` (note the back ticks).\n     */\n    rangeToCaption: string;\n\n    /**\n     * Range Picker: Range Unique Name.\n     *\n     * The value/unique-name of the fired event. The following variables are available: `startUName`,\n     * `startCaption`, `endUName`, `endCaption` (note the back ticks).\n     */\n    rangeToUniqueName: string;\n\n    /**\n     * The direction of the Picker, horizontal/vertical/auto\n     *\n     * \"auto\" will choose the direction depending on the ration width/height > 0.9\n     */\n    rangeDirection: DatePickerRangeDirection;\n    /**\n     * Dates.\n     *\n     * The column of the tidy table containing the dates to display.\n     */\n    dates?: TidyTableColumnSelector;\n\n    /**\n     * Shortcuts\n     */\n    shortcutsEnabled: boolean;\n\n    /**\n     *\n     */\n    shortcutsAnchorDate?: string;\n\n    /**\n     * From where to source the initial date.\n     */\n    initialDateFrom: InitialDateFrom;\n\n    /**\n     * Source the initial date/range from this shortcut.\n     */\n    initialShortcut?: string;\n\n    /**\n     * User can choose from the shortcuts in this group. Edit the groups in the theme plugin.\n     */\n    allowedShortcutGroup: string;\n\n}\n\ninterface IShortcut<D /* date type */, T /* shortcut return type */> {\n    /**\n     * Show this name in the datepicker.\n     *\n     * Localize depending on the anchor date:\n     * — if undefined, Translate with `shortcutItemsDatePicker.<name>` in the localization.\n     * — if present, Translate with `shortcutItemsDatePicker.<name>.$anchor` in the localization. Fallback to translation with no anchor.\n     */\n    name: string;\n\n    /**\n     * Return the range of the dates that this shortcut selects. The date to return should be of type\n     * Dayjs. See the `dayjs` library. Return `null` to clear the start/end value.\n     *\n     * A datepicker shortcut returns the date. Return null to reset the date.\n     *\n     * A range picker shortcut returns a range: [startDate (included), endDate (included)]. Return [null, null] to reset\n     * the date.\n     *\n     * If the date returned is outside the allowed range of dates in the widget, then the datepicker disables the\n     * option.\n     */\n    getValue: (util: PublicDateShortcutUtils<D>) => T;\n\n    /**\n     * If an anchor date is defined, then this shortcut will show.\n     * — true: only show the shortcut when there is an anchor date.\n     * — false: do not show this shortcut when there is an anchor date.\n     * — undefined: always show the shortcut.\n     */\n    needsAnchor?: boolean;\n}\n\nexport type DatePickerShortcut<T = any> = IShortcut<T, T | null>;\n\nexport type  DateRangePickerShortcut<T = any> = IShortcut<T, [T | null, T | null]>;\n\nexport interface FilterDatePickerProps {\n\n    /**\n     * Variant defined in the theme. If the theme has variants, then the user can select one.\n     */\n    variant?: string;\n\n}\n\nexport enum InitialDateFrom {\n    MANUAL_DATES = \"manual\",\n    SHORTCUT = \"shortcut\",\n}","import {FormFieldObject, IFormEventMappingArrayFieldDefType} from \"../PublicTemplateForm\";\n\n/**\n * Embedded Report Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: EmbeddedReport\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface EmbeddedReportChartOptions extends FormFieldObject {\n\n    /**\n     * Dashboard Name.\n     *\n     * You can use an event (e.g., @{dashboard-path}).\n     */\n    \"$-MDX-reportName\": string;\n\n    /**\n     * Events (from/to).\n     *\n     * Forwarded events.\n     */\n    \"@params\"?: IFormEventMappingArrayFieldDefType;\n\n    \"@eventsOut\"?: IFormEventMappingArrayFieldDefType;\n\n    /**\n     * How to export the embedded report to excel.\n     */\n    exportToExcelMethod: ExportToExcelMethod,\n\n    inheritSchemaName: boolean;\n    inheritCubeName: boolean;\n\n    inheritDisableDefaultSchemaAuthCheck: boolean;\n\n}\n\nexport enum ExportToExcelMethod {\n    SHEET_PER_WIDGET = \"SHEET_PER_WIDGET\",\n    ONE_TABLE = \"ONE_TABLE\"\n}","export class ErrorRendererClasses {\n\n    /**\n     * Style applied to\n     */\n    static root = \"ic3ErrorRenderer-root\";\n    /**\n     * Style applied to\n     */\n    static logo = \"ic3ErrorRenderer-logo\";\n    /**\n     * Style applied to\n     */\n    static logoW = \"ic3ErrorRenderer-logoW\";\n    /**\n     * Style applied to\n     */\n    static info = \"ic3ErrorRenderer-info\";\n    /**\n     * Style applied to\n     */\n    static schemaNotAuth = \"ic3ErrorRenderer-schemaNotAuth\";\n    /**\n     * Style applied to\n     */\n    static message = \"ic3ErrorRenderer-message\";\n    /**\n     * Style applied to\n     */\n    static detailToggle = \"ic3ErrorRenderer-detailToggle\";\n    /**\n     * Style applied to\n     */\n    static widget = \"ic3ErrorRenderer-widget\";\n    /**\n     * Style applied to\n     */\n    static causeMessage = \"ic3ErrorRenderer-causeMessage\";\n    /**\n     * Style applied to\n     */\n    static causeDetailedMessage = \"ic3ErrorRenderer-causeDetailedMessage\";\n    /**\n     * Style applied to\n     */\n    static causeDetailedInfo = \"ic3ErrorRenderer-causeDetailedInfo\";\n    /**\n     * Style applied to\n     */\n    static causeStacktrace = \"ic3ErrorRenderer-causeStacktrace\";\n}\n\nexport declare type ErrorRendererClassKey = keyof ErrorRendererClasses;\n","import {FilterTidyTableChartOptions} from \"./ThemeFilter\";\n\n// TOM : needs clarification\nexport class FilterAutocompleteClasses {\n\n\n    /**\n     * Style applied to the muiAutocomplete root element\n     *\n     * You've all mui classes https://mui.com/material-ui/api/autocomplete/\n     */\n    static readonly muiAutocomplete = \"MuiAutocomplete-root\";\n\n    static readonly action = \"MuiAutocomplete-action\";\n\n}\n\nexport declare type FilterAutocompleteClassesKey = keyof FilterAutocompleteClasses;\n\n/**\n * Filter Autocomplete (aka. Dropdown) Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: FilterAutocomplete\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface FilterAutocompleteChartOptions extends FilterTidyTableChartOptions {\n\n    /**\n     * Variant.\n     *\n     * Allows for selecting a set of preset options. Note that a variant is possibly overriding defined options.\n     */\n    variant?: \"fixedHeight\" | \"standard\" | \"filled\" | \"outlined\";\n\n    /**\n     * Size.\n     *\n     * Rendered items size.\n     */\n    size: \"small\" | \"medium\";\n\n\n    /**\n     * Limit Chips.\n     *\n     * Maximum number of chips that will be visible\n     */\n    limitChips: number;\n\n    /**\n     * Maximum items that allowed in the selection.\n     */\n    limitSelection?: number;\n\n    /**\n     * Text to show when the filter is empty.\n     */\n    placeholderText?: string;\n\n}\n\nexport type FilterAutocompleteProps =\n    Pick<FilterAutocompleteChartOptions, 'variant' | 'size'>\n    & { hideInput?: boolean }\n    & { addHOverflow: boolean }\n    & { hideInputForPrinting?: boolean }\n    & { hideAdornmentForPrinting?: boolean };","import {FilterTidyTableChartOptions} from \"./ThemeFilter\";\n\nexport class FilterButtonsClasses {\n\n    /**\n     * Style applied to the root element.\n     */\n    static readonly container = \"ic3FilterButtons-container\";\n\n    /**\n     *  Style applied to the mui button elements.\n     */\n    static readonly button = \"ic3FilterSlider-button\";\n\n    /**\n     *  Style applied to the mui group element (if present).\n     */\n    static readonly group = \"ic3FilterSlider-group\";\n\n    /**\n     * Slot for MuiButton component(s)\n     */\n    static readonly muiButton = \"\";\n\n}\n\nexport declare type FilterButtonsClassKey = keyof FilterButtonsClasses;\n\n/**\n * Filter Buttons Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: FilterButtons\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface FilterButtonsChartOptions extends FilterTidyTableChartOptions {\n\n    /**\n     * Variant.\n     *\n     * Allows for selecting a set of preset options. Note that a variant is possibly overriding defined options.\n     */\n    variant: \"text\" | \"outlined\" | \"contained\" | string;\n\n    /**\n     * Size.\n     */\n    size: \"small\" | \"medium\" | \"large\";\n\n    /**\n     * Grouped.\n     *\n     * When grouped, the buttons are rendered horizontally or vertically similarly to a toolbar.\n     */\n    group?: boolean;\n\n    /**\n     * Layout (Grouped).\n     */\n    layout?: \"horizontal\" | \"vertical\";\n\n    /**\n     * Grid Column Count\n     *\n     * The buttons will be displayed on a grid. This field sets the number of columns of the grid.\n     * Not relevant if the buttons are 'Grouped'.\n     */\n    columns?: number;\n\n}\n\n/**\n * Props for the FilterButtons root slot.\n */\nexport interface FilterButtonsProps {\n    printing: boolean;\n    variant?: string;\n    grouped: boolean;\n    columns?: number;\n}\n\n/**\n * Props for the FilterButtons Container slot.\n */\nexport interface FilterButtonsContainerProps {\n    columns?: number;\n}","import {FilterTidyTableChartOptions} from \"./ThemeFilter\";\n\nexport class FilterCheckBoxRadioClasses {\n\n    /**\n     * Style applied to the root element.\n     */\n    static readonly root = \"ic3FilterCheckboxRadio-root\";\n\n\n    /**\n     *  Style container for a single Radio or Checkbox\n     */\n    static readonly radioCheckBoxContainer = \"ic3FilterCheckboxRadio-container\";\n\n\n    /**\n     *  root element class decoration when the items are radio components  (single selection)\n     */\n    static readonly radioFlag = \"ic3FilterCheckboxRadio-Radio\";\n\n    /**\n     *  root element class decoration when the items are checkbox components (multiple selection)\n     */\n    static readonly checkboxFlag = \"ic3FilterCheckboxRadio-Checkbox\";\n\n}\n\nexport declare type FilterCheckboxRadioClassKey = keyof FilterCheckBoxRadioClasses;\n\n/**\n * Filter Checkboxes Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: FilterCheckboxRadio\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface FilterCheckboxRadioChartOptions extends FilterTidyTableChartOptions {\n\n    /**\n     * Variant.\n     *\n     * Allows for selecting a set of theme defined variants\n     */\n    variant?: string;\n\n    /**\n     * Size.\n     */\n    size: \"small\" | \"medium\";\n\n    /**\n     * Grid Column Count.\n     *\n     * The checkboxes will be displayed on a grid. Set the number of columns of the grid in this field.\n     */\n    columns?: number;\n\n}\n\nexport interface FilterCheckboxProps {\n    variant?: string;\n    printing: boolean;\n}","import {FormFieldObject, IFormEventArrayFieldDefType} from \"../PublicTemplateForm\";\n\nexport class FilterPanelClasses {\n    /**\n     * Main content div\n     */\n    static readonly mainDiv = \"ic3FilterPanel-root\";\n\n    /**\n     * Div containing the loading spinner and text\n     */\n    static readonly loadingDiv = \"ic3FilterPanel-loading\";\n\n    /**\n     * Div with add filter and remove all filters buttons\n     */\n    static readonly headerDiv = \"ic3FilterPanel-header\";\n\n    /**\n     * Div containing the 'Filters' text and the help icon button\n     */\n    static readonly titleDiv = \"ic3FilterPanel-title\";\n\n    /**\n     * Div containing the 'Filters' text\n     */\n    static readonly titleDivText = \"ic3FilterPanel-title-text\";\n\n    /**\n     * The help button next to the filter panel title\n     */\n    static readonly titleDivButtons = \"ic3FilterPanel-title-buttons\";\n\n    /**\n     * Icon to make the filter panel collapsed (only available on App Left Panel)\n     */\n    static readonly collapsibleIcon = \"ic3FilterPanel-collapsibleIcon\";\n\n    /**\n     * Icon showing how many filters you have\n     */\n    static readonly collapsedNumberOfFiltersIcon = \"ic3FilterPanel-collapsedNumberOfFiltersIcon\";\n\n    /**\n     * Help icon\n     */\n    static readonly helpIcon = \"ic3FilterPanel-helpIcon\";\n\n    /**\n     * Menu icon for filter panel views.\n     */\n    static readonly menuIcon = \"ic3FilterPanel-menuIcon\";\n\n    /**\n     * Div containing the add and remove all buttons\n     */\n    static readonly headerDivButtons = \"ic3FilterPanel-header-buttons\";\n\n    /**\n     * alert\n     */\n    static readonly alert = \"ic3FilterPanel-alert\";\n\n    /**\n     * Add button\n     */\n    static readonly headerDivAddButton = \"ic3FilterPanel-HeaderDivAddButton\";\n\n    /**\n     * Reset filter button\n     */\n    static readonly headerDivResetButton = \"ic3FilterPanel-HeaderDivResetButton\";\n\n    /**\n     * Div of the content root. Used for animation purposes.\n     */\n    static readonly contentDivRoot = \"ic3FilterPanel-content-root\";\n\n    /**\n     * Div with the stack of filter items\n     */\n    static readonly contentDiv = \"ic3FilterPanel-content\";\n\n    /**\n     * Div with no filters defined text\n     */\n    static readonly contentNoFilters = \"ic3FilterPanel-NoFilters\";\n\n    /**\n     * Main filter div\n     */\n    static readonly filterItemDiv = \"ic3FilterPanel-filterItem\";\n\n    /**\n     * Main filter div\n     */\n    static readonly filterItemDivHeader = \"ic3FilterPanel-filterItemHeader\";\n\n    /**\n     * Div around the filter clear button. Used for showing the tooltip when hovered.\n     */\n    static readonly filterItemClearButtonContainer = \"ic3FilterPanel-ItemClearButtonContainer\";\n\n    /**\n     * Class for the clear button itself.\n     */\n    static readonly filterItemClearButton = \"ic3FilterPanel-ItemClearButton\";\n\n    static readonly filterItemRemoveButton = \"ic3FilterPanel-ItemRemoveButton\";\n\n    /**\n     * Classname for the TextField component\n     */\n    static readonly inputField = \"ic3FilterPanel-filterInputfield\";\n\n    /**\n     * Classname for the checkmark 'set' button.\n     */\n    static readonly inputFieldSetValueButton = \"ic3FilterPanel-inputFieldSetValueButton\";\n\n    static readonly dateTimePicker = \"ic3FilterPanel-dateTimePicker\";\n\n    /**\n     * Classname for the value selector div.\n     */\n    static readonly valueSelector = \"ic3FilterPanel-valueSelector\";\n\n    /**\n     * A div with the displayed values for the value selector in preview mode. Only visible when the operator is\n     * `Is Any Of` or `Is None Of`.\n     */\n    static readonly inputFieldPreviewValues = \"ic3FilterPanel-PreviewValue\";\n\n    /**\n     * Classname for the field label\n     */\n    static readonly fieldName = \"ic3FilterPanel-fieldName\";\n    /**\n\n     * Classname for the field label\n     */\n    static readonly fieldNameExtra = \"ic3FilterPanel-fieldName-extra\";\n\n    /**\n     * Div with selectable items for filters with few items\n     */\n    static readonly selectableContent = \"ic3FilterPanel-selectableContent\";\n\n    /**\n     * Div when it is collapsed\n     */\n    static readonly collapsedDiv = \"ic3FilterPanel-collapsedDiv\";\n\n}\n\nexport interface FilterPanelProps {\n\n    /**\n     * Variant defined in the theme. If the theme has variants, then the user can select one.\n     */\n    variant?: string;\n\n    /**\n     * If true, grow filter in row direction. If false, grow in column direction.\n     */\n    filterLayoutHorizontal?: boolean;\n\n    /**\n     * Available when the filter panel is used in an application.\n     * User can collapse the filter panel.\n     */\n    isCollapsible?: boolean;\n\n    /**\n     * Available when the filter panel is used in an application.\n     * The filter panel is on the right of the application.\n     */\n    isRightFilterPanel?: boolean;\n}\n\nexport declare type FilterPanelClassesKey = keyof FilterPanelClasses;\n\n/**\n * Filter Panel Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: FilterPanel\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface FilterPanelChartOptions extends FormFieldObject {\n\n    /**\n     * Variant.\n     *\n     * Allows for selecting a set of preset options. Note that a variant is possibly overriding defined options.\n     */\n    variant?: string;\n\n    /**\n     * As Global Filter.\n     *\n     * In the widget interaction tab, enable 'Use Global Filter' to see the effects of this option.\n     *\n     * Default value can NOT be changed in a theme or variant\n     */\n    asGlobalFilter: boolean;\n\n    /**\n     * Schema Name.\n     *\n     * Using the schema defined at dashboard level when not defined.\n     */\n    schemaName?: string;\n\n    /**\n     * Cube Name.\n     *\n     * The cube to use. Leave blank to use the default cube.\n     */\n    cubeName?: string;\n\n    /**\n     * Allowed Filters.\n     *\n     * Only show these options in the data field selector.\n     * Easily change by clicking 'Set Allowed Filters' in the user menu of the widget header.\n     */\n    customFilterConfig?: string;\n\n    /**\n     * These filters are not allowed to be selected by the user. These filters are hidden from the add filter menu.\n     */\n    notAllowedFiltersConfig?: string;\n\n    /**\n     * Default Filters.\n     *\n     * These filters are in the filter panel upon opening the dashboard.\n     * Easily change by clicking 'Set Default Filters' in the user menu of the widget header.\n     */\n    initialFilterConfig?: string;\n\n    /**\n     * Allow users to save and load filters. Filters are stored in the users' browser.\n     */\n    enableViews?: boolean;\n\n    /**\n     * Max number of views a user can have. Empty means unlimited.\n     */\n    maxNumberOfViews?: number;\n\n    /**\n     * If true, grow filter in row direction. If false, grow in column direction.\n     */\n    filterLayoutHorizontal?: boolean;\n\n    /**\n     * If defined, the filter panel only shows items where this measure is not NULL. This means, for example, that\n     * if there is a filter item setting Continent to Asia, then other filters, e.g., country, only show countries\n     * with continent Asia.\n     */\n    measureMdx?: string;\n\n    /**\n     * Name template for the fields with properties. Use 'levelName' and 'propertyName' as placeholders.\n     */\n    propertyFieldNameTemplate?: string;\n\n    /**\n     * Use the simple selection filter if and only if `useSimpleFilterCutoff` is not null and the level\n     * has <= `useSimpleFilterCutoff` members.\n     */\n    useSimpleFilterCutoff?: number;\n\n    /**\n     * Per default, the filter panel allows users to filter on properties. You can disable that with this option.\n     */\n    hidePropertyFilters?: boolean;\n\n    /**\n     * Only allow users to select from these operators.\n     */\n    allowedOperatorsConfig?: IPGFilterItemFilterType[];\n\n    /**\n     * Set to `true` to show date picker shortcuts.\n     */\n    datePickerShortcuts?: boolean;\n\n    /**\n     * Anchor date when using shortcuts. This expression is evaluated against the time level used.\n     */\n    shortcutsAnchorDate?: string;\n\n    /**\n     * User can choose from the shortcuts in this group. Edit the groups in the theme plugin.\n     */\n    allowedShortcutGroup: string;\n\n    /**\n     * Add these filters to the filter panel queries.\n     */\n    eventFilters?: IFormEventArrayFieldDefType;\n}\n\nexport type TextFilterType = \"EQUALS\"\n    | \"NOT_EQUALS\"\n    | \"STARTS_WITH\"\n    | \"ENDS_WITH\"\n    | \"CONTAINS\"\n    | \"NOT_CONTAINS\"\n    | \"REGEX\";\n\nexport type IPGFilterItemFilterType = TextFilterType\n    | \"IS_ANY_OF\"\n    | \"IS_NONE_OF\"\n    | \"GREATER_THAN\"\n    | \"GREATER_EQUAL_THAN\"\n    | \"SMALLER_THAN\"\n    | \"SMALLER_EQUAL_THAN\"\n    | \"BETWEEN\"\n    | \"IS_EMPTY\"\n    | \"IS_NOT_EMPTY\";","export class RegexFilterClasses {\n\n    /**\n     * Additional root-class when using the preview.\n     */\n    static readonly previewRoot = \"ic3RegexFilter-previewRoot\";\n\n    /**\n     * Additional root-class when using the selection box.\n     */\n    static readonly selectionBoxRoot = \"ic3RegexFilter-selectionBoxRoot\";\n\n    /**\n     * Class for the div with the search box.\n     */\n    static readonly searchBoxContainer = \"ic3RegexFilter-searchBoxContainer\";\n\n    static readonly reachedLimitText = \"ic3RegexFilter-reachedLimitText\";\n\n    static readonly filterPreview = \"ic3RegexFilter-filterPreview\";\n\n    static readonly searchContent = \"ic3RegexFilter-searchContent\";\n\n    static readonly footer = \"ic3RegexFilter-footer\";\n\n    static readonly footerButtons = \"ic3RegexFilter-footerButtons\";\n\n    static readonly filterCount = \"ic3RegexFilter-filterCount\";\n\n    static readonly selectResultsButton = \"ic3RegexFilter-selectResultsButton\";\n}\n\nexport declare type RegexFilterClassesKey = keyof RegexFilterClasses;\n\nexport interface RegexFilterProps {\n\n}","import {FilterTidyTableChartOptions} from \"./ThemeFilter\";\n\n// TOM : needs clarification\nexport class FilterSliderClasses {\n\n    /**\n     * Style applied to the root element.\n     */\n    static readonly root = \"ic3FilterSlider-root\";\n\n    /**\n     *  Style applied to the mui slider element.\n     */\n    static readonly slider = \"ic3FilterSlider-slider\";\n\n    /**\n     *  Style applied to the tooltip element.\n     */\n    static readonly tooltip = \"ic3FilterSlider-tooltip\"\n\n    /**\n     * Slot for MuiSlider component\n     */\n    static readonly muiSlider = \"\";\n\n    /**\n     * Slot for Selection Label (below the slider)\n     */\n    static readonly selectionLabel = \"ic3FilterSlider-SelectionLabel\";\n    static readonly emptySelection = \"ic3FilterSlider-EmptySelection\";\n\n    /**\n     * root modifiers for horizontal or vertical slider\n     */\n    static readonly horizontal = \"ic3FilterSlider-Horizontal\";\n    static readonly vertical = \"ic3FilterSlider-Vertical\";\n\n\n}\n\nexport declare type FilterSliderClassKey = keyof FilterSliderClasses;\n\nexport enum FilterSliderRenderingType {\n\n    MARKS = \"MARKS\",\n    TOOLTIPS = \"TOOLTIPS\",\n    MARKS_WITH_TOOLTIPS = \"MARKS_WITH_TOOLTIPS\",\n    NONE = \"NONE\",\n}\n\n/**\n * Filter Slider Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: FilterSlider\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface FilterSliderChartOptions extends FilterTidyTableChartOptions {\n\n    /**\n     * Variant.\n     *\n     * Allows for selecting a set of preset options. Note that a variant is possibly overriding defined options.\n     */\n    variant?: string;\n\n    /**\n     * Size.\n     */\n    size: \"small\" | \"medium\";\n\n    /**\n     * Orientation.\n     */\n    orientation: \"horizontal\" | \"vertical\";\n\n    /**\n     * Style.\n     */\n    style: FilterSliderRenderingType;\n\n    /**\n     * Margins.\n     *\n     * Left/right (or top/down) margins of the slider.\n     */\n    margin: number;\n\n    /**\n     * Mark Each\n     *\n     * When active, adds a label for each nt step to the mark (1 for each step)\n     */\n    markLabelEach: number;\n\n    /**\n     * Selection Label.\n     *\n     * An optional label under the slider with selection information\n     */\n    selectionLabel?: string;\n}\n\nexport interface FilterSliderProps {\n    variant?: string;\n    thumbColor?: string;\n    emptySelection: boolean;\n    isVertical?: boolean;\n    size?: 'small' | 'medium';\n    padding: number;\n}","export class LazyTreeClasses {\n\n    /**\n     * Style applied to the root element.\n     */\n    static readonly lazyRoot = 'ic3LazyTreeView-root';\n\n    /** Styles applied to the search toolbar element */\n    static readonly toolbar = 'ic3LazyTreeView-toolbar';\n\n    /** Styles applied to the search search input element */\n    static readonly input = 'ic3LazyTreeView-toolbar-input';\n\n    /** Styles applied to the select filter button (on) */\n    static readonly button = 'ic3LazyTreeView-toolbar-button';\n\n    /** Styles applied to the select filter button (on) */\n    static readonly buttonFilterSelectedOn = 'ic3LazyTreeView-toolbar-buttonOn';\n\n    /** Styles applied to the select filter button (off) */\n    static readonly buttonFilterSelectedOff = 'ic3LazyTreeView-toolbar-buttonOff';\n\n    /** Styles applied to the TreeRoot element */\n    static readonly treeRoot = 'ic3LazyTreeView-treeRoot';\n\n    /**\n     * Item classes\n     */\n    static readonly itemRoot = 'ic3LazyTreeView-itemRoot';\n\n    static readonly itemContainer = 'ic3LazyTreeView-itemContainer';\n\n    static readonly leftDiv = 'ic3LazyTreeView-itemLeftDiv';\n\n    static readonly itemLabelContainer = 'ic3LazyTreeView-itemLabelContainer';\n\n    static readonly itemIcon = 'ic3LazyTreeView-itemIcon';\n}\n\nexport declare type LazyTreeClassesClassKey = keyof LazyTreeClasses;\n\nexport interface LazyTreeProps {\n\n}","import {TreeFireEventMode} from \"../PublicTidyTableInteractions\";\nimport {FilterTidyTableChartOptions} from \"./ThemeFilter\";\nimport {LazyTreeClasses} from \"./ThemeLazyTreeClasses\";\n\nexport class FilterTreeClasses extends LazyTreeClasses {\n\n    /**\n     * Style applied to the root element.\n     */\n    static readonly root = \"ic3TreeFilter-root\";\n\n    /**\n     *  Style applied to the tree item without control icons\n     */\n    static readonly simpleItemLabel = \"ic3TreeFilter-simpleItemLabel\";\n\n    /**\n     *  Style applied to the tree item witht control icons\n     */\n    static readonly itemLabelWithIcons = \"ic3TreeFilter-itemLabelWithIcons\";\n\n    /**\n     * + Ic3GlobalClasses\n     * + Mui TreeView class names\n     */\n\n}\n\nexport class FilterTreePopOverClasses {\n\n}\n\nexport declare type FilterTreeClassKey = keyof FilterTreeClasses;\nexport declare type FilterTreePopOverClassKey = keyof FilterTreePopOverClasses;\n\nexport type FilterFireEventMode =\n    TreeFireEventMode.ALL_SELECTED |\n    TreeFireEventMode.COMPACT_ON_PARENT\n    ;\n\n/**\n * Filter Tree Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: FilterTree\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface FilterTreeChartOptions extends FilterTidyTableChartOptions {\n\n    /**\n     * Variant.\n     *\n     * Allows for selecting a set of preset options. Note that a variant is possibly overriding defined options.\n     */\n    variant?: string;\n\n    /**\n     * Size.\n     */\n    size: \"small\" | \"medium\";\n\n    /**\n     * Use Control Icons.\n     *\n     * Display a checkbox/radiobutton to the left of each item.\n     */\n    useControlIcons?: boolean;\n\n    /**\n     * Expand/Collapse Depth.\n     *\n     * Number of levels initially expanded.\n     */\n    startOpenDepth: number,\n\n\n    /**\n     * Cascade Selection.\n     *\n     * Select all children as well. Does not apply if single selection.\n     */\n    cascadeSelection: boolean,\n\n    /**\n     * Fire Mode.\n     *\n     * When firing an event, do not fire children if the parent is selected (i.e. the filter is used as an MDX filter).\n     *\n     * Does not apply if single selection.\n     */\n    fireMode: FilterFireEventMode,\n\n    /**\n     * Add Search.\n     *\n     * Add a search bar above the tree.\n     */\n    addSearch: boolean,\n\n    /**\n     * Search Placeholder.\n     *\n     * Text displayed when the search bar is empty.\n     */\n    searchPlaceholder?: string;\n\n    /**\n     * Dropdown (aka. Autocomplete).\n     *\n     * The tree is displayed as a dropdown.\n     */\n    autoComplete: boolean;\n\n    /**\n     * Variant.\n     */\n    autoCompleteVariant?: string;\n\n    /**\n     * Size (Dropdown/Autocomplete).\n     *\n     * Rendered items size.\n     */\n    autoCompleteSize?: 'small' | 'medium';\n\n    /**\n     * Limit Chips.\n     *\n     * Maximum number of chips that will be visible\n     */\n    autoCompleteLimitChips: number;\n}\n\nexport interface FilterTreeProps {\n    printing: boolean;\n    variant?: string;\n    size: 'small' | 'medium';\n}\n\nexport interface FilterTreePopOverProps {\n    variant?: string;\n}","export class Ic3GlobalClasses {\n\n    static readonly singleSelection = 'ic3-SingleSelection';\n\n    static readonly multipleSelection = 'ic3-MultipleSelection';\n}\n\n","import {FormFieldObject} from \"../PublicTemplateForm\";\nimport {TidyTableColumnSelector} from \"../PublicTidyTableTypes\";\n\nexport interface GoogleMapCoordinateChartOptions extends FormFieldObject {\n\n    /**\n     * Location.\n     *\n     * A column/member with latitude/longitude properties.\n     */\n    location?: TidyTableColumnSelector;\n\n    /**\n     * Latitude.\n     *\n     * A column/member with latitude properties.\n     */\n    latitude?: TidyTableColumnSelector;\n\n    /**\n     * Longitude.\n     *\n     * A column/member with longitude properties.\n     */\n    longitude?: TidyTableColumnSelector;\n\n}\n\n/**\n * https://developers.google.com/maps/documentation/javascript/style-reference\n */\nexport enum GoogleMapFeaturesStyles {\n    ALL = 'all',\n    ADMINISTRATIVE = 'administrative',\n    ADMINISTRATIVE_COUNTRY = 'administrative.country',\n    ADMINISTRATIVE_LAND_PARCEL = 'administrative.land_parcel',\n    ADMINISTRATIVE_LOCALITY = 'administrative.locality',\n    ADMINISTRATIVE_NEIGHBORHOOD = 'administrative.neighborhood',\n    ADMINISTRATIVE_PROVINCE = 'administrative.province',\n    LANDSCAPE = 'landscape',\n    LANDSCAPE_MAN_MADE = 'landscape.man_made',\n    LANDSCAPE_NATURAL = 'landscape.natural',\n    LANDSCAPE_NATURAL_LANDCOVER = 'landscape.natural.landcover',\n    LANDSCAPE_NATURAL_TERRAIN = 'landscape_natural.terrain',\n    POI = 'poi',\n    POI_ATTRACTION = 'poi.attraction',\n    POI_BUSINESS = 'poi.business',\n    POI_GOVERNMENT = 'poi.government',\n    POI_MEDICAL = 'poi.medical',\n    POI_PARK = 'poi.park',\n    POI_PLACE_OF_WORSHIP = 'poi.place_of_worship',\n    POI_SCHOOL = 'poi.school',\n    POI_SPORTS_COMPLEX = 'poi.sports_complex',\n    ROAD = 'road',\n    ROAD_ARTERIAL = 'road.arterial',\n    ROAD_HIGHWAY = 'road.highway',\n    ROAD_HIGHWAY_CONTROLLED_ACCESS = 'road.highway.controlled_access',\n    ROAD_LOCAL = 'road.local',\n    TRANSIT = 'transit',\n    TRANSIT_LINE = 'transit.line',\n    TRANSIT_STATION = 'transit.station',\n    TRANSIT_STATION_AIRPORT = 'transit.station.airport',\n    TRANSIT_STATION_BUS = 'transit.station.bus',\n    TRANSIT_STATION_RAIL = 'transit.station.rail',\n    WATER = 'water',\n}\n\nexport enum GoogleMapTypeId {\n    /**\n     * This map type displays a transparent layer of major streets on satellite\n     * images.\n     */\n    HYBRID = 'hybrid',\n    /**\n     * This map type displays a normal street map.\n     */\n    ROADMAP = 'roadmap',\n    /**\n     * This map type displays satellite images.\n     */\n    SATELLITE = 'satellite',\n    /**\n     * This map type displays maps with physical features such as terrain and\n     * vegetation.\n     */\n    TERRAIN = 'terrain',\n}\n\n/**\n * google.maps.MapOptions\n */\nexport interface GoogleMapCommonFieldProps extends FormFieldObject {\n\n    /**\n     * Map Type.\n     */\n    mapType: GoogleMapTypeId[];\n\n    /**\n     * Features.\n     */\n    showFeatures: GoogleMapFeaturesStyles[];\n\n    /**\n     * Zoom.\n     *\n     * To set the currently displayed zoom open the widget's menu (top right) and click on 'Set Zoom & Center'.\n     *\n     * Integers between zero, and up to the supported <a href=\"https://developers.google.com/maps/documentation/javascript/maxzoom\">maximum zoom level</a>.\n     */\n    zoom: number;\n\n    /**\n     * Latitude.\n     *\n     * To set the currently displayed latitude open the widget's menu (top right) and click on 'Set Zoom & Center'.\n     */\n    latitude: number;\n\n    /**\n     * Longitude.\n     *\n     * To set the currently displayed longitude open the widget's menu (top right) and click on 'Set Zoom & Center'.\n     */\n    longitude: number;\n\n    /**\n     * Zoom Control.\n     */\n    zoomControl?: boolean;\n\n    /**\n     * Full Screen Control.\n     */\n    fullscreenControl?: boolean;\n\n    /**\n     * Street View Control.\n     */\n    streetViewControl?: boolean;\n\n}\n\nexport interface GoogleMapChartOptions extends FormFieldObject {\n\n    /**\n     * Internal usage.\n     */\n    groupsOrder?: string[];\n\n    mapOptions: GoogleMapCommonFieldProps;\n\n}\n","export class HtmlBoxClasses {\n    /**\n     * Style applied to the root element.\n     */\n    public static root = \"ic3HtmlBox-root\";\n}\n\nexport declare type HtmlBoxClassKey = keyof HtmlBoxClasses;\n\nexport type HtmlBoxVariant =\n    |\n    \"plain\" |\n    /**\n     * Used by the editor documentation dialog and text box used for Live Demo documentation.\n     */\n    \"doc\" |\n    /**\n     * Used by the dashboard documentation dialog (e.g., filter panel usage, box help icon).\n     */\n    \"dashboardDoc\" |\n    /**\n     * Used by the widget box tooltip/help icon.\n     */\n    \"widgetHelp\" |\n    /**\n     * Used for help tooltip & tooltip in table\n     */\n    \"tooltip\" |\n    /**\n     * Based on dashboard theme definition (h1,h2...)\n     */\n    \"dashboardTheme\"\n    ;\n\nexport interface StyledHtmlBoxProps {\n\n    sizing?: boolean;\n    sizingW?: number;\n\n    variant?: HtmlBoxVariant;\n}","import {FormFieldObject} from \"../PublicTemplateForm\";\n\n/**\n * Image Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: Image\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface ImageChartOptions extends FormFieldObject {\n\n    /**\n     * URL.\n     *\n     * An absolute or relative URL.\n     */\n    urlToImage: string;\n\n    /**\n     * Resize the image, read more here, https://www.w3schools.com/css/css3_object-fit.asp.\n     */\n    resizeImage: ImageResizingOptions;\n}\n\nexport enum ImageResizingOptions {\n    NONE = \"none\",\n    FILL = \"fill\",\n    CONTAIN = \"contain\",\n    COVER = \"cover\",\n    SCALE_DOWN = \"scale-down\"\n}\n","import {FormFieldObject} from \"../PublicTemplateForm\";\nimport {TidyTableColumnSelector} from \"../PublicTidyTableTypes\";\nimport {\n    CompareTextInterpretationType,\n    SparkChartType,\n    SparklinePosition,\n    TargetTextIconSet,\n    TargetTextPosition\n} from \"../ITypes\";\n\nexport class KpiCardClasses {\n\n    public static root = \"ic3KpiCard-root\";\n\n    public static valuesContent = \"ic3KpiCard-valuesContent\";\n\n    public static chartContent = \"ic3KpiCard-chartContent\";\n\n    public static valueTitle = \"ic3KpiCard-valueTitle\";\n\n    public static valueText = \"ic3KpiCard-valueText\";\n\n    public static kpiCompareTextRoot = \"ic3KpiCard-compareTextRoot\";\n\n    public static kpiCompareTextRootEmpty = \"ic3KpiCard-emptyCompareTextEmpty\";\n\n    public static comparePercentageText = \"ic3KpiCard-comparePercentageText\";\n\n    public static compareTargetText = \"ic3KpiCard-compareTargetText\";\n\n    public static comparePercentZero = \"ic3KpiCard-comparePercentZero\";\n\n    public static comparePercentUp = \"ic3KpiCard-comparePercentUp\";\n\n    public static comparePercentDown = \"ic3KpiCard-comparePercentDown\";\n\n}\n\nexport declare type KpiCardClassKey = keyof KpiCardClasses;\n\nexport interface KpiCardProps {\n\n    /**\n     * Variant defined in the theme. If the theme has variants, then the user can select one.\n     */\n    variant?: string;\n\n    sparklinePosition: SparklinePosition;\n\n    targetPosition: TargetTextPosition;\n\n}\n\n/**\n * KPI Card Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: KpiCard\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface KpiCartChartOptions extends SparkChartOptionsMeta {\n\n    /**\n     * Variant defined in the theme. If the theme has variants, then the user can select one.\n     */\n    variant?: string;\n\n    /**\n     * Value.\n     *\n     * The KPI value to show in the widget.\n     */\n    value: TidyTableColumnSelector;\n\n    /**\n     * Target.\n     *\n     * Compare the value with this target value.\n     */\n    target?: TidyTableColumnSelector;\n\n    /**\n     * Historical Data.\n     *\n     * The data for the sparkline. This must be a list of numbers, e.g., [43, 5, 2, 4].\n     * The color of the sparkline depends on the trend of the sparkline.\n     */\n    data?: TidyTableColumnSelector;\n\n    /**\n     * Title Text.\n     *\n     * The text above the value.\n     */\n    titleText: string;\n\n    /**\n     * Value Text.\n     *\n     * The text for the value.\n     */\n    valueText: string;\n\n    /**\n     * Target Text.\n     *\n     * The text to display after the percentage difference.\n     */\n    targetText: string;\n\n    /**\n     * Interpretation.\n     *\n     * How to compare the value and the target.\n     */\n    targetInterpretation: CompareTextInterpretationType;\n\n    /**\n     * Target Position.\n     *\n     * Where to display the target.\n     */\n    targetPosition: TargetTextPosition;\n\n    /**\n     * Trend Icon.\n     *\n     * Display the trend icon?\n     */\n    includeTrendIcon: boolean;\n\n    /**\n     * Delta for zero value\n     *\n     * If the target value is below this delta value it is considered as a delta value  (rounding issue)\n     */\n    deltaZero?: number;\n\n    /**\n     * Icon.\n     *\n     * The icon that indicate the trend.\n     */\n    iconSet: TargetTextIconSet;\n\n    /**\n     * Position.\n     *\n     * Where to display the sparkline.\n     */\n    sparklinePosition: SparklinePosition;\n}\n\nexport interface SparkChartOptionsMeta extends FormFieldObject {\n    /**\n     * Sparkline Type.\n     */\n    sparkChartType: SparkChartType;\n\n    /**\n     * Tooltips.\n     *\n     * Enable tooltips when the user hovers over the sparkline.\n     */\n    sparklineTooltips: boolean;\n\n    /**\n     * Fill Mode.\n     *\n     * Fill the area under the sparkline.\n     */\n    sparklineHasArea: boolean;\n}\n","export class LayoutClasses {\n\n    /**\n     * When dragging a box, to keep the cursor on move\n     */\n    static widgetBoxDragActiveClass = \"ic3SelectedBoxDragActive\";\n\n    static widgetSelector = \"ic3WidgetSelected\";\n\n    static widgetBoxSelected = \"ic3WidgetBoxSelected\";\n\n    static widgetBoxSelectedEx = \"ic3WidgetBoxSelectedEx\";\n\n}\n\nexport declare type LayoutClassKey = keyof LayoutClasses;\n\n","export class LayoutPageClasses {\n\n    static root = \"ic3LayoutPage-root\";\n\n    /**\n     * Style applied to the root element containing the dashboard pages.\n     */\n    static widgetPage = \"ic3LayoutPage-widgetPage\";\n    /**\n     * Style applied to\n     */\n    static widgetPageMargin = \"ic3LayoutPage-widgetPageMargin\";\n    /**\n     * Style applied to\n     */\n    static widgetPageGrid = \"ic3LayoutPage-widgetPageGrid\";\n    /**\n     * Style applied to\n     */\n    static widgetPageWidgets = \"ic3LayoutPage-widgetPageWidgets\";\n    /**\n     * Style applied to the page on hover.\n     */\n    static widgetPagePH = \"ic3LayoutPage-widgetPagePH\";\n\n}\n\nexport declare type LayoutPageClassKey = keyof LayoutPageClasses;\n","import {BaseTableChartOptions} from \"./ThemeBaseTable\";\n\nexport class PivotTableClasses {\n\n    static readonly main = \"ic3-pt\";\n\n    static readonly cell = \"ic3-pt-cell\";\n\n    static readonly totalRow = \"ic3-pt-row.ic3-totalRow\";\n\n    static readonly leftHeaderCell = \"ic3-pt-col.lh\";\n\n    static readonly leftHeaderTitle = \"ic3-pt-col.lh .ic3-pt-header-label\";\n\n    static readonly topHeaderCell = \"ic3-pt-col.th\";\n\n    static readonly topHeaderTitle = \"ic3-pt-col.th .ic3-pt-header-label\";\n\n    static readonly column = \"ic3-pt-col\";\n\n    static readonly columnSeparator = \"ic3-pt .ic3-pt-col-separator\";\n\n    static readonly columnSeparatorContent = \"ic3-pt .ic3-pt-col-separator-content\";\n\n    static readonly icon = \"ic3-pt-icon\";\n\n    static readonly iconSort = \"ic3-pt-icon-sort\";\n\n    static readonly emptyHeader = \"ic3-pt-empty-header\";\n\n    static readonly selected = \"ic3-pt-selected\";\n\n    static readonly hover = \"ic3-pt-hover\";\n\n}\n\n/**\n * List of classNames available\n */\nexport declare type PivotTableClassKey = keyof PivotTableClasses;\n\nexport interface PivotTableProps {\n\n    variant?: string;\n}\n\nexport enum PivotTableHoverEffectOptions {\n    NONE = 'NONE',\n    SELECTION_OR_ROW = 'SELECTION_OR_ROW',\n    ROW_OR_COLUMN = 'ROW_OR_COLUMN',\n    ROW_AND_COLUMN = 'ROW_AND_COLUMN',\n    ROW_ONLY = 'ROW_ONLY',\n    COLUMN_ONLY = 'COLUMN_ONLY',\n}\n\n/**\n * Pivot Table Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: PivotTable\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface PivotTableChartOptions extends BaseTableChartOptions {\n\n    /**\n     * Name of a variant. Note that a variant is possibly overriding defined options.\n     */\n    variant?: string;\n\n    /**\n     * Left Header Names (CSV).\n     *\n     * Names of the columns in the left header. A comma separated list of values\n     * ($h for the hierarchy name, $l for the level name). The last value repeat itsef.\n     */\n    cornerText?: string;\n\n    /**\n     * Sortable (CSV).\n     *\n     * Display the sort options for the top left header. A list of boolean values: 'true', 'false'. The last value repeats itself.\n     */\n    leftHeaderSortable: string;\n\n    /**\n     * Merge Left Header.\n     *\n     * Use a single cell int the top left corner of the table.\n     */\n    mergeLeftHeader: boolean;\n\n    /**\n     * Wrap Top Header.\n     *\n     * Display the top header content on multiple lines.\n     */\n    topHeaderWrap: boolean;\n\n    /**\n     * Flatten Top Header.\n     *\n     * Removes drilldown and parent/child relations from top header.\n     */\n    flattenTopHeader: boolean;\n\n    /**\n     * Left Header Alignment (CSV).\n     *\n     * The first column (possibly a multi-hierarchy axis). A comma separated list of values:\n     * 'left', 'center', 'right'. The last value repeats itself.\n     */\n    columnLeftHeaderAlign: string;\n\n    /**\n     * Hover Behavior.\n     *\n     * Highlight rows and/or columns on hover.\n     */\n    hoverOptions: PivotTableHoverEffectOptions;\n\n}\n\n","import {FormFieldObject} from \"../PublicTemplateForm\";\nimport {PaperOrientation} from \"../ITypes\";\n\nexport class PrintButtonClasses {\n\n    static readonly root: string = \"ic3PrintButton\";\n\n    static readonly progress: string = \"ic3PrintButton-progress\";\n\n    static readonly cancel: string = \"ic3PrintButton-cancel\";\n\n}\n\nexport declare type PrintButtonClassKey = keyof PrintButtonClasses;\n\n/**\n * Print Button Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: PrintButton\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface PrintButtonChartOptions extends FormFieldObject {\n\n    caption: string;\n\n    variant: \"text\" | \"outlined\" | \"contained\" | string;\n\n    withDialog: boolean;\n\n    paperSizeName?: string;\n    paperOrientation?: PaperOrientation,\n\n    \"$-fileName\"?: string;\n\n}\n\nexport interface StyledPrintButtonDivProps {\n\n    variant: \"text\" | \"outlined\" | \"contained\" | string;\n\n}","/**\n * A dashboard application (i.e., list of dashboard, global filters...).\n */\nexport class ReportAppBarClasses {\n\n    /**\n     * Style applied to\n     */\n    static root = \"ic3AppBar-root\";\n    /**\n     * Style applied to\n     */\n    static title = \"ic3AppBar-title\";\n\n    static titleC = \"ic3AppBar-titleC\";\n\n    static globalFilter = \"ic3AppBar-globalFilter\";\n\n    static globalFilterPanel = \"ic3AppBar-globalFilterPanel\";\n\n}\n\nexport declare type ReportAppBarClassKey = keyof ReportAppBarClasses;\n","import {BaseTableChartOptions} from \"./ThemeBaseTable\";\n\n/**\n * List of classNames available\n */\nexport declare type TableClassKey = keyof TableClasses;\n\n\n/**\n * All props of Mui-DataGridPro ( + variant )\n *\n * GridClasses\n *\n * https://mui.com/api/data-grid/data-grid-pro/\n */\nexport interface TableProps {\n\n    noHeader: boolean;\n    variant?: string;\n    printing: boolean;\n}\n\n\n/**\n * Copy of\n * MUI CSS :  https://mui.com/api/data-grid/data-grid-pro/#css\n */\nexport class TableClasses {\n    /* \tStyles applied to the root element if autoHeight={true}. */\n    static readonly 'autoHeight' = \"MuiDataGrid-autoHeight\";\n    /* \tStyles applied to the icon of the boolean cell. */\n    static readonly 'booleanCell' = \"MuiDataGrid-booleanCell\";\n    /* \tStyles applied to the cell element if the cell is editable. */\n    static readonly 'cell--editable' = \"MuiDataGrid-cell--editable\";\n    /* \tStyles applied to the cell element if the cell is in edit mode. */\n    static readonly 'cell--editing' = \"MuiDataGrid-cell--editing\";\n    /* \tStyles applied to the cell element if align=\"center\". */\n    static readonly 'cell--textCenter' = \"MuiDataGrid-cell--textCenter\";\n    /* \tStyles applied to the cell element if align=\"left\". */\n    static readonly 'cell--textLeft' = \"MuiDataGrid-cell--textLeft\";\n    /* \tStyles applied to the cell element if align=\"right\". */\n    static readonly 'cell--textRight' = \"MuiDataGrid-cell--textRight\";\n    /* \tStyles applied to the cell element. */\n    static readonly 'cell' = \"MuiDataGrid-cell\";\n    /* \tStyles applied to the cell checkbox element. */\n    static readonly 'cellCheckbox' = \"MuiDataGrid-cellCheckbox\";\n    /* \tStyles applied to the selection checkbox element. */\n    static readonly 'checkboxInput' = \"MuiDataGrid-checkboxInput\";\n    /* \tStyles applied to the column header if headerAlign=\"center\". */\n    static readonly 'columnHeader--alignCenter' = \"MuiDataGrid-columnHeader--alignCenter\";\n    /* \tStyles applied to the column header if headerAlign=\"left\". */\n    static readonly 'columnHeader--alignLeft' = \"MuiDataGrid-columnHeader--alignLeft\";\n    /* \tStyles applied to the column header if headerAlign=\"right\". */\n    static readonly 'columnHeader--alignRight' = \"MuiDataGrid-columnHeader--alignRight\";\n    /* \tStyles applied to the floating column header element when it is dragged. */\n    static readonly 'columnHeader--dragging' = \"MuiDataGrid-columnHeader--dragging\";\n    /* \tStyles applied to the column header if it is being dragged. */\n    static readonly 'columnHeader--moving' = \"MuiDataGrid-columnHeader--moving\";\n    /* \tStyles applied to the column header if the type of the column is number. */\n    static readonly 'columnHeader--numeric' = \"MuiDataGrid-columnHeader--numeric\";\n    /* \tStyles applied to the column header if the column is sortable. */\n    static readonly 'columnHeader--sortable' = \"MuiDataGrid-columnHeader--sortable\";\n    /* \tStyles applied to the column header if the column is sorted. */\n    static readonly 'columnHeader--sorted' = \"MuiDataGrid-columnHeader--sorted\";\n    /* \tStyles applied to the column header element. */\n    static readonly 'columnHeader' = \"MuiDataGrid-columnHeader\";\n    /* \tStyles applied to the header checkbox cell element. */\n    static readonly 'columnHeaderCheckbox' = \"MuiDataGrid-columnHeaderCheckbox\";\n    /* \tStyles applied to the column header's draggable container element. */\n    static readonly 'columnHeaderDraggableContainer' = \"MuiDataGrid-columnHeaderDraggableContainer\";\n    /* \tStyles applied to the column headers wrapper if a column is being dragged. */\n    static readonly 'columnHeaderDropZone' = \"MuiDataGrid-columnHeaderDropZone\";\n    /* \tStyles applied to the column header's title element; */\n    static readonly 'columnHeaderTitle' = \"MuiDataGrid-columnHeaderTitle\";\n    /* \tStyles applied to the column header's title container element. */\n    static readonly 'columnHeaderTitleContainer' = \"MuiDataGrid-columnHeaderTitleContainer\";\n    /* \tStyles applied to the column headers. */\n    static readonly 'columnHeaders' = \"MuiDataGrid-columnHeaders\";\n    /* \tStyles applied to the column header separator if the column is resizable. */\n    static readonly 'columnSeparator--resizable' = \"MuiDataGrid-columnSeparator--resizable\";\n    /* \tStyles applied to the column header separator if the column is being resized. */\n    static readonly 'columnSeparator--resizing' = \"MuiDataGrid-columnSeparator--resizing\";\n    /* \tStyles applied to the column header separator if the side is \"left\". */\n    static readonly 'columnSeparator--sideLeft' = \"MuiDataGrid-columnSeparator--sideLeft\";\n    /* \tStyles applied to the column header separator if the side is \"right\". */\n    static readonly 'columnSeparator--sideRight' = \"MuiDataGrid-columnSeparator--sideRight\";\n    /* \tStyles applied to the column header separator element. */\n    static readonly 'columnSeparator' = \"MuiDataGrid-columnSeparator\";\n    /* \tStyles applied to the columns panel element. */\n    static readonly 'columnsPanel' = \"MuiDataGrid-columnsPanel\";\n    /* \tStyles applied to the columns panel row element. */\n    static readonly 'columnsPanelRow' = \"MuiDataGrid-columnsPanelRow\";\n    /* \tStyles applied to the panel element. */\n    static readonly 'panel' = \"MuiDataGrid-panel\";\n    /* \tStyles applied to the panel header element. */\n    static readonly 'panelHeader' = \"MuiDataGrid-panelHeader\";\n    /* \tStyles applied to the panel wrapper element. */\n    static readonly 'panelWrapper' = \"MuiDataGrid-panelWrapper\";\n    /* \tStyles applied to the panel content element. */\n    static readonly 'panelContent' = \"MuiDataGrid-panelContent\";\n    /* \tStyles applied to the panel footer element. */\n    static readonly 'panelFooter' = \"MuiDataGrid-panelFooter\";\n    /* \tStyles applied to the paper element. */\n    static readonly 'paper' = \"MuiDataGrid-paper\";\n    /* \tStyles applied to root of the boolean edit component. */\n    static readonly 'editBooleanCell' = \"MuiDataGrid-editBooleanCell\";\n    /* \tStyles applied to the root of the filter form component. */\n    static readonly 'filterForm' = \"MuiDataGrid-filterForm\";\n    /* \tStyles applied to the root of the input component. */\n    static readonly 'editInputCell' = \"MuiDataGrid-editInputCell\";\n    /* \tStyles applied to the filter icon element. */\n    static readonly 'filterIcon' = \"MuiDataGrid-filterIcon\";\n    /* \tStyles applied to the footer container element. */\n    static readonly 'footerContainer' = \"MuiDataGrid-footerContainer\";\n    /* \tStyles applied to the column header icon's container. */\n    static readonly 'iconButtonContainer' = \"MuiDataGrid-iconButtonContainer\";\n    /* \tStyles applied to the column header separator icon element. */\n    static readonly 'iconSeparator' = \"MuiDataGrid-iconSeparator\";\n    /* \tStyles applied to the main container element. */\n    static readonly 'main' = \"MuiDataGrid-main\";\n    /* \tStyles applied to the menu element. */\n    static readonly 'menu' = \"MuiDataGrid-menu\";\n    /* \tStyles applied to the menu icon element. */\n    static readonly 'menuIcon' = \"MuiDataGrid-menuIcon\";\n    /* \tStyles applied to the menu icon button element. */\n    static readonly 'menuIconButton' = \"MuiDataGrid-menuIconButton\";\n    /* \tStyles applied to the menu icon element if the menu is open. */\n    static readonly 'menuOpen' = \"MuiDataGrid-menuOpen\";\n    /* \tStyles applied to the menu list element. */\n    static readonly 'menuList' = \"MuiDataGrid-menuList\";\n    /* \tStyles applied to the overlay element. */\n    static readonly 'overlay' = \"MuiDataGrid-overlay\";\n    /* \tStyles applied to the virtualization container. */\n    static readonly 'virtualScroller' = \"MuiDataGrid-virtualScroller\";\n    /* \tStyles applied to the virtualization content. */\n    static readonly 'virtualScrollerContent' = \"MuiDataGrid-virtualScrollerContent\";\n    /* \tStyles applied to the virtualization render zone. */\n    static readonly 'virtualScrollerRenderZone' = \"MuiDataGrid-virtualScrollerRenderZone\";\n    /* \tStyles applied to the pinned columns. */\n    static readonly 'pinnedColumns' = \"MuiDataGrid-pinnedColumns\";\n    /* \tStyles applied to the left pinned columns. */\n    static readonly 'pinnedColumns--left' = \"MuiDataGrid-pinnedColumns--left\";\n    /* \tStyles applied to the right pinned columns. */\n    static readonly 'pinnedColumns--right' = \"MuiDataGrid-pinnedColumns--right\";\n    /* \tStyles applied to the root element. */\n    static readonly 'root' = \"MuiDataGrid-root\";\n    /* \tStyles applied to the row element if the row is editable. */\n    static readonly 'row--editable' = \"MuiDataGrid-row--editable\";\n    /* \tStyles applied to the row element if the row is in edit mode. */\n    static readonly 'row--editing' = \"MuiDataGrid-row--editing\";\n    /* \tStyles applied to the row element. */\n    static readonly 'row' = \"MuiDataGrid-row\";\n    /* \tStyles applied to the footer row count element to show the total number of rows. Only works when pagination is disabled. */\n    static readonly 'rowCount' = \"MuiDataGrid-rowCount\";\n    /* \tStyles applied to both scroll area elements. */\n    static readonly 'scrollArea' = \"MuiDataGrid-scrollArea\";\n    /* \tStyles applied to the left scroll area element. */\n    static readonly 'scrollArea--left' = \"MuiDataGrid-scrollArea--left\";\n    /* \tStyles applied to the right scroll area element. */\n    static readonly 'scrollArea--right' = \"MuiDataGrid-scrollArea--right\";\n    /* \tStyles applied to the footer selected row count element. */\n    static readonly 'selectedRowCount' = \"MuiDataGrid-selectedRowCount\";\n    /* \tStyles applied to the sort icon element. */\n    static readonly 'sortIcon' = \"MuiDataGrid-sortIcon\";\n    /* \tStyles applied to the toolbar container element. */\n    static readonly 'toolbarContainer' = \"MuiDataGrid-toolbarContainer\";\n    /* \tStyles applied to the toolbar filter list element. */\n    static readonly 'toolbarFilterList' = \"MuiDataGrid-toolbarFilterList\";\n    /* \tStyles applied to both the cell and the column header if showColumnRightBorder={true}. */\n    static readonly 'withBorder' = \"MuiDataGrid-withBorder\";\n    /* \tStyles applied to the root of the grouping column of the tree data. */\n    static readonly 'treeDataGroupingCell' = \"MuiDataGrid-treeDataGroupingCell\";\n    /* \tStyles applied to the toggle of the grouping column of the tree data. */\n    static readonly 'treeDataGroupingCellToggle' = \"MuiDataGrid-treeDataGroupingCellToggle\";\n\n}\n\n/**\n * Table Options (fields of the \"Chart\" tab in the widget editor).\n *\n * <pre>\n *      Plugin ID         : ic3\n *      Widget/Template ID: Table\n * </pre>\n *\n * @see WidgetTemplateChartOptions\n */\nexport interface TableChartOptions extends BaseTableChartOptions {\n\n    /**\n     * Name of a variant. Note that a variant is possibly overriding defined options.\n     */\n    variant?: string;\n\n    /**\n     * Footer.\n     *\n     * Display a footer. Does not apply when the table is auto-expanding vertically.\n     */\n    footer: boolean;\n\n    /**\n     * Add Pagination.\n     *\n     * Incompatible with 'Row Count' and/or 'Selected Row Count' settings.\n     */\n    footerPagination: boolean;\n\n    /**\n     * Add Row Count.\n     *\n     * Incompatible with 'Pagination'.\n     */\n    footerRowCount: boolean;\n\n    /**\n     * Page Size.\n     *\n     * Set the initial number of rows in one page.\n     */\n    pageSize: number;\n\n    /**\n     * Page Size Options (CSV).\n     *\n     * Select the 'Page Size' dynamically using the component UI. A comma separated list of integer values.\n     *\n     * E.g., 10,20,50\n     */\n    rowsPerPageOptions: string;\n\n    /**\n     * Use column header groups.\n     */\n    useColumnGrouping: boolean;\n\n    /**\n     * Use checkbox selection. Adds a column with checkboxes as the first column.\n     */\n    useCheckboxSelection: boolean;\n\n    /**\n     * Show the first column as a hierarchy instead of a flat list.\n     */\n    showHierarchy: boolean;\n\n    /**\n     * MDX Console support for now.\n     */\n    showRowNumbers?: boolean;\n\n}\n","export class ReportAppLeftPanelClasses {\n\n    static readonly root = \"ic3ReportAppLeftPanel-root\";\n\n    static readonly menu = \"ic3ReportAppLeftPanel-menu\";\n\n    static readonly title = \"ic3ReportAppLeftPanel-title\";\n\n    static readonly filter = \"ic3ReportAppLeftPanel-filter\";\n\n}\n\nexport declare type ReportAppLeftPanelClassKey = keyof ReportAppLeftPanelClasses;\n","export class WidgetBoxClasses {\n\n    /**\n     * Root Styles applied to the widgetBox\n     */\n    static readonly root: string = \"ic3WidgetBox\";\n\n\n    /**\n     * Root Styles applied to the widgetBox root element for a 'standard' widget -> &.className !\n     */\n    static readonly standard: string = \"ic3WidgetBox-standard\";\n\n    /**\n     * Root Styles applied to the widgetBox root element for a 'embedded' widget (the widget is inside another widget)\n     */\n    static readonly embedded: string = \"ic3WidgetBox-embedded\";\n\n    /**\n     * Root Styles applied to the widgetBox root element for a 'zoomed' widget\n     */\n    static readonly zoom: string = \"ic3WidgetBox-zoom\";\n\n    /**\n     * Root Styles applied to the widgetBox root element for a 'no decoration' widget (template definition setting, no borders ...)\n     */\n    static readonly noDecoration: string = \"ic3WidgetBox-noDecoration\";\n\n    /**\n     * Styles applied to the widgetBox container element\n     */\n    static readonly container: string = \"ic3WidgetBox-container\";\n\n    /**\n     * Styles applied to the template JS content\n     */\n    static readonly templateJSContent: string = \"ic3WidgetBox-TemplateJS-content\";\n\n    /**\n     * Styles applied to the template React content\n     */\n    static readonly templateReactContent: string = \"ic3WidgetBox-TemplateReact-content\";\n\n    /**\n     * Styles applied to the widgetBox content element (the widget without header and user menu)\n     */\n    static readonly content: string = \"ic3WidgetBox-content\";\n\n    /**\n     * Styles applied to child of content (above)\n     */\n    static readonly contentRoot: string = \"ic3WidgetBox-content-root\";\n\n    /**\n     * Styles applied to the widgetBox user menu element (the icons for the user menu)\n     */\n    static readonly userMenu: string = \"ic3WidgetBox-userMenu\";\n\n    /**\n     * Styles applied to the widgetBox header element\n     */\n    static readonly header: string = \"ic3WidgetBox-header\";\n\n    /**\n     * Styles applied to the widgetBox header left element ( title and drilldown )\n     */\n    static readonly headerLeft: string = \"ic3WidgetBox-headerLeft\";\n\n    /**\n     * Styles applied to the widgetBox header right element ( user menu )\n     */\n    static readonly headerRight: string = \"ic3WidgetBox-headerRight\";\n\n    /**\n     * Styles applied to the header element has no title\n     */\n    static readonly headerNoTitle: string = \"ic3WidgetBox-headerNoTitle\";\n\n    /**\n     * Styles applied to the header element container has no title\n     */\n    static readonly headerNoTitleContainer: string = \"ic3WidgetBox-headerNoTitleContainer\";\n\n    /**\n     * Styles applied to the widgetBox header Title element\n     */\n    static readonly headerTitle: string = \"ic3WidgetBox-headerTitle\";\n\n    /**\n     * Styles applied to the widgetBox header Drilldown element\n     */\n    static readonly headerLeftSeparator: string = \"ic3WidgetBox-headerLeftSeparator\";\n\n    /**\n     * Styles applied to the widgetBox header Drilldown element\n     */\n    static readonly headerDrilldown: string = \"ic3WidgetBox-headerDrilldown\";\n\n    /**\n     * Root Styles applied to the widgetBox root element when the box is with header\n     */\n    static readonly withHeader: string = \"ic3WidgetBox-withHeader\";\n\n    /**\n     * Root Styles applied to the widgetBox root element when the box is without header\n     */\n    static readonly withoutHeader: string = \"ic3WidgetBox-withoutHeader\";\n\n    /**\n     * Styles applied to the widgetBox user menu element when the userMenu is open\n     */\n    static readonly userMenuOpen: string = \"ic3WidgetBox-userMenuOpen\";\n\n    /**\n     * Styles applied to the widgetBox user menu element when the userMenu id closed\n     */\n    static readonly userMenuClosed: string = \"ic3WidgetBox-userMenuClosed\";\n\n    /**\n     * attribute for the root div containing the widgetId\n     */\n    static readonly widgetIdAttribute: string = \"data-widget-id\";\n\n    static readonly nsIdAttribute: string = \"data-ns-id\";\n}\n\nexport declare type WidgetBoxClassKey = keyof WidgetBoxClasses;\n\nexport enum WidgetBoxTooltipType {\n    dialog = \"dialog\",\n    tooltip = \"tooltip\",\n}\n\nexport enum WidgetBoxVisibilityType {\n    default = \"default\",\n    invisible = \"invisible\",\n    invisibleInPrinting = \"invisibleInPrinting\",\n}\n\nexport enum ResizingConstraintOptions {\n    FixedWidthLeftAligned = \"FixedWidthLeftAligned\",\n    FixedWidthRightAligned = \"FixedWidthRightAligned\"\n}\n\nexport enum PositionModeOptions {\n    Fixed = \"Fixed\",\n}\n\n/**\n * Support for repetition widget | pivot table expanding to make the whole content visible.\n */\nexport interface IWidgetBoxExpandOptions {\n\n    active: boolean;\n\n    keepBoxHeader: boolean;\n    keepTableHeader: boolean;\n    onlyWhenPrinting: boolean;\n}\n\nexport interface IWidgetRectangle {\n    top: number;\n    left: number;\n    height: number;\n    width: number;\n}\n\n/**\n * Widget Box Options (fields of the \"Box\" tab in the widget editor).\n *\n * @see https://github.com/ic3-software/ic3-demo-plugin-theme\n */\nexport interface WidgetBoxOptions {\n\n    /**\n     * Name of a variant. Note that a variant is possibly overriding defined options.\n     */\n    variant?: string;\n\n    /**\n     * Message that is displayed when the widget cannot render yet\n     * (waiting for its initial result or mandatory event value).\n     */\n    waitingEventOrResult?: string;\n\n    /**\n     * Use the chart title to define the information displayed in the widget box header.\n     */\n    withHeader: boolean;\n\n    visibility: WidgetBoxVisibilityType;\n\n    /**\n     * Behavior of the widget when the dashboard is being resized.\n     */\n    resizingConstraint?: ResizingConstraintOptions\n\n    /**\n     * The widget will (vertically) expand to fit its content.\n     */\n    autoExpandContent: IWidgetBoxExpandOptions;\n\n    rectangle: IWidgetRectangle;\n\n}\n\nexport interface WidgetBoxDivProps {\n    variant: string;\n}","export class WidgetBoxContentMessageClasses {\n\n    /**\n     * Style applied to the root div of the widget box content.\n     */\n    static root = \"ic3WidgetBoxContentMessage-root\";\n    /**\n     * Style applied to the div containing the message.\n     */\n    static content = \"ic3WidgetBoxContentMessage-content\";\n}\n\nexport declare type WidgetBoxContentMessageClassKey = keyof WidgetBoxContentMessageClasses;\n","export class WidgetFilteredByClasses {\n\n    static readonly text: string = \"ic3WidgetFilteredBy-text\";\n    static readonly table: string = \"ic3WidgetFilteredBy-table\";\n\n}\n\nexport declare type WidgetFilteredByClassesKey = keyof WidgetFilteredByClasses;","export class ThemeIc3TableCellClasses {\n\n}\n\nexport declare type ThemeIc3TableCellClassesKey = keyof ThemeIc3TableCellClasses;\n\nexport interface Ic3TableCellProps {\n    align?: 'left' | 'right' | 'center';\n\n    /**\n     * True if and only if the cell has a cell-renderer.\n     */\n    hasRenderer?: boolean;\n}","/**\n * The spinner when a widget is loading.\n */\nexport class ThemeIc3WidgetBoxSpinner {\n\n    static readonly overlay = \"Ic3WidgetBoxSpinner-spinnerOverlayEx\";\n\n    static readonly spinner = \"Ic3WidgetBoxSpinner-spinner\";\n\n    static readonly spinnerProgress = \"Ic3WidgetBoxSpinner-spinnerProgress\";\n\n}\n\nexport declare type ThemeIc3WidgetBoxSpinnerClassesKey = keyof ThemeIc3WidgetBoxSpinner;\n\nexport interface Ic3WidgetBoxSpinnerProps {\n    /**\n     * Size of the spinner. Default = 48.\n     */\n    size: number;\n}","\nexport class HomeCardClasses {\n\n    static readonly background = \"ic3HomeCard-background\";\n\n    static readonly card = \"ic3HomeCard-card\";\n\n    static readonly menuIcon = \"ic3HomeCard-menuIcon\";\n\n}\n\nexport declare type HomeCardClassKey = keyof HomeCardClasses;\n\nexport interface HomeCardProps {\n    appId: string;\n}","\nexport class HomeConsoleClasses {\n\n    static readonly logoBg = \"ic3HomeConsole-logoBg\";\n\n    static readonly logoFg = \"ic3HomeConsole-logoFg\";\n\n    static readonly logoBgSvg = \"ic3HomeConsole-logoBgSvg\";\n\n    static readonly logoFgSvg = \"ic3HomeConsole-logoFgSvg\";\n\n    static readonly cardTextureAdmin = \"ic3HomeConsole-cardTextureAdmin\";\n\n    static readonly backgroundOthers = \"ic3HomeConsole-backgroundOthers\";\n\n    static readonly textureLeft = \"ic3HomeConsole-textureLeft\";\n\n    static readonly textureRight = \"ic3HomeConsole-textureRight\";\n\n    static readonly customLayout = \"ic3HomeConsole-customLayout\";\n\n    static readonly caption = \"ic3HomeConsole-caption\";\n\n    static readonly appName = \"ic3HomeConsole-appName\";\n\n    static readonly appNameRecent = \"ic3HomeConsole-appName-recent\";\n\n    static readonly slogan = \"ic3HomeConsole-slogan\";\n\n}\n\nexport declare type HomeConsoleClassKey = keyof HomeConsoleClasses;\n","export class FilterPanelViewsMenuClasses {\n\n    static readonly save = \"ic3FilterPanelViewsMenu-save\";\n\n    static readonly view = \"ic3FilterPanelViewsMenu-view\";\n\n    static readonly maxViewsReachedText = \"ic3FilterPanelViewsMenu-maxViewsReachedText\";\n\n    static readonly viewsText = \"ic3FilterPanelViewsMenu-viewsText\";\n\n    static readonly errorText = \"ic3FilterPanelViewsMenu-errorText\";\n\n}\n\nexport declare type FilterPanelViewsMenuClassesKey = keyof FilterPanelViewsMenuClasses;\n","export class Ic3CustomDrilldownMenuClasses {\n\n    static readonly header = \"Ic3CustomDrilldownMenu-header\";\n\n    static readonly list = \"Ic3CustomDrilldownMenu-list\";\n\n    static readonly headerText = \"Ic3CustomDrilldownMenu-headerText\";\n\n    static readonly back = \"Ic3CustomDrilldownMenu-back\";\n\n}\n\nexport declare type Ic3CustomDrilldownMenuClassesKey = keyof Ic3CustomDrilldownMenuClasses;\n"],"names":["IcEventType","WidgetNotificationType","EmbeddedThemeNames","TidyColumnsType","ITidyColumnsSource","TidyTableMappingColumnSelectorOptions","IAmcharts4DataKey","SelectionBehaviour","SortingType","InterpolationType","InterpolationAppliedTo","SortingMethod","UseDatetimeAxis","ISeriesValuesType","CompareTextInterpretationType","TargetTextPosition","TargetTextIconSet","SparkChartType","SparklinePosition","QueryType","WidgetRenderLayoutStatus","WidgetWarningSeverity","IContentMessageType","IWidgetTemplateMdxBuilderAxisPropsConstraint","WidgetTemplateDefinitionType","TemplateEventActionNames","IFormFieldGroupTypes","AutocompleteNoOptionsText","AutocompleteActions","ConditionalRuleOperators","TableRowHeightOptions","ITidyColumnNamedProperties","SelectionMode","TreeFireEventMode","TidyPivotTableLikeNodeStatus","callbackfn","TidyHistogramBucketFormat","TidyHistogramBucketType","HistogramBinType","AxisRangeType","GeoMapChartProjection","GeoMapChartUnMatchedRegionStrategy","Amcharts4LineSmoothMethod","TrendLineType","LegendPositionOption","OverflowType","CategoryAxisRotateLabels","SeriesLabelsPosition","SeriesType","DrawSeriesOnAxis","TopBarOptions","LeftBarOptions","TableColumnSizing","DatePickerRangeDirection","InitialDateFrom","ExportToExcelMethod","FilterSliderRenderingType","GoogleMapFeaturesStyles","GoogleMapTypeId","ImageResizingOptions","PivotTableHoverEffectOptions","WidgetBoxTooltipType","WidgetBoxVisibilityType","ResizingConstraintOptions","PositionModeOptions"],"mappings":"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"}