UNPKG

89.1 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.cjs","sources":["../src/hooks/useLoadScript.ts","../src/hooks/useLoadGoogleCharts.ts","../src/default-props.ts","../src/components/GoogleChartControls.tsx","../src/generate-unique-id.ts","../src/utils/GoogleChartControlsInternal.ts","../src/hooks/internal/useGoogleChartControls.tsx","../src/hooks/internal/useChartId.ts","../src/constants.ts","../src/load-data-table-from-spreadsheet.ts","../src/utils/GoogleChartInternal.ts","../src/hooks/internal/useGoogleChartDataTable.ts","../src/hooks/internal/useGoogleChartEvents.ts","../src/components/GoogleChart.tsx","../src/Context.tsx","../src/Chart.tsx","../src/types.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Hook to load external script.\n * @param src - Source url to load.\n * @param onLoad - Success callback.\n * @param onError - Error callback.\n */\nexport function useLoadScript(src: string) {\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [isSuccess, setIsSuccess] = useState(false);\n const onLoad = () => {\n setIsLoading(false);\n setIsSuccess(true);\n };\n useEffect(() => {\n if (!document) {\n const error = new Error(\n `[ScriptLoadingError] document not defined when attempting to load ${src}`,\n );\n setError(error);\n return;\n }\n\n // Find script tag with same src in DOM.\n const foundScript = document.querySelector<HTMLScriptElement>(\n `script[src=\"${src}\"]`,\n );\n\n // Call onLoad if script marked as loaded.\n if (foundScript?.dataset.loaded) {\n onLoad();\n return;\n }\n\n // Create or get existed tag.\n const script = foundScript || document.createElement(\"script\");\n\n // Set src if no script was found.\n if (!foundScript) {\n script.src = src;\n }\n\n // Mark script as loaded on load event.\n const onLoadWithMarker = () => {\n script.dataset.loaded = \"1\";\n onLoad();\n };\n\n script.addEventListener(\"load\", onLoadWithMarker);\n\n script.addEventListener(\"error\", (err) => {\n console.error(\"Failed to load script:\", src, err);\n const error = new Error(\n `[ScriptLoadingError] Failed to load script: ${src}`,\n );\n setError(error);\n });\n\n // Add to DOM if not yet added.\n if (!foundScript) {\n document.head.append(script);\n }\n }, []);\n return {\n isLoading,\n error,\n isSuccess,\n };\n}\n","import { useState, useEffect } from \"react\";\nimport {\n GoogleChartVersion,\n GoogleChartPackages,\n GoogleViz,\n ReactGoogleChartProps,\n} from \"../types\";\nimport { useLoadScript } from \"./useLoadScript\";\n\nexport interface IUseLoadGoogleChartsParams {\n chartVersion?: GoogleChartVersion;\n chartPackages?: GoogleChartPackages[];\n chartLanguage?: string;\n mapsApiKey?: string;\n}\n\nconst isGoogleReady = (google?: GoogleViz) => {\n return google && google.charts;\n};\n\nconst isGoogleChartsReady = (\n props: ReactGoogleChartProps,\n google?: GoogleViz,\n) => {\n const { controls, toolbarItems, getChartEditor } = props;\n return (\n google &&\n google.charts &&\n google.visualization &&\n google.visualization.ChartWrapper &&\n google.visualization.Dashboard &&\n (!controls || google.visualization.ChartWrapper) &&\n (!getChartEditor || google.visualization.ChartEditor) &&\n (!toolbarItems || google.visualization.drawToolbar)\n );\n};\n\nconst getGoogleInstanceFromWindow = (props: ReactGoogleChartProps) => {\n // @ts-expect-error Getting object from global namespace.\n const google = window.google as GoogleViz;\n return google;\n};\n\n/**\n * Hook to load Google Charts JS API.\n * @param params - Load parameters.\n * @param [params.chartVersion] - Chart version to load.\n * @param [params.chartPackages] - Packages to load.\n * @param [params.chartLanguage] - Languages to load.\n * @param [params.mapsApiKey] - Google Maps api key.\n * @returns\n */\nexport function useLoadGoogleCharts(props: ReactGoogleChartProps) {\n const {\n chartVersion = \"current\",\n chartPackages = [\"corechart\", \"controls\"],\n chartLanguage = \"en\",\n mapsApiKey,\n } = props;\n const [googleCharts, setGoogleCharts] = useState<GoogleViz | null>(null);\n const [scriptInitializationError, setScriptInitializationError] =\n useState<Error | null>(null);\n const [googleChartsInitializationError, setGoogleChartsInitializationError] =\n useState<Error | null>(null);\n const {\n isLoading,\n error: scriptLoadingError,\n isSuccess,\n } = useLoadScript(\n props.chartLoaderScriptUrl || \"https://www.gstatic.com/charts/loader.js\",\n );\n\n useEffect(() => {\n if (!isSuccess) {\n return;\n }\n const google = getGoogleInstanceFromWindow(props);\n if (!isGoogleReady(google)) {\n const error = new Error(\n \"[ScriptInitializationError] Script loaded but Google not attached to window.\",\n );\n setScriptInitializationError(error);\n return;\n }\n if (isGoogleChartsReady(props, google)) {\n setGoogleCharts(google);\n return;\n }\n google.charts.load(chartVersion, {\n packages: chartPackages,\n language: chartLanguage,\n mapsApiKey,\n });\n google.charts.setOnLoadCallback(() => {\n if (!isGoogleChartsReady(props, google)) {\n const error = new Error(\n \"[GoogleChartsInitializationError] Google Charts not ready after load callback.\",\n );\n console.error(error);\n setGoogleChartsInitializationError(error);\n return;\n }\n setGoogleCharts(google);\n });\n }, [isSuccess]);\n return {\n error:\n scriptLoadingError ||\n scriptInitializationError ||\n googleChartsInitializationError,\n isLoading,\n google: googleCharts,\n };\n}\n\nexport interface ILoadGoogleChartsProps extends IUseLoadGoogleChartsParams {\n onLoad?(googleCharts: GoogleViz): void;\n onError?(): void;\n}\n","import { ReactGoogleChartProps } from \"./types\";\n\nexport const chartDefaultProps: Partial<ReactGoogleChartProps> = {\n // <DEPRECATED_PROPS>\n legend_toggle: false,\n // </DEPRECATED_PROPS>\n options: {},\n legendToggle: false,\n getChartWrapper: () => {},\n spreadSheetQueryParameters: {\n headers: 1,\n gid: 1,\n },\n rootProps: {},\n chartWrapperParams: {},\n chartLoaderScriptUrl: \"https://www.gstatic.com/charts/loader.js\",\n};\n","import React from \"react\";\nimport { GoogleChartControlAndProp } from \"../hooks/internal/useGoogleChartControls\";\n\nexport type FilterControl = (control: GoogleChartControlAndProp) => boolean;\n\ntype Props = {\n isReady: boolean;\n chartControls: GoogleChartControlAndProp[] | null;\n filter?: FilterControl;\n};\nexport const GoogleChartControls = (props: Props) => {\n const { isReady, chartControls, filter } = props;\n if (!isReady || !chartControls || !chartControls?.length) {\n return null;\n }\n return (\n <>\n {chartControls\n .filter(({ controlProp, control }) => {\n return filter ? filter({ control, controlProp }) : true;\n })\n .map(({ control }) => {\n return (\n <div key={control.getContainerId()} id={control.getContainerId()} />\n );\n })}\n </>\n );\n};\n","let uniqueID = 0;\nexport const generateUniqueID = () => {\n uniqueID += 1;\n return `reactgooglegraph-${uniqueID}`;\n};\n","import {\n GoogleViz,\n ReactGoogleChartProps,\n GoogleChartControlProp,\n GoogleChartControl,\n UseChartControlsParams,\n} from \"../types\";\nimport { generateUniqueID } from \"../generate-unique-id\";\n\nexport type Props = ReactGoogleChartProps & {\n google: GoogleViz;\n};\n\nexport type GoogleChartControlAndProp = {\n controlProp: GoogleChartControlProp;\n control: GoogleChartControl;\n};\n\n/**\n * An internal helper class for creating and managing Google Charts controls.\n * Offers high-level methods to interact with the Google Chart Controls.\n */\nexport class GoogleChartControlsInternal {\n /**\n * Initialize the controls once chart is ready\n */\n private static initializeControls = (\n googleChartControls: GoogleChartControlAndProp[],\n ) => {\n for (let i = 0; i < googleChartControls.length; i += 1) {\n const { controlType, options, controlWrapperParams } =\n googleChartControls[i].controlProp;\n if (controlWrapperParams && \"state\" in controlWrapperParams) {\n googleChartControls[i].control.setState(controlWrapperParams[\"state\"]);\n }\n googleChartControls[i].control.setOptions(options);\n googleChartControls[i].control.setControlType(controlType);\n }\n };\n\n /**\n * listen to the control events (ready, statechange, error) specified in the controlEvents prop\n */\n public static listenToControlEvents = (\n googleChartControls: GoogleChartControlAndProp[],\n props: UseChartControlsParams,\n ) => {\n const { google } = props;\n return googleChartControls.flatMap((chartControl) => {\n const { control, controlProp } = chartControl;\n const { controlEvents = [] } = controlProp;\n return controlEvents.map((event) => {\n const { callback, eventName } = event;\n return google.visualization.events.addListener(\n control,\n eventName,\n (...args) => {\n callback({\n chartWrapper: null,\n controlWrapper: control,\n props: props,\n google: google,\n eventArgs: args,\n });\n },\n );\n });\n });\n };\n\n /**\n * If controlID is not provided, generate a unique controlID\n */\n private static createControlId = (id: undefined | string) => {\n let controlID: string;\n if (typeof id === \"undefined\") {\n controlID = `googlechart-control-${generateUniqueID()}`;\n } else {\n controlID = id;\n }\n return controlID;\n };\n\n /**\n * Map the control props to Google Chart Controls\n */\n private static createChartControls = (props: UseChartControlsParams) => {\n const { controls, google } = props;\n if (!controls) {\n return null;\n }\n\n return controls.map((control, i) => {\n const {\n controlID: controlIDMaybe,\n controlType,\n options: controlOptions,\n controlWrapperParams,\n } = control;\n const controlID = this.createControlId(controlIDMaybe);\n return {\n controlProp: control,\n control: new google.visualization.ControlWrapper({\n containerId: controlID,\n controlType,\n options: controlOptions,\n ...controlWrapperParams,\n }),\n };\n });\n };\n\n static addControls = (props: UseChartControlsParams) => {\n const { chartWrapper, chartDashboard } = props;\n const googleChartControls = this.createChartControls(props);\n if (!googleChartControls || !chartDashboard || !chartWrapper) {\n return null;\n }\n chartDashboard.bind(\n googleChartControls.map(({ control }) => control),\n chartWrapper,\n );\n this.initializeControls(googleChartControls);\n return googleChartControls;\n };\n}\n","import * as React from \"react\";\nimport {\n GoogleViz,\n ReactGoogleChartProps,\n GoogleChartControlProp,\n GoogleChartControl,\n UseChartControlsParams,\n} from \"../../types\";\nimport {\n FilterControl,\n GoogleChartControls,\n} from \"../../components/GoogleChartControls\";\nimport { GoogleChartControlsInternal } from \"../../utils/GoogleChartControlsInternal\";\n\nconst useCreateChartControls = (\n controls: ReactGoogleChartProps[\"controls\"],\n) => {\n const [chartControls, setChartControls] = React.useState<\n GoogleChartControl[] | null\n >(null);\n\n const controlAndProp = React.useMemo(() => {\n if (!chartControls || !controls) return null;\n\n return controls\n .map((controlProp, i): GoogleChartControlAndProp | undefined => {\n const control: GoogleChartControl | undefined = chartControls[i];\n return control ? { controlProp, control } : undefined;\n })\n .flatMap((controlAndProp) => (controlAndProp ? [controlAndProp] : []));\n }, [chartControls, controls]);\n\n return [controlAndProp, setChartControls] as const;\n};\n\nconst useListenToControlEvents = (\n chartControls: GoogleChartControlAndProp[],\n props: UseChartControlsParams,\n) => {\n React.useEffect(() => {\n const listeners = GoogleChartControlsInternal.listenToControlEvents(\n chartControls ?? [],\n props,\n );\n\n return () => {\n listeners.forEach((listener) => {\n props.google.visualization.events.removeListener(listener);\n });\n };\n }, [chartControls, props]);\n};\n\nexport type Props = ReactGoogleChartProps & {\n google: GoogleViz;\n};\n\nexport type GoogleChartControlAndProp = {\n controlProp: GoogleChartControlProp;\n control: GoogleChartControl;\n};\n\nexport const useChartControls = (props: UseChartControlsParams) => {\n const [chartControls, setChartControls] = useCreateChartControls(\n props.controls,\n );\n\n useListenToControlEvents(chartControls ?? [], props);\n\n /**\n * Render the container divs for the controls\n */\n const renderControl = (filter: FilterControl) => {\n const { chartWrapper, chartDashboard } = props;\n return (\n <GoogleChartControls\n {...props}\n isReady={Boolean(chartWrapper && chartDashboard)}\n chartControls={chartControls}\n filter={filter}\n />\n );\n };\n\n return {\n addControls: (props: UseChartControlsParams) => {\n const controls = GoogleChartControlsInternal.addControls(props);\n setChartControls(controls?.map((control) => control.control) ?? null);\n },\n renderControl,\n };\n};\n","import * as React from \"react\";\nimport { ReactGoogleChartProps } from \"../../types\";\nimport { generateUniqueID } from \"../../generate-unique-id\";\n\nexport const useChartId = (\n props: Pick<ReactGoogleChartProps, \"graphID\" | \"graph_id\">,\n) => {\n const chartIdRef = React.useRef<string | null>(null);\n const getChartId = (): string => {\n const { graphID, graph_id } = props;\n const chartIdFromProps = graphID || graph_id;\n let currentChartId: string;\n if (chartIdFromProps) {\n currentChartId = chartIdFromProps as string;\n } else {\n currentChartId = chartIdRef.current || generateUniqueID();\n }\n chartIdRef.current = currentChartId;\n return chartIdRef.current as string;\n };\n const chartId = getChartId();\n return { chartId };\n};\n","export const DEFAULT_CHART_COLORS = [\n \"#3366CC\",\n \"#DC3912\",\n \"#FF9900\",\n \"#109618\",\n \"#990099\",\n \"#3B3EAC\",\n \"#0099C6\",\n \"#DD4477\",\n \"#66AA00\",\n \"#B82E2E\",\n \"#316395\",\n \"#994499\",\n \"#22AA99\",\n \"#AAAA11\",\n \"#6633CC\",\n \"#E67300\",\n \"#8B0707\",\n \"#329262\",\n \"#5574A6\",\n \"#3B3EAC\",\n];\n","import { GoogleViz } from \"./types\";\n\nexport const loadDataTableFromSpreadSheet = async (\n googleViz: GoogleViz,\n spreadSheetUrl: string,\n urlParams: {\n headers?: number;\n gid?: any;\n sheet?: string;\n query?: string;\n access_token?: string;\n } = {},\n) => {\n return new Promise((resolve, reject) => {\n const headers = `${\n urlParams.headers ? `headers=${urlParams.headers}` : `headers=0`\n }`;\n const queryString = `${\n urlParams.query ? `&tq=${encodeURIComponent(urlParams.query)}` : ``\n }`;\n const gid = `${urlParams.gid ? `&gid=${urlParams.gid}` : \"\"}`;\n const sheet = `${urlParams.sheet ? `&sheet=${urlParams.sheet}` : \"\"}`;\n const access_token = `${\n urlParams.access_token ? `&access_token=${urlParams.access_token}` : \"\"\n }`;\n const urlQueryString = `${headers}${gid}${sheet}${queryString}${access_token}`;\n const urlToSpreadSheet = `${spreadSheetUrl}/gviz/tq?${urlQueryString}`; //&tq=${queryString}`;\n const query = new googleViz.visualization.Query(urlToSpreadSheet);\n query.send((response: any) => {\n if (response.isError()) {\n reject(\n `Error in query: ${response.getMessage()} ${response.getDetailedMessage()}`,\n );\n } else {\n resolve(response.getDataTable());\n }\n });\n });\n};\n","import { DEFAULT_CHART_COLORS } from \"../constants\";\nimport { UseGoogleChartDataTableParams } from \"../hooks/internal/useGoogleChartDataTable\";\nimport { loadDataTableFromSpreadSheet } from \"../load-data-table-from-spreadsheet\";\nimport { ApplyFormattersParams, GoogleDataTable } from \"../types\";\n\nconst GRAY_COLOR = \"#CCCCCC\";\n\n/**\n * An internal helper class around the Google Chart API.\n * Offers high-level methods to interact with the Google Chart API.\n */\nexport class GoogleChartInternal {\n private static grayOutHiddenColumnsLabel = (\n props: UseGoogleChartDataTableParams,\n hiddenColumns: string[],\n ) => {\n const { googleChartWrapper, options } = props;\n if (!googleChartWrapper) {\n console.error(\"googleChartWrapper is not defined\");\n return;\n }\n const dataTable = googleChartWrapper.getDataTable();\n if (!dataTable) return;\n const columnCount = dataTable.getNumberOfColumns();\n const hasAHiddenColumn = hiddenColumns.length > 0;\n if (hasAHiddenColumn === false) return;\n const colors = Array.from({ length: columnCount - 1 }).map(\n (_dontcare, i) => {\n const columnID = this.getColumnId(dataTable, i + 1);\n if (hiddenColumns.includes(columnID)) {\n return GRAY_COLOR;\n } else if (options && options.colors) {\n return options.colors[i];\n } else {\n return DEFAULT_CHART_COLORS[i];\n }\n },\n );\n googleChartWrapper.setOptions({\n ...options,\n colors,\n });\n googleChartWrapper.draw();\n };\n /**\n * Listens to user clicking on the legend to toggle the visibility of a column.\n * When a user clicks on a legend item, the column id is added to / removed from the hiddenColumns state.\n */\n public static listenToLegendToggle = (\n props: UseGoogleChartDataTableParams,\n hiddenColumnsState: [\n string[],\n React.Dispatch<React.SetStateAction<string[]>>,\n ],\n ) => {\n const [hiddenColumns, setHiddenColumns] = hiddenColumnsState;\n const { google, googleChartWrapper } = props;\n if (!googleChartWrapper) {\n console.error(\"googleChartWrapper is not defined\");\n return;\n }\n return google.visualization.events.addListener(\n googleChartWrapper,\n \"select\",\n () => {\n const chart = googleChartWrapper.getChart();\n const selection = chart.getSelection();\n const dataTable = googleChartWrapper.getDataTable();\n if (\n selection.length === 0 ||\n // We want to listen to when a whole row is selected. This is the case only when row === null\n selection[0].row !== null ||\n !dataTable\n ) {\n return;\n }\n\n const columnIndex = selection[0].column;\n const columnID = this.getColumnId(dataTable, columnIndex);\n // If the column is hidden remove it from state, otherwise add it\n if (hiddenColumns?.includes(columnID)) {\n setHiddenColumns((state) => [\n ...state.filter((colID) => colID !== columnID),\n ]);\n } else {\n setHiddenColumns((state) => [...state, columnID]);\n }\n },\n );\n };\n\n /**\n * (Re-)Draw a Google Chart with the given data, options, and chart type.\n */\n public static draw = async (\n props: UseGoogleChartDataTableParams & { hiddenColumns: string[] },\n ) => {\n const {\n data,\n diffdata,\n rows,\n columns,\n options,\n chartType,\n formatters,\n spreadSheetUrl,\n spreadSheetQueryParameters,\n googleChartDashboard,\n googleChartWrapper,\n google,\n hiddenColumns,\n legendToggle,\n legend_toggle,\n } = props;\n if (!googleChartWrapper) {\n console.error(\"draw was called with googleChartWrapper = null\");\n return;\n }\n let dataTable: GoogleDataTable;\n let chartDiff = null;\n if (diffdata) {\n const oldData = google.visualization.arrayToDataTable(diffdata.old);\n const newData = google.visualization.arrayToDataTable(diffdata.new);\n chartDiff = google.visualization[chartType].prototype.computeDiff(\n oldData,\n newData,\n );\n }\n if (data) {\n if (data instanceof google.visualization.DataTable) {\n dataTable = data;\n } else if (Array.isArray(data)) {\n dataTable = google.visualization.arrayToDataTable(data);\n } else {\n dataTable = new google.visualization.DataTable(data);\n }\n } else if (rows && columns) {\n dataTable = google.visualization.arrayToDataTable([columns, ...rows]);\n } else if (spreadSheetUrl) {\n dataTable = (await loadDataTableFromSpreadSheet(\n google,\n spreadSheetUrl,\n spreadSheetQueryParameters,\n )) as GoogleDataTable;\n } else {\n dataTable = google.visualization.arrayToDataTable([]);\n }\n const columnCount = dataTable.getNumberOfColumns();\n\n const viewColumns = Array(columnCount)\n .fill(0)\n .map((_c, i) => {\n const columnID = this.getColumnId(dataTable, i);\n if (hiddenColumns.includes(columnID)) {\n return {\n label: dataTable.getColumnLabel(i),\n type: dataTable.getColumnType(i),\n calc: () => null,\n };\n } else {\n return i;\n }\n });\n const chart = googleChartWrapper.getChart();\n if (googleChartWrapper.getChartType() === \"Timeline\") {\n chart && chart.clearChart();\n }\n googleChartWrapper.setChartType(chartType);\n googleChartWrapper.setOptions(options || {});\n const viewTable = new google.visualization.DataView(dataTable);\n viewTable.setColumns(viewColumns);\n googleChartWrapper.setDataTable(viewTable);\n googleChartWrapper.draw();\n if (googleChartDashboard) {\n googleChartDashboard.draw(dataTable);\n }\n\n if (chartDiff) {\n googleChartWrapper.setDataTable(chartDiff);\n googleChartWrapper.draw();\n }\n if (formatters) {\n this.applyFormatters({ dataTable, formatters, google });\n googleChartWrapper.setDataTable(dataTable);\n googleChartWrapper.draw();\n }\n if (legendToggle === true || legend_toggle === true) {\n this.grayOutHiddenColumnsLabel(props, hiddenColumns);\n }\n return;\n };\n /**\n * Get the column ID of a column in a GoogleDataTable.\n * If the column has an ID, return the ID, otherwise return the label.\n */\n private static getColumnId = (\n dataTable: GoogleDataTable,\n columnIndex: number,\n ) => {\n return (\n dataTable.getColumnId(columnIndex) ||\n dataTable.getColumnLabel(columnIndex)\n );\n };\n\n /**\n * Apply Chart Formatters passed under the formatters prop to the GoogleDataTable\n */\n private static applyFormatters = ({\n dataTable,\n formatters,\n google,\n }: ApplyFormattersParams) => {\n for (let formatter of formatters) {\n switch (formatter.type) {\n case \"ArrowFormat\": {\n const vizFormatter = new google.visualization.ArrowFormat(\n formatter.options,\n );\n vizFormatter.format(dataTable, formatter.column);\n return;\n }\n case \"BarFormat\": {\n const vizFormatter = new google.visualization.BarFormat(\n formatter.options,\n );\n vizFormatter.format(dataTable, formatter.column);\n return;\n }\n case \"ColorFormat\": {\n const vizFormatter = new google.visualization.ColorFormat(\n formatter.options,\n );\n const { ranges } = formatter;\n if (ranges) {\n for (let range of ranges) {\n vizFormatter.addRange(...range);\n }\n }\n vizFormatter.format(dataTable, formatter.column);\n return;\n }\n case \"DateFormat\": {\n const vizFormatter = new google.visualization.DateFormat(\n formatter.options,\n );\n vizFormatter.format(dataTable, formatter.column);\n return;\n }\n case \"NumberFormat\": {\n const vizFormatter = new google.visualization.NumberFormat(\n formatter.options,\n );\n vizFormatter.format(dataTable, formatter.column);\n return;\n }\n case \"PatternFormat\": {\n const vizFormatter = new google.visualization.PatternFormat(\n formatter.options,\n );\n vizFormatter.format(dataTable, formatter.column);\n return;\n }\n default: {\n console.warn(`Unknown formatter type: ${formatter.type}`);\n return;\n }\n }\n }\n };\n}\n","import * as React from \"react\";\nimport {\n GoogleViz,\n GoogleChartWrapper,\n ReactGoogleChartProps,\n GoogleChartDashboard,\n GoogleVizEventListener,\n} from \"../../types\";\nimport { GoogleChartInternal } from \"../../utils\";\n\nexport type ChartDrawArgs = {\n data: ReactGoogleChartProps[\"data\"];\n};\n\nexport type UseGoogleChartDataTableParams = ReactGoogleChartProps & {\n googleChartWrapper?: GoogleChartWrapper | null;\n google: GoogleViz;\n googleChartDashboard?: GoogleChartDashboard | null;\n};\n\nexport const useGoogleChartDataTable = (\n props: UseGoogleChartDataTableParams,\n) => {\n const { google, googleChartWrapper, googleChartDashboard } = props;\n const [hiddenColumns, setHiddenColumns] = React.useState<string[]>([]);\n // Re-draw the chart when hiddenColumns change\n React.useEffect(() => {\n if (!googleChartWrapper) {\n return;\n }\n GoogleChartInternal.draw({\n ...props,\n hiddenColumns,\n googleChartWrapper,\n googleChartDashboard,\n google,\n });\n }, [\n hiddenColumns,\n props.data,\n props.rows,\n props.columns,\n props.options,\n props.chartLoaderScriptUrl,\n props.chartType,\n props.formatters,\n props.spreadSheetUrl,\n props.spreadSheetQueryParameters,\n props.legendToggle,\n props.legend_toggle,\n ]);\n\n // Re-draw the chart when the window is resized\n const onResize = () => {\n const { googleChartWrapper } = props;\n if (!googleChartWrapper) {\n return;\n }\n googleChartWrapper.draw();\n };\n\n // Draw the chart when the google charts wrapper is ready and when the hiddenColumns change\n const initialize = (googleChartWrapper: GoogleChartWrapper) => {\n const listeners: GoogleVizEventListener[] = [];\n\n const { legendToggle, legend_toggle } = props;\n GoogleChartInternal.draw({\n ...props,\n hiddenColumns,\n googleChartWrapper,\n googleChartDashboard,\n google,\n });\n window.addEventListener(\"resize\", onResize);\n if (legend_toggle || legendToggle) {\n const listener = GoogleChartInternal.listenToLegendToggle(props, [\n hiddenColumns,\n setHiddenColumns,\n ]);\n\n if (listener) listeners.push(listener);\n }\n\n return listeners;\n };\n\n // Remove event listeners and clear the chart when the component is unmounted\n const destroy = (\n googleChartWrapper: GoogleChartWrapper,\n listeners: GoogleVizEventListener[],\n ) => {\n window.removeEventListener(\"resize\", onResize);\n listeners.forEach((listener) => {\n google.visualization.events.removeListener(listener);\n });\n if (googleChartWrapper.getChartType() === \"Timeline\") {\n googleChartWrapper.getChart() &&\n googleChartWrapper.getChart().clearChart();\n }\n };\n\n React.useEffect(() => {\n if (!googleChartWrapper) {\n return;\n }\n const listeners = initialize(googleChartWrapper);\n return () => {\n destroy(googleChartWrapper, listeners);\n };\n }, [googleChartWrapper, initialize, destroy]);\n};\n","import { useEffect } from \"react\";\nimport {\n GoogleChartWrapper,\n GoogleViz,\n ReactGoogleChartProps,\n} from \"../../types\";\n\nexport type GoogleChartEventsParams = ReactGoogleChartProps & {\n googleChartWrapper?: GoogleChartWrapper | null;\n google: GoogleViz;\n};\n\nconst listenToEvents = (props: GoogleChartEventsParams) => {\n const { chartEvents, google, googleChartWrapper } = props;\n if (!chartEvents) {\n return;\n }\n if (!googleChartWrapper) {\n console.warn(\"listenToEvents was called before chart wrapper ready.\");\n return;\n }\n return chartEvents.map(({ eventName, callback }) => {\n return google.visualization.events.addListener(\n googleChartWrapper,\n eventName,\n (...args) => {\n callback({\n chartWrapper: googleChartWrapper,\n props,\n google: google,\n eventArgs: args,\n });\n },\n );\n });\n};\n\nexport const useGoogleChartEvents = (props: GoogleChartEventsParams) => {\n useEffect(() => {\n if (!props.googleChartWrapper) return;\n\n const listeners = listenToEvents(props);\n\n return () => {\n listeners?.forEach((listener) => {\n props.google.visualization.events.removeListener(listener);\n });\n };\n }, [props]);\n};\n","import * as React from \"react\";\nimport {\n GoogleViz,\n GoogleChartWrapper,\n ReactGoogleChartProps,\n GoogleChartDashboard,\n GoogleChartEditor,\n} from \"../types\";\nimport { useChartControls } from \"../hooks/internal/useGoogleChartControls\";\nimport { useChartId } from \"../hooks/internal/useChartId\";\nimport { useGoogleChartDataTable } from \"../hooks/internal/useGoogleChartDataTable\";\nimport { useGoogleChartEvents } from \"../hooks/internal/useGoogleChartEvents\";\n\ntype Props = ReactGoogleChartProps & {\n google: GoogleViz;\n};\n\nexport const GoogleChart: React.FC<Props> = (props) => {\n const [googleChartWrapper, setGoogleChartWrapper] =\n React.useState<GoogleChartWrapper | null>(null);\n // const [isReady, setIsReady] = React.useState<boolean>(false);\n const [googleChartDashboard, setGoogleChartDashboard] =\n React.useState<GoogleChartDashboard | null>(null);\n\n const { addControls, renderControl } = useChartControls({\n ...props,\n chartDashboard: googleChartDashboard,\n chartWrapper: googleChartWrapper,\n });\n useGoogleChartEvents({\n ...props,\n googleChartWrapper,\n });\n const { chartId } = useChartId(props);\n const dashboardRef = React.useRef<HTMLDivElement>(null);\n const toolbarRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const {\n options,\n google,\n chartType,\n chartWrapperParams,\n toolbarItems,\n getChartEditor,\n getChartWrapper,\n onLoad,\n } = props;\n\n const chartConfig = {\n chartType,\n options,\n containerId: chartId,\n ...chartWrapperParams,\n };\n // Create ChartWrapper instance, pass it to the user and store it in state\n const chartWrapper = new google.visualization.ChartWrapper(chartConfig);\n chartWrapper.setOptions(options || {});\n getChartWrapper?.(chartWrapper, google);\n\n // Create Dashboard instance, needed for controls\n const chartDashboard = new google.visualization.Dashboard(\n dashboardRef.current,\n );\n\n // Create toolbar if needed\n if (toolbarItems) {\n google.visualization.drawToolbar(\n toolbarRef.current as HTMLDivElement,\n toolbarItems,\n );\n }\n\n // Create ChartEditor instance if needed and pass it to the user\n let chartEditor: GoogleChartEditor | null = null;\n if (getChartEditor) {\n chartEditor = new google.visualization.ChartEditor();\n getChartEditor({\n chartEditor,\n chartWrapper,\n google,\n });\n }\n // Create and add controls to the chart / dashboard\n addControls({ ...props, chartDashboard, chartWrapper });\n setGoogleChartWrapper(chartWrapper);\n setGoogleChartDashboard(chartDashboard);\n onLoad?.(google, {\n google,\n chartWrapper,\n chartEditor,\n chartDashboard,\n });\n }, []);\n\n useGoogleChartDataTable({\n ...props,\n googleChartWrapper,\n googleChartDashboard,\n });\n const renderChart = () => {\n const { width, height, options, style, className, rootProps, google } =\n props;\n\n const divStyle = {\n height: height || (options && options.height),\n width: width || (options && options.width),\n ...style,\n };\n return (\n <div id={chartId} style={divStyle} className={className} {...rootProps} />\n );\n };\n\n const renderToolBar = () => {\n if (!props.toolbarItems) return null;\n return <div ref={toolbarRef} />;\n };\n\n const { width, height, options, style } = props;\n\n const divStyle = {\n height: height || (options && options.height),\n width: width || (options && options.width),\n ...style,\n };\n\n // If render prop is provided, give the user full control over the rendering by passing renderChart, renderControl and renderToolbar functions\n if (props.render) {\n return (\n <div ref={dashboardRef} style={divStyle}>\n <div ref={toolbarRef} id=\"toolbar\" />\n {props.render({\n renderChart,\n renderControl,\n renderToolbar: renderToolBar,\n })}\n </div>\n );\n } else {\n return (\n <div ref={dashboardRef} style={divStyle}>\n {renderControl(\n ({ controlProp }) => controlProp.controlPosition !== \"bottom\",\n )}\n {renderChart()}\n {renderControl(\n ({ controlProp }) => controlProp.controlPosition === \"bottom\",\n )}\n {renderToolBar()}\n </div>\n );\n }\n};\n\nexport default GoogleChart;\n","import * as React from \"react\";\nimport { chartDefaultProps } from \"./default-props\";\nimport { ReactGoogleChartProps } from \"./types\";\n\nexport const ChartContext = React.createContext(chartDefaultProps);\n\nexport const ContextProvider = ({\n children,\n value,\n}: {\n children: any;\n value: ReactGoogleChartProps;\n}) => {\n return (\n <ChartContext.Provider value={value}>{children}</ChartContext.Provider>\n );\n};\n","import React from \"react\";\nimport { ReactGoogleChartProps } from \"./types\";\nimport { useLoadGoogleCharts } from \"./hooks\";\nimport { chartDefaultProps } from \"./default-props\";\nimport { GoogleChart } from \"./components/GoogleChart\";\nimport { ContextProvider } from \"./Context\";\n\n/**\n * Loads Google Charts JS and renders the GoogleChart component.\n */\nconst ChartView: React.FC<ReactGoogleChartProps> = (props) => {\n const { google, isLoading, error } = useLoadGoogleCharts(props);\n if (isLoading) {\n return props.loader ?? null;\n }\n if (error) {\n return props.errorElement ?? null;\n }\n if (google) {\n return <GoogleChart google={google} {...props} />;\n }\n return null;\n};\n\n/**\n * Updates the context with the props and renders ChartView.\n */\nexport const Chart: React.FC<ReactGoogleChartProps> = (userProps) => {\n const props = { ...chartDefaultProps, ...userProps };\n return (\n <ContextProvider value={props}>\n <ChartView {...props} />\n </ContextProvider>\n );\n};\n\nexport default Chart;\n","// Complete Google Charts Type Definition : https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/google.visualization/index.d.ts\n\nexport type GoogleVizDrawToolbar = (\n toolbarContainer: HTMLDivElement,\n components: GoogleChartToolbarItem[],\n) => any;\n\nexport type GoogleViz = {\n charts: GoogleChartLoader;\n visualization: {\n ChartWrapper: GoogleChartWrapper;\n ControlWrapper: GoogleChartControl;\n ChartEditor: GoogleChartEditor;\n DataTable: GoogleDataTable;\n events: GoogleVizEvents;\n arrayToDataTable: GoogleArrayToDataTable;\n drawToolbar: GoogleVizDrawToolbar;\n [otherKeys: string]: any;\n };\n};\n\nexport type GoogleChartTicks = (number | Date)[];\n\nexport type GoogleChartEditor = {\n new (): GoogleChartEditor;\n openDialog: (\n chartWrapper: GoogleChartWrapper,\n chartEditorOptions?: {\n dataSourceInput?: any;\n [otherKeyMaybe: string]: any;\n },\n ) => null;\n getChartWrapper: () => GoogleChartWrapper;\n setChartWrapper: (chartWrapper: GoogleChartWrapper) => GoogleChartWrapper;\n closeDialog: () => null;\n};\n\nexport type GoogleChartLoaderOptions = {\n packages?: GoogleChartPackages[];\n language?: string;\n mapsApiKey?: string;\n};\nexport type GoogleChartLoader = {\n load: (\n version: GoogleChartVersion,\n googleChartOptions: GoogleChartLoaderOptions,\n ) => void;\n setOnLoadCallback: (callback: () => void) => void;\n};\nexport interface ChartWrapperProps {\n chartType: GoogleChartWrapperChartType;\n containerId?: string;\n options?: {\n width?: number;\n height?: number;\n is3D?: boolean;\n title?: string;\n backgroundColor: string;\n };\n dataTable?: {};\n dataSourceUrl?: string;\n query?: string;\n refreshInterval?: number;\n view?: any[] | {};\n render?: (props: ChartWrapperProps, chartWrapper: GoogleChartWrapper) => any;\n children?: (\n props: ChartWrapperProps,\n chartWrapper: GoogleChartWrapper,\n ) => any;\n}\n\nexport type VizEventsProps = {\n chartWrapper: GoogleChartWrapper;\n onReady?: (chartWrapper: GoogleChartWrapper) => any;\n onError?: (chartWrapper: GoogleChartWrapper) => any;\n onSelect?: (selection: Array<{ row?: any; column?: any }>) => any;\n render?: (props: VizEventsProps, chartWrapper: GoogleChartWrapper) => any;\n children?: (props: VizEventsProps, chartWrapper: GoogleChartWrapper) => any;\n};\n\n/*\n *\n * <GoogleChartsTypes>\n *\n */\n\n/*\n *\n * Reference + Docs:\n * https://developers.google.com/chart/interactive/docs/reference#constructor_3\n * https://developers.google.com/chart/interactive/docs/reference#google.visualization.drawchart\n *\n */\nexport type GoogleChartWrapperChartType =\n | \"AnnotationChart\"\n | \"AreaChart\"\n | \"BarChart\"\n | \"BubbleChart\"\n | \"Calendar\"\n | \"CandlestickChart\"\n | \"ColumnChart\"\n | \"ComboChart\"\n | \"DiffChart\"\n | \"DonutChart\"\n | \"Gantt\"\n | \"Gauge\"\n | \"GeoChart\"\n | \"Histogram\"\n | \"LineChart\"\n | \"Line\"\n | \"Bar\"\n | \"Map\"\n | \"OrgChart\"\n | \"PieChart\"\n | \"Sankey\"\n | \"ScatterChart\"\n | \"Scatter\"\n | \"SteppedAreaChart\"\n | \"Table\"\n | \"Timeline\"\n | \"TreeMap\"\n | \"WaterfallChart\"\n | \"WordTree\";\n\n// https://developers.google.com/chart/interactive/docs/reference#google.visualization.drawchart\nexport interface ChartWrapperOptions {\n chartType: string;\n containerId: string;\n options: Partial<{\n width: number;\n height: number;\n is3D: boolean;\n title: string;\n backgroundColor:\n | string\n | { fill: string; stroke: string; strokeWidth: number };\n hAxis?: {\n minValue?: any;\n maxValue?: any;\n ticks?: GoogleChartTicks;\n title?: string;\n viewWindow?: { max?: any; min?: any };\n [otherOptionKey: string]: any;\n };\n vAxis?: {\n minValue?: any;\n maxValue?: any;\n ticks?: GoogleChartTicks;\n title?: string;\n viewWindow?: { max?: any; min?: any };\n [otherOptionKey: string]: any;\n };\n legend: any;\n colors: string[];\n [otherOptionKey: string]: any;\n }>;\n dataTable?: GoogleDataTable;\n dataSourceUrl?: string;\n query?: string;\n refreshInterval?: number;\n view: any[] | {};\n [otherOptionKey: string]: any;\n}\n\nexport type GoogleChartAction = {\n id: string;\n text: string;\n action: (chartWrapper: GoogleChartWrapper) => void;\n};\n\nexport type GoogleChartControlProp = {\n controlType:\n | \"CategoryFilter\"\n | \"ChartRangeFilter\"\n | \"DateRangeFilter\"\n | \"NumberRangeFilter\"\n | \"StringFilter\";\n options: {};\n controlWrapperParams?: {};\n controlID?: string;\n controlPosition?: \"top\" | \"bottom\";\n controlEvents?: ReactGoogleChartEvent[];\n};\n\nexport type GoogleChartWrapper = {\n new (chartWrapperOptions: Partial<ChartWrapperOptions>): GoogleChartWrapper;\n draw: (chartArgs?: ChartWrapperProps) => any;\n toJSON: () => string;\n clone: () => GoogleChartWrapper;\n getDataSourceUrl: () => string;\n getDataTable: () => GoogleDataTable | null; // null if datasourceurl set or ref to DataTable\n getChartType: () => GoogleChartWrapperChartType;\n getChartName: () => string;\n getChart: () => {\n removeAction: (actionID: string) => void;\n getSelection: () => { row?: any; column?: any }[];\n setAction: (ChartAction: GoogleChartAction) => void;\n getImageURI: () => void;\n clearChart: () => void; // Clears the chart, and releases all of its allocated resources.\n }; // ref to chart\n getContainerId: () => string;\n getQuery: () => string;\n getRefreshInterval: () => number;\n getOption: (key: string, opt_default_value?: any) => any; // returns opt_default_value if key not found\n getOptions: () => {};\n getSelection: () => { row?: any; column?: any }[];\n getView: () => {} | any[]; // Same format as toJSON\n\n setDataSourceUrl: (url: string) => void;\n setDataTable: (table: any) => void;\n setChartType: (chartType: GoogleChartWrapperChartType) => void;\n setChartName: (name: string) => void; // Sets an arbitrary name for the chart. This is not shown anywhere on the chart, unless a custom chart is explicitly designed to use it.\n setContainerId: (id: string) => void; // Sets the ID of the containing DOM element for the chart.\n setQuery: (query_string: string) => void; // Sets a query string, if this chart queries a data source. You must also set the data source URL if specifying this value.\n setRefreshInterval: (interval: number) => void; // Sets the refresh interval for this chart, if it queries a data source. You must also set a data source URL if specifying this value. Zero indicates no refresh.\n setOption: (key: string, value: any) => void; // \tSets a single chart option value, where key is the option name and value is the value. To unset an option, pass in null for the value. Note that key may be a qualified name, such as 'vAxis.title'.\n setOptions: (options_obj: Partial<ChartWrapperOptions[\"options\"]>) => void; //\n};\n\nexport type GoogleVizEventListener = {\n key: Record<string, unknown>;\n};\n\nexport type GoogleVizEventName =\n | \"ready\"\n | \"error\"\n | \"select\"\n | \"animationfinish\"\n | \"statechange\"\n | \"ok\"\n | \"cancel\"\n | \"animationstart\";\n\nexport type GoogleVizEvents = {\n addListener: (\n chartWrapper: GoogleChartWrapper | GoogleChartControl | GoogleChartEditor,\n name: GoogleVizEventName,\n onEvent: (chartWrapper: GoogleChartWrapper) => any,\n ) => GoogleVizEventListener;\n removeListener: (eventListener: GoogleVizEventListener) => any;\n removeAllListeners: (chartWrapper: GoogleChartWrapper) => any;\n};\n\nexport type GoogleChartPackages =\n | \"corechart\"\n | \"charteditor\"\n | \"controls\"\n | \"calendar\"\n | \"gantt\"\n | \"gauge\"\n | \"geochart\"\n | \"map\"\n | \"orgchart\"\n | \"sankey\"\n | \"table\"\n | \"timeline\"\n | \"treemap\"\n | \"wordtree\";\n\nexport type GoogleChartVersion = \"current\" | \"upcoming\" | string;\n\nexport type GoogleDataTableColumnType =\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"date\"\n | \"datetime\"\n | \"timeofday\";\n\n// export type GoogleDataTable = {\n// addColumn: (type: GoogleDataTableColumnType) => number;\n// };\n\n// Reference https://developers.google.com/chart/interactive/docs/roles\nexport enum GoogleDataTableColumnRoleType {\n annotation = \"annotation\",\n annotationText = \"annotationText\",\n certainty = \"certainty\",\n emphasis = \"emphasis\",\n interval = \"interval\",\n scope = \"scope\",\n style = \"style\",\n tooltip = \"tooltip\",\n domain = \"domain\",\n}\n\nexport type GoogleDataTableColumn =\n | {\n type: GoogleDataTableColumnType;\n label?: string; // A label for the column.\n role?: GoogleDataTableColumnRoleType;\n pattern?: string;\n p?: {};\n id?: string;\n }\n | string;\n\n// Ref : https://developers.google.com/chart/interactive/docs/reference#dataparam\n\nexport type GoogleDataTableCell =\n | {\n v?: any; // The cell value. Type should match DataTableColumn type field\n f?: string; // A string version of the v value, formatted for display.\n p?: {};\n }\n | string\n | number\n | boolean\n | Date\n | null;\n\nexport type GoogleDataTableRow = GoogleDataTableCell[];\n\nexport type GoogleDataTableJS = {\n cols: GoogleDataTableColumn[];\n rows: {\n c: GoogleDataTableRow;\n }[];\n p?: {};\n};\n\n// Reference : https://developers.google.com/chart/interactive/docs/reference#DataTable\n\nexport type GoogleDataTableRowFilter = {\n column: number;\n value: any;\n minValue?: any;\n maxValue?: any;\n};\n\nexport type GoogleDataTableSortColumns =\n | number\n | {\n column: number;\n desc: boolean;\n }\n | number[]\n | {\n column: number;\n desc: boolean;\n }[];\n\nexport type GoogleDataTable = {\n // https://developers.google.com/chart/interactive/docs/reference#dataparam\n new (dataParam: any): GoogleDataTable;\n addColumn: (column: GoogleDataTableColumn) => number;\n addRow: (row?: GoogleDataTableRow) => number;\n addRows: (rows?: GoogleDataTableRow[] | number[] | any[]) => number;\n clone: () => GoogleDataTable;\n\n getColumnId: (columnIndex: number) => string;\n getColumnLabel: (columnIndex: number) => string;\n getColumnPattern: (columnIndex: number) => string;\n getColumnProperties: (columnIndex: number) => {};\n getColumnProperty: (columnIndex: number, name: string) => any;\n getColumnRange: (columnIndex: number) => {\n min: number | null;\n max: number | null;\n };\n getColumnRole: (columnIndex: number) => GoogleDataTableColumnRoleType;\n getColumnType: (columnIndex: number) => GoogleDataTableColumnType;\n getDistinctValues: (columnIndex: number) => any[];\n getFilteredRows: (filters: GoogleDataTableRowFilter[]) => number[];\n getFormattedValue: (rowIndex: number, columnIndex: number) => string;\n getNumberOfColumns: () => number;\n getNumberOfRows: () => number;\n getProperties: (rowIndex: number, columnIndex: number) => {};\n getProperty: (rowIndex: number, columnIndex: number, name: string) => any;\n getRowProperties: (rowIndex: number) => {};\n getRowProperty: (rowIndex: number, name: string) => any;\n getSortedRows: (sortColumns: GoogleDataTableSortColumns) => number[];\n getTableProperties: () => {};\n getTableProperty: (name: string) => any;\n getValue: (\n rowIndex: number,\n columnIndex: number,\n ) => boolean | string | number | Date | number[] | null;\n insertColumn: (\n columnIndex: number,\n type: GoogleDataTableColumnType,\n label?: string,\n id?: string,\n ) => void;\n insertRows: (\n rowIndex: number,\n numberOrArray: GoogleDataTableRow[] | number,\n ) => void;\n removeColumn: (columnIndex: number) => void;\n removeColumns: (columnIndex: number, numberOfColumns: number) => void;\n removeRow: (rowIndex: number) => void;\n removeRows: (rowIndex: number, numberOfColumns: number) => void;\n setCell: (\n rowIndex: number,\n columnIndex: number,\n value?: any,\n formattedValue?: string,\n properties?: {},\n ) => {};\n setColumnLabel: (columnIndex: number, label: string) => void;\n setColumnProperty: (columnIndex: number, name: string, value: any) => void;\n setColumnProperties: (columnIndex: number, properties: {} | null) => void;\n setFormattedValue: (\n rowIndex: number,\n columnIndex: number,\n formattedValue: string,\n ) => void;\n setProperty: (\n rowIndex: number,\n columnIndex: number,\n name: string,\n value: any,\n ) => void;\n setProperties: (\n rowIndex: number,\n columnIndex: number,\n properties: {} | null,\n ) => void;\n\n setRowProperty: (rowIndex: number, name: string, value: any) => void;\n setRowProperties: (rowIndex: number, properties: {} | null) => void;\n setTableProperties: (properties: {} | null) => void;\n setValue: (rowIndex: number, columnIndex: number, value: boolean | string | number | Date | number[] | null) => void;\n sort: (sortColumns: GoogleDataTableSortColumns) => void;\n toJSON: () => string; // GoogleDataTableJS\n};\n\nexport type GoogleArrayToDataTable = (\n data: any[][],\n isFirstRowLabels?: boolean,\n) => GoogleDataTable;\n\nexport type GoogleChartOptions = {\n width?: number;\n height?: number;\n is3D?: boolean;\n backgroundColor: string;\n\n title?: string;\n hAxis?: {\n minValue?: any;\n maxValue?: any;\n ticks?: GoogleChartTicks;\n title?: string;\n viewWindow?: { max?: any; min?: any; [otherOptionKey: string]: any };\n [otherOptionKey: string]: any;\n };\n vAxis?: {\n minValue?: any;\n maxValue?: any;\n ticks?: GoogleChartTicks;\n title?: string;\n viewWindow?: { max?: any; min?: any; [otherOptionKey: string]: any };\n [otherOptionKey: string]: any;\n };\n bubble?: {};\n pieHole?: number;\n redColor?: string;\n redFrom?: number;\n redTo?: number;\n yellowColor?: string;\n yellowFrom?: number;\n yellowTo?: number;\n greenColor?: string;\n greenFrom?: number;\n greenTo?: number;\n minorTicks?: number;\n majorTicks?: string[];\n legend?:\n | string\n | {\n position?: string;\n maxLines?: number;\n [otherOptionKey: string]: any;\n };\n curveType?: string;\n showTooltip?: boolean;\n showInfoWindow?: boolean;\n allowHtml?: boolean;\n isStacked?: string | boolean;\n minColor?: string;\n midColor?: string;\n maxColor?: string;\n headerHeight?: number;\n fontColor?: string;\n showScale?: boolean;\n bar?: { groupWidth?: string }; // Remove space between bars.\n candlestick?: {\n fallingColor?: { strokeWidth?: number; fill?: string }; // red\n risingColor?: { strokeWidth?: number; fill?: string }; // green\n [otherOptionKey: string]: any;\n };\n wordtree?: {\n format?: string;\n word?: string;\n [otherOptionKey: string]: any;\n };\n [otherOptionKey: string]: any;\n};\n\n/*\n *\n * </GoogleChartsTypes>\n *\n */\n\nexport type WindowWithMaybeGoogle = Window & { google?: any };\n\nexport type ReactGoogleChartEvent = {\n eventName: GoogleVizEventName;\n callback: (eventCallbackArgs: {\n chartWrapper: GoogleChartWrapper | null;\n controlWrapper?: GoogleChartControl;\n props: ReactGoogleChartProps;\n google: GoogleViz;\n eventArgs: any;\n }) => void;\n};\n\nexport type GoogleChartToolbarItem = {\n type: \"igoogle\" | \"html\" | \"csv\" | \"htmlcode\";\n datasource: string;\n gadget?: string;\n userPrefs?: {\n \"3d\": number;\n [otherKeyMaybe: string]: any;\n };\n};\n\nexport type GoogleChartFormatter = {\n column: number | number[];\n type:\n | \"ArrowFormat\"\n | \"BarFormat\"\n | \"ColorFormat\"\n | \"DateFormat\"\n | \"NumberFormat\"\n | \"PatternFormat\";\n options?: {};\n ranges?: [\n // from\n any,\n // to\n any,\n // color\n string,\n // bgcolor\n string,\n ][];\n};\n\nexport type ReactGoogleChartProps = {\n height?: string | number;\n width?: string | number;\n graphID?: string;\n chartType: GoogleChartWrapperChartType;\n diffdata?: {\n old: any;\n new: any;\n };\n options?: ChartWrapperOptions[\"options\"];\n loader?: JSX.Element;\n errorElement?: JSX.Element;\n data?: any[] | {};\n rows?: GoogleDataTableRow[];\n columns?: GoogleDataTableColumn[];\n chartActions?: GoogleChartAction[];\n chartEvents?: ReactGoogleChartEvent[];\n chartVersion?: GoogleChartVersion;\n chartPackages?: GoogleChartPackages[];\n chartLanguage?: string;\n mapsApiKey?: string;\n graph_id?: string;\n legendToggle?: boolean;\n legend_toggle?: boolean;\n onLoad?: (\n google: GoogleViz,\n paramsV2: {\n google: GoogleViz;\n chartWrapper: GoogleChartWrapper;\n chartDashboard: GoogleChartDashboard;\n chartEditor?: GoogleChartEditor | null;\n },\n ) => void;\n getChartWrapper?: (\n chartWrapper: GoogleChartWrapper,\n google: GoogleViz,\n ) => void;\n getChartEditor?: (args: {\n chartEditor: GoogleChartEditor;\n chartWrapper: GoogleChartWrapper;\n google: GoogleViz;\n }) => void;\n className?: string;\n style?: React.CSSProperties;\n formatters?: GoogleChartFormatter[];\n spreadSheetUrl?: string;\n spreadSheetQueryParameters?: {\n headers: number;\n gid?: number | string;\n sheet?: string;\n query?: string;\n access_token?: string;\n };\n rootProps?: any;\n controls?: GoogleChartControlProp[];\n render?: ReactGoogleChartDashboardRender;\n //https://developers.google.com/chart/interactive/docs/gallery/toolbar#example_1\n toolbarItems?: GoogleChartToolbarItem[];\n toolbarID?: string;\n chartWrapperParams?: any;\n /**\n * URL of the chart loader script. Defaults to https://www.gstatic.com/charts/loader.js\n * Added to support loading from a different CDN in China to optimize performance\n */\n chartLoaderScriptUrl?: string;\n};\n\nexport type GoogleChartDashboard = {\n draw: (data: GoogleDataTable) => void;\n bind: (\n controlWrapperOrWrappers: GoogleChartControl | GoogleChartControl[],\n chartWrapper: GoogleChartWrapper,\n ) => void;\n};\n\nexport type ReactGoogleChartDashboardRender = ({\n renderControl,\n renderChart,\n renderToolbar,\n}: {\n renderControl: (\n filter: ({\n control,\n controlProp,\n }: {\n control: GoogleChartControl;\n controlProp: GoogleChartControlProp;\n }) => boolean,\n ) => any;\n renderChart: () => any;\n renderToolbar: () => any;\n}) => any;\nexport type GoogleChartControlOptions = any;\nexport type GoogleChartControl = {\n new (chartWrapperOptions: GoogleChartControlOptions): GoogleChartControl;\n getContainerId: () => string;\n getOptions: () => GoogleChartControlOptions;\n getState: () => any;\n setState: (state: any) => void;\n setOptions: (options: GoogleChartControlOptions) => void;\n setControlType: (controlType: string) => void;\n};\n\nexport type ReactGoogleChartState = {\n loadingStatus: \"loading\" | \"errored\" | \"ready\";\n google: null | GoogleViz;\n // hiddenColumns: string[];\n};\n\nexport type ReactGoogleChartContext = {\n data: ReactGoogleChartProps[\"data\"];\n rows: ReactGoogleChartProps[\"rows\"] | null;\n columns: ReactGoogleChartProps[\"columns\"] | null;\n diffdata: ReactGoogleChartProps[\"diffdata\"] | null;\n options: ReactGoogleChartProps[\"options\"] | null;\n legend_toggle: ReactGoogleChartProps[\"legend_toggle\"] | null;\n legendToggle: ReactGoogleChartProps[\"legendToggle\"] | null;\n chartType: ReactGoogleChartProps[\"chartType\"] | null;\n formatters: ReactGoogleChartProps[\"formatters\"] | null;\n spreadSheetUrl: ReactGoogleChartProps[\"spreadSheetUrl\"] | null;\n spreadSheetQueryParameters:\n | ReactGoogleChartProps[\"spreadSheetQueryParameters\"]\n | null;\n};\n\nexport interface ApplyFormattersParams {\n dataTable: GoogleDataTable;\n formatters: GoogleChartFormatter[];\n google: GoogleViz;\n}\n\nexport type GoogleChartControlAndProp = {\n controlProp: GoogleChartControlProp;\n control: GoogleChartControl;\n};\n\nexport type UseChartControlsParams = ReactGoogleChartProps & {\n google: GoogleViz;\n chartWrapper: GoogleChartWrapper | null;\n chartDashboard: GoogleChartDashboard | null;\n};\n"],"names":["useLoadScript","src","isLoading","setIsLoading","useState","error","setError","isSuccess","setIsSuccess","onLoad","useEffect","document","Error","foundScript","querySelector","dataset","loaded","script","createElement","onLoadWithMarker","addEventListener","err","console","head","append","isGoogleReady","google","charts","isGoogleChartsReady","props","controls","toolbarItems","getChartEditor","visualization","ChartWrapper","Dashboard","ChartEditor","drawToolbar","getGoogleInstanceFromWindow","window","useLoadGoogleCharts","chartVersion","chartPackages","chartLanguage","mapsApiKey","googleCharts","setGoogleCharts","scriptInitializationError","setScriptInitializationError","googleChartsInitializationError","setGoogleChartsInitializationError","scriptLoadingError","chartLoaderScriptUrl","load","packages","language","setOnLoadCallback","chartDefaultProps","legend_toggle","options","legendToggle","getChartWrapper","spreadSheetQueryParameters","headers","gid","rootProps","chartWrapperParams","GoogleChartControls","isReady","chartControls","filter","length","controlProp","control","map","div","key","getContainerId","id","uniqueID","generateUniqueID","GoogleChartControlsInternal","initializeControls","googleChartControls","i","controlType","controlWrapperParams","setState","setOptions","setControlType","listenToControlEvents","flatMap","chartControl","controlEvents","event","callback","eventName","events","addListener","args","chartWrapper","controlWrapper","eventArgs","createControlId","controlID","createChartControls","controlIDMaybe","controlOptions","ControlWrapper","containerId","addControls","chartDashboard","bind","useCreateChartControls","setChartControls","React","controlAndProp","useMemo","undefined","useListenToControlEvents","listeners","forEach","listener","removeListener","useChartControls","renderControl","Boolean","useChartId","chartIdRef","useRef","getChartId","graphID","graph_id","chartIdFromProps","currentChartId","current","chartId","DEFAULT_CHART_COLORS","loadDataTableFromSpreadSheet","googleViz","spreadSheetUrl","urlParams","Promise","resolve","reject","queryString","query","encodeURIComponent","sheet","access_token","urlQueryString","urlToSpreadSheet","Query","send","response","isError","getMessage","getDetailedMessage","getDataTable","GRAY_COLOR","GoogleChartInternal","grayOutHiddenColumnsLabel","hiddenColumns","googleChartWrapper","dataTable","columnCount","getNumberOfColumns","hasAHiddenColumn","colors","Array","from","_dontcare","columnID","getColumnId","includes","draw","listenToLegendToggle","hiddenColumnsState","setHiddenColumns","chart","getChart","selection","getSelection","row","columnIndex","column","state","colID","data","diffdata","rows","columns","chartType","formatters","googleChartDashboard","chartDiff","oldData","arrayToDataTable","old","newData","new","prototype","computeDiff","DataTable","isArray","viewColumns","fill","_c","label","getColumnLabel","type","getColumnType","calc","getChartType","clearChart","setChartType","viewTable","DataView","setColumns","setDataTable","applyFormatters","formatter","vizFormatter","ArrowFormat","format","BarFormat","ColorFormat","ranges","range","addRange","DateFormat","NumberFormat","PatternFormat","warn","useGoogleChartDataTable","onResize","initialize","push","destroy","removeEventListener","listenToEvents","chartEvents","useGoogleChartEvents","GoogleChart","setGoogleChartWrapper","setGoogleChartDashboard","dashboardRef","toolbarRef","chartConfig","chartEditor","renderChart","width","height","style","className","divStyle","renderToolBar","ref","render","renderToolbar","controlPosition","ChartContext","createContext","ContextProvider","children","value","Provider","ChartView","loader","errorElement","Chart","userProps","GoogleDataTableColumnRoleType"],"mappings":"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"}
\No newline at end of file